Files
CookieMonster/src/Disp/MenuSections/Statistics/AddStatsPage.js
2022-06-19 20:50:56 +02:00

232 lines
8.3 KiB
JavaScript

/** Main function to create the sections of Cookie Monster on the Statistics page */
import { AddMissingUpgrades } from './CreateMissingUpgrades';
import * as CreateSections from './CreateStatsSections';
import * as CreateElements from './CreateDOMElements';
import * as GameData from '../../../Data/Gamedata';
import {
CacheAverageClicks,
CacheAverageCookiesFromClicks,
CacheObjectsNextAchievement,
CacheWrinklersFattest,
CacheWrinklersNormal,
CacheWrinklersTotal,
} from '../../../Cache/VariablesAndData';
import PopAllNormalWrinklers from '../../HelperFunctions/PopWrinklers';
import { ClickTimes, CookieTimes } from '../../VariablesAndData';
import GetCPS from '../../HelperFunctions/GetCPS';
import Beautify from '../../BeautifyAndFormatting/Beautify';
import AddMissingAchievements from './CreateMissingAchievements';
/**
* This function adds stats created by CookieMonster to the stats page
* It is called by CM.Disp.AddMenu
* @param {object} title On object that includes the title of the menu
*/
export default function AddMenuStats(title) {
const stats = document.createElement('div');
stats.className = 'subsection';
stats.appendChild(title);
stats.appendChild(CreateElements.StatsHeader('Lucky Cookies', 'Lucky'));
if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers.Lucky) {
stats.appendChild(CreateSections.LuckySection());
}
stats.appendChild(CreateElements.StatsHeader('Chain Cookies', 'Chain'));
if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers.Chain) {
stats.appendChild(CreateSections.ChainSection());
}
if (Game.Objects['Wizard tower'].minigameLoaded) {
stats.appendChild(CreateElements.StatsHeader('Spells', 'Spells'));
if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers.Spells) {
stats.appendChild(CreateSections.SpellsSection());
}
}
if (Game.Objects.Farm.minigameLoaded) {
stats.appendChild(CreateElements.StatsHeader('Garden', 'Garden'));
if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers.Garden) {
stats.appendChild(CreateSections.GardenSection());
}
}
stats.appendChild(CreateElements.StatsHeader('Prestige', 'Prestige'));
if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers.Prestige) {
stats.appendChild(CreateSections.PrestigeSection());
}
if (Game.cpsSucked > 0) {
stats.appendChild(CreateElements.StatsHeader('Wrinklers', 'Wrink'));
if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers.Wrink) {
const popAllFrag = document.createDocumentFragment();
popAllFrag.appendChild(
document.createTextNode(
`${Beautify(CacheWrinklersTotal)} / ${Beautify(CacheWrinklersNormal)} `,
),
);
const popAllA = document.createElement('a');
popAllA.textContent = 'Pop All Normal';
popAllA.className = 'option';
popAllA.onclick = function () {
PopAllNormalWrinklers();
};
popAllFrag.appendChild(popAllA);
stats.appendChild(
CreateElements.StatsListing('basic', 'Rewards of Popping (All/Normal)', popAllFrag),
);
const popFattestFrag = document.createDocumentFragment();
popFattestFrag.appendChild(document.createTextNode(`${Beautify(CacheWrinklersFattest[0])} `));
const popFattestA = document.createElement('a');
popFattestA.textContent = 'Pop Single Fattest';
popFattestA.className = 'option';
popFattestA.onclick = function () {
if (CacheWrinklersFattest[1] !== null) Game.wrinklers[CacheWrinklersFattest[1]].hp = 0;
};
popFattestFrag.appendChild(popFattestA);
stats.appendChild(
CreateElements.StatsListing(
'basic',
`Rewards of Popping Single Fattest Non-Shiny Wrinkler (id: ${
CacheWrinklersFattest[1] !== null ? CacheWrinklersFattest[1] : 'None'
})`,
popFattestFrag,
),
);
}
}
stats.appendChild(CreateSections.SeasonSection());
stats.appendChild(CreateElements.StatsHeader('Achievements', 'Achievs'));
if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers.Achievs) {
Object.keys(Game.Objects).forEach((i) => {
const ObjectsTillNext = CacheObjectsNextAchievement[i];
stats.appendChild(
CreateElements.StatsListing(
'basic',
i,
ObjectsTillNext.AmountNeeded < 101
? document.createTextNode(
`Next achievement in ${ObjectsTillNext.AmountNeeded}, price: ${Beautify(
ObjectsTillNext.price,
)}`,
)
: document.createTextNode('No new achievement for next 100 buildings'),
),
);
});
}
stats.appendChild(CreateElements.StatsHeader('Miscellaneous', 'Misc'));
if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.headers.Misc) {
stats.appendChild(
CreateElements.StatsListing(
'basic',
`Average cookies per second (past ${
CookieTimes[
Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.AvgCPSHist
] < 60
? `${
CookieTimes[
Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.AvgCPSHist
]
} seconds`
: CookieTimes[
Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.AvgCPSHist
] /
60 +
(Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.AvgCPSHist === 3
? ' minute'
: ' minutes')
})`,
document.createTextNode(Beautify(GetCPS(), 3)),
),
);
stats.appendChild(
CreateElements.StatsListing(
'basic',
`Average cookie clicks per second (past ${
ClickTimes[
Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.AvgClicksHist
]
}${
Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.AvgClicksHist === 0
? ' second'
: ' seconds'
})`,
document.createTextNode(Beautify(CacheAverageClicks, 1)),
),
);
stats.appendChild(
CreateElements.StatsListing(
'basic',
`Cookies from clicking (past ${
ClickTimes[
Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.AvgClicksHist
]
}${
Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.AvgClicksHist === 0
? ' second'
: ' seconds'
})`,
document.createTextNode(
Beautify(
CacheAverageCookiesFromClicks.calcSum(
CacheAverageClicks *
ClickTimes[
Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.AvgClicksHist
],
),
),
),
),
);
if (Game.Has('Fortune cookies')) {
const fortunes = [];
Object.keys(GameData.Fortunes).forEach((i) => {
if (!Game.Has(GameData.Fortunes[i])) {
fortunes.push(GameData.Fortunes[i]);
}
});
if (fortunes.length !== 0)
stats.appendChild(
CreateElements.StatsListing(
'basic',
'Fortune Upgrades Left to Buy',
CreateElements.StatsMissDisp(fortunes),
),
);
}
if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.ShowMissedGC) {
stats.appendChild(
CreateElements.StatsListing(
'basic',
'Missed golden cookies',
document.createTextNode(Beautify(Game.missedGoldenClicks)),
),
);
}
if (Game.prefs.autosave) {
const timer = document.createElement('span');
timer.id = 'CMStatsAutosaveTimer';
timer.innerText = Game.sayTime(
Game.fps * 60 - (Game.OnAscend ? 0 : Game.T % (Game.fps * 60)),
4,
);
stats.appendChild(CreateElements.StatsListing('basic', 'Time till autosave', timer));
}
}
l('menu').insertBefore(stats, l('menu').childNodes[2]);
if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.MissingUpgrades) {
AddMissingUpgrades();
}
if (Game.mods.cookieMonsterFramework.saveData.cookieMonsterMod.settings.MissingAchievements) {
AddMissingAchievements();
}
}