@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.
Files changed (126) hide show
  1. package/LICENSE +201 -201
  2. package/README.md +788 -754
  3. package/dist/index.js +208 -203
  4. package/dist/runtime-types.json +1 -1
  5. package/dist/smoke/prebuilt/{chunk-J2SJVMDO.mjs → chunk-7MZGPAUK.mjs} +1 -1
  6. package/dist/smoke/prebuilt/chunk-7WOFGLW3.mjs +239 -0
  7. package/dist/smoke/prebuilt/runtime.mjs +1 -1
  8. package/dist/smoke/prebuilt/smoke-worker.mjs +1 -1
  9. package/dist/smoke/prebuilt/tree-defaults.mjs +1 -1
  10. package/dist/validate/prebuilt/bundle-main.js +13 -13
  11. package/dist/validate/prebuilt/chunk-HKG6YI6Y.js +239 -0
  12. package/dist/validate/prebuilt/runtime.js +1 -1
  13. package/kit/files/.claude/skills/pix3-nodes/SKILL.md +210 -210
  14. package/kit/files/.claude/skills/pix3-nodes/reference.md +32 -24
  15. package/kit/files/.claude/skills/pix3-scene-format/SKILL.md +238 -235
  16. package/kit/files/.claude/skills/pix3-scene-format/reference.md +28 -28
  17. package/kit/files/.claude/skills/pix3-scripts/SKILL.md +285 -281
  18. package/kit/files/.claude/skills/pix3-scripts/reference.md +69 -52
  19. package/kit/files/.claude/skills/pix3-verify/SKILL.md +298 -256
  20. package/kit/files/.claude/skills/pix3-verify/reference.md +21 -21
  21. package/kit/files/AGENTS.md +203 -203
  22. package/kit/files/CLAUDE.md +1 -1
  23. package/kit/kit.json +2 -2
  24. package/package.json +54 -54
  25. package/templates/empty-2d/files/README.md +20 -20
  26. package/templates/empty-2d/files/scenes/main.pix3scene +68 -68
  27. package/templates/empty-2d/template.yaml +7 -7
  28. package/templates/empty-3d/files/README.md +20 -20
  29. package/templates/empty-3d/files/scenes/main.pix3scene +108 -108
  30. package/templates/empty-3d/template.yaml +7 -7
  31. package/templates/idea-blank/files/README.md +22 -22
  32. package/templates/idea-blank/files/scenes/main.pix3scene +37 -37
  33. package/templates/idea-blank/template.yaml +10 -10
  34. package/templates/minigame-2d/files/README.md +44 -44
  35. package/templates/minigame-2d/files/design/tests/reachability.json +1 -1
  36. package/templates/minigame-2d/files/design/tests/routines/mute-music.json +44 -44
  37. package/templates/minigame-2d/files/scenes/main.pix3scene +84 -84
  38. package/templates/minigame-2d/files/scenes/menu.pix3scene +118 -118
  39. package/templates/minigame-2d/files/scenes/ui/settings-window.pix3scene +138 -138
  40. package/templates/minigame-2d/files/scripts/GameFlow.ts +133 -133
  41. package/templates/minigame-2d/files/scripts/MenuFlow.ts +217 -217
  42. package/templates/minigame-2d/files/scripts/SettingsWindow.ts +198 -198
  43. package/templates/minigame-2d/template.yaml +10 -10
  44. package/templates/playable-2d/files/README.md +30 -30
  45. package/templates/playable-2d/files/design/recipe.md +83 -83
  46. package/templates/playable-2d/files/design/tests/reachability.json +4 -4
  47. package/templates/playable-2d/files/design/tests/routines/intro-to-cta.json +32 -32
  48. package/templates/playable-2d/files/scenes/main.pix3scene +111 -111
  49. package/templates/playable-2d/files/scenes/ui/end-screen.pix3scene +91 -91
  50. package/templates/playable-2d/files/scenes/ui/intro.pix3scene +65 -65
  51. package/templates/playable-2d/files/scripts/GameFlow.ts +256 -256
  52. package/templates/playable-2d/template.yaml +9 -9
  53. package/templates/playable-3d/files/README.md +32 -32
  54. package/templates/playable-3d/files/design/recipe.md +127 -127
  55. package/templates/playable-3d/files/design/tests/reachability.json +4 -4
  56. package/templates/playable-3d/files/design/tests/routines/intro-to-cta.json +32 -32
  57. package/templates/playable-3d/files/scenes/main.pix3scene +230 -230
  58. package/templates/playable-3d/files/scenes/ui/end-screen.pix3scene +91 -91
  59. package/templates/playable-3d/files/scenes/ui/intro.pix3scene +65 -65
  60. package/templates/playable-3d/files/scripts/GameFlow.ts +309 -309
  61. package/templates/playable-3d/files/scripts/GameRules.ts +290 -290
  62. package/templates/playable-3d/files/scripts/ScoreHud.ts +113 -113
  63. package/templates/playable-3d/template.yaml +9 -9
  64. package/templates/recipe-arena-2d/files/README.md +48 -48
  65. package/templates/recipe-arena-2d/files/design/recipe.md +127 -127
  66. package/templates/recipe-arena-2d/files/scenes/main.pix3scene +292 -292
  67. package/templates/recipe-arena-2d/files/scenes/menu.pix3scene +100 -100
  68. package/templates/recipe-arena-2d/files/scenes/prefabs/hazard.pix3scene +42 -42
  69. package/templates/recipe-arena-2d/files/scenes/prefabs/pickup.pix3scene +45 -45
  70. package/templates/recipe-arena-2d/files/scenes/ui/result.pix3scene +85 -85
  71. package/templates/recipe-arena-2d/files/scripts/GameRules.ts +368 -368
  72. package/templates/recipe-arena-2d/files/scripts/MenuFlow.ts +106 -106
  73. package/templates/recipe-arena-2d/files/scripts/PlayerController.ts +151 -151
  74. package/templates/recipe-arena-2d/files/scripts/ScoreHud.ts +94 -94
  75. package/templates/recipe-arena-2d/files/scripts/Spawner.ts +214 -214
  76. package/templates/recipe-arena-2d/files/scripts/TouchRules.ts +174 -174
  77. package/templates/recipe-arena-2d/template.yaml +10 -10
  78. package/templates/recipe-blank-2d/files/README.md +61 -61
  79. package/templates/recipe-blank-2d/files/design/recipe.md +148 -148
  80. package/templates/recipe-blank-2d/files/design/tests/reachability.json +4 -4
  81. package/templates/recipe-blank-2d/files/design/tests/routines/restart.json +27 -27
  82. package/templates/recipe-blank-2d/files/scenes/main.pix3scene +224 -224
  83. package/templates/recipe-blank-2d/files/scenes/ui/result.pix3scene +85 -85
  84. package/templates/recipe-blank-2d/files/scripts/GameRules.ts +350 -350
  85. package/templates/recipe-blank-2d/files/scripts/ScoreHud.ts +110 -110
  86. package/templates/recipe-blank-2d/template.yaml +10 -10
  87. package/templates/recipe-bouncer-2d/files/README.md +81 -81
  88. package/templates/recipe-bouncer-2d/files/design/recipe.md +146 -146
  89. package/templates/recipe-bouncer-2d/files/scenes/main.pix3scene +615 -615
  90. package/templates/recipe-bouncer-2d/files/scenes/menu.pix3scene +191 -191
  91. package/templates/recipe-bouncer-2d/files/scenes/ui/result.pix3scene +87 -87
  92. package/templates/recipe-bouncer-2d/files/scripts/BallBody.ts +298 -298
  93. package/templates/recipe-bouncer-2d/files/scripts/GameRules.ts +377 -377
  94. package/templates/recipe-bouncer-2d/files/scripts/MenuFlow.ts +109 -109
  95. package/templates/recipe-bouncer-2d/files/scripts/PaddleController.ts +112 -112
  96. package/templates/recipe-bouncer-2d/files/scripts/ScoreHud.ts +94 -94
  97. package/templates/recipe-bouncer-2d/files/scripts/TouchRules.ts +263 -263
  98. package/templates/recipe-bouncer-2d/files/scripts/ball-collision.ts +307 -307
  99. package/templates/recipe-bouncer-2d/template.yaml +10 -10
  100. package/templates/recipe-grid-3d/files/README.md +22 -22
  101. package/templates/recipe-grid-3d/files/design/recipe.md +110 -110
  102. package/templates/recipe-grid-3d/files/scenes/main.pix3scene +169 -169
  103. package/templates/recipe-grid-3d/files/scenes/menu.pix3scene +100 -100
  104. package/templates/recipe-grid-3d/files/scenes/ui/result.pix3scene +105 -105
  105. package/templates/recipe-grid-3d/files/scripts/GridBoard.ts +319 -319
  106. package/templates/recipe-grid-3d/files/scripts/GridRules.ts +278 -278
  107. package/templates/recipe-grid-3d/files/scripts/MenuFlow.ts +106 -106
  108. package/templates/recipe-grid-3d/files/scripts/ScoreHud.ts +94 -94
  109. package/templates/recipe-grid-3d/template.yaml +10 -10
  110. package/templates/recipe-tapper-2d/files/README.md +39 -39
  111. package/templates/recipe-tapper-2d/files/design/recipe.md +132 -132
  112. package/templates/recipe-tapper-2d/files/design/tests/reachability.json +4 -4
  113. package/templates/recipe-tapper-2d/files/design/tests/routines/terminal-retry.json +23 -23
  114. package/templates/recipe-tapper-2d/files/scenes/main.pix3scene +269 -269
  115. package/templates/recipe-tapper-2d/files/scenes/menu.pix3scene +100 -100
  116. package/templates/recipe-tapper-2d/files/scenes/prefabs/hazard.pix3scene +42 -42
  117. package/templates/recipe-tapper-2d/files/scenes/prefabs/target.pix3scene +45 -45
  118. package/templates/recipe-tapper-2d/files/scenes/ui/result.pix3scene +85 -85
  119. package/templates/recipe-tapper-2d/files/scripts/GameRules.ts +368 -368
  120. package/templates/recipe-tapper-2d/files/scripts/MenuFlow.ts +106 -106
  121. package/templates/recipe-tapper-2d/files/scripts/ScoreHud.ts +94 -94
  122. package/templates/recipe-tapper-2d/files/scripts/Spawner.ts +214 -214
  123. package/templates/recipe-tapper-2d/files/scripts/TouchRules.ts +192 -192
  124. package/templates/recipe-tapper-2d/template.yaml +10 -10
  125. package/dist/smoke/prebuilt/chunk-OJXQXIIQ.mjs +0 -239
  126. 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: []