@pix3/cli 1.6.0 → 1.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -201
- package/README.md +788 -754
- package/dist/index.js +208 -203
- package/dist/runtime-types.json +1 -1
- package/dist/smoke/prebuilt/{chunk-J2SJVMDO.mjs → chunk-7MZGPAUK.mjs} +1 -1
- package/dist/smoke/prebuilt/chunk-7WOFGLW3.mjs +239 -0
- package/dist/smoke/prebuilt/runtime.mjs +1 -1
- package/dist/smoke/prebuilt/smoke-worker.mjs +1 -1
- package/dist/smoke/prebuilt/tree-defaults.mjs +1 -1
- package/dist/validate/prebuilt/bundle-main.js +13 -13
- package/dist/validate/prebuilt/chunk-HKG6YI6Y.js +239 -0
- package/dist/validate/prebuilt/runtime.js +1 -1
- package/kit/files/.claude/skills/pix3-nodes/SKILL.md +210 -210
- package/kit/files/.claude/skills/pix3-nodes/reference.md +32 -24
- package/kit/files/.claude/skills/pix3-scene-format/SKILL.md +238 -235
- package/kit/files/.claude/skills/pix3-scene-format/reference.md +28 -28
- package/kit/files/.claude/skills/pix3-scripts/SKILL.md +285 -281
- package/kit/files/.claude/skills/pix3-scripts/reference.md +69 -52
- package/kit/files/.claude/skills/pix3-verify/SKILL.md +298 -256
- package/kit/files/.claude/skills/pix3-verify/reference.md +21 -21
- package/kit/files/AGENTS.md +203 -203
- package/kit/files/CLAUDE.md +1 -1
- package/kit/kit.json +2 -2
- package/package.json +54 -54
- package/templates/empty-2d/files/README.md +20 -20
- package/templates/empty-2d/files/scenes/main.pix3scene +68 -68
- package/templates/empty-2d/template.yaml +7 -7
- package/templates/empty-3d/files/README.md +20 -20
- package/templates/empty-3d/files/scenes/main.pix3scene +108 -108
- package/templates/empty-3d/template.yaml +7 -7
- package/templates/idea-blank/files/README.md +22 -22
- package/templates/idea-blank/files/scenes/main.pix3scene +37 -37
- package/templates/idea-blank/template.yaml +10 -10
- package/templates/minigame-2d/files/README.md +44 -44
- package/templates/minigame-2d/files/design/tests/reachability.json +1 -1
- package/templates/minigame-2d/files/design/tests/routines/mute-music.json +44 -44
- package/templates/minigame-2d/files/scenes/main.pix3scene +84 -84
- package/templates/minigame-2d/files/scenes/menu.pix3scene +118 -118
- package/templates/minigame-2d/files/scenes/ui/settings-window.pix3scene +138 -138
- package/templates/minigame-2d/files/scripts/GameFlow.ts +133 -133
- package/templates/minigame-2d/files/scripts/MenuFlow.ts +217 -217
- package/templates/minigame-2d/files/scripts/SettingsWindow.ts +198 -198
- package/templates/minigame-2d/template.yaml +10 -10
- package/templates/playable-2d/files/README.md +30 -30
- package/templates/playable-2d/files/design/recipe.md +83 -83
- package/templates/playable-2d/files/design/tests/reachability.json +4 -4
- package/templates/playable-2d/files/design/tests/routines/intro-to-cta.json +32 -32
- package/templates/playable-2d/files/scenes/main.pix3scene +111 -111
- package/templates/playable-2d/files/scenes/ui/end-screen.pix3scene +91 -91
- package/templates/playable-2d/files/scenes/ui/intro.pix3scene +65 -65
- package/templates/playable-2d/files/scripts/GameFlow.ts +256 -256
- package/templates/playable-2d/template.yaml +9 -9
- package/templates/playable-3d/files/README.md +32 -32
- package/templates/playable-3d/files/design/recipe.md +127 -127
- package/templates/playable-3d/files/design/tests/reachability.json +4 -4
- package/templates/playable-3d/files/design/tests/routines/intro-to-cta.json +32 -32
- package/templates/playable-3d/files/scenes/main.pix3scene +230 -230
- package/templates/playable-3d/files/scenes/ui/end-screen.pix3scene +91 -91
- package/templates/playable-3d/files/scenes/ui/intro.pix3scene +65 -65
- package/templates/playable-3d/files/scripts/GameFlow.ts +309 -309
- package/templates/playable-3d/files/scripts/GameRules.ts +290 -290
- package/templates/playable-3d/files/scripts/ScoreHud.ts +113 -113
- package/templates/playable-3d/template.yaml +9 -9
- package/templates/recipe-arena-2d/files/README.md +48 -48
- package/templates/recipe-arena-2d/files/design/recipe.md +127 -127
- package/templates/recipe-arena-2d/files/scenes/main.pix3scene +292 -292
- package/templates/recipe-arena-2d/files/scenes/menu.pix3scene +100 -100
- package/templates/recipe-arena-2d/files/scenes/prefabs/hazard.pix3scene +42 -42
- package/templates/recipe-arena-2d/files/scenes/prefabs/pickup.pix3scene +45 -45
- package/templates/recipe-arena-2d/files/scenes/ui/result.pix3scene +85 -85
- package/templates/recipe-arena-2d/files/scripts/GameRules.ts +368 -368
- package/templates/recipe-arena-2d/files/scripts/MenuFlow.ts +106 -106
- package/templates/recipe-arena-2d/files/scripts/PlayerController.ts +151 -151
- package/templates/recipe-arena-2d/files/scripts/ScoreHud.ts +94 -94
- package/templates/recipe-arena-2d/files/scripts/Spawner.ts +214 -214
- package/templates/recipe-arena-2d/files/scripts/TouchRules.ts +174 -174
- package/templates/recipe-arena-2d/template.yaml +10 -10
- package/templates/recipe-blank-2d/files/README.md +61 -61
- package/templates/recipe-blank-2d/files/design/recipe.md +148 -148
- package/templates/recipe-blank-2d/files/design/tests/reachability.json +4 -4
- package/templates/recipe-blank-2d/files/design/tests/routines/restart.json +27 -27
- package/templates/recipe-blank-2d/files/scenes/main.pix3scene +224 -224
- package/templates/recipe-blank-2d/files/scenes/ui/result.pix3scene +85 -85
- package/templates/recipe-blank-2d/files/scripts/GameRules.ts +350 -350
- package/templates/recipe-blank-2d/files/scripts/ScoreHud.ts +110 -110
- package/templates/recipe-blank-2d/template.yaml +10 -10
- package/templates/recipe-bouncer-2d/files/README.md +81 -81
- package/templates/recipe-bouncer-2d/files/design/recipe.md +146 -146
- package/templates/recipe-bouncer-2d/files/scenes/main.pix3scene +615 -615
- package/templates/recipe-bouncer-2d/files/scenes/menu.pix3scene +191 -191
- package/templates/recipe-bouncer-2d/files/scenes/ui/result.pix3scene +87 -87
- package/templates/recipe-bouncer-2d/files/scripts/BallBody.ts +298 -298
- package/templates/recipe-bouncer-2d/files/scripts/GameRules.ts +377 -377
- package/templates/recipe-bouncer-2d/files/scripts/MenuFlow.ts +109 -109
- package/templates/recipe-bouncer-2d/files/scripts/PaddleController.ts +112 -112
- package/templates/recipe-bouncer-2d/files/scripts/ScoreHud.ts +94 -94
- package/templates/recipe-bouncer-2d/files/scripts/TouchRules.ts +263 -263
- package/templates/recipe-bouncer-2d/files/scripts/ball-collision.ts +307 -307
- package/templates/recipe-bouncer-2d/template.yaml +10 -10
- package/templates/recipe-grid-3d/files/README.md +22 -22
- package/templates/recipe-grid-3d/files/design/recipe.md +110 -110
- package/templates/recipe-grid-3d/files/scenes/main.pix3scene +169 -169
- package/templates/recipe-grid-3d/files/scenes/menu.pix3scene +100 -100
- package/templates/recipe-grid-3d/files/scenes/ui/result.pix3scene +105 -105
- package/templates/recipe-grid-3d/files/scripts/GridBoard.ts +319 -319
- package/templates/recipe-grid-3d/files/scripts/GridRules.ts +278 -278
- package/templates/recipe-grid-3d/files/scripts/MenuFlow.ts +106 -106
- package/templates/recipe-grid-3d/files/scripts/ScoreHud.ts +94 -94
- package/templates/recipe-grid-3d/template.yaml +10 -10
- package/templates/recipe-tapper-2d/files/README.md +39 -39
- package/templates/recipe-tapper-2d/files/design/recipe.md +132 -132
- package/templates/recipe-tapper-2d/files/design/tests/reachability.json +4 -4
- package/templates/recipe-tapper-2d/files/design/tests/routines/terminal-retry.json +23 -23
- package/templates/recipe-tapper-2d/files/scenes/main.pix3scene +269 -269
- package/templates/recipe-tapper-2d/files/scenes/menu.pix3scene +100 -100
- package/templates/recipe-tapper-2d/files/scenes/prefabs/hazard.pix3scene +42 -42
- package/templates/recipe-tapper-2d/files/scenes/prefabs/target.pix3scene +45 -45
- package/templates/recipe-tapper-2d/files/scenes/ui/result.pix3scene +85 -85
- package/templates/recipe-tapper-2d/files/scripts/GameRules.ts +368 -368
- package/templates/recipe-tapper-2d/files/scripts/MenuFlow.ts +106 -106
- package/templates/recipe-tapper-2d/files/scripts/ScoreHud.ts +94 -94
- package/templates/recipe-tapper-2d/files/scripts/Spawner.ts +214 -214
- package/templates/recipe-tapper-2d/files/scripts/TouchRules.ts +192 -192
- package/templates/recipe-tapper-2d/template.yaml +10 -10
- package/dist/smoke/prebuilt/chunk-OJXQXIIQ.mjs +0 -239
- package/dist/validate/prebuilt/chunk-BS2OZM7U.js +0 -239
|
@@ -1,37 +1,37 @@
|
|
|
1
|
-
# Pix3 Scene File (YAML)
|
|
2
|
-
# Idea-stage placeholder scene: a Full HD canvas with nothing on it but a background.
|
|
3
|
-
# Deliberately bare — the idea stage mounts no runtime, and the recipe that will fill this
|
|
4
|
-
# project in is not chosen until "Start prototype". The canonical `game-root` id is kept so
|
|
5
|
-
# routines and assertions written against it keep working after the recipe is applied.
|
|
6
|
-
version: 1.0.0
|
|
7
|
-
metadata:
|
|
8
|
-
author: Pix3 Template
|
|
9
|
-
description: Empty canvas for a project still at the idea stage
|
|
10
|
-
root:
|
|
11
|
-
- id: game-root
|
|
12
|
-
type: Group2D
|
|
13
|
-
name: Game Root
|
|
14
|
-
properties:
|
|
15
|
-
width: 1920
|
|
16
|
-
height: 1080
|
|
17
|
-
layout:
|
|
18
|
-
enabled: true
|
|
19
|
-
horizontalAlign: stretch
|
|
20
|
-
verticalAlign: stretch
|
|
21
|
-
children:
|
|
22
|
-
- id: background
|
|
23
|
-
type: ColorRect2D
|
|
24
|
-
name: Background
|
|
25
|
-
properties:
|
|
26
|
-
width: 1920
|
|
27
|
-
height: 1080
|
|
28
|
-
color: "#1a1a2e"
|
|
29
|
-
transform:
|
|
30
|
-
position: [0, 0]
|
|
31
|
-
scale: [1, 1]
|
|
32
|
-
rotation: 0
|
|
33
|
-
layout:
|
|
34
|
-
enabled: true
|
|
35
|
-
horizontalAlign: stretch
|
|
36
|
-
verticalAlign: stretch
|
|
37
|
-
children: []
|
|
1
|
+
# Pix3 Scene File (YAML)
|
|
2
|
+
# Idea-stage placeholder scene: a Full HD canvas with nothing on it but a background.
|
|
3
|
+
# Deliberately bare — the idea stage mounts no runtime, and the recipe that will fill this
|
|
4
|
+
# project in is not chosen until "Start prototype". The canonical `game-root` id is kept so
|
|
5
|
+
# routines and assertions written against it keep working after the recipe is applied.
|
|
6
|
+
version: 1.0.0
|
|
7
|
+
metadata:
|
|
8
|
+
author: Pix3 Template
|
|
9
|
+
description: Empty canvas for a project still at the idea stage
|
|
10
|
+
root:
|
|
11
|
+
- id: game-root
|
|
12
|
+
type: Group2D
|
|
13
|
+
name: Game Root
|
|
14
|
+
properties:
|
|
15
|
+
width: 1920
|
|
16
|
+
height: 1080
|
|
17
|
+
layout:
|
|
18
|
+
enabled: true
|
|
19
|
+
horizontalAlign: stretch
|
|
20
|
+
verticalAlign: stretch
|
|
21
|
+
children:
|
|
22
|
+
- id: background
|
|
23
|
+
type: ColorRect2D
|
|
24
|
+
name: Background
|
|
25
|
+
properties:
|
|
26
|
+
width: 1920
|
|
27
|
+
height: 1080
|
|
28
|
+
color: "#1a1a2e"
|
|
29
|
+
transform:
|
|
30
|
+
position: [0, 0]
|
|
31
|
+
scale: [1, 1]
|
|
32
|
+
rotation: 0
|
|
33
|
+
layout:
|
|
34
|
+
enabled: true
|
|
35
|
+
horizontalAlign: stretch
|
|
36
|
+
verticalAlign: stretch
|
|
37
|
+
children: []
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
id: idea-blank
|
|
2
|
-
title: Idea (blank)
|
|
3
|
-
description: Starting point for the Flow idea stage — one empty Full HD 2D canvas, no game. The recipe is chosen later, when the idea becomes a prototype.
|
|
4
|
-
projectType: 2d
|
|
5
|
-
targetPlatform: universal
|
|
6
|
-
viewport: { width: 1920, height: 1080 }
|
|
7
|
-
# Last in every ordering, and hidden from the pickers: this template is reached only through the
|
|
8
|
-
# idea-stage bootstrap, never chosen by a user or by the recipe resolver.
|
|
9
|
-
order: 99
|
|
10
|
-
hidden: true
|
|
1
|
+
id: idea-blank
|
|
2
|
+
title: Idea (blank)
|
|
3
|
+
description: Starting point for the Flow idea stage — one empty Full HD 2D canvas, no game. The recipe is chosen later, when the idea becomes a prototype.
|
|
4
|
+
projectType: 2d
|
|
5
|
+
targetPlatform: universal
|
|
6
|
+
viewport: { width: 1920, height: 1080 }
|
|
7
|
+
# Last in every ordering, and hidden from the pickers: this template is reached only through the
|
|
8
|
+
# idea-stage bootstrap, never chosen by a user or by the recipe resolver.
|
|
9
|
+
order: 99
|
|
10
|
+
hidden: true
|
|
@@ -1,44 +1,44 @@
|
|
|
1
|
-
# {{PROJECT_NAME}}
|
|
2
|
-
|
|
3
|
-
A Pix3 project created from the **Minigame 2D** template.
|
|
4
|
-
|
|
5
|
-
## Scenes and the flow
|
|
6
|
-
|
|
7
|
-
The menu and the game are **separate scenes**, so you can play the game on its own
|
|
8
|
-
while iterating and still ship the full menu → game flow in a build:
|
|
9
|
-
|
|
10
|
-
- **Game scene** (`scenes/main.pix3scene`) — the gameplay. This is the
|
|
11
|
-
editor's startup scene: it opens first and is what you (and agents) play directly,
|
|
12
|
-
with no menu in the way. Build your minigame here. Driven by `scripts/GameFlow.ts`
|
|
13
|
-
(its MENU button transitions back to the menu; extend it with your win/lose flow).
|
|
14
|
-
- **Menu scene** (`scenes/menu.pix3scene`) — title, PLAY and SETTINGS
|
|
15
|
-
buttons. This is the project's **entry scene** (Project Settings → Default Export
|
|
16
|
-
Scene Path): a build and *Start Game* boot here so you can debug the whole flow.
|
|
17
|
-
Driven by `scripts/MenuFlow.ts`: PLAY transitions to the game scene, SETTINGS
|
|
18
|
-
opens the settings window.
|
|
19
|
-
- **Settings window** (`scenes/ui/settings-window.pix3scene`) — the modal,
|
|
20
|
-
in its own file so the menu opens clean. The menu carries it as a one-line
|
|
21
|
-
`instance: res://scenes/ui/settings-window.pix3scene` marked `visible: false`
|
|
22
|
-
(an editor-only hide; `MenuFlow` shows it at run time). Music/SFX checkboxes
|
|
23
|
-
mute the engine audio buses, wired by `scripts/SettingsWindow.ts`. Reuse it
|
|
24
|
-
from any scene the same way.
|
|
25
|
-
|
|
26
|
-
Scenes switch at runtime with a fade transition:
|
|
27
|
-
`this.scene.changeScene('res://scenes/main.pix3scene', { transition: 'fade' })`.
|
|
28
|
-
|
|
29
|
-
## Project structure
|
|
30
|
-
|
|
31
|
-
- `design/` — game design document and reference images
|
|
32
|
-
- `design/tests/` — agent-testing material: `routines/*.json` (named, replayable
|
|
33
|
-
step + assertion scripts) and `reachability.json` (the journal of on-screen
|
|
34
|
-
controls physically proven reachable). Routines are executed by the gameplay
|
|
35
|
-
test harness, which is still in development — the format and location are
|
|
36
|
-
fixed now so a routine written today keeps working.
|
|
37
|
-
- `scenes/` — scene files; `main.pix3scene` (game) is the startup scene,
|
|
38
|
-
`menu.pix3scene` is the build entry point
|
|
39
|
-
- `scenes/ui/` — full-screen / modal overlays (`settings-window.pix3scene`),
|
|
40
|
-
instanced into host scenes with `visible: false`
|
|
41
|
-
- `sprites/` — images and textures
|
|
42
|
-
- `scripts/` — game scripts (`export class X extends Script`, used as `user:X`)
|
|
43
|
-
- `audio/` — music and sound effects
|
|
44
|
-
- `AGENTS.md` — rules and pointers for AI agents working on this project
|
|
1
|
+
# {{PROJECT_NAME}}
|
|
2
|
+
|
|
3
|
+
A Pix3 project created from the **Minigame 2D** template.
|
|
4
|
+
|
|
5
|
+
## Scenes and the flow
|
|
6
|
+
|
|
7
|
+
The menu and the game are **separate scenes**, so you can play the game on its own
|
|
8
|
+
while iterating and still ship the full menu → game flow in a build:
|
|
9
|
+
|
|
10
|
+
- **Game scene** (`scenes/main.pix3scene`) — the gameplay. This is the
|
|
11
|
+
editor's startup scene: it opens first and is what you (and agents) play directly,
|
|
12
|
+
with no menu in the way. Build your minigame here. Driven by `scripts/GameFlow.ts`
|
|
13
|
+
(its MENU button transitions back to the menu; extend it with your win/lose flow).
|
|
14
|
+
- **Menu scene** (`scenes/menu.pix3scene`) — title, PLAY and SETTINGS
|
|
15
|
+
buttons. This is the project's **entry scene** (Project Settings → Default Export
|
|
16
|
+
Scene Path): a build and *Start Game* boot here so you can debug the whole flow.
|
|
17
|
+
Driven by `scripts/MenuFlow.ts`: PLAY transitions to the game scene, SETTINGS
|
|
18
|
+
opens the settings window.
|
|
19
|
+
- **Settings window** (`scenes/ui/settings-window.pix3scene`) — the modal,
|
|
20
|
+
in its own file so the menu opens clean. The menu carries it as a one-line
|
|
21
|
+
`instance: res://scenes/ui/settings-window.pix3scene` marked `visible: false`
|
|
22
|
+
(an editor-only hide; `MenuFlow` shows it at run time). Music/SFX checkboxes
|
|
23
|
+
mute the engine audio buses, wired by `scripts/SettingsWindow.ts`. Reuse it
|
|
24
|
+
from any scene the same way.
|
|
25
|
+
|
|
26
|
+
Scenes switch at runtime with a fade transition:
|
|
27
|
+
`this.scene.changeScene('res://scenes/main.pix3scene', { transition: 'fade' })`.
|
|
28
|
+
|
|
29
|
+
## Project structure
|
|
30
|
+
|
|
31
|
+
- `design/` — game design document and reference images
|
|
32
|
+
- `design/tests/` — agent-testing material: `routines/*.json` (named, replayable
|
|
33
|
+
step + assertion scripts) and `reachability.json` (the journal of on-screen
|
|
34
|
+
controls physically proven reachable). Routines are executed by the gameplay
|
|
35
|
+
test harness, which is still in development — the format and location are
|
|
36
|
+
fixed now so a routine written today keeps working.
|
|
37
|
+
- `scenes/` — scene files; `main.pix3scene` (game) is the startup scene,
|
|
38
|
+
`menu.pix3scene` is the build entry point
|
|
39
|
+
- `scenes/ui/` — full-screen / modal overlays (`settings-window.pix3scene`),
|
|
40
|
+
instanced into host scenes with `visible: false`
|
|
41
|
+
- `sprites/` — images and textures
|
|
42
|
+
- `scripts/` — game scripts (`export class X extends Script`, used as `user:X`)
|
|
43
|
+
- `audio/` — music and sound effects
|
|
44
|
+
- `AGENTS.md` — rules and pointers for AI agents working on this project
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{ "version": 1, "proven": [] }
|
|
1
|
+
{ "version": 1, "proven": [] }
|
|
@@ -1,44 +1,44 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "mute-music",
|
|
3
|
-
"description": "From the menu: open the settings window, switch music off, close it again.",
|
|
4
|
-
"note": "Run it with game_run {routine:'mute-music'}. Steps are the game_input vocabulary plus {type:'command'} for a registered intent; `expect` holds the ordinary game_run predicates, ANDed and judged once after the last step. Only a STEP takes a `why` — an assertion is exactly the predicate object game_run takes, with no extra fields. The `toggled` expectation is the load-bearing one here: the box ships checked, so \"it is off now\" would also be true of a box nothing ever reached, while `toggled` fires only on a real state change and cannot be satisfied by a tap that bounced off a disabled control.",
|
|
5
|
-
"scope": "scenes/menu.pix3scene",
|
|
6
|
-
"params": {},
|
|
7
|
-
"uses": ["menu-root", "settings-button", "settings-window", "music-toggle", "close-button"],
|
|
8
|
-
"steps": [
|
|
9
|
-
{
|
|
10
|
-
"type": "command",
|
|
11
|
-
"name": "open-settings",
|
|
12
|
-
"why": "The highest channel available: the SETTINGS button dispatches this intent, so the routine keeps working after any relayout of the menu — and the dispatch is journalled with the frame it happened on."
|
|
13
|
-
},
|
|
14
|
-
{
|
|
15
|
-
"type": "invoke",
|
|
16
|
-
"target": "music-toggle",
|
|
17
|
-
"interaction": "setChecked",
|
|
18
|
-
"args": { "checked": false },
|
|
19
|
-
"why": "The scene's `settings.toggle-music` command FLIPS the box, so it cannot express \"off\" from an unknown state; setChecked can. It still goes through the control's own funnel, so the checkmark, the audio bus and the `toggled` signal all land exactly as they would on a tap."
|
|
20
|
-
},
|
|
21
|
-
{
|
|
22
|
-
"type": "command",
|
|
23
|
-
"name": "close-settings",
|
|
24
|
-
"why": "The CLOSE button's intent — same reason as opening."
|
|
25
|
-
}
|
|
26
|
-
],
|
|
27
|
-
"expect": [
|
|
28
|
-
{ "kind": "signal", "name": "toggled", "node": "music-toggle" },
|
|
29
|
-
{
|
|
30
|
-
"kind": "nodeProperty",
|
|
31
|
-
"name": "music-toggle",
|
|
32
|
-
"path": "checked",
|
|
33
|
-
"op": "eq",
|
|
34
|
-
"value": false
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
"kind": "nodeProperty",
|
|
38
|
-
"name": "settings-window",
|
|
39
|
-
"path": "visible",
|
|
40
|
-
"op": "eq",
|
|
41
|
-
"value": false
|
|
42
|
-
}
|
|
43
|
-
]
|
|
44
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "mute-music",
|
|
3
|
+
"description": "From the menu: open the settings window, switch music off, close it again.",
|
|
4
|
+
"note": "Run it with game_run {routine:'mute-music'}. Steps are the game_input vocabulary plus {type:'command'} for a registered intent; `expect` holds the ordinary game_run predicates, ANDed and judged once after the last step. Only a STEP takes a `why` — an assertion is exactly the predicate object game_run takes, with no extra fields. The `toggled` expectation is the load-bearing one here: the box ships checked, so \"it is off now\" would also be true of a box nothing ever reached, while `toggled` fires only on a real state change and cannot be satisfied by a tap that bounced off a disabled control.",
|
|
5
|
+
"scope": "scenes/menu.pix3scene",
|
|
6
|
+
"params": {},
|
|
7
|
+
"uses": ["menu-root", "settings-button", "settings-window", "music-toggle", "close-button"],
|
|
8
|
+
"steps": [
|
|
9
|
+
{
|
|
10
|
+
"type": "command",
|
|
11
|
+
"name": "open-settings",
|
|
12
|
+
"why": "The highest channel available: the SETTINGS button dispatches this intent, so the routine keeps working after any relayout of the menu — and the dispatch is journalled with the frame it happened on."
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"type": "invoke",
|
|
16
|
+
"target": "music-toggle",
|
|
17
|
+
"interaction": "setChecked",
|
|
18
|
+
"args": { "checked": false },
|
|
19
|
+
"why": "The scene's `settings.toggle-music` command FLIPS the box, so it cannot express \"off\" from an unknown state; setChecked can. It still goes through the control's own funnel, so the checkmark, the audio bus and the `toggled` signal all land exactly as they would on a tap."
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"type": "command",
|
|
23
|
+
"name": "close-settings",
|
|
24
|
+
"why": "The CLOSE button's intent — same reason as opening."
|
|
25
|
+
}
|
|
26
|
+
],
|
|
27
|
+
"expect": [
|
|
28
|
+
{ "kind": "signal", "name": "toggled", "node": "music-toggle" },
|
|
29
|
+
{
|
|
30
|
+
"kind": "nodeProperty",
|
|
31
|
+
"name": "music-toggle",
|
|
32
|
+
"path": "checked",
|
|
33
|
+
"op": "eq",
|
|
34
|
+
"value": false
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"kind": "nodeProperty",
|
|
38
|
+
"name": "settings-window",
|
|
39
|
+
"path": "visible",
|
|
40
|
+
"op": "eq",
|
|
41
|
+
"value": false
|
|
42
|
+
}
|
|
43
|
+
]
|
|
44
|
+
}
|
|
@@ -1,84 +1,84 @@
|
|
|
1
|
-
# Pix3 Scene File (YAML)
|
|
2
|
-
# Minigame 2D — the GAME scene. `main.pix3scene` is the editor's startup scene:
|
|
3
|
-
# the one you iterate on and that agents open and play directly (no menu in the
|
|
4
|
-
# way). A full build instead boots the MENU scene (see menu.pix3scene / Project
|
|
5
|
-
# Settings → Default Export Scene Path); the menu's PLAY button transitions here.
|
|
6
|
-
# The MENU button returns to the menu via a scene transition (scripts/GameFlow.ts).
|
|
7
|
-
version: 1.0.0
|
|
8
|
-
metadata:
|
|
9
|
-
author: Pix3 Template
|
|
10
|
-
description: Gameplay scene — build your minigame here
|
|
11
|
-
root:
|
|
12
|
-
- id: game-root
|
|
13
|
-
type: Group2D
|
|
14
|
-
name: Game Root
|
|
15
|
-
properties:
|
|
16
|
-
width: 1920
|
|
17
|
-
height: 1080
|
|
18
|
-
layout:
|
|
19
|
-
enabled: true
|
|
20
|
-
horizontalAlign: stretch
|
|
21
|
-
verticalAlign: stretch
|
|
22
|
-
components:
|
|
23
|
-
- id: game-flow
|
|
24
|
-
type: user:GameFlow
|
|
25
|
-
enabled: true
|
|
26
|
-
config:
|
|
27
|
-
menuScene: res://scenes/menu.pix3scene
|
|
28
|
-
menuButton: menu-button
|
|
29
|
-
children:
|
|
30
|
-
- id: game-background
|
|
31
|
-
type: ColorRect2D
|
|
32
|
-
name: Game Background
|
|
33
|
-
properties:
|
|
34
|
-
width: 1920
|
|
35
|
-
height: 1080
|
|
36
|
-
color: "#0f3460"
|
|
37
|
-
transform:
|
|
38
|
-
position: [0, 0]
|
|
39
|
-
scale: [1, 1]
|
|
40
|
-
rotation: 0
|
|
41
|
-
layout:
|
|
42
|
-
enabled: true
|
|
43
|
-
horizontalAlign: stretch
|
|
44
|
-
verticalAlign: stretch
|
|
45
|
-
children: []
|
|
46
|
-
- id: game-placeholder
|
|
47
|
-
type: Label2D
|
|
48
|
-
name: Game Placeholder
|
|
49
|
-
properties:
|
|
50
|
-
label: "YOUR GAME GOES HERE"
|
|
51
|
-
labelFontSize: 64
|
|
52
|
-
labelColor: "#ffffff"
|
|
53
|
-
labelAlign: center
|
|
54
|
-
transform:
|
|
55
|
-
position: [0, 0]
|
|
56
|
-
scale: [1, 1]
|
|
57
|
-
rotation: 0
|
|
58
|
-
layout:
|
|
59
|
-
enabled: true
|
|
60
|
-
horizontalAlign: center
|
|
61
|
-
verticalAlign: center
|
|
62
|
-
children: []
|
|
63
|
-
- id: menu-button
|
|
64
|
-
type: Button2D
|
|
65
|
-
name: Menu Button
|
|
66
|
-
properties:
|
|
67
|
-
width: 220
|
|
68
|
-
height: 80
|
|
69
|
-
label: "MENU"
|
|
70
|
-
labelFontSize: 32
|
|
71
|
-
labelColor: "#ffffff"
|
|
72
|
-
backgroundColor: "#3a3a5e"
|
|
73
|
-
hoverColor: "#4a4a6e"
|
|
74
|
-
pressedColor: "#2a2a4e"
|
|
75
|
-
buttonAction: back-to-menu
|
|
76
|
-
transform:
|
|
77
|
-
position: [-820, 460]
|
|
78
|
-
scale: [1, 1]
|
|
79
|
-
rotation: 0
|
|
80
|
-
layout:
|
|
81
|
-
enabled: true
|
|
82
|
-
horizontalAlign: left
|
|
83
|
-
verticalAlign: top
|
|
84
|
-
children: []
|
|
1
|
+
# Pix3 Scene File (YAML)
|
|
2
|
+
# Minigame 2D — the GAME scene. `main.pix3scene` is the editor's startup scene:
|
|
3
|
+
# the one you iterate on and that agents open and play directly (no menu in the
|
|
4
|
+
# way). A full build instead boots the MENU scene (see menu.pix3scene / Project
|
|
5
|
+
# Settings → Default Export Scene Path); the menu's PLAY button transitions here.
|
|
6
|
+
# The MENU button returns to the menu via a scene transition (scripts/GameFlow.ts).
|
|
7
|
+
version: 1.0.0
|
|
8
|
+
metadata:
|
|
9
|
+
author: Pix3 Template
|
|
10
|
+
description: Gameplay scene — build your minigame here
|
|
11
|
+
root:
|
|
12
|
+
- id: game-root
|
|
13
|
+
type: Group2D
|
|
14
|
+
name: Game Root
|
|
15
|
+
properties:
|
|
16
|
+
width: 1920
|
|
17
|
+
height: 1080
|
|
18
|
+
layout:
|
|
19
|
+
enabled: true
|
|
20
|
+
horizontalAlign: stretch
|
|
21
|
+
verticalAlign: stretch
|
|
22
|
+
components:
|
|
23
|
+
- id: game-flow
|
|
24
|
+
type: user:GameFlow
|
|
25
|
+
enabled: true
|
|
26
|
+
config:
|
|
27
|
+
menuScene: res://scenes/menu.pix3scene
|
|
28
|
+
menuButton: menu-button
|
|
29
|
+
children:
|
|
30
|
+
- id: game-background
|
|
31
|
+
type: ColorRect2D
|
|
32
|
+
name: Game Background
|
|
33
|
+
properties:
|
|
34
|
+
width: 1920
|
|
35
|
+
height: 1080
|
|
36
|
+
color: "#0f3460"
|
|
37
|
+
transform:
|
|
38
|
+
position: [0, 0]
|
|
39
|
+
scale: [1, 1]
|
|
40
|
+
rotation: 0
|
|
41
|
+
layout:
|
|
42
|
+
enabled: true
|
|
43
|
+
horizontalAlign: stretch
|
|
44
|
+
verticalAlign: stretch
|
|
45
|
+
children: []
|
|
46
|
+
- id: game-placeholder
|
|
47
|
+
type: Label2D
|
|
48
|
+
name: Game Placeholder
|
|
49
|
+
properties:
|
|
50
|
+
label: "YOUR GAME GOES HERE"
|
|
51
|
+
labelFontSize: 64
|
|
52
|
+
labelColor: "#ffffff"
|
|
53
|
+
labelAlign: center
|
|
54
|
+
transform:
|
|
55
|
+
position: [0, 0]
|
|
56
|
+
scale: [1, 1]
|
|
57
|
+
rotation: 0
|
|
58
|
+
layout:
|
|
59
|
+
enabled: true
|
|
60
|
+
horizontalAlign: center
|
|
61
|
+
verticalAlign: center
|
|
62
|
+
children: []
|
|
63
|
+
- id: menu-button
|
|
64
|
+
type: Button2D
|
|
65
|
+
name: Menu Button
|
|
66
|
+
properties:
|
|
67
|
+
width: 220
|
|
68
|
+
height: 80
|
|
69
|
+
label: "MENU"
|
|
70
|
+
labelFontSize: 32
|
|
71
|
+
labelColor: "#ffffff"
|
|
72
|
+
backgroundColor: "#3a3a5e"
|
|
73
|
+
hoverColor: "#4a4a6e"
|
|
74
|
+
pressedColor: "#2a2a4e"
|
|
75
|
+
buttonAction: back-to-menu
|
|
76
|
+
transform:
|
|
77
|
+
position: [-820, 460]
|
|
78
|
+
scale: [1, 1]
|
|
79
|
+
rotation: 0
|
|
80
|
+
layout:
|
|
81
|
+
enabled: true
|
|
82
|
+
horizontalAlign: left
|
|
83
|
+
verticalAlign: top
|
|
84
|
+
children: []
|