Logistik-Pause friert die Aktivzeit ein (Lehrer-Cockpit)
Problem: bei Pause lief die „Seit"-Zeit im Lehrer-Cockpit weiter, obwohl das Spiel steht — live-client.js akkumulierte activeMs unabhängig vom Pause-Zustand. - live-client.js: opt-in Pause-Unterstützung. window.__GGS_LIVE__.setPaused(bool) friert die activeMs-Buchhaltung ein (lastTickAt wird weiter aktualisiert, damit beim Fortsetzen nichts nachspringt). __paused zusätzlich im Heartbeat. Default aus → alle anderen Sims unberührt. - logistik game.html: Pause-/Auto-Button ruft setPaused(mode==='pause'). Verifiziert (Playwright): activeMs 0→2000 (läuft) → 2000 (Pause eingefroren) → 3999 (Fortsetzen). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -63,6 +63,7 @@
|
||||
var activeMs = 0; // akkumuliert, NUR wenn nicht idle
|
||||
var lastTickAt = Date.now();
|
||||
var sessionCapped = false;
|
||||
var paused = false; // Sim-Pause: friert activeMs ein (opt-in)
|
||||
|
||||
function onInteraction() {
|
||||
lastInteractionAt = Date.now();
|
||||
@@ -80,6 +81,9 @@
|
||||
var now = Date.now();
|
||||
var delta = now - lastTickAt;
|
||||
lastTickAt = now;
|
||||
// Spiel pausiert (Sim hat setPaused(true) gerufen) → Zeit steht, nicht zählen.
|
||||
// lastTickAt ist schon aktualisiert, daher springt activeMs beim Fortsetzen nicht.
|
||||
if (paused) return;
|
||||
// Tab nicht sichtbar (anderer Tab, minimiert) → echtes Weg-Sein, nicht zählen.
|
||||
// Denkpausen bei SICHTBAREM Tab bleiben über das großzügige Idle-Fenster erhalten.
|
||||
if (typeof document !== 'undefined' && document.hidden) return;
|
||||
@@ -107,6 +111,9 @@
|
||||
get sessionStartedAt() { return sessionStartedAt; },
|
||||
get lastInteractionAt() { return lastInteractionAt; },
|
||||
get capped() { return sessionCapped; },
|
||||
get paused() { return paused; },
|
||||
// Sim ruft dies bei Pause/Fortsetzen — friert die Aktivzeit-Buchhaltung ein.
|
||||
setPaused: function (v) { paused = !!v; },
|
||||
MAX_SESSION_MS: MAX_SESSION_MS,
|
||||
IDLE_THRESHOLD_MS: IDLE_THRESHOLD_MS,
|
||||
});
|
||||
@@ -131,6 +138,7 @@
|
||||
state.__lastInteractionAt = lastInteractionAt;
|
||||
state.__sessionStartedAt = sessionStartedAt;
|
||||
state.__capped = sessionCapped;
|
||||
state.__paused = paused;
|
||||
fetch(apiBase + '/live.php', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
|
||||
@@ -3031,6 +3031,9 @@ window.pickText = function(opts) {
|
||||
LogistikEngine.startSimulation(game);
|
||||
}
|
||||
playerMode = mode;
|
||||
// Aktivzeit-Buchhaltung fürs Lehrer-Cockpit bei Pause einfrieren
|
||||
// (sonst läuft die „Seit"-Zeit weiter, obwohl das Spiel steht).
|
||||
try { if (window.__GGS_LIVE__) window.__GGS_LIVE__.setPaused(mode === 'pause'); } catch (_) {}
|
||||
setActiveSpeedBtn(btn);
|
||||
updateStatusUI();
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user