aboutsummaryrefslogtreecommitdiff
path: root/src/features/settings/settingThings/settingBase.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/features/settings/settingThings/settingBase.js')
-rw-r--r--src/features/settings/settingThings/settingBase.js162
1 files changed, 162 insertions, 0 deletions
diff --git a/src/features/settings/settingThings/settingBase.js b/src/features/settings/settingThings/settingBase.js
new file mode 100644
index 0000000..5320f40
--- /dev/null
+++ b/src/features/settings/settingThings/settingBase.js
@@ -0,0 +1,162 @@
+import SoopyContentChangeEvent from "../../../../guimanager/EventListener/SoopyContentChangeEvent";
+import SoopyMouseClickEvent from "../../../../guimanager/EventListener/SoopyMouseClickEvent";
+import BoxWithText from "../../../../guimanager/GuiElement/BoxWithText";
+import BoxWithTextAndDescription from "../../../../guimanager/GuiElement/BoxWithTextAndDescription"
+import SoopyGuiElement from "../../../../guimanager/GuiElement/SoopyGuiElement";
+import renderLibs from "../../../../guimanager/renderLibs";
+import helpDataLoader from "../helpDataLoader";
+import settingsCommunicator from "../settingsCommunicator";
+import SoopyMarkdownElement from "../../../../guimanager/GuiElement/SoopyMarkdownElement";
+
+class SettingBase {
+ constructor(name, description, defaultVal, settingId, module) {
+ this.name = name;
+ this.description = description;
+ this.defaultVal = defaultVal;
+ this.settingId = settingId
+ this.module = module
+ this.moduleId = module.getId()
+
+ this.contributorVal = undefined
+
+ this.val = defaultVal;
+
+ this.guiObject = new BoxWithTextAndDescription().setDesc("§0" + this.description.replace(/\n/g, "\n§0")).setText("§0" + this.name).setLocation(0, 0, 1, 0.15)
+
+ this.settingObject = new SoopyGuiElement().setLocation(0.8, 0, 0.15, 1)
+
+ this.guiObject.addChild(this.settingObject)
+
+ this.helpButton = new BoxWithText().setText("§0?").setLocation(3, 3, 0.05, 0.5)
+ this.helpButton.location.location.setRelative(false, false)
+
+ this.helpButton.addEvent(new SoopyMouseClickEvent().setHandler(() => {
+ module.FeatureManager.features.soopyGui.class.openSidebarPage(new SoopyGuiElement().setLocation(0.05, 0.05, 0.9, 0.9).setScrollable(true).addChild(new SoopyMarkdownElement().setLocation(0, 0, 1, 1).setText("Loading...")))
+
+ this.getHelp(helpText => {
+ module.FeatureManager.features.soopyGui.class.openSidebarPage(new SoopyGuiElement().setLocation(0.05, 0.05, 0.9, 0.9).setScrollable(true).addChild(new SoopyMarkdownElement().setLocation(0, 0, 1, 1).setText(helpText)))
+ })
+ }))
+
+ this.helpButton.setLore(["Click for more information about this setting"])
+
+ settingsCommunicator.addSetting(this.moduleId, settingId, this)
+
+ if (!module.FeatureManager.featureSettingsData[this.moduleId]) {
+ module.FeatureManager.featureSettingsData[this.moduleId] = {}
+ }
+ if (!module.FeatureManager.featureSettingsData[this.moduleId].subSettings) module.FeatureManager.featureSettingsData[this.moduleId].subSettings = {}
+ if (!module.FeatureManager.featureSettingsData[this.moduleId].subSettings[settingId]) {
+ module.FeatureManager.featureSettingsData[this.moduleId].subSettings[settingId] = {
+ value: this.getDefaultValue(),
+ temp_val: this.getDefaultValue()
+ }
+
+ module.FeatureManager.featureSettingsDataLastUpdated = true
+ }
+ let temp_val_temp = module.FeatureManager.featureSettingsData[this.moduleId].subSettings[settingId].temp_val
+ this.setValue(module.FeatureManager.featureSettingsData[this.moduleId].subSettings[settingId].value)
+ this.temp_val = temp_val_temp
+
+ this.requiresO = undefined
+
+ this.onchangethings = []
+
+ this.initTime = Date.now()
+ }
+
+ update() {
+ if (this.hasHelp()) {
+ this.guiObject.addChild(this.helpButton)
+
+ this.guiObject.text.setLocation(0.075, 0, 0.8 - 0.075, 0.6)
+ } else {
+ this.guiObject.text.setLocation(0, 0, 0.8, 0.6)
+ }
+ }
+
+ hasHelp() {
+ return helpDataLoader.hasData(this.moduleId, this.settingId)
+ }
+
+ getHelp(callback) {
+ helpDataLoader.getData(this.moduleId, this.settingId, callback)
+ }
+
+ getValue() {
+ return this.val;
+ }
+
+ setValue(val) {
+ if (this.val === val) return
+ this.val = val;
+
+ if (!this.requiresO || this.requiresO.getValue()) {
+ this.temp_val = val
+ }
+
+ if (this.module.FeatureManager.featureSettingsData[this.moduleId].subSettings[this.settingId].value !== val) {
+ this.module.FeatureManager.featureSettingsData[this.moduleId].subSettings[this.settingId].value = val
+
+ this.module.FeatureManager.featureSettingsDataLastUpdated = true
+ }
+ if (this.module.FeatureManager.featureSettingsData[this.moduleId].subSettings[this.settingId].temp_val !== this.temp_val) {
+ this.module.FeatureManager.featureSettingsData[this.moduleId].subSettings[this.settingId].temp_val = this.temp_val
+
+ this.module.FeatureManager.featureSettingsDataLastUpdated = true
+ }
+
+ if (this.onchangethings && Date.now() - this.initTime > 1000) this.onchangethings.forEach(([fun, context]) => { fun.call(context) })
+ }
+
+ getName() {
+ return this.name;
+ }
+
+ getDescription() {
+ return this.description;
+ }
+
+ getDefaultValue() {
+ return this.defaultVal;
+ }
+
+ getGuiObject() {
+ return this.guiObject;
+ }
+
+ requires(toggleSetting) {
+ this.requiresO = toggleSetting
+
+ toggleSetting.toggleObject.addEvent(new SoopyContentChangeEvent().setHandler((newVal, oldVal, resetFun) => {
+ if (newVal) {
+ this.guiObject.location.size.y.set(0.15, 500)
+ } else {
+ this.guiObject.location.size.y.set(0, 500)
+ }
+ }))
+ let newVal = this.requiresO.getValue()
+ if (!newVal) {
+ this.guiObject.location.size.y.set(0, 0)
+ }
+
+ return this
+ }
+
+ contributor(name, things = []) {
+ this.contributorVal = { name, things }
+ //TODO: this entire function
+ return this
+ }
+
+ delete() {
+ settingsCommunicator.removeSetting(this.module, this.settingId)
+ }
+
+ onchange(context, fun) {
+ this.onchangethings.push([fun, context])
+ return this
+ }
+}
+
+export default SettingBase \ No newline at end of file