From 666c3c01e52bbe0cda95cf53d3bd80a1258fa719 Mon Sep 17 00:00:00 2001 From: Suvan Mangamuri <70107937+konekowo@users.noreply.github.com> Date: Fri, 23 Aug 2024 08:04:44 -0400 Subject: [PATCH] improve saving and loading settings --- src/Settings/Setting.ts | 2 ++ src/Settings/SettingType/DropdownSetting.ts | 18 +++++++++++++++--- src/Settings/SettingType/RangeSetting.ts | 10 ++++++++-- src/Settings/Settings.ts | 5 ++++- 4 files changed, 29 insertions(+), 6 deletions(-) diff --git a/src/Settings/Setting.ts b/src/Settings/Setting.ts index f2ca6967..08e0791b 100644 --- a/src/Settings/Setting.ts +++ b/src/Settings/Setting.ts @@ -7,6 +7,8 @@ export abstract class Setting { public abstract getValue(): any; + public abstract getDefaultValue(): any; + public abstract setValue(value: any): void; /** When implementing this method, do **NOT** save the settings. This is so that loading won't reset most settings. */ diff --git a/src/Settings/SettingType/DropdownSetting.ts b/src/Settings/SettingType/DropdownSetting.ts index 1cdd1753..939b1864 100644 --- a/src/Settings/SettingType/DropdownSetting.ts +++ b/src/Settings/SettingType/DropdownSetting.ts @@ -12,13 +12,25 @@ export abstract class DropdownSetting extends Setting { return this.value; } + public getDefaultValue(): DropDownOption { + return this.defaultValue; + } + public setValue(value: DropDownOption) { - this.value = value; - Settings.save(); + if (this.list.find((option) => option.value == value.value && option.displayName == value.displayName )) { + this.value = value; + Settings.save(); + } else { + console.warn('The value provided to this DropDownSetting does not exist in the option list! Ignoring value provided.'); + } } public loadFromSaveValue(value: DropDownOption) { - this.value = value; + if (this.list.find((option) => option.value == value.value && option.displayName == value.displayName)) { + this.value = value; + } else { + console.warn('The value provided to this DropDownSetting does not exist in the option list! Ignoring value provided.'); + } } } diff --git a/src/Settings/SettingType/RangeSetting.ts b/src/Settings/SettingType/RangeSetting.ts index 5d34d9fa..996be3d9 100644 --- a/src/Settings/SettingType/RangeSetting.ts +++ b/src/Settings/SettingType/RangeSetting.ts @@ -1,5 +1,6 @@ import {Setting} from "../Setting"; import {Settings} from "../Settings"; +import {MathUtil} from "../../Util/MathUtil"; export abstract class RangeSetting extends Setting { public abstract readonly minValue: number; @@ -11,12 +12,17 @@ export abstract class RangeSetting extends Setting { public getValue(): number { return this.value; } + + public getDefaultValue(): number { + return this.defaultValue; + } + public setValue(value: number) { - this.value = value; + this.value = MathUtil.clamp(this.minValue, this.maxValue, value); Settings.save(); } public loadFromSaveValue(value: number) { - this.value = value; + this.value = MathUtil.clamp(this.minValue, this.maxValue, value); } } diff --git a/src/Settings/Settings.ts b/src/Settings/Settings.ts index 7b3ac06c..8d518b69 100644 --- a/src/Settings/Settings.ts +++ b/src/Settings/Settings.ts @@ -66,7 +66,10 @@ export class Settings { let settings = this.getList(); let settingSaveData: SettingSaveData[] = []; settings.forEach((setting: SettingData) => { - settingSaveData.push({info: setting.info, value: setting.setting.getValue()}); + // only save if setting is different from default value + if (setting.setting.getValue() != setting.setting.getDefaultValue()) { + settingSaveData.push({info: setting.info, value: setting.setting.getValue()}); + } }); window.localStorage.setItem("settings", JSON.stringify(settingSaveData)); }