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 activeMs = 0; // akkumuliert, NUR wenn nicht idle
|
||||||
var lastTickAt = Date.now();
|
var lastTickAt = Date.now();
|
||||||
var sessionCapped = false;
|
var sessionCapped = false;
|
||||||
|
var paused = false; // Sim-Pause: friert activeMs ein (opt-in)
|
||||||
|
|
||||||
function onInteraction() {
|
function onInteraction() {
|
||||||
lastInteractionAt = Date.now();
|
lastInteractionAt = Date.now();
|
||||||
@@ -80,6 +81,9 @@
|
|||||||
var now = Date.now();
|
var now = Date.now();
|
||||||
var delta = now - lastTickAt;
|
var delta = now - lastTickAt;
|
||||||
lastTickAt = now;
|
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.
|
// 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.
|
// Denkpausen bei SICHTBAREM Tab bleiben über das großzügige Idle-Fenster erhalten.
|
||||||
if (typeof document !== 'undefined' && document.hidden) return;
|
if (typeof document !== 'undefined' && document.hidden) return;
|
||||||
@@ -107,6 +111,9 @@
|
|||||||
get sessionStartedAt() { return sessionStartedAt; },
|
get sessionStartedAt() { return sessionStartedAt; },
|
||||||
get lastInteractionAt() { return lastInteractionAt; },
|
get lastInteractionAt() { return lastInteractionAt; },
|
||||||
get capped() { return sessionCapped; },
|
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,
|
MAX_SESSION_MS: MAX_SESSION_MS,
|
||||||
IDLE_THRESHOLD_MS: IDLE_THRESHOLD_MS,
|
IDLE_THRESHOLD_MS: IDLE_THRESHOLD_MS,
|
||||||
});
|
});
|
||||||
@@ -131,6 +138,7 @@
|
|||||||
state.__lastInteractionAt = lastInteractionAt;
|
state.__lastInteractionAt = lastInteractionAt;
|
||||||
state.__sessionStartedAt = sessionStartedAt;
|
state.__sessionStartedAt = sessionStartedAt;
|
||||||
state.__capped = sessionCapped;
|
state.__capped = sessionCapped;
|
||||||
|
state.__paused = paused;
|
||||||
fetch(apiBase + '/live.php', {
|
fetch(apiBase + '/live.php', {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
headers: { 'Content-Type': 'application/json' },
|
headers: { 'Content-Type': 'application/json' },
|
||||||
|
|||||||
@@ -3031,6 +3031,9 @@ window.pickText = function(opts) {
|
|||||||
LogistikEngine.startSimulation(game);
|
LogistikEngine.startSimulation(game);
|
||||||
}
|
}
|
||||||
playerMode = mode;
|
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);
|
setActiveSpeedBtn(btn);
|
||||||
updateStatusUI();
|
updateStatusUI();
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user