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:
2026-08-19 15:12:50 +02:00
parent e23ebd960e
commit d9f9f901a1
2 changed files with 11 additions and 0 deletions
+8
View File
@@ -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' },
+3
View File
@@ -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();
});