130 lines
5.6 KiB
JavaScript
130 lines
5.6 KiB
JavaScript
/*
|
|
Contains global functions related to Town features
|
|
*/
|
|
|
|
// Purpose: calculate the amount of money a player makes from their town buildings.
|
|
//
|
|
// How: iterate through town building container. If 'income' is a property, multiply
|
|
// the income * count and add it to the total income variable. Return the total income
|
|
// variable.
|
|
function updateRawTownIncome() {
|
|
//console.log("testing updateRawTownIncome function. We are inside the function now.");
|
|
var totalIncome = 0;
|
|
//console.log("totalIncome: " + totalIncome);
|
|
//console.log("Starting for loop...");
|
|
for(building in o_townBuildingsContainer) {
|
|
//console.log("key: " + building);
|
|
//building represents the key, so we use it to get a reference to the actual object
|
|
var o_building = o_townBuildingsContainer[building];
|
|
//console.log("value: " + o_building);
|
|
if('income' in o_building) {
|
|
//console.log("Income is detected in " + o_building.name + " building.");
|
|
|
|
/*
|
|
* Description: if a building might have its income boosted by other buildings,
|
|
* we iterate through all buildings to calculate the total income multiplier from all
|
|
* buildings that boost it.
|
|
*
|
|
* We also do a few checks to make sure the properties we rely on are defined.
|
|
*
|
|
* This may become a performance bottleneck with large numbers of buildings
|
|
* due to nested for loops and their O(n^2) behavior.
|
|
*/
|
|
if(o_building.name === "Farm") {
|
|
var multiplier = 1.0;
|
|
for(building2 in o_townBuildingsContainer) {
|
|
var o_building2 = o_townBuildingsContainer[building2];
|
|
if(('role' in o_building2) && (o_building2.role.includes("Income Boost"))){
|
|
if (o_building2.targets !== undefined && o_building2.targets.includes("Farm")) {
|
|
multiplier *= o_building2.calculateMultiplier();
|
|
}
|
|
}
|
|
}
|
|
totalIncome += (o_building.getIncome() * multiplier);
|
|
} else {
|
|
totalIncome += (o_building.getIncome());
|
|
}
|
|
//console.log("Income from " + o_building.name + " added to total. New total income: " + totalIncome);
|
|
}
|
|
}
|
|
//console.log("For loop complete. totalIncome = " + totalIncome);
|
|
return totalIncome;
|
|
}
|
|
|
|
/*
|
|
* Description: saves select building object properties into a saveObject
|
|
* and writes that saveObject into gameData.townData. This function is
|
|
* called right before gameData is saved to localStorage.
|
|
*/
|
|
function saveTownState() {
|
|
if(enableVerboseLogging == 1) console.log("saving town state...");
|
|
|
|
for(building in o_townBuildingsContainer) {
|
|
if(enableVerboseLogging == 1) console.log("key: " + building);
|
|
var o_building = o_townBuildingsContainer[building];
|
|
if(enableVerboseLogging == 1) console.log("value: " + o_building);
|
|
var saveObject = {
|
|
name: o_building.name,
|
|
count: o_building.count,
|
|
costOfNextBuilding: o_building.costOfNextBuilding,
|
|
};
|
|
if(saveObject !== undefined) {
|
|
if(enableVerboseLogging == 1) console.log("This is the save object we created: " + saveObject);
|
|
gameData.townData[saveObject.name] = saveObject;
|
|
}
|
|
}
|
|
}
|
|
|
|
function loadTownState() {
|
|
for(building in o_townBuildingsContainer) {
|
|
var o_building = o_townBuildingsContainer[building];
|
|
if(o_building.name in gameData.townData) {
|
|
var savedBuilding = gameData.townData[o_building.name];
|
|
o_building.count = savedBuilding.count;
|
|
o_building.costOfNextBuilding = savedBuilding.costOfNextBuilding;
|
|
}
|
|
}
|
|
}
|
|
|
|
function destroyTownWhileEmbracingEvil() {
|
|
//reset values in o_townBuildingContainer to their base values
|
|
//reset values in gameData.townData, if it is not null, to their base values
|
|
if(gameData.townData) {
|
|
for(building in o_townBuildingsContainer) {
|
|
var o_building = o_townBuildingsContainer[building];
|
|
if(o_building.name in gameData.townData) {
|
|
var savedBuilding = gameData.townData[o_building.name];
|
|
savedBuilding.count = o_building.count = 0;
|
|
o_building.costOfNextBuilding = savedBuilding.costOfNextBuilding = o_building.baseCost;
|
|
}
|
|
}
|
|
gameData.rawTownIncome = 0;
|
|
}
|
|
}
|
|
|
|
function testSuccessOfTownDestruction() {
|
|
for(building in o_townBuildingsContainer) {
|
|
var o_building = o_townBuildingsContainer[building];
|
|
if(o_building.name in gameData.townData) {
|
|
var savedBuilding = gameData.townData[o_building.name];
|
|
if(enableVerboseLogging == 1) {
|
|
console.log(`Type of Saved Count: ${typeof savedBuilding.count}`);
|
|
console.log(`${o_building.name} Saved count: ${savedBuilding.count}`);
|
|
console.log(`${o_building.name} Saved cost: ${savedBuilding.costOfNextBuilding}`);
|
|
console.log(`${o_building.name} Working count: ${o_building.count}`);
|
|
console.log(`${o_building.name} Working cost: ${o_building.costOfNextBuilding}`);
|
|
}
|
|
savedBuilding.count = o_building.count = 0;
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
// temporary brute-force function to limit Town income until it is modulated by future feature interaction.
|
|
// the kingdom has spoken.
|
|
function regulateGrainMarkets() {
|
|
if(gameData.rawTownIncome > 1000000000) { //1000 platinum
|
|
gameData.rawTownIncome = 1000000000;
|
|
}
|
|
}
|
|
setInterval(regulateGrainMarkets, 15000); |