113 lines
3.6 KiB
JavaScript
113 lines
3.6 KiB
JavaScript
import GetWrinkConfigBank from '../../Disp/HelperFunctions/GetWrinkConfigBank.js';
|
|
import { ColourGray } from '../../Disp/VariablesAndData.js';
|
|
import BuildingGetPrice from '../../Sim/SimulationEvents/BuyBuilding.js';
|
|
import FillCMDCache from '../FillCMDCache.js';
|
|
import {
|
|
CacheMinPP,
|
|
CacheMinPPBulk,
|
|
CacheObjects1,
|
|
CacheObjects10,
|
|
CacheObjects100,
|
|
CachePPArray,
|
|
} from '../VariablesAndData.js';
|
|
import ColourOfPP from './ColourOfPP.js';
|
|
|
|
/**
|
|
* This functions caches the buildings of bulk-buy mode when PP is compared against optimal single-purchase building
|
|
* It saves all date in CM.Cache.Objects...
|
|
* It is called by CM.Cache.CacheBuildingsPP()
|
|
*/
|
|
function CacheColour(target, amount) {
|
|
Object.keys(target).forEach((i) => {
|
|
if (
|
|
Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.PPRigidelMode &&
|
|
amount === 1
|
|
) {
|
|
target[i].colour = ColourGray; // eslint-disable-line no-param-reassign
|
|
return;
|
|
}
|
|
// eslint-disable-next-line no-param-reassign
|
|
target[i].colour = ColourOfPP(
|
|
target[i],
|
|
BuildingGetPrice(
|
|
i,
|
|
Game.Objects[i].basePrice,
|
|
Game.Objects[i].amount,
|
|
Game.Objects[i].free,
|
|
amount,
|
|
),
|
|
);
|
|
// Colour based on excluding certain top-buildings
|
|
for (
|
|
let j = 0;
|
|
j < Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.PPExcludeTop;
|
|
j++
|
|
) {
|
|
if (target[i].pp === CachePPArray[j][0]) target[i].colour = ColourGray; // eslint-disable-line no-param-reassign
|
|
}
|
|
});
|
|
}
|
|
|
|
function CachePP(target, amount) {
|
|
Object.keys(target).forEach((i) => {
|
|
const price = BuildingGetPrice(
|
|
i,
|
|
Game.Objects[i].basePrice,
|
|
Game.Objects[i].amount,
|
|
Game.Objects[i].free,
|
|
amount,
|
|
);
|
|
if (Game.cookiesPs) {
|
|
target[i].pp = // eslint-disable-line no-param-reassign
|
|
Math.max(price - (Game.cookies + GetWrinkConfigBank()), 0) / Game.cookiesPs +
|
|
price / target[i].bonus;
|
|
} else target[i].pp = price / target[i].bonus; // eslint-disable-line no-param-reassign
|
|
if (
|
|
!(
|
|
Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.PPRigidelMode &&
|
|
amount === 1
|
|
)
|
|
)
|
|
CachePPArray.push([target[i].pp, amount, price]);
|
|
});
|
|
}
|
|
|
|
/**
|
|
* This functions caches the PP of each building it saves all date in CM.Cache.Objects...
|
|
* It is called by CM.Cache.CachePP()
|
|
*/
|
|
export default function CacheBuildingsPP() {
|
|
CacheMinPP = Infinity;
|
|
CachePPArray = [];
|
|
if (
|
|
typeof Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.PPExcludeTop ===
|
|
'undefined'
|
|
)
|
|
Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.PPExcludeTop = 0; // Otherwise breaks during initialization
|
|
|
|
// Calculate PP and colours
|
|
CachePP(CacheObjects1, 1);
|
|
CachePP(CacheObjects10, 10);
|
|
CachePP(CacheObjects100, 100);
|
|
|
|
// Set CM.Cache.min to best non-excluded buidliung
|
|
CachePPArray.sort((a, b) => a[0] - b[0]);
|
|
let indexOfMin = Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.PPExcludeTop;
|
|
if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.PPOnlyConsiderBuyable) {
|
|
while (CachePPArray[indexOfMin][2] > Game.cookies) {
|
|
indexOfMin += 1;
|
|
if (CachePPArray.length === indexOfMin + 1) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
CacheMinPP = CachePPArray[indexOfMin][0];
|
|
CacheMinPPBulk = CachePPArray[indexOfMin][1];
|
|
|
|
CacheColour(CacheObjects1, 1);
|
|
CacheColour(CacheObjects10, 10);
|
|
CacheColour(CacheObjects100, 100);
|
|
|
|
FillCMDCache({ CacheMinPP, CacheMinPPBulk, CachePPArray });
|
|
}
|