@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,230 +1,230 @@
1
- # Pix3 Scene File (YAML)
2
- # Playable 3D blank (portrait 1080x1920): 3D gameplay placeholder plus a 2D UI
3
- # layer with a tap-to-start intro overlay, a score/lives/time HUD, and an end
4
- # screen with a CTA button. `hud-root` carries all three components: GameFlow
5
- # (phases), GameRules (score/lives/win-lose) and ScoreHud (display only).
6
- #
7
- # Full-screen UI lives in its own file under scenes/ui/ and is instanced into
8
- # `hud-root` hidden (`visible: false` = editor only; `initiallyVisible` in the
9
- # overlay file is what play mode reads), so opening this scene shows the stage
10
- # rather than a dim or a CTA card:
11
- # intro-overlay (intro-dim, intro-label) scenes/ui/intro.pix3scene
12
- # end-screen (end-dim, end-label, cta-button) scenes/ui/end-screen.pix3scene
13
- # Instance children keep their ids, so `GameFlow`'s introNode/endNode,
14
- # `GameRules`' resultLabel and every `findNode` still resolve.
15
- version: 1.0.0
16
- metadata:
17
- author: Pix3 Template
18
- description: Playable 3D blank with intro overlay and CTA end screen
19
- root:
20
- - id: game-root
21
- type: Node3D
22
- name: Game Root
23
- properties:
24
- transform:
25
- position: [0, 0, 0]
26
- rotationEuler: [0, 0, 0]
27
- scale: [1, 1, 1]
28
- children:
29
- - id: main-camera
30
- type: Camera3D
31
- name: Main Camera
32
- properties:
33
- projection: perspective
34
- fov: 60
35
- near: 0.1
36
- far: 1000
37
- transform:
38
- position: [0, 3, 8]
39
- rotationEuler: [-15, 0, 0]
40
- scale: [1, 1, 1]
41
- children: []
42
- - id: key-light
43
- type: DirectionalLightNode
44
- name: Key Light
45
- properties:
46
- intensity: 1.2
47
- color: "#ffffff"
48
- transform:
49
- position: [5, 8, 3]
50
- rotationEuler: [-45, 35, 0]
51
- scale: [1, 1, 1]
52
- children: []
53
- - id: ambient-light
54
- type: AmbientLightNode
55
- name: Ambient Light
56
- properties:
57
- intensity: 0.5
58
- color: "#ffffff"
59
- transform:
60
- position: [0, 0, 0]
61
- rotationEuler: [0, 0, 0]
62
- scale: [1, 1, 1]
63
- children: []
64
- - id: ground
65
- type: GeometryMesh
66
- name: Ground
67
- properties:
68
- geometry: box
69
- size: [12, 0.2, 12]
70
- material:
71
- type: lambert
72
- color: "#2a2a3e"
73
- transform:
74
- position: [0, -0.1, 0]
75
- rotationEuler: [0, 0, 0]
76
- scale: [1, 1, 1]
77
- children: []
78
- - id: hero-box
79
- type: GeometryMesh
80
- name: Hero Box
81
- properties:
82
- geometry: box
83
- size: [1, 1, 1]
84
- material:
85
- type: lambert
86
- color: "#ffcf33"
87
- transform:
88
- position: [0, 0.5, 0]
89
- rotationEuler: [0, 45, 0]
90
- scale: [1, 1, 1]
91
- components:
92
- - id: hero-rotate
93
- type: core:Rotate
94
- enabled: true
95
- config: {}
96
- children: []
97
-
98
- - id: hud-root
99
- type: Group2D
100
- name: HUD Root
101
- properties:
102
- width: 1080
103
- height: 1920
104
- layout:
105
- enabled: true
106
- horizontalAlign: stretch
107
- verticalAlign: stretch
108
- components:
109
- - id: game-flow
110
- type: user:GameFlow
111
- enabled: true
112
- config:
113
- introNode: intro-overlay
114
- endNode: end-screen
115
- autoWinAfterSec: 15
116
- skipIntro: false
117
- - id: game-rules
118
- type: user:GameRules
119
- enabled: true
120
- config:
121
- winMode: score
122
- targetScore: 10
123
- timeLimitSec: 0
124
- startingLives: 3
125
- resultLabel: end-label
126
- winText: "YOU WIN!"
127
- loseText: "GAME OVER"
128
- # The run starts when GameFlow leaves the tap gate, not when the scene loads.
129
- startWithFlow: true
130
- - id: score-hud
131
- type: user:ScoreHud
132
- enabled: true
133
- config:
134
- sourceNode: hud-root
135
- scoreLabel: score-label
136
- scoreFormat: "SCORE {value}"
137
- timeLabel: time-label
138
- timeFormat: "{value}"
139
- livesBar: lives-bar
140
- children:
141
- - id: hud-label
142
- type: Label2D
143
- name: HUD Label
144
- properties:
145
- label: "PROTOTYPE"
146
- labelFontSize: 40
147
- labelColor: "#ffffff"
148
- labelAlign: center
149
- transform:
150
- position: [0, 780]
151
- scale: [1, 1]
152
- rotation: 0
153
- layout:
154
- enabled: true
155
- horizontalAlign: center
156
- verticalAlign: top
157
- children: []
158
- - id: score-label
159
- type: Label2D
160
- name: Score Label
161
- properties:
162
- label: "SCORE 0"
163
- labelFontSize: 44
164
- labelColor: "#ffffff"
165
- labelAlign: left
166
- transform:
167
- position: [-340, 880]
168
- scale: [1, 1]
169
- rotation: 0
170
- layout:
171
- enabled: true
172
- horizontalAlign: left
173
- verticalAlign: top
174
- children: []
175
- - id: time-label
176
- type: Label2D
177
- name: Time Label
178
- properties:
179
- label: "0"
180
- labelFontSize: 44
181
- labelColor: "#f5ae39"
182
- labelAlign: center
183
- transform:
184
- position: [0, 880]
185
- scale: [1, 1]
186
- rotation: 0
187
- layout:
188
- enabled: true
189
- horizontalAlign: center
190
- verticalAlign: top
191
- children: []
192
- - id: lives-bar
193
- type: Bar2D
194
- name: Lives Bar
195
- properties:
196
- width: 240
197
- height: 28
198
- minValue: 0
199
- maxValue: 3
200
- value: 3
201
- barColor: "#ff4d6d"
202
- backBackgroundColor: "#2a3352"
203
- showBorder: false
204
- transform:
205
- position: [340, 885]
206
- scale: [1, 1]
207
- rotation: 0
208
- layout:
209
- enabled: true
210
- horizontalAlign: right
211
- verticalAlign: top
212
- children: []
213
- # Tap gate — authored in scenes/ui/intro.pix3scene so this scene opens on
214
- # the GAME. `visible: false` hides it in the EDITOR only; `initiallyVisible`
215
- # (in the overlay file) is what play mode reads. Tick the eye to preview it
216
- # composited over the stage.
217
- - id: intro-overlay
218
- name: Intro Overlay
219
- instance: res://scenes/ui/intro.pix3scene
220
- properties:
221
- visible: false
222
- # End screen — authored in scenes/ui/end-screen.pix3scene so this scene opens
223
- # on the GAME. `visible: false` hides it in the EDITOR only; `initiallyVisible`
224
- # (in the overlay file) is what play mode reads. Tick the eye to preview it
225
- # composited over the stage.
226
- - id: end-screen
227
- name: End Screen
228
- instance: res://scenes/ui/end-screen.pix3scene
229
- properties:
230
- visible: false
1
+ # Pix3 Scene File (YAML)
2
+ # Playable 3D blank (portrait 1080x1920): 3D gameplay placeholder plus a 2D UI
3
+ # layer with a tap-to-start intro overlay, a score/lives/time HUD, and an end
4
+ # screen with a CTA button. `hud-root` carries all three components: GameFlow
5
+ # (phases), GameRules (score/lives/win-lose) and ScoreHud (display only).
6
+ #
7
+ # Full-screen UI lives in its own file under scenes/ui/ and is instanced into
8
+ # `hud-root` hidden (`visible: false` = editor only; `initiallyVisible` in the
9
+ # overlay file is what play mode reads), so opening this scene shows the stage
10
+ # rather than a dim or a CTA card:
11
+ # intro-overlay (intro-dim, intro-label) scenes/ui/intro.pix3scene
12
+ # end-screen (end-dim, end-label, cta-button) scenes/ui/end-screen.pix3scene
13
+ # Instance children keep their ids, so `GameFlow`'s introNode/endNode,
14
+ # `GameRules`' resultLabel and every `findNode` still resolve.
15
+ version: 1.0.0
16
+ metadata:
17
+ author: Pix3 Template
18
+ description: Playable 3D blank with intro overlay and CTA end screen
19
+ root:
20
+ - id: game-root
21
+ type: Node3D
22
+ name: Game Root
23
+ properties:
24
+ transform:
25
+ position: [0, 0, 0]
26
+ rotationEuler: [0, 0, 0]
27
+ scale: [1, 1, 1]
28
+ children:
29
+ - id: main-camera
30
+ type: Camera3D
31
+ name: Main Camera
32
+ properties:
33
+ projection: perspective
34
+ fov: 60
35
+ near: 0.1
36
+ far: 1000
37
+ transform:
38
+ position: [0, 3, 8]
39
+ rotationEuler: [-15, 0, 0]
40
+ scale: [1, 1, 1]
41
+ children: []
42
+ - id: key-light
43
+ type: DirectionalLightNode
44
+ name: Key Light
45
+ properties:
46
+ intensity: 1.2
47
+ color: "#ffffff"
48
+ transform:
49
+ position: [5, 8, 3]
50
+ rotationEuler: [-45, 35, 0]
51
+ scale: [1, 1, 1]
52
+ children: []
53
+ - id: ambient-light
54
+ type: AmbientLightNode
55
+ name: Ambient Light
56
+ properties:
57
+ intensity: 0.5
58
+ color: "#ffffff"
59
+ transform:
60
+ position: [0, 0, 0]
61
+ rotationEuler: [0, 0, 0]
62
+ scale: [1, 1, 1]
63
+ children: []
64
+ - id: ground
65
+ type: GeometryMesh
66
+ name: Ground
67
+ properties:
68
+ geometry: box
69
+ size: [12, 0.2, 12]
70
+ material:
71
+ type: lambert
72
+ color: "#2a2a3e"
73
+ transform:
74
+ position: [0, -0.1, 0]
75
+ rotationEuler: [0, 0, 0]
76
+ scale: [1, 1, 1]
77
+ children: []
78
+ - id: hero-box
79
+ type: GeometryMesh
80
+ name: Hero Box
81
+ properties:
82
+ geometry: box
83
+ size: [1, 1, 1]
84
+ material:
85
+ type: lambert
86
+ color: "#ffcf33"
87
+ transform:
88
+ position: [0, 0.5, 0]
89
+ rotationEuler: [0, 45, 0]
90
+ scale: [1, 1, 1]
91
+ components:
92
+ - id: hero-rotate
93
+ type: core:Rotate
94
+ enabled: true
95
+ config: {}
96
+ children: []
97
+
98
+ - id: hud-root
99
+ type: Group2D
100
+ name: HUD Root
101
+ properties:
102
+ width: 1080
103
+ height: 1920
104
+ layout:
105
+ enabled: true
106
+ horizontalAlign: stretch
107
+ verticalAlign: stretch
108
+ components:
109
+ - id: game-flow
110
+ type: user:GameFlow
111
+ enabled: true
112
+ config:
113
+ introNode: intro-overlay
114
+ endNode: end-screen
115
+ autoWinAfterSec: 15
116
+ skipIntro: false
117
+ - id: game-rules
118
+ type: user:GameRules
119
+ enabled: true
120
+ config:
121
+ winMode: score
122
+ targetScore: 10
123
+ timeLimitSec: 0
124
+ startingLives: 3
125
+ resultLabel: end-label
126
+ winText: "YOU WIN!"
127
+ loseText: "GAME OVER"
128
+ # The run starts when GameFlow leaves the tap gate, not when the scene loads.
129
+ startWithFlow: true
130
+ - id: score-hud
131
+ type: user:ScoreHud
132
+ enabled: true
133
+ config:
134
+ sourceNode: hud-root
135
+ scoreLabel: score-label
136
+ scoreFormat: "SCORE {value}"
137
+ timeLabel: time-label
138
+ timeFormat: "{value}"
139
+ livesBar: lives-bar
140
+ children:
141
+ - id: hud-label
142
+ type: Label2D
143
+ name: HUD Label
144
+ properties:
145
+ label: "PROTOTYPE"
146
+ labelFontSize: 40
147
+ labelColor: "#ffffff"
148
+ labelAlign: center
149
+ transform:
150
+ position: [0, 780]
151
+ scale: [1, 1]
152
+ rotation: 0
153
+ layout:
154
+ enabled: true
155
+ horizontalAlign: center
156
+ verticalAlign: top
157
+ children: []
158
+ - id: score-label
159
+ type: Label2D
160
+ name: Score Label
161
+ properties:
162
+ label: "SCORE 0"
163
+ labelFontSize: 44
164
+ labelColor: "#ffffff"
165
+ labelAlign: left
166
+ transform:
167
+ position: [-340, 880]
168
+ scale: [1, 1]
169
+ rotation: 0
170
+ layout:
171
+ enabled: true
172
+ horizontalAlign: left
173
+ verticalAlign: top
174
+ children: []
175
+ - id: time-label
176
+ type: Label2D
177
+ name: Time Label
178
+ properties:
179
+ label: "0"
180
+ labelFontSize: 44
181
+ labelColor: "#f5ae39"
182
+ labelAlign: center
183
+ transform:
184
+ position: [0, 880]
185
+ scale: [1, 1]
186
+ rotation: 0
187
+ layout:
188
+ enabled: true
189
+ horizontalAlign: center
190
+ verticalAlign: top
191
+ children: []
192
+ - id: lives-bar
193
+ type: Bar2D
194
+ name: Lives Bar
195
+ properties:
196
+ width: 240
197
+ height: 28
198
+ minValue: 0
199
+ maxValue: 3
200
+ value: 3
201
+ barColor: "#ff4d6d"
202
+ backBackgroundColor: "#2a3352"
203
+ showBorder: false
204
+ transform:
205
+ position: [340, 885]
206
+ scale: [1, 1]
207
+ rotation: 0
208
+ layout:
209
+ enabled: true
210
+ horizontalAlign: right
211
+ verticalAlign: top
212
+ children: []
213
+ # Tap gate — authored in scenes/ui/intro.pix3scene so this scene opens on
214
+ # the GAME. `visible: false` hides it in the EDITOR only; `initiallyVisible`
215
+ # (in the overlay file) is what play mode reads. Tick the eye to preview it
216
+ # composited over the stage.
217
+ - id: intro-overlay
218
+ name: Intro Overlay
219
+ instance: res://scenes/ui/intro.pix3scene
220
+ properties:
221
+ visible: false
222
+ # End screen — authored in scenes/ui/end-screen.pix3scene so this scene opens
223
+ # on the GAME. `visible: false` hides it in the EDITOR only; `initiallyVisible`
224
+ # (in the overlay file) is what play mode reads. Tick the eye to preview it
225
+ # composited over the stage.
226
+ - id: end-screen
227
+ name: End Screen
228
+ instance: res://scenes/ui/end-screen.pix3scene
229
+ properties:
230
+ visible: false
@@ -1,91 +1,91 @@
1
- # Pix3 Scene File (YAML)
2
- # Playable 3D — the END screen (result + CTA), in its own file so the game
3
- # scene opens clean. `main.pix3scene` carries it as a one-line `instance:`
4
- # reference marked `visible: false`, which hides it in the EDITOR only;
5
- # `initiallyVisible: false` below is what play mode reads, and `user:GameFlow`
6
- # reveals it on `finish()`.
7
- #
8
- # Edit it here, full-screen, in its own tab. To preview it composited over the
9
- # game, tick the eye on `end-screen` in main.pix3scene — just do not commit
10
- # that tick, or every iteration starts behind a CTA card again.
11
- #
12
- # Stable node ids (design/recipe.md is the contract — do not rename these):
13
- # end-screen, end-dim, end-label, cta-button
14
- version: 1.0.0
15
- metadata:
16
- author: Pix3 Template
17
- description: End screen — dim, result headline and a PLAY NOW CTA button
18
- root:
19
- - id: end-screen
20
- type: Group2D
21
- name: End Screen
22
- properties:
23
- width: 1080
24
- height: 1920
25
- initiallyVisible: false
26
- layout:
27
- enabled: true
28
- horizontalAlign: stretch
29
- verticalAlign: stretch
30
- children:
31
- - id: end-dim
32
- type: ColorRect2D
33
- name: End Dim
34
- properties:
35
- width: 1080
36
- height: 1920
37
- color: "#000000"
38
- opacity: 0.75
39
- transform:
40
- position: [0, 0]
41
- scale: [1, 1]
42
- rotation: 0
43
- layout:
44
- enabled: true
45
- horizontalAlign: stretch
46
- verticalAlign: stretch
47
- children: []
48
- - id: end-label
49
- type: Label2D
50
- name: End Label
51
- properties:
52
- label: "GREAT RUN!"
53
- labelFontSize: 84
54
- labelColor: "#ffcf33"
55
- labelAlign: center
56
- transform:
57
- position: [0, 220]
58
- scale: [1, 1]
59
- rotation: 0
60
- layout:
61
- enabled: true
62
- horizontalAlign: center
63
- verticalAlign: center
64
- children: []
65
- - id: cta-button
66
- type: Button2D
67
- name: CTA Button
68
- properties:
69
- width: 480
70
- height: 140
71
- label: "PLAY NOW"
72
- labelFontSize: 56
73
- labelColor: "#1a1a2e"
74
- backgroundColor: "#ffcf33"
75
- hoverColor: "#ffe066"
76
- pressedColor: "#e6b800"
77
- buttonAction: cta
78
- transform:
79
- position: [0, -120]
80
- scale: [1, 1]
81
- rotation: 0
82
- layout:
83
- enabled: true
84
- horizontalAlign: center
85
- verticalAlign: center
86
- components:
87
- - id: cta-action
88
- type: user:CtaButton
89
- enabled: true
90
- config: {}
91
- children: []
1
+ # Pix3 Scene File (YAML)
2
+ # Playable 3D — the END screen (result + CTA), in its own file so the game
3
+ # scene opens clean. `main.pix3scene` carries it as a one-line `instance:`
4
+ # reference marked `visible: false`, which hides it in the EDITOR only;
5
+ # `initiallyVisible: false` below is what play mode reads, and `user:GameFlow`
6
+ # reveals it on `finish()`.
7
+ #
8
+ # Edit it here, full-screen, in its own tab. To preview it composited over the
9
+ # game, tick the eye on `end-screen` in main.pix3scene — just do not commit
10
+ # that tick, or every iteration starts behind a CTA card again.
11
+ #
12
+ # Stable node ids (design/recipe.md is the contract — do not rename these):
13
+ # end-screen, end-dim, end-label, cta-button
14
+ version: 1.0.0
15
+ metadata:
16
+ author: Pix3 Template
17
+ description: End screen — dim, result headline and a PLAY NOW CTA button
18
+ root:
19
+ - id: end-screen
20
+ type: Group2D
21
+ name: End Screen
22
+ properties:
23
+ width: 1080
24
+ height: 1920
25
+ initiallyVisible: false
26
+ layout:
27
+ enabled: true
28
+ horizontalAlign: stretch
29
+ verticalAlign: stretch
30
+ children:
31
+ - id: end-dim
32
+ type: ColorRect2D
33
+ name: End Dim
34
+ properties:
35
+ width: 1080
36
+ height: 1920
37
+ color: "#000000"
38
+ opacity: 0.75
39
+ transform:
40
+ position: [0, 0]
41
+ scale: [1, 1]
42
+ rotation: 0
43
+ layout:
44
+ enabled: true
45
+ horizontalAlign: stretch
46
+ verticalAlign: stretch
47
+ children: []
48
+ - id: end-label
49
+ type: Label2D
50
+ name: End Label
51
+ properties:
52
+ label: "GREAT RUN!"
53
+ labelFontSize: 84
54
+ labelColor: "#ffcf33"
55
+ labelAlign: center
56
+ transform:
57
+ position: [0, 220]
58
+ scale: [1, 1]
59
+ rotation: 0
60
+ layout:
61
+ enabled: true
62
+ horizontalAlign: center
63
+ verticalAlign: center
64
+ children: []
65
+ - id: cta-button
66
+ type: Button2D
67
+ name: CTA Button
68
+ properties:
69
+ width: 480
70
+ height: 140
71
+ label: "PLAY NOW"
72
+ labelFontSize: 56
73
+ labelColor: "#1a1a2e"
74
+ backgroundColor: "#ffcf33"
75
+ hoverColor: "#ffe066"
76
+ pressedColor: "#e6b800"
77
+ buttonAction: cta
78
+ transform:
79
+ position: [0, -120]
80
+ scale: [1, 1]
81
+ rotation: 0
82
+ layout:
83
+ enabled: true
84
+ horizontalAlign: center
85
+ verticalAlign: center
86
+ components:
87
+ - id: cta-action
88
+ type: user:CtaButton
89
+ enabled: true
90
+ config: {}
91
+ children: []