diff --git a/devTools/types/FC/facilities.d.ts b/devTools/types/FC/facilities.d.ts index e31140fcb24828f1ffa064abec3e206e52e19d57..e2f030c57488d4c2e119e0fb288289e76585e64e 100644 --- a/devTools/types/FC/facilities.d.ts +++ b/devTools/types/FC/facilities.d.ts @@ -1,5 +1,6 @@ declare namespace FC { namespace Facilities { + export type Facility = InstanceType<typeof App.Entity.Facilities.Facility>; export type Animal = InstanceType<typeof App.Entity.Animal>; interface Pit { diff --git a/src/004-base/facility.js b/src/004-base/facility.js index 26f7eff13e2c4f0abe06f8015468de96db7b70f4..d4ef66b608f6f0e7d03f19bd3230af663fcdc5f2 100644 --- a/src/004-base/facility.js +++ b/src/004-base/facility.js @@ -267,6 +267,15 @@ App.Entity.Facilities.Facility = class { return res !== undefined ? res : 'the ' + this.genericName; } + set name(newName) { + const stateObj = V[this.desc.baseName]; + if (stateObj && typeof stateObj === "object") { + stateObj.name = newName; + } else { + V[this.desc.baseName + "Name"] = newName; + } + } + /** @returns {string} */ get nameCaps() { return capFirstChar(this.name); diff --git a/src/facilities/facilities.css b/src/facilities/facilities.css new file mode 100644 index 0000000000000000000000000000000000000000..0c64d4f6e5edb051153508cde6dc4708d0f2abae --- /dev/null +++ b/src/facilities/facilities.css @@ -0,0 +1,3 @@ +.facility-rename { + margin-top: 1em; +} diff --git a/src/facilities/farmyard/farmyard.js b/src/facilities/farmyard/farmyard.js index 51c3e7de30c4b68302ba905b342c649da583324b..0c51e6a6676479a35766a14cca9694772af441b2 100644 --- a/src/facilities/farmyard/farmyard.js +++ b/src/facilities/farmyard/farmyard.js @@ -1,38 +1,46 @@ App.Facilities.Farmyard.farmyard = function() { const frag = new DocumentFragment(); + const introDiv = document.createElement("div"); + const expandDiv = document.createElement("div"); + const menialsDiv = document.createElement("div"); + const rulesDiv = document.createElement("div"); + const upgradesDiv = document.createElement("div"); + const animalsDiv = document.createElement("div"); + V.nextButton = "Back to Main"; V.nextLink = "Main"; V.returnTo = "Farmyard"; V.encyclopedia = "Farmyard"; - const farmyardNameCaps = capFirstChar(V.farmyardName); + frag.append(intro(), expand(), menials()); - App.UI.DOM.appendNewElement("div", frag, intro(), "farmyard-intro"); - App.UI.DOM.appendNewElement("div", frag, expand(), "farmyard-expand"); - App.UI.DOM.appendNewElement("div", frag, menials(), "farmyard-menials"); - App.UI.DOM.appendNewElement("div", frag, rules(), "farmyard-rules"); - App.UI.DOM.appendNewElement("div", frag, upgrades(), "farmyard-upgrades"); - App.UI.DOM.appendNewElement("div", frag, animals(), "farmyard-animals"); App.UI.DOM.appendNewElement("div", frag, App.UI.SlaveList.stdFacilityPage(App.Entity.facilities.farmyard), "farmyard-slaves"); - App.UI.DOM.appendNewElement("div", frag, rename(), "farmyard-rename"); App.UI.SlaveList.ScrollPosition.restore(); + frag.appendChild(App.Facilities.rename(App.Entity.facilities.farmyard, () => { + App.UI.DOM.replace(introDiv, intro); + App.UI.DOM.replace(expandDiv, expand); + App.UI.DOM.replace(menialsDiv, menials); + App.UI.DOM.replace(rulesDiv, rules); + App.UI.DOM.replace(upgradesDiv, upgrades); + App.UI.DOM.replace(animalsDiv, animals); + })); + return frag; function intro() { - const frag = new DocumentFragment(); + introDiv.classList.add("farmyard-intro", "scene-intro"); - const desc = App.UI.DOM.makeElement("div", null, "scene-intro"); + const desc = App.UI.DOM.appendNewElement("div", introDiv, `${capFirstChar(V.farmyardName)} is an oasis of growth in the midst of the jungle of steel and concrete that is ${V.arcologies[0].name}. Animals are kept in pens, tended to by your slaves, while ${V.farmyardUpgrades.hydroponics + ? `rows of hydroponics equipment` + : `makeshift fields`} grow crops. `); const link = App.UI.DOM.makeElement("div", null, "indent"); const count = App.Entity.facilities.farmyard.totalEmployeesCount; - const farmyardNameCaps = capFirstChar(V.farmyardName); - - desc.append(`${farmyardNameCaps} is an oasis of growth in the midst of the jungle of steel and concrete that is ${V.arcologies[0].name}. Animals are kept in pens, tended to by your slaves, while ${V.farmyardUpgrades.hydroponics ? `rows of hydroponics equipment` : `makeshift fields`} grow crops. `); switch (V.farmyardDecoration) { case "Roman Revivalist": @@ -116,13 +124,13 @@ App.Facilities.Farmyard.farmyard = function() { } if (count > 2) { - desc.append(` ${farmyardNameCaps} is bustling with activity. Farmhands are hurrying about, on their way to feed animals and maintain farming equipment.`); + desc.append(` ${capFirstChar(V.farmyardName)} is bustling with activity. Farmhands are hurrying about, on their way to feed animals and maintain farming equipment.`); } else if (count) { - desc.append(` ${farmyardNameCaps} is working steadily. Farmhands are moving about, looking after the animals and crops.`); + desc.append(` ${capFirstChar(V.farmyardName)} is working steadily. Farmhands are moving about, looking after the animals and crops.`); } else if (S.Farmer) { desc.append(` ${S.Farmer.slaveName} is alone in ${V.farmyardName}, and has nothing to do but look after the animals and crops.`); } else { - desc.append(` ${farmyardNameCaps} is empty and quiet.`); + desc.append(` ${capFirstChar(V.farmyardName)} is empty and quiet.`); } link.append(App.UI.DOM.passageLink(`Decommission ${V.farmyardName}`, "Main", () => { @@ -159,18 +167,17 @@ App.Facilities.Farmyard.farmyard = function() { }; clearAnimalsPurchased(); - // @ts-ignore App.Arcology.cellUpgrade(V.building, App.Arcology.Cell.Manufacturing, "Farmyard", "Manufacturing"); })); desc.append(link); - frag.append(desc); + introDiv.appendChild(desc); - return frag; + return introDiv; } function expand() { - const frag = new DocumentFragment(); + expandDiv.classList.add("farmyard-expand"); const desc = document.createElement("div"); const link = App.UI.DOM.makeElement("div", null, "indent"); @@ -193,23 +200,21 @@ App.Facilities.Farmyard.farmyard = function() { link.append(note); desc.append(link); - frag.append(desc); + expandDiv.appendChild(desc); if (App.Entity.facilities.farmyard.totalEmployeesCount) { - App.UI.DOM.appendNewElement("div", frag, removeFacilityWorkers("farmyard"), "indent"); + App.UI.DOM.appendNewElement("div", expandDiv, removeFacilityWorkers("farmyard"), "indent"); } - return frag; + return expandDiv; } function menials() { - const frag = new DocumentFragment(); + menialsDiv.classList.add("farmyard-menials"); - frag.append(transferMenials()); - frag.append(buyMenials()); - frag.append(houseMenials()); + menialsDiv.append(transferMenials(), buyMenials(), houseMenials()); - return frag; + return menialsDiv; } function transferMenials() { @@ -227,7 +232,7 @@ App.Facilities.Farmyard.farmyard = function() { } if (farmMenialsSpace) { - frag.append(`You ${menials ? `own ${num(menials)}` : `don't own any`} free menial slaves. ${farmyardNameCaps} can house ${farmMenialsSpace} menial slaves total, with ${farmMenialsSpace - farmMenials} free spots. `); + frag.append(`You ${menials ? `own ${num(menials)}` : `don't own any`} free menial slaves. ${capFirstChar(V.farmyardName)} can house ${farmMenialsSpace} menial slaves total, with ${farmMenialsSpace - farmMenials} free spots. `); } if (farmMenialsSpace && farmMenials < farmMenialsSpace) { @@ -264,9 +269,9 @@ App.Facilities.Farmyard.farmyard = function() { })); } } else if (!farmMenialsSpace) { - frag.append(`${farmyardNameCaps} cannot currently house any menial slaves. `); + frag.append(`${capFirstChar(V.farmyardName)} cannot currently house any menial slaves. `); } else { - frag.append(`${farmyardNameCaps} has all the menial slaves it can currently house assigned to it. `); + frag.append(`${capFirstChar(V.farmyardName)} has all the menial slaves it can currently house assigned to it. `); } if (farmMenials) { @@ -363,7 +368,7 @@ App.Facilities.Farmyard.farmyard = function() { } function rules() { - const frag = new DocumentFragment(); + rulesDiv.classList.add("farmyard-rules"); if (App.Entity.facilities.farmyard.employeesIDs().size > 0) { // TODO: redo this with V.farmyardShowgirls if (V.farmyardShows && (V.canine || V.hooved || V.feline)) { @@ -375,7 +380,7 @@ App.Facilities.Farmyard.farmyard = function() { ["farmyardShows", "farmyardBreeding", "farmyardRestraints"] ); - frag.append(rule); + rulesDiv.append(rule); if (V.seeBestiality) { if (V.farmyardBreeding) { @@ -387,7 +392,7 @@ App.Facilities.Farmyard.farmyard = function() { ["farmyardBreeding", "farmyardRestraints"] ); - frag.append(rule); + rulesDiv.append(rule); if (V.farmyardRestraints) { const rule = makeRule( @@ -398,7 +403,7 @@ App.Facilities.Farmyard.farmyard = function() { ["farmyardRestraints"] ); - frag.append(rule); + rulesDiv.append(rule); } else { const rule = makeRule( 'are being restrained', @@ -408,7 +413,7 @@ App.Facilities.Farmyard.farmyard = function() { [] ); - frag.append(rule); + rulesDiv.append(rule); } } else { const rule = makeRule( @@ -419,7 +424,7 @@ App.Facilities.Farmyard.farmyard = function() { ["farmyardRestraints"] ); - frag.append(rule); + rulesDiv.append(rule); } } } else { @@ -431,7 +436,7 @@ App.Facilities.Farmyard.farmyard = function() { ["farmyardBreeding", "farmyardRestraints"] ); - frag.append(rule); + rulesDiv.append(rule); } } @@ -467,12 +472,10 @@ App.Facilities.Farmyard.farmyard = function() { return frag; } - return frag; + return rulesDiv; } function upgrades() { - const frag = new DocumentFragment(); - const farmyardUpgrades = V.farmyardUpgrades; const pumpCost = Math.trunc(5000 * V.upgradeMultiplierArcology); @@ -490,15 +493,15 @@ App.Facilities.Farmyard.farmyard = function() { "pump" ); - desc.append(`${farmyardNameCaps} is currently using the basic water pump that it came with.`); + desc.append(`${capFirstChar(V.farmyardName)} is currently using the basic water pump that it came with.`); - frag.append(desc, upgrade); + upgradesDiv.append(desc, upgrade); } else { const desc = document.createElement("div"); desc.append(`The water pump in ${V.farmyardName} is a more efficient model, slightly improving the amount of crops it produces.`); - frag.append(desc); + upgradesDiv.append(desc); if (!farmyardUpgrades.fertilizer) { const upgrade = createUpgrade( @@ -508,13 +511,13 @@ App.Facilities.Farmyard.farmyard = function() { "fertilizer" ); - frag.append(upgrade); + upgradesDiv.append(upgrade); } else { const desc = document.createElement("div"); - desc.append(`${farmyardNameCaps} is using a higher-quality fertilizer, moderately increasing the amount of crops it produces and raising slightly raising upkeep costs.`); + desc.append(`${capFirstChar(V.farmyardName)} is using a higher-quality fertilizer, moderately increasing the amount of crops it produces and raising slightly raising upkeep costs.`); - frag.append(desc); + upgradesDiv.append(desc); if (!farmyardUpgrades.hydroponics) { const upgrade = createUpgrade( @@ -524,13 +527,13 @@ App.Facilities.Farmyard.farmyard = function() { "hydroponics" ); - frag.append(upgrade); + upgradesDiv.append(upgrade); } else { const desc = document.createElement("div"); - desc.append(`${farmyardNameCaps} is outfitted with an advanced hydroponics system, reducing the amount of water your crops consume and thus moderately reducing upkeep costs.`); + desc.append(`${capFirstChar(V.farmyardName)} is outfitted with an advanced hydroponics system, reducing the amount of water your crops consume and thus moderately reducing upkeep costs.`); - frag.append(desc); + upgradesDiv.append(desc); if (!farmyardUpgrades.seeds) { const upgrade = createUpgrade( @@ -540,13 +543,13 @@ App.Facilities.Farmyard.farmyard = function() { "seeds" ); - frag.append(upgrade); + upgradesDiv.append(upgrade); } else { const desc = document.createElement("div"); - desc.append(`${farmyardNameCaps} is using genetically modified seeds, significantly increasing the amount of crops it produces and moderately increasing upkeep costs.`); + desc.append(`${capFirstChar(V.farmyardName)} is using genetically modified seeds, significantly increasing the amount of crops it produces and moderately increasing upkeep costs.`); - frag.append(desc); + upgradesDiv.append(desc); if (!farmyardUpgrades.machinery) { const upgrade = createUpgrade( @@ -556,13 +559,13 @@ App.Facilities.Farmyard.farmyard = function() { "machinery" ); - frag.append(upgrade); + upgradesDiv.append(upgrade); } else { const desc = document.createElement("div"); desc.append(`The machinery in ${V.farmyardName} has been upgraded, and is more efficient, significantly increasing crop yields and significantly decreasing upkeep costs.`); - frag.append(desc); + upgradesDiv.append(desc); } } } @@ -589,12 +592,10 @@ App.Facilities.Farmyard.farmyard = function() { return desc; } - return frag; + return upgradesDiv; } function animals() { - const frag = new DocumentFragment(); - const baseCost = Math.trunc(5000 * V.upgradeMultiplierArcology); const upgradedCost = Math.trunc(10000 * V.upgradeMultiplierArcology); @@ -799,29 +800,9 @@ App.Facilities.Farmyard.farmyard = function() { removeHousing.append(removeHousingNote); } - frag.append(kennels, stables, cages, removeHousing); - - return frag; - } - - function rename() { - const frag = new DocumentFragment(); - - const renameDiv = App.UI.DOM.makeElement("div", null, "farmyard-rename"); - const renameNote = App.UI.DOM.makeElement("span", null, "note"); - - renameDiv.append(`Rename ${V.farmyardName}: `); - renameNote.append(` Use a noun or similar short phrase`); - - renameDiv.append(App.UI.DOM.makeTextBox(V.farmyardName, newName => { - V.farmyardName = newName; - })); + animalsDiv.append(kennels, stables, cages, removeHousing); - renameDiv.append(renameNote); - - frag.append(renameDiv); - - return frag; + return animalsDiv; } function clearAnimalsPurchased() { diff --git a/src/facilities/pit/pit.js b/src/facilities/pit/pit.js index 3b3b20e784bf0b1aaef5f2cc5d8d66b181a5d3d7..af755da26c28da46baf9a07e80299fa8c20bbeb9 100644 --- a/src/facilities/pit/pit.js +++ b/src/facilities/pit/pit.js @@ -19,7 +19,9 @@ App.Facilities.Pit.pit = function() { App.UI.DOM.appendNewElement("div", frag, App.UI.SlaveList.listSJFacilitySlaves(App.Entity.facilities.pit, passage(), false, {assign: "Select a slave to fight", remove: "Cancel a slave's fight", transfer: null}), "pit-assign"); } - frag.appendChild(rename()); + frag.appendChild(App.Facilities.rename(App.Entity.facilities.pit, () => { + App.UI.DOM.replace(introDiv, intro); + })); return frag; @@ -392,22 +394,6 @@ App.Facilities.Pit.pit = function() { return scheduledDiv; } - - function rename() { - const renameDiv = App.UI.DOM.makeElement("div", `Rename ${V.pit.name}: `, ["pit-rename"]); - const renameNote = App.UI.DOM.makeElement("span", ` Use a noun or similar short phrase`, ["note"]); - - renameDiv.append(App.UI.DOM.makeTextBox(V.pit.name, newName => { - V.pit.name = newName; - - App.UI.DOM.replace(renameDiv, rename); - App.UI.DOM.replace(introDiv, intro); - })); - - renameDiv.append(renameNote); - - return renameDiv; - } }; App.Facilities.Pit.init = function() { diff --git a/src/facilities/utils.js b/src/facilities/utils.js new file mode 100644 index 0000000000000000000000000000000000000000..1cc245bb0519e05eefa5696cc1523687a6b4488a --- /dev/null +++ b/src/facilities/utils.js @@ -0,0 +1,25 @@ +/** + * Adds a new "Rename Facility" textbox. + * + * Allows the use of custom handler functions. + * @param {App.Entity.Facilities.Facility} facility The entity form of the facility. Typical denoted as `App.Entity.facilities.*`. + * @param {function():void} [handler] Any custom function to be run upon entering a new name. + */ +App.Facilities.rename = function rename(facility, handler) { + const renameDiv = App.UI.DOM.makeElement("div", `Rename ${facility.name}: `, ["facility-rename"]); + const renameNote = App.UI.DOM.makeElement("span", ` Use a noun or similar short phrase`, ["note"]); + + renameDiv.appendChild(App.UI.DOM.makeTextBox(facility.name, newName => { + facility.name = newName; + + App.UI.DOM.replace(renameDiv, App.Facilities.rename(facility)); + + if (handler) { + handler(); + } + })); + + renameDiv.appendChild(renameNote); + + return renameDiv; +};