diff --git a/src/004-base/facility.js b/src/004-base/facility.js index 8a73a5b25e5e1201d32b852a44768becdd384fc6..e2c964b78b266485d9de4ced1e28891ab4ce401a 100644 --- a/src/004-base/facility.js +++ b/src/004-base/facility.js @@ -384,6 +384,26 @@ App.Entity.Facilities.Facility = class { return this.option("Upgrade" + name); } + /** + * How is this facility currently decorated? + * @returns {FC.FutureSocietyDeco} + */ + get decoration() { + return (typeof V[this.desc.baseName] === "object") ? V[this.desc.baseName].decoration : V[this.desc.baseName + "Decoration"]; + } + + /** + * Configure facility decoration + * @param {FC.FutureSocietyDeco} val + */ + set decoration(val) { + if (typeof V[this.desc.baseName] === "object") { + V[this.desc.baseName].decoration = val; + } else { + V[this.desc.baseName + "Decoration"] = val; + } + } + /** * Can this facility host the given slave * @param {App.Entity.SlaveState} slave diff --git a/src/futureSocieties/fsDecoration.js b/src/futureSocieties/fsDecoration.js index 7861241d48ae57bb351a16903a3729b531e4cb72..e55d8887e3cc72fe0057768c2ce798463f60f247 100644 --- a/src/futureSocieties/fsDecoration.js +++ b/src/futureSocieties/fsDecoration.js @@ -3,10 +3,6 @@ */ App.UI.facilityRedecoration = function() { const el = new DocumentFragment(); - /** - * @type {Map<string, string>} - */ - const activeFacilities = new Map([]); const options = new App.UI.OptionsGroup(); const arc = V.arcologies[0]; @@ -15,53 +11,20 @@ App.UI.facilityRedecoration = function() { const applicableFS = FutureSocieties.activeFSes(arc).filter(name => (arc[name] > 20)); const decorationNames = Array.from(applicableFS, FS => FutureSocieties.decorationName(FS)).filter(Boolean); - if (V.brothel > 0) { - activeFacilities.set(V.brothelName, "brothelDecoration"); - } - - if (V.club > 0) { - activeFacilities.set(V.clubName, "clubDecoration"); - } - - if (V.dairy > 0) { - activeFacilities.set(V.dairyName, "dairyDecoration"); - } - - if (V.farmyard > 0) { - activeFacilities.set(V.farmyardName, "farmyardDecoration"); - } - - if (V.spa > 0) { - activeFacilities.set(V.spaName, "spaDecoration"); - } - - if (V.nursery > 0) { - activeFacilities.set(V.nurseryName, "nurseryDecoration"); - } - - if (V.clinic > 0) { - activeFacilities.set(V.clinicName, "clinicDecoration"); - } - - if (V.schoolroom > 0) { - activeFacilities.set(V.schoolroomName, "schoolroomDecoration"); - } - - if (V.cellblock > 0) { - activeFacilities.set(V.cellblockName, "cellblockDecoration"); - } - - if (V.servantsQuarters > 0) { - activeFacilities.set(V.servantsQuartersName, "servantsQuartersDecoration"); - } - - if (V.arcade > 0) { - activeFacilities.set(V.arcadeName, "arcadeDecoration"); - } - - if (V.masterSuite > 0) { - activeFacilities.set(V.masterSuiteName, "masterSuiteDecoration"); - } + const activeFacilities = [ + App.Entity.facilities.brothel, + App.Entity.facilities.club, + App.Entity.facilities.dairy, + App.Entity.facilities.farmyard, + App.Entity.facilities.spa, + App.Entity.facilities.nursery, + App.Entity.facilities.clinic, + App.Entity.facilities.schoolroom, + App.Entity.facilities.cellblock, + App.Entity.facilities.servantsQuarters, + App.Entity.facilities.arcade, + App.Entity.facilities.masterSuite + ].filter(f => f.established); // dummy variable to make sure the first option is selected by default const currentSelected = {value: "none"}; @@ -77,10 +40,10 @@ App.UI.facilityRedecoration = function() { let totalCost = 0; if (value === "even") { // Cycles through the list of available FS decorations, and distributes them to facilities round robin style. let i = 0; - for (const decoration of activeFacilities.values()) { - if (V[decoration] !== decorationNames[i]) { + for (const facility of activeFacilities) { + if (facility.decoration !== decorationNames[i]) { totalCost += 5000; - V[decoration] = decorationNames[i]; + facility.decoration = decorationNames[i]; } i++; if (i >= decorationNames.length) { @@ -88,11 +51,11 @@ App.UI.facilityRedecoration = function() { } } } else if (value !== "none") { - for (const decoration of activeFacilities.values()) { + for (const facility of activeFacilities) { if (value !== "standard") { totalCost += 5000; } - V[decoration] = value; + facility.decoration = value; } } if (totalCost > 0) { @@ -100,8 +63,8 @@ App.UI.facilityRedecoration = function() { } }).pulldown(); - for (const [name, decoration] of activeFacilities) { - options.addOption(`The decoration style of ${name} is`, decoration) + for (const facility of activeFacilities) { + options.addOption(`The decoration style of ${facility.nameCaps} is`, "decoration", facility) .addValue("Standard", "standard") .addValueList(decorationNames) .addCallbackToEach(value => { diff --git a/src/futureSocieties/futureSociety.js b/src/futureSocieties/futureSociety.js index 91021b60b48376800d0a5bc197d91007d1df6018..a170f1a7a5d4a14c9e69e067bdb90deed1aecb28 100644 --- a/src/futureSocieties/futureSociety.js +++ b/src/futureSocieties/futureSociety.js @@ -406,47 +406,50 @@ globalThis.FutureSocieties = (function() { /* call as FutureSocieties.DecorationCleanup() */ function DecorationCleanup() { - ValidateFacilityDecoration("brothelDecoration"); - ValidateFacilityDecoration("dairyDecoration"); - ValidateFacilityDecoration("clubDecoration"); - ValidateFacilityDecoration("servantsQuartersDecoration"); - ValidateFacilityDecoration("schoolroomDecoration"); - ValidateFacilityDecoration("spaDecoration"); - ValidateFacilityDecoration("clinicDecoration"); - ValidateFacilityDecoration("arcadeDecoration"); - ValidateFacilityDecoration("cellblockDecoration"); - ValidateFacilityDecoration("masterSuiteDecoration"); - ValidateFacilityDecoration("nurseryDecoration"); - ValidateFacilityDecoration("farmyardDecoration"); + ValidateFacilityDecoration(App.Entity.facilities.brothel); + ValidateFacilityDecoration(App.Entity.facilities.dairy); + ValidateFacilityDecoration(App.Entity.facilities.club); + ValidateFacilityDecoration(App.Entity.facilities.servantsQuarters); + ValidateFacilityDecoration(App.Entity.facilities.schoolroom); + ValidateFacilityDecoration(App.Entity.facilities.spa); + ValidateFacilityDecoration(App.Entity.facilities.clinic); + ValidateFacilityDecoration(App.Entity.facilities.arcade); + ValidateFacilityDecoration(App.Entity.facilities.cellblock); + ValidateFacilityDecoration(App.Entity.facilities.masterSuite); + ValidateFacilityDecoration(App.Entity.facilities.nursery); + ValidateFacilityDecoration(App.Entity.facilities.farmyard); } /** helper function, not callable externally - * @param {string} decoration should be passed as "facilityDecoration" in quotes. For example, ValidateFacilityDecoration("brothelDecoration"). The quotes are important, do not pass it as a story variable. + * @param {App.Entity.Facilities.Facility} facility */ - function ValidateFacilityDecoration(decoration) { + function ValidateFacilityDecoration(facility) { // Backwards compatibility, do not remove - if (V[decoration] === "Hedonism" || V[decoration] === "Hedonistic Decadence") { - V[decoration] = "Hedonistic"; - } else if (V[decoration] === "Repopulation Focus") { - V[decoration] = "Repopulationist"; - } else if (V[decoration] === "Neo Imperialist") { - V[decoration] = "Neo-Imperialist"; + // @ts-ignore BC + if (facility.decoration === "Hedonism" || facility.decoration === "Hedonistic Decadence") { + facility.decoration = "Hedonistic"; + // @ts-ignore BC + } else if (facility.decoration === "Repopulation Focus") { + facility.decoration = "Repopulationist"; + // @ts-ignore BC + } else if (facility.decoration === "Neo Imperialist") { + facility.decoration = "Neo-Imperialist"; } - const activeFS = DecoToFSMap.get(V[decoration]); // gets the property name + const activeFS = DecoToFSMap.get(facility.decoration); // gets the property name - if (V[decoration] === "standard") { + if (facility.decoration === "standard") { // nothing to do } else if (activeFS === undefined) { // eslint-disable-next-line no-console - console.log(`Error: $${decoration} is ${V[decoration]}`); - V[decoration] = "standard"; + console.log(`Error: ${facility.nameCaps} decoration is ${facility.decoration}`); + facility.decoration = "standard"; } else if (!Number.isFinite(V.arcologies[0][activeFS])) { if (V.arcologies[0][activeFS] !== "unset") { // eslint-disable-next-line no-console console.log(`Error: $arcologies[0].${activeFS} is ${V.arcologies[0][activeFS]}`); } - V[decoration] = "standard"; + facility.decoration = "standard"; } }