diff --git a/App/assets/js/live-client.js b/App/assets/js/live-client.js index e6b40fc..a95c2cf 100644 --- a/App/assets/js/live-client.js +++ b/App/assets/js/live-client.js @@ -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' }, diff --git a/App/sims/logistik/game.html b/App/sims/logistik/game.html index c860956..a0885d4 100644 --- a/App/sims/logistik/game.html +++ b/App/sims/logistik/game.html @@ -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(); });