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)
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.
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
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.
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.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
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
src/editor/PlaySession.ts:78), die Timescale nur über den Test-Hook. Es gibt keinen Node für beides.Zu bauen (Vorschlag)
Offen (mit Vorschlag)
beide vorschläge passen
Umgesetzt in
3427f84(Wiki 396314f).Neue Nodes
Selbst entschieden
Tests
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.Doku im Wiki: Concepts (The game pauses itself), Behaviors, Scenes, Architecture, Development.