Skip to content
Snippets Groups Projects
slaveExpenses.js 7.24 KiB
Newer Older
  • Learn to ignore specific revisions
  • lowercasedonkey's avatar
    lowercasedonkey committed
    /**
     * 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}
    
    lowercasedonkey's avatar
    lowercasedonkey committed
     */
    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(": ");
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    	div.append(App.UI.DOM.cashFormat(-individualCosts));
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    	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: `);
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    			div.append(App.UI.DOM.cashFormat(slave.lastWeeksCashIncome));
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    			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, `: `);
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    			div.append(App.UI.DOM.cashFormat(slave.lastWeeksCashIncome - individualCosts));
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    			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}
    
    lowercasedonkey's avatar
    lowercasedonkey committed
     */
    globalThis.slaveImpactLongTerm = function(slave) {
    	const frag = new DocumentFragment();
    	const {he, his, him} = getPronouns(slave);
    	let p;
    	let div;
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    	let span;
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    	let _Cost;
    	let _Expense;
    	let _Income;
    	let text;
    
    	// Background and original cost
    	if (slave.origin !== 0) {
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    		App.UI.DOM.appendNewElement("div", frag, pronounsForSlaveProp(slave, slave.origin), "indent");
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    	}
    	div = document.createElement("div");
    	div.classList.add("indent");
    	if (slave.slaveCost < 0) {
    		div.append(`You bought ${him} for: `);
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    		div.append(App.UI.DOM.cashFormat(slave.slaveCost));
    		div.append(`.`);
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    		_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) {
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    		const _weeksOwned = V.week - slave.weekAcquired;
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    		// Lifetime expense
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    		div = document.createElement("div");
    		div.classList.add("indent");
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    		if (slave.lifetimeCashExpenses < 0) {
    			text = `In ${his} `;
    			if (_weeksOwned > 0) {
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    				text += `${_weeksOwned} `;
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    				if (_weeksOwned === 1) {
    					text += `week`;
    				} else {
    					text += `weeks`;
    				}
    			} else {
    				text += `time`;
    			}
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    			text += ` with you, ${he} has cost `;
    			div.append(text);
    			div.append(App.UI.DOM.cashFormat(slave.lifetimeCashExpenses));
    			div.append(`.`);
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    			_Expense = slave.lifetimeCashExpenses;
    		} else {
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    			div.append(`You have no record of ${him} costing you any ¤.`);
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    			_Expense = 0;
    		}
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    		frag.append(div);
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    		// Lifetime income
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    		div = document.createElement("div");
    		div.classList.add("indent");
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    		if (slave.lifetimeCashIncome > 0) {
    			text = `In ${his} `;
    			if (_weeksOwned > 0) {
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    				text += `${_weeksOwned} `;
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    				if (_weeksOwned === 1) {
    					text += `week`;
    				} else {
    					text += `weeks`;
    				}
    			} else {
    				text += `time`;
    			}
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    			text += ` with you, ${he} has earned `;
    			div.append(text);
    			div.append(App.UI.DOM.cashFormat(slave.lifetimeCashIncome));
    			div.append(`.`);
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    			_Income = slave.lifetimeCashIncome;
    		} else {
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    			div.append(`You have no record of ${him} making you any ¤.`);
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    			_Income = 0;
    		}
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    		frag.append(div);
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    
    		// Lifetime total
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    		div = document.createElement("div");
    		div.classList.add("indent");
    		div.append(`Overall, `);
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    		if ((_Income + _Cost + _Expense) > 0) {
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    			div.append(`you have made `);
    			div.append(App.UI.DOM.cashFormat(_Income + _Cost + _Expense));
    			div.append(` net from ${his} labors.`);
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    		} else if ((_Income + _Cost + _Expense) === 0) {
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    			div.append(`${he} is even in cost and income.`);
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    		} else {
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    			div.append(`${he} has cost you `);
    			div.append(App.UI.DOM.cashFormat(_Income + _Cost + _Expense));
    			div.append(`.`);
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    		}
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    		frag.append(div);
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    		// Reputation:
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    		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) {
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    					div = document.createElement("div");
    					div.classList.add("indent");
    					div.append(`This week ${he} has `);
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    					if (slave.lastWeeksRepIncome === 0) {
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    						div.append(`had no positive effect on your reputation, but `);
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    					} else {
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    						div.append(`improved your reputation by `);
    						App.UI.DOM.appendNewElement("span", div, num(slave.lastWeeksRepIncome), "green");
    						div.append(` and `);
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    					}
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    					div.append(`over ${his} entire time with you, ${he} gained `);
    					App.UI.DOM.appendNewElement("span", div, `${num(slave.lifetimeRepIncome)}.`, "green");
    					p.append(div);
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    				}
    
    				if (slave.lifetimeRepExpenses !== 0) {
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    					div = document.createElement("div");
    					div.classList.add("indent");
    					div.append(`This week ${he} has `);
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    					if (slave.lastWeeksRepExpenses === 0) {
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    						div.append(`had no negative effect on your reputation, but `);
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    					} else {
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    						div.append(`lowered your reputation by `);
    
    						App.UI.DOM.appendNewElement("span", div, slave.lastWeeksRepExpenses.toString(), "red");
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    						div.append(` and `);
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    					}
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    					div.append(`over ${his} entire time with you, ${he} cost `);
    					App.UI.DOM.appendNewElement("span", div, `${slave.lifetimeRepExpenses}.`, "red");
    					p.append(div);
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    				}
    
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    				div = document.createElement("div");
    				div.classList.add("indent");
    				div.append(`Overall then, ${he} has changed your reputation by `);
    				span = document.createElement("span");
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    				if (_repTotal > 0) {
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    					span.classList.add("green");
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    				} else if (_repTotal < 0) {
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    					span.classList.add("red");
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    				}
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    				span.append(num(_repTotal));
    				div.append(span);
    				p.append(div);
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    			} 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. */
    
    Anu's avatar
    Anu committed
    				div = document.createElement("div");
    				div.classList.add("indent");
    				div.append(`Overall, ${he} has `);
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    				if (_repTotal === 0) {
    
    Anu's avatar
    Anu committed
    					div.append(`had no impact on `);
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    				} else if (_repTotal > 0) {
    
    Anu's avatar
    Anu committed
    					App.UI.DOM.appendNewElement("span", div, `increased `, "green");
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    				} else if (_repTotal < 0) {
    
    Anu's avatar
    Anu committed
    					App.UI.DOM.appendNewElement("span", div, `decreased `, "red");
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    				}
    
    Anu's avatar
    Anu committed
    				div.append(`your reputation.`);
    				p.append(div);
    
    lowercasedonkey's avatar
    lowercasedonkey committed
    			}
    		}
    		frag.append(p);
    	}
    	return frag;
    };