/** * Returns a block that describes an overview of the slave's impact on your reputation and finances in the short term * @param {App.Entity.SlaveState} slave * @returns {DocumentFragment} */ globalThis.slaveExpenses = function(slave) { const frag = new DocumentFragment(); let div; // Generate the lines of the report for (const line of getSlaveCostArray(slave)) { div = document.createElement("div"); div.classList.add("indent"); App.UI.DOM.appendNewElement("span", div, `${line.text}: `); App.UI.DOM.appendNewElement("span", div, cashFormat(line.value), "cash"); frag.append(div); } // Total expenses const individualCosts = getSlaveCost(slave); div = document.createElement("div"); div.classList.add("double-indent"); App.UI.DOM.appendNewElement("span", div, "Predicted expense", "underline"); div.append(": "); div.append(App.UI.DOM.cashFormat(-individualCosts)); frag.append(div); // Income from last week vs expense gives net, assistant gated if (V.assistant.power > 0) { if (slave.lastWeeksCashIncome > 0) { div = document.createElement("div"); div.classList.add("indent"); App.UI.DOM.appendNewElement("span", div, `Income: `); div.append(App.UI.DOM.cashFormat(slave.lastWeeksCashIncome)); frag.append(div); div = document.createElement("div"); div.classList.add("double-indent"); App.UI.DOM.appendNewElement("span", div, `Total`, "underline"); App.UI.DOM.appendNewElement("span", div, `: `); div.append(App.UI.DOM.cashFormat(slave.lastWeeksCashIncome - individualCosts)); frag.append(div); } } frag.append(slaveImpactLongTerm(slave)); return frag; }; /** * Returns a block that describes an overview of the slave's impact on your reputation and finances over the long term * @param {App.Entity.SlaveState} slave * @returns {DocumentFragment} */ globalThis.slaveImpactLongTerm = function(slave) { const frag = new DocumentFragment(); const {he, his, him} = getPronouns(slave); let p; let div; let span; let _Cost; let _Expense; let _Income; let text; // Background and original cost if (slave.origin !== 0) { App.UI.DOM.appendNewElement("div", frag, pronounsForSlaveProp(slave, slave.origin), "indent"); } div = document.createElement("div"); div.classList.add("indent"); if (slave.slaveCost < 0) { div.append(`You bought ${him} for: `); div.append(App.UI.DOM.cashFormat(slave.slaveCost)); div.append(`.`); _Cost = slave.slaveCost; } else if (slave.slaveCost === 0) { div.append(`You spent nothing to acquire ${him}.`); _Cost = slave.slaveCost; } else { text = `You have no record of how much `; if (slave.origin !== 0) { text += `this`; } else { text += `${he} originally`; } text += ` cost.`; div.append(text); _Cost = 0; } frag.append(div); // Lifetime totals, assistant gated if (V.assistant.power > 0) { const _weeksOwned = V.week - slave.weekAcquired; // Lifetime expense div = document.createElement("div"); div.classList.add("indent"); if (slave.lifetimeCashExpenses < 0) { text = `In ${his} `; if (_weeksOwned > 0) { text += `${_weeksOwned} `; if (_weeksOwned === 1) { text += `week`; } else { text += `weeks`; } } else { text += `time`; } text += ` with you, ${he} has cost `; div.append(text); div.append(App.UI.DOM.cashFormat(slave.lifetimeCashExpenses)); div.append(`.`); _Expense = slave.lifetimeCashExpenses; } else { div.append(`You have no record of ${him} costing you any ¤.`); _Expense = 0; } frag.append(div); // Lifetime income div = document.createElement("div"); div.classList.add("indent"); if (slave.lifetimeCashIncome > 0) { text = `In ${his} `; if (_weeksOwned > 0) { text += `${_weeksOwned} `; if (_weeksOwned === 1) { text += `week`; } else { text += `weeks`; } } else { text += `time`; } text += ` with you, ${he} has earned `; div.append(text); div.append(App.UI.DOM.cashFormat(slave.lifetimeCashIncome)); div.append(`.`); _Income = slave.lifetimeCashIncome; } else { div.append(`You have no record of ${him} making you any ¤.`); _Income = 0; } frag.append(div); // Lifetime total div = document.createElement("div"); div.classList.add("indent"); div.append(`Overall, `); if ((_Income + _Cost + _Expense) > 0) { div.append(`you have made `); div.append(App.UI.DOM.cashFormat(_Income + _Cost + _Expense)); div.append(` net from ${his} labors.`); } else if ((_Income + _Cost + _Expense) === 0) { div.append(`${he} is even in cost and income.`); } else { div.append(`${he} has cost you `); div.append(App.UI.DOM.cashFormat(_Income + _Cost + _Expense)); div.append(`.`); } frag.append(div); // Reputation: p = document.createElement("p"); if (slave.lifetimeRepIncome !== 0 || slave.lifetimeRepExpenses !== 0) { let _repTotal = (slave.lifetimeRepIncome + slave.lifetimeRepExpenses); if (V.cheatMode === 1 || V.debugMode === 1) { if (slave.lifetimeRepIncome !== 0) { div = document.createElement("div"); div.classList.add("indent"); div.append(`This week ${he} has `); if (slave.lastWeeksRepIncome === 0) { div.append(`had no positive effect on your reputation, but `); } else { div.append(`improved your reputation by `); App.UI.DOM.appendNewElement("span", div, num(slave.lastWeeksRepIncome), "green"); div.append(` and `); } div.append(`over ${his} entire time with you, ${he} gained `); App.UI.DOM.appendNewElement("span", div, `${num(slave.lifetimeRepIncome)}.`, "green"); p.append(div); } if (slave.lifetimeRepExpenses !== 0) { div = document.createElement("div"); div.classList.add("indent"); div.append(`This week ${he} has `); if (slave.lastWeeksRepExpenses === 0) { div.append(`had no negative effect on your reputation, but `); } else { div.append(`lowered your reputation by `); App.UI.DOM.appendNewElement("span", div, slave.lastWeeksRepExpenses.toString(), "red"); div.append(` and `); } div.append(`over ${his} entire time with you, ${he} cost `); App.UI.DOM.appendNewElement("span", div, `${slave.lifetimeRepExpenses}.`, "red"); p.append(div); } div = document.createElement("div"); div.classList.add("indent"); div.append(`Overall then, ${he} has changed your reputation by `); span = document.createElement("span"); if (_repTotal > 0) { span.classList.add("green"); } else if (_repTotal < 0) { span.classList.add("red"); } span.append(num(_repTotal)); div.append(span); p.append(div); } else { /* lowercasedonkey: TODO: I don't like how vague my placeholder is. Probably need to set up some kind of sliding scale to describe how much rep (roughly) she has made or lost. Need to get a sense of common ranges. */ div = document.createElement("div"); div.classList.add("indent"); div.append(`Overall, ${he} has `); if (_repTotal === 0) { div.append(`had no impact on `); } else if (_repTotal > 0) { App.UI.DOM.appendNewElement("span", div, `increased `, "green"); } else if (_repTotal < 0) { App.UI.DOM.appendNewElement("span", div, `decreased `, "red"); } div.append(`your reputation.`); p.append(div); } } frag.append(p); } return frag; };