This commit is contained in:
Renan LE CARO 2025-04-15 17:31:57 +02:00
parent 47ad04c49b
commit 354a6490e9
4 changed files with 80 additions and 26 deletions

View file

@ -27,24 +27,21 @@ import {
max_levels,
pickedUpgradesHTMl,
reasonLevelIsLocked,
sample,
sample, sumOfValues,
} from "./game_utils";
import "./PWA/sw_loader";
import { getCurrentLang, languages, t } from "./i18n/i18n";
import {
cycleMaxCoins,
cycleMaxParticles,
getCurrentMaxCoins,
getCurrentMaxParticles,
getSettingValue,
getTotalScore,
setSettingValue,
} from "./settings";
import {
forEachLiveOne,
gameStateTick,
liveCount,
gameStateTick, liveCount,
normalizeGameState,
pickRandomUpgrades,
setLevel,
@ -97,7 +94,6 @@ import { runHistoryViewerMenuEntry } from "./runHistoryViewer";
import { getNearestUnlockHTML, openScorePanel } from "./openScorePanel";
import { monitorLevelsUnlocks } from "./monitorLevelsUnlocks";
import { levelEditorMenuEntry } from "./levelEditor";
import {toast} from "./toast";
export async function play() {
if (await applyFullScreenChoice()) return;
@ -424,13 +420,15 @@ export function hitsSomething(x: number, y: number, radius: number) {
);
}
export function tick() {
startWork('tick init')
const currentTick = performance.now();
const timeDeltaMs = currentTick - gameState.lastTick;
gameState.lastTick = currentTick;
let frames = Math.min(4, timeDeltaMs / (1000 / 60));
if (gameState.keyboardPuckSpeed) {
setMousePos(
gameState,
@ -444,23 +442,30 @@ export function tick() {
1,
);
}
normalizeGameState(gameState);
startWork('normalizeGameState')
normalizeGameState(gameState);
startWork('gameStateTick')
if (gameState.running) {
gameState.levelTime += timeDeltaMs * frames;
gameState.runStatistics.runTime += timeDeltaMs * frames;
gameStateTick(gameState, frames);
}
startWork('render')
if (gameState.running || gameState.needsRender) {
gameState.needsRender = false;
render(gameState);
}
startWork('recordOneFrame')
if (gameState.running) {
recordOneFrame(gameState);
}
startWork('playPendingSounds')
if (isOptionOn("sound")) {
playPendingSounds(gameState);
}
startWork('idle')
requestAnimationFrame(tick);
FPSCounter++;
@ -468,13 +473,32 @@ export function tick() {
let FPSCounter = 0;
export let lastMeasuredFPS = 60;
setInterval(() => {
lastMeasuredFPS = FPSCounter;
FPSCounter = 0;
}, 1000);
let total={}
let lastTick=performance.now();
let doing= ''
function startWork(what){
const newNow=performance.now();
if(doing) {
total[doing] = (total[doing]||0) + ( newNow-lastTick )
}
lastTick=newNow
doing=what
}
setInterval(()=>{
const totalTime = sumOfValues(total)
console.log(
liveCount(gameState.coins) +' coins\n'+
Object.entries(total).sort((a,b)=>b[1]-a[1]).filter(a=>a[1]>1).map(t=>t[0]+':'+(t[1]/totalTime*100).toFixed(2)+'% ('+t[1]+'ms)').join('\n'))
total={}
},2000)
setInterval(() => {
monitorLevelsUnlocks(gameState);
}, 500);

View file

@ -12,6 +12,7 @@ let mediaRecorder: MediaRecorder | null,
recordCanvasCtx: CanvasRenderingContext2D;
export function recordOneFrame(gameState: GameState) {
if (!isOptionOn("record")) {
return;
}

View file

@ -2,15 +2,20 @@
let cachedSettings: { [key: string]: unknown } = {};
try {
for(let key in localStorage){
try {
cachedSettings[key] = JSON.parse(localStorage.getItem(key)||'null') ;
} catch (e) {
console.warn(e);
}
}
} catch (e) {
console.warn(e);
}
export function getSettingValue<T>(key: string, defaultValue: T) {
if (typeof cachedSettings[key] == "undefined") {
try {
const ls = localStorage.getItem(key);
if (ls) cachedSettings[key] = JSON.parse(ls) as T;
} catch (e) {
console.warn(e);
}
}
return (cachedSettings[key] as T) ?? defaultValue;
}
@ -28,11 +33,11 @@ export function getTotalScore() {
}
export function getCurrentMaxCoins() {
return Math.pow(2, getSettingValue("max_coins", 6)) * 200;
return Math.pow(2, getSettingValue("max_coins", 2)) * 200;
}
export function getCurrentMaxParticles() {
return getCurrentMaxCoins()
}
export function cycleMaxCoins() {
setSettingValue("max_coins", (getSettingValue("max_coins", 6) + 1) % 6);
setSettingValue("max_coins", (getSettingValue("max_coins", 2) + 1) % 10);
}