diff --git a/src/core/main/setting.ts b/src/core/main/setting.ts index 2ef3b7e..085f658 100644 --- a/src/core/main/setting.ts +++ b/src/core/main/setting.ts @@ -1,3 +1,5 @@ +import { EmitableEvent, EventEmitter } from '../common/eventEmitter'; + type MotaSettingType = boolean | number | MotaSetting; interface MotaSettingItem { @@ -8,7 +10,15 @@ interface MotaSettingItem { display?: (value: T) => string; } -class MotaSetting { +interface SettingEvent extends EmitableEvent { + valueChange: ( + key: string, + newValue: T, + oldValue: T + ) => void; +} + +class MotaSetting extends EventEmitter { private list: Record = {}; special?: string; @@ -17,6 +27,7 @@ class MotaSetting { */ markAsSpecial(sp: string) { this.special = sp; + this.register('@special', '', false); return this; } @@ -70,7 +81,9 @@ class MotaSetting { `Expected: ${typeof setting.value}. Recieve: ${typeof value}` ); } + const old = setting.value as boolean | number; setting.value = value; + this.emit('valueChange', this.formatKey(key), old, value); } /** @@ -86,7 +99,9 @@ class MotaSetting { `Type expected: number. See: ${typeof setting.value}` ); } + const old = setting.value as boolean | number; setting.value += value; + this.emit('valueChange', this.formatKey(key), old, value); } /** @@ -115,6 +130,10 @@ class MotaSetting { return now.list[list.at(-1)!] ?? null; } + + private formatKey(key: string) { + return key.replace('.@special', ''); + } } export const mainSetting = new MotaSetting();