Laufzeit: Pause und Timescale aus dem Graph (Pause-Menü, Zeitlupe) #167

Closed
opened 2026-09-19 11:41:52 +02:00 by meleki · 2 comments
Owner

Aus #13 (Game pause: „Node und ein fester Weiter-Weg im Spiel lassen sich billig nachziehen: state.setPaused(true) ist alles, was ein Node tun müsste“) und #90 (globale Timescale, „gesetzt wird sie über __gm.setTimeScale(v)“, Regler bewusst noch nicht).

Befund

  • Pause gibt es nur über die Toolbar (src/editor/PlaySession.ts:78), die Timescale nur über den Test-Hook. Es gibt keinen Node für beides.
  • Pause-Menü, Zeitlupe oder „Spiel einfrieren beim Dialog“ lassen sich aus dem Spiel heraus nicht bauen.

Zu bauen (Vorschlag)

  • Node Set time scale (Wert ≥ 0) und Daten-Node Time scale. Das Gatter aus #90 bleibt: die Toolbar-Pause setzt effektiv 0, ohne den gesetzten Wert zu verlieren.
  • Node Pause game / Resume game für eine echte Spiel-Pause, bei der Tastatur-Events und Behaviors mit „Run while paused“ weiterlaufen — sonst kommt man nicht mehr heraus.
  • Tests: Zeitlupe halbiert Bewegung, Partikel und Shader-Zeit; Pause und Weiter aus dem Graph.

Offen (mit Vorschlag)

  1. Reicht Timescale 0 als Pause? Vorschlag: nein, getrennt — bei Timescale 0 laufen die Graphen weiter, bei Pause nur die, die es ausdrücklich dürfen.
  2. Setzt Play die Timescale zurück auf 1? Vorschlag: ja, wie die Uhr (#90).
Aus #13 (Game pause: „Node und ein fester Weiter-Weg im Spiel lassen sich billig nachziehen: `state.setPaused(true)` ist alles, was ein Node tun müsste“) und #90 (globale Timescale, „gesetzt wird sie über `__gm.setTimeScale(v)`“, Regler bewusst noch nicht). ## Befund - Pause gibt es nur über die Toolbar (`src/editor/PlaySession.ts:78`), die Timescale nur über den Test-Hook. Es gibt keinen Node für beides. - Pause-Menü, Zeitlupe oder „Spiel einfrieren beim Dialog“ lassen sich aus dem Spiel heraus nicht bauen. ## Zu bauen (Vorschlag) - Node **Set time scale** (Wert ≥ 0) und Daten-Node **Time scale**. Das Gatter aus #90 bleibt: die Toolbar-Pause setzt effektiv 0, ohne den gesetzten Wert zu verlieren. - Node **Pause game** / **Resume game** für eine echte Spiel-Pause, bei der Tastatur-Events und Behaviors mit „Run while paused“ weiterlaufen — sonst kommt man nicht mehr heraus. - Tests: Zeitlupe halbiert Bewegung, Partikel und Shader-Zeit; Pause und Weiter aus dem Graph. ## Offen (mit Vorschlag) 1. **Reicht Timescale 0 als Pause?** Vorschlag: nein, getrennt — bei Timescale 0 laufen die Graphen weiter, bei Pause nur die, die es ausdrücklich dürfen. 2. **Setzt Play die Timescale zurück auf 1?** Vorschlag: ja, wie die Uhr (#90).
meleki added the new label 2026-09-19 11:41:52 +02:00

beide vorschläge passen

beide vorschläge passen
admin removed the new label 2026-09-19 12:00:28 +02:00
admin added this to the Development project 2026-09-19 12:00:31 +02:00
admin moved this to Next in Development on 2026-09-21 06:54:12 +02:00
Author
Owner

Umgesetzt in 3427f84 (Wiki 396314f).

Neue Nodes

Node Wirkung
Pause game Ab dem nächsten Frame steht das Spiel: Weltzeit, Physik, Animationen, Partikel, Shader-Zeit. Weiter laufen nur Behaviors mit Run while paused.
Resume game Das Spiel läuft ab dem nächsten Frame dort weiter, wo es stand.
Is game paused Für Umschalten per Taste: Is game paused → Branch → Resume / Pause.
Set time scale 1 = Echtzeit, 0.5 = Zeitlupe, 0 friert die Welt ein. Die Graphen laufen bei 0 weiter (wie oben bestätigt).
Time scale Liest den zuletzt gesetzten Wert.
  • Run while paused ist ein neuer Schalter an jedem Behavior, direkt unter Run in editor.
  • Play und Stop setzen die Timescale auf 1 zurück (wie oben bestätigt), Load scene behält sie. Die Pause gehört zur Szene: Load scene oder Restart aus dem Pause-Menü landen in einem Level, das nicht pausiert ist.
  • Die Toolbar-Pause bleibt davon unabhängig und friert zusätzlich das Menü ein. Pausiert sich das Spiel selbst, steht in der Statuszeile „The game paused itself · Esc stops“.

Selbst entschieden

  • In der Pause werden keine Kollisionen gemeldet, weil sich nichts bewegt.
  • Sounds spielen in der Pause weiter, damit ein Pause-Menü Musik haben kann.
  • Im Editor-Run werden Pause und Resume ignoriert und hinterlassen eine Zeile im Log, wie Load scene.

Tests

./check.sh            → 133 Files, 1968 Tests, exit 0   (vorher 132 / 1952)
npm run build         → exit 0
GM_STEPS=18 (frisch)  → ALL PASSED – 33 checks   (vorher 26)
  • 16 neue Unit-Tests: 8 Katalog-Fälle, tests/core/game-pause.test.ts (Pause per Taste, Weltzeit, keine Kollisionen gegen beide Systeme, Timescale, Uhr-Reset), 1 Test für den Editor-Run.
  • 7 neue e2e-Checks in Block 18i, mit echten Tasten im laufenden Spiel: P hält Box und Uhr an (Spiel-Pause, nicht Toolbar), Statuszeile, zweites P läuft weiter, S halbiert die Uhr (0,4 s Spielzeit in 0,8 s), Stop + Play setzen die Timescale auf 1.
  • Sechs Gegenproben, alle greifen: Behavior-Filter, Kollisions-Sperre, Weltzeit, Editor-Run, Uhr-Reset und die Spieluhr im Browser.
  • Check-Summe 1217 ist gerechnet (1210 + 7), gemessen wird sie im CI-Lauf.

Doku im Wiki: Concepts (The game pauses itself), Behaviors, Scenes, Architecture, Development.

Umgesetzt in 3427f84 (Wiki 396314f). ## Neue Nodes | Node | Wirkung | |---|---| | **Pause game** | Ab dem nächsten Frame steht das Spiel: Weltzeit, Physik, Animationen, Partikel, Shader-Zeit. Weiter laufen nur Behaviors mit **Run while paused**. | | **Resume game** | Das Spiel läuft ab dem nächsten Frame dort weiter, wo es stand. | | **Is game paused** | Für Umschalten per Taste: Is game paused → Branch → Resume / Pause. | | **Set time scale** | 1 = Echtzeit, 0.5 = Zeitlupe, 0 friert die Welt ein. Die Graphen laufen bei 0 weiter (wie oben bestätigt). | | **Time scale** | Liest den zuletzt gesetzten Wert. | - **Run while paused** ist ein neuer Schalter an jedem Behavior, direkt unter *Run in editor*. - **Play und Stop** setzen die Timescale auf 1 zurück (wie oben bestätigt), **Load scene** behält sie. Die Pause gehört zur Szene: Load scene oder Restart aus dem Pause-Menü landen in einem Level, das nicht pausiert ist. - Die **Toolbar-Pause** bleibt davon unabhängig und friert zusätzlich das Menü ein. Pausiert sich das Spiel selbst, steht in der Statuszeile „The game paused itself · Esc stops“. ## Selbst entschieden - In der Pause werden keine Kollisionen gemeldet, weil sich nichts bewegt. - Sounds spielen in der Pause weiter, damit ein Pause-Menü Musik haben kann. - Im Editor-Run werden Pause und Resume ignoriert und hinterlassen eine Zeile im Log, wie Load scene. ## Tests ``` ./check.sh → 133 Files, 1968 Tests, exit 0 (vorher 132 / 1952) npm run build → exit 0 GM_STEPS=18 (frisch) → ALL PASSED – 33 checks (vorher 26) ``` - 16 neue Unit-Tests: 8 Katalog-Fälle, `tests/core/game-pause.test.ts` (Pause per Taste, Weltzeit, keine Kollisionen gegen beide Systeme, Timescale, Uhr-Reset), 1 Test für den Editor-Run. - 7 neue e2e-Checks in Block 18i, mit echten Tasten im laufenden Spiel: P hält Box und Uhr an (Spiel-Pause, nicht Toolbar), Statuszeile, zweites P läuft weiter, S halbiert die Uhr (0,4 s Spielzeit in 0,8 s), Stop + Play setzen die Timescale auf 1. - Sechs Gegenproben, alle greifen: Behavior-Filter, Kollisions-Sperre, Weltzeit, Editor-Run, Uhr-Reset und die Spieluhr im Browser. - Check-Summe 1217 ist gerechnet (1210 + 7), gemessen wird sie im CI-Lauf. Doku im Wiki: Concepts (*The game pauses itself*), Behaviors, Scenes, Architecture, Development.
admin moved this to Done in Development on 2026-09-21 11:11:52 +02:00
Sign in to join this conversation.
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: meleki/feuerwerk#167