/// class Perk extends StoredVariable { public forcedStatus : ((e : Perk) => boolean | void) = () => { return undefined }; public description : Say | string | ((perk : Perk) => Say | string) = "Undefined"; public name : string; public confirmPicked : (() => void) = () => {}; constructor (id : string) { super({ id : "Perk_" + id, value : false }); this.name = id; Perk.storePerk(this); } public isEnabled (valueOnly? : boolean) : boolean { if (valueOnly != true) { let forced = this.forcedStatus(this); if (forced != undefined) { return forced; } } return this.value; } public isForced () { return this.forcedStatus(this) != undefined; } public getDescription () { if (typeof this.description == "function") { return this.description(this); } else { return this.description; } } public static perks : {[id : string] : Perk} = {}; public static storePerk (perk : Perk) { Perk.perks[perk.id] = perk; } public static getPerk (id : string) { return Perk.perks[id]; } public static getPerks () : Array { let perks = []; for (let id in Perk.perks) { perks.push(Perk.perks[id]); } perks.sort((a : Perk, b : Perk) => { let na = a.name.toUpperCase(); let nb = b.name.toUpperCase(); if (na < nb) return -1; if (na > nb) return 1; return 0; }); return perks; } public static updatePerks() { for (let id in Perk.perks) { let perk = Perk.perks[id]; if (perk.isForced()) { perk.value = perk.forcedStatus(perk); } } } }