@almadar/std 2.1.1 → 2.4.1

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 (86) hide show
  1. package/dist/behaviors/async.d.ts +12 -7
  2. package/dist/behaviors/async.js +1085 -312
  3. package/dist/behaviors/async.js.map +1 -1
  4. package/dist/behaviors/data-management.d.ts +27 -13
  5. package/dist/behaviors/data-management.js +600 -244
  6. package/dist/behaviors/data-management.js.map +1 -1
  7. package/dist/behaviors/domain/commerce.d.ts +51 -0
  8. package/dist/behaviors/domain/commerce.js +1093 -0
  9. package/dist/behaviors/domain/commerce.js.map +1 -0
  10. package/dist/behaviors/domain/content.d.ts +51 -0
  11. package/dist/behaviors/domain/content.js +1294 -0
  12. package/dist/behaviors/domain/content.js.map +1 -0
  13. package/dist/behaviors/domain/dashboard.d.ts +45 -0
  14. package/dist/behaviors/domain/dashboard.js +783 -0
  15. package/dist/behaviors/domain/dashboard.js.map +1 -0
  16. package/dist/behaviors/domain/education.d.ts +41 -0
  17. package/dist/behaviors/domain/education.js +738 -0
  18. package/dist/behaviors/domain/education.js.map +1 -0
  19. package/dist/behaviors/domain/finance.d.ts +49 -0
  20. package/dist/behaviors/domain/finance.js +660 -0
  21. package/dist/behaviors/domain/finance.js.map +1 -0
  22. package/dist/behaviors/domain/game-2d-platformer.d.ts +50 -0
  23. package/dist/behaviors/domain/game-2d-platformer.js +810 -0
  24. package/dist/behaviors/domain/game-2d-platformer.js.map +1 -0
  25. package/dist/behaviors/domain/game-2d-puzzle.d.ts +42 -0
  26. package/dist/behaviors/domain/game-2d-puzzle.js +622 -0
  27. package/dist/behaviors/domain/game-2d-puzzle.js.map +1 -0
  28. package/dist/behaviors/domain/game-2d-rpg.d.ts +48 -0
  29. package/dist/behaviors/domain/game-2d-rpg.js +860 -0
  30. package/dist/behaviors/domain/game-2d-rpg.js.map +1 -0
  31. package/dist/behaviors/domain/game-2d-strategy.d.ts +48 -0
  32. package/dist/behaviors/domain/game-2d-strategy.js +692 -0
  33. package/dist/behaviors/domain/game-2d-strategy.js.map +1 -0
  34. package/dist/behaviors/domain/geospatial.d.ts +35 -0
  35. package/dist/behaviors/domain/geospatial.js +634 -0
  36. package/dist/behaviors/domain/geospatial.js.map +1 -0
  37. package/dist/behaviors/domain/healthcare.d.ts +36 -0
  38. package/dist/behaviors/domain/healthcare.js +1068 -0
  39. package/dist/behaviors/domain/healthcare.js.map +1 -0
  40. package/dist/behaviors/domain/iot.d.ts +45 -0
  41. package/dist/behaviors/domain/iot.js +589 -0
  42. package/dist/behaviors/domain/iot.js.map +1 -0
  43. package/dist/behaviors/domain/media.d.ts +41 -0
  44. package/dist/behaviors/domain/media.js +771 -0
  45. package/dist/behaviors/domain/media.js.map +1 -0
  46. package/dist/behaviors/domain/scheduling.d.ts +41 -0
  47. package/dist/behaviors/domain/scheduling.js +930 -0
  48. package/dist/behaviors/domain/scheduling.js.map +1 -0
  49. package/dist/behaviors/domain/simulation.d.ts +36 -0
  50. package/dist/behaviors/domain/simulation.js +706 -0
  51. package/dist/behaviors/domain/simulation.js.map +1 -0
  52. package/dist/behaviors/domain/social.d.ts +41 -0
  53. package/dist/behaviors/domain/social.js +840 -0
  54. package/dist/behaviors/domain/social.js.map +1 -0
  55. package/dist/behaviors/domain/workflow.d.ts +41 -0
  56. package/dist/behaviors/domain/workflow.js +879 -0
  57. package/dist/behaviors/domain/workflow.js.map +1 -0
  58. package/dist/behaviors/feedback.d.ts +10 -5
  59. package/dist/behaviors/feedback.js +279 -194
  60. package/dist/behaviors/feedback.js.map +1 -1
  61. package/dist/behaviors/game-core.d.ts +15 -8
  62. package/dist/behaviors/game-core.js +412 -80
  63. package/dist/behaviors/game-core.js.map +1 -1
  64. package/dist/behaviors/game-entity.d.ts +17 -10
  65. package/dist/behaviors/game-entity.js +544 -237
  66. package/dist/behaviors/game-entity.js.map +1 -1
  67. package/dist/behaviors/game-ui.d.ts +16 -8
  68. package/dist/behaviors/game-ui.js +451 -316
  69. package/dist/behaviors/game-ui.js.map +1 -1
  70. package/dist/behaviors/index.d.ts +18 -1
  71. package/dist/behaviors/index.js +18905 -2140
  72. package/dist/behaviors/index.js.map +1 -1
  73. package/dist/behaviors/infrastructure.d.ts +9 -8
  74. package/dist/behaviors/infrastructure.js +597 -169
  75. package/dist/behaviors/infrastructure.js.map +1 -1
  76. package/dist/behaviors/registry.d.ts +11 -11
  77. package/dist/behaviors/registry.js +18904 -2139
  78. package/dist/behaviors/registry.js.map +1 -1
  79. package/dist/behaviors/types.d.ts +19 -2
  80. package/dist/behaviors/types.js.map +1 -1
  81. package/dist/behaviors/ui-interaction.d.ts +20 -14
  82. package/dist/behaviors/ui-interaction.js +928 -518
  83. package/dist/behaviors/ui-interaction.js.map +1 -1
  84. package/dist/index.js +18906 -2141
  85. package/dist/index.js.map +1 -1
  86. package/package.json +1 -1
@@ -1,4 +1,223 @@
1
1
  // behaviors/game-core.ts
2
+ var GAME_CORE_THEME = {
3
+ name: "game-core-cyan",
4
+ tokens: {
5
+ colors: {
6
+ primary: "#0891b2",
7
+ "primary-hover": "#0e7490",
8
+ "primary-foreground": "#ffffff",
9
+ accent: "#06b6d4",
10
+ "accent-foreground": "#000000",
11
+ success: "#22c55e",
12
+ warning: "#f59e0b",
13
+ error: "#ef4444"
14
+ }
15
+ }
16
+ };
17
+ var KFLOW_ASSETS = "https://almadar-kflow-assets.web.app/shared";
18
+ var GAME_MANIFEST = {
19
+ terrain: {
20
+ stone: "/terrain/Isometric/stoneSide_N.png",
21
+ dirt: "/terrain/Isometric/dirt_N.png",
22
+ bridge: "/terrain/Isometric/stoneStep_N.png",
23
+ wall: "/terrain/Isometric/stoneWallArchway_N.png"
24
+ },
25
+ units: {
26
+ guardian: "/sprite-sheets/guardian-sprite-sheet-se.png",
27
+ breaker: "/sprite-sheets/breaker-sprite-sheet-se.png"
28
+ },
29
+ features: {
30
+ gold_mine: "/world-map/gold_mine.png",
31
+ portal: "/world-map/portal_open.png"
32
+ }
33
+ };
34
+ var TILES_5X5 = [
35
+ { x: 0, y: 0, terrain: "stone" },
36
+ { x: 1, y: 0, terrain: "dirt" },
37
+ { x: 2, y: 0, terrain: "stone" },
38
+ { x: 3, y: 0, terrain: "dirt" },
39
+ { x: 4, y: 0, terrain: "stone" },
40
+ { x: 0, y: 1, terrain: "dirt" },
41
+ { x: 1, y: 1, terrain: "stone" },
42
+ { x: 2, y: 1, terrain: "dirt" },
43
+ { x: 3, y: 1, terrain: "stone" },
44
+ { x: 4, y: 1, terrain: "dirt" },
45
+ { x: 0, y: 2, terrain: "stone" },
46
+ { x: 1, y: 2, terrain: "dirt" },
47
+ { x: 2, y: 2, terrain: "bridge" },
48
+ { x: 3, y: 2, terrain: "dirt" },
49
+ { x: 4, y: 2, terrain: "stone" },
50
+ { x: 0, y: 3, terrain: "dirt" },
51
+ { x: 1, y: 3, terrain: "stone" },
52
+ { x: 2, y: 3, terrain: "dirt" },
53
+ { x: 3, y: 3, terrain: "stone" },
54
+ { x: 4, y: 3, terrain: "dirt" },
55
+ { x: 0, y: 4, terrain: "stone" },
56
+ { x: 1, y: 4, terrain: "dirt" },
57
+ { x: 2, y: 4, terrain: "stone" },
58
+ { x: 3, y: 4, terrain: "wall" },
59
+ { x: 4, y: 4, terrain: "stone" }
60
+ ];
61
+ var gameLoopCanvasView = ["render-ui", "main", {
62
+ type: "isometric-canvas",
63
+ tiles: TILES_5X5,
64
+ units: [{ id: "player", x: 2, y: 2, unitType: "guardian" }],
65
+ scale: 0.5,
66
+ boardWidth: 5,
67
+ boardHeight: 5,
68
+ enableCamera: true,
69
+ assetBaseUrl: KFLOW_ASSETS,
70
+ assetManifest: GAME_MANIFEST,
71
+ tileClickEvent: "START"
72
+ }];
73
+ var gameLoopHudView = ["render-ui", "overlay", {
74
+ type: "stack",
75
+ direction: "vertical",
76
+ gap: "sm",
77
+ children: [
78
+ { type: "game-hud", position: "top", elements: [
79
+ { label: "Frame", value: "@entity.frameCount", icon: "hash" },
80
+ { label: "Delta", value: "@entity.deltaTime", icon: "clock" },
81
+ { label: "Elapsed", value: "@entity.elapsedTime", icon: "timer" }
82
+ ] },
83
+ { type: "stack", direction: "horizontal", gap: "sm", children: [
84
+ { type: "button", label: "Start", action: "START", icon: "play", variant: "primary" },
85
+ { type: "button", label: "Pause", action: "PAUSE", icon: "pause", variant: "secondary" },
86
+ { type: "button", label: "Stop", action: "STOP", icon: "square", variant: "destructive" }
87
+ ] }
88
+ ]
89
+ }];
90
+ var physicsCanvasView = ["render-ui", "main", {
91
+ type: "simulation-canvas",
92
+ preset: "projectile",
93
+ running: true,
94
+ width: 600,
95
+ height: 400
96
+ }];
97
+ var physicsHudView = ["render-ui", "overlay", {
98
+ type: "stack",
99
+ direction: "vertical",
100
+ gap: "sm",
101
+ children: [
102
+ { type: "stack", direction: "horizontal", gap: "sm", children: [
103
+ { type: "badge", label: "X", value: "@entity.x", icon: "move-horizontal" },
104
+ { type: "badge", label: "Y", value: "@entity.y", icon: "move-vertical" },
105
+ { type: "badge", label: "VX", value: "@entity.vx", icon: "arrow-right" },
106
+ { type: "badge", label: "VY", value: "@entity.vy", icon: "arrow-down" }
107
+ ] },
108
+ { type: "stack", direction: "horizontal", gap: "sm", children: [
109
+ { type: "button", label: "Apply Force", action: "APPLY_FORCE", icon: "zap", variant: "primary" },
110
+ { type: "button", label: "Freeze", action: "FREEZE", icon: "snowflake", variant: "secondary" }
111
+ ] }
112
+ ]
113
+ }];
114
+ var physicsFrozenCanvasView = ["render-ui", "main", {
115
+ type: "simulation-canvas",
116
+ preset: "projectile",
117
+ running: false,
118
+ width: 600,
119
+ height: 400
120
+ }];
121
+ var physicsFrozenHudView = ["render-ui", "overlay", {
122
+ type: "stack",
123
+ direction: "vertical",
124
+ gap: "sm",
125
+ children: [
126
+ { type: "stack", direction: "horizontal", gap: "sm", children: [
127
+ { type: "badge", label: "X", value: "@entity.x", icon: "move-horizontal" },
128
+ { type: "badge", label: "Y", value: "@entity.y", icon: "move-vertical" },
129
+ { type: "badge", label: "VX", value: "@entity.vx", icon: "arrow-right" },
130
+ { type: "badge", label: "VY", value: "@entity.vy", icon: "arrow-down" }
131
+ ] },
132
+ { type: "stack", direction: "horizontal", gap: "sm", children: [
133
+ { type: "button", label: "Unfreeze", action: "UNFREEZE", icon: "flame", variant: "primary" }
134
+ ] }
135
+ ]
136
+ }];
137
+ var inputCanvasView = ["render-ui", "main", {
138
+ type: "isometric-canvas",
139
+ tiles: TILES_5X5,
140
+ units: [{ id: "cursor", x: 2, y: 2, unitType: "breaker" }],
141
+ scale: 0.5,
142
+ boardWidth: 5,
143
+ boardHeight: 5,
144
+ enableCamera: true,
145
+ assetBaseUrl: KFLOW_ASSETS,
146
+ assetManifest: GAME_MANIFEST
147
+ }];
148
+ var inputHudView = ["render-ui", "overlay", {
149
+ type: "stack",
150
+ direction: "vertical",
151
+ gap: "sm",
152
+ children: [
153
+ { type: "stack", direction: "horizontal", gap: "sm", children: [
154
+ { type: "badge", label: "Key Down", value: "@entity.lastKeyDown", icon: "arrow-down-circle" },
155
+ { type: "badge", label: "Key Up", value: "@entity.lastKeyUp", icon: "arrow-up-circle" },
156
+ { type: "badge", label: "Active", value: "@entity.isActive", icon: "activity" }
157
+ ] },
158
+ { type: "stack", direction: "horizontal", gap: "sm", children: [
159
+ { type: "button", label: "Reset", action: "RESET", icon: "rotate-ccw", variant: "secondary" }
160
+ ] }
161
+ ]
162
+ }];
163
+ var collisionCanvasView = ["render-ui", "main", {
164
+ type: "isometric-canvas",
165
+ tiles: TILES_5X5,
166
+ units: [],
167
+ scale: 0.5,
168
+ boardWidth: 5,
169
+ boardHeight: 5,
170
+ enableCamera: true,
171
+ assetBaseUrl: KFLOW_ASSETS,
172
+ assetManifest: GAME_MANIFEST
173
+ }];
174
+ var collisionHudView = ["render-ui", "overlay", {
175
+ type: "stack",
176
+ direction: "vertical",
177
+ gap: "sm",
178
+ children: [
179
+ { type: "stack", direction: "horizontal", gap: "sm", children: [
180
+ { type: "badge", label: "Colliding", value: "@entity.isColliding", icon: "alert-triangle" },
181
+ { type: "badge", label: "Last Hit", value: "@entity.lastCollisionId", icon: "target" }
182
+ ] },
183
+ { type: "stack", direction: "horizontal", gap: "sm", children: [
184
+ { type: "button", label: "Clear", action: "CLEAR", icon: "x-circle", variant: "secondary" },
185
+ { type: "button", label: "Disable", action: "DISABLE", icon: "circle-off", variant: "destructive" }
186
+ ] }
187
+ ]
188
+ }];
189
+ var collisionHitEffectView = ["render-ui", "overlay", {
190
+ type: "canvas-effect",
191
+ actionType: "hit",
192
+ x: 200,
193
+ y: 200,
194
+ duration: 600
195
+ }];
196
+ var collisionDisabledCanvasView = ["render-ui", "main", {
197
+ type: "isometric-canvas",
198
+ tiles: TILES_5X5,
199
+ units: [],
200
+ scale: 0.5,
201
+ boardWidth: 5,
202
+ boardHeight: 5,
203
+ enableCamera: true,
204
+ assetBaseUrl: KFLOW_ASSETS,
205
+ assetManifest: GAME_MANIFEST
206
+ }];
207
+ var collisionDisabledHudView = ["render-ui", "overlay", {
208
+ type: "stack",
209
+ direction: "vertical",
210
+ gap: "sm",
211
+ children: [
212
+ { type: "stack", direction: "horizontal", gap: "sm", children: [
213
+ { type: "badge", label: "Colliding", value: "@entity.isColliding", icon: "alert-triangle" },
214
+ { type: "badge", label: "Last Hit", value: "@entity.lastCollisionId", icon: "target" }
215
+ ] },
216
+ { type: "stack", direction: "horizontal", gap: "sm", children: [
217
+ { type: "button", label: "Enable", action: "ENABLE", icon: "circle-dot", variant: "primary" }
218
+ ] }
219
+ ]
220
+ }];
2
221
  var GAME_LOOP_BEHAVIOR = {
3
222
  name: "std-gameloop",
4
223
  version: "1.0.0",
@@ -6,20 +225,22 @@ var GAME_LOOP_BEHAVIOR = {
6
225
  orbitals: [
7
226
  {
8
227
  name: "GameLoopOrbital",
228
+ theme: GAME_CORE_THEME,
9
229
  entity: {
10
- name: "GameLoopState",
230
+ name: "GameLoopData",
11
231
  persistence: "runtime",
12
232
  fields: [
13
233
  { name: "id", type: "string", required: true },
14
234
  { name: "frameCount", type: "number", default: 0 },
15
235
  { name: "deltaTime", type: "number", default: 16 },
16
- { name: "elapsedTime", type: "number", default: 0 }
236
+ { name: "elapsedTime", type: "number", default: 0 },
237
+ { name: "status", type: "string", default: "stopped" }
17
238
  ]
18
239
  },
19
240
  traits: [
20
241
  {
21
242
  name: "GameLoop",
22
- linkedEntity: "GameLoopState",
243
+ linkedEntity: "GameLoopData",
23
244
  category: "interaction",
24
245
  stateMachine: {
25
246
  states: [
@@ -28,45 +249,82 @@ var GAME_LOOP_BEHAVIOR = {
28
249
  { name: "Paused" }
29
250
  ],
30
251
  events: [
252
+ { key: "INIT", name: "Initialize" },
31
253
  { key: "START", name: "Start" },
32
254
  { key: "STOP", name: "Stop" },
33
255
  { key: "PAUSE", name: "Pause" },
34
- { key: "RESUME", name: "Resume" },
35
- { key: "TICK", name: "Tick" }
256
+ { key: "RESUME", name: "Resume" }
36
257
  ],
37
258
  transitions: [
259
+ {
260
+ from: "Stopped",
261
+ to: "Stopped",
262
+ event: "INIT",
263
+ effects: [
264
+ ["fetch", "GameLoopData"],
265
+ ["set", "@entity.frameCount", 0],
266
+ ["set", "@entity.elapsedTime", 0],
267
+ ["set", "@entity.status", "stopped"],
268
+ gameLoopCanvasView,
269
+ gameLoopHudView
270
+ ]
271
+ },
38
272
  {
39
273
  from: "Stopped",
40
274
  to: "Running",
41
275
  event: "START",
42
276
  effects: [
277
+ ["fetch", "GameLoopData"],
43
278
  ["set", "@entity.frameCount", 0],
44
- ["set", "@entity.elapsedTime", 0]
279
+ ["set", "@entity.elapsedTime", 0],
280
+ ["set", "@entity.status", "running"],
281
+ gameLoopCanvasView,
282
+ gameLoopHudView
45
283
  ]
46
284
  },
47
285
  {
48
286
  from: "Running",
49
287
  to: "Paused",
50
288
  event: "PAUSE",
51
- effects: []
289
+ effects: [
290
+ ["fetch", "GameLoopData"],
291
+ ["set", "@entity.status", "paused"],
292
+ gameLoopCanvasView,
293
+ gameLoopHudView
294
+ ]
52
295
  },
53
296
  {
54
297
  from: "Paused",
55
298
  to: "Running",
56
299
  event: "RESUME",
57
- effects: []
300
+ effects: [
301
+ ["fetch", "GameLoopData"],
302
+ ["set", "@entity.status", "running"],
303
+ gameLoopCanvasView,
304
+ gameLoopHudView
305
+ ]
58
306
  },
59
307
  {
60
308
  from: "Running",
61
309
  to: "Stopped",
62
310
  event: "STOP",
63
- effects: []
311
+ effects: [
312
+ ["fetch", "GameLoopData"],
313
+ ["set", "@entity.status", "stopped"],
314
+ gameLoopCanvasView,
315
+ gameLoopHudView
316
+ ]
64
317
  },
65
318
  {
66
319
  from: "Paused",
67
320
  to: "Stopped",
68
321
  event: "STOP",
69
- effects: []
322
+ effects: [
323
+ ["fetch", "GameLoopData"],
324
+ ["set", "@entity.status", "stopped"],
325
+ gameLoopCanvasView,
326
+ gameLoopHudView
327
+ ]
70
328
  }
71
329
  ]
72
330
  },
@@ -77,14 +335,20 @@ var GAME_LOOP_BEHAVIOR = {
77
335
  guard: ["=", "@state", "Running"],
78
336
  effects: [
79
337
  ["set", "@entity.frameCount", ["+", "@entity.frameCount", 1]],
80
- ["set", "@entity.elapsedTime", ["+", "@entity.elapsedTime", "@entity.deltaTime"]],
81
- ["emit", "GAME_TICK", { frame: "@entity.frameCount", delta: "@entity.deltaTime" }]
338
+ ["set", "@entity.elapsedTime", ["+", "@entity.elapsedTime", "@entity.deltaTime"]]
82
339
  ]
83
340
  }
84
341
  ]
85
342
  }
86
343
  ],
87
- pages: []
344
+ pages: [
345
+ {
346
+ name: "GameLoopPage",
347
+ path: "/game-loop",
348
+ isInitial: true,
349
+ traits: [{ ref: "GameLoop" }]
350
+ }
351
+ ]
88
352
  }
89
353
  ]
90
354
  };
@@ -95,8 +359,9 @@ var PHYSICS_2D_BEHAVIOR = {
95
359
  orbitals: [
96
360
  {
97
361
  name: "Physics2DOrbital",
362
+ theme: GAME_CORE_THEME,
98
363
  entity: {
99
- name: "Physics2DState",
364
+ name: "Physics2DData",
100
365
  persistence: "runtime",
101
366
  fields: [
102
367
  { name: "id", type: "string", required: true },
@@ -104,8 +369,9 @@ var PHYSICS_2D_BEHAVIOR = {
104
369
  { name: "y", type: "number", default: 0 },
105
370
  { name: "vx", type: "number", default: 0 },
106
371
  { name: "vy", type: "number", default: 0 },
372
+ { name: "fx", type: "number", default: 0 },
373
+ { name: "fy", type: "number", default: 0 },
107
374
  { name: "isGrounded", type: "boolean", default: false },
108
- // Config fields (previously @config bindings)
109
375
  { name: "gravity", type: "number", default: 0.5 },
110
376
  { name: "friction", type: "number", default: 0.8 },
111
377
  { name: "airResistance", type: "number", default: 0.99 },
@@ -115,7 +381,7 @@ var PHYSICS_2D_BEHAVIOR = {
115
381
  traits: [
116
382
  {
117
383
  name: "Physics2D",
118
- linkedEntity: "Physics2DState",
384
+ linkedEntity: "Physics2DData",
119
385
  category: "interaction",
120
386
  stateMachine: {
121
387
  states: [
@@ -124,7 +390,10 @@ var PHYSICS_2D_BEHAVIOR = {
124
390
  ],
125
391
  events: [
126
392
  { key: "INIT", name: "Initialize" },
127
- { key: "APPLY_FORCE", name: "Apply Force" },
393
+ { key: "APPLY_FORCE", name: "Apply Force", payloadSchema: [
394
+ { name: "fx", type: "number", required: true },
395
+ { name: "fy", type: "number", required: true }
396
+ ] },
128
397
  { key: "GROUND_HIT", name: "Ground Hit" },
129
398
  { key: "FREEZE", name: "Freeze" },
130
399
  { key: "UNFREEZE", name: "Unfreeze" }
@@ -135,9 +404,12 @@ var PHYSICS_2D_BEHAVIOR = {
135
404
  to: "Active",
136
405
  event: "INIT",
137
406
  effects: [
407
+ ["fetch", "Physics2DData"],
138
408
  ["set", "@entity.vx", 0],
139
409
  ["set", "@entity.vy", 0],
140
- ["set", "@entity.isGrounded", false]
410
+ ["set", "@entity.isGrounded", false],
411
+ physicsCanvasView,
412
+ physicsHudView
141
413
  ]
142
414
  },
143
415
  {
@@ -145,9 +417,12 @@ var PHYSICS_2D_BEHAVIOR = {
145
417
  to: "Active",
146
418
  event: "INIT",
147
419
  effects: [
420
+ ["fetch", "Physics2DData"],
148
421
  ["set", "@entity.vx", 0],
149
422
  ["set", "@entity.vy", 0],
150
- ["set", "@entity.isGrounded", false]
423
+ ["set", "@entity.isGrounded", false],
424
+ physicsCanvasView,
425
+ physicsHudView
151
426
  ]
152
427
  },
153
428
  {
@@ -155,8 +430,11 @@ var PHYSICS_2D_BEHAVIOR = {
155
430
  to: "Active",
156
431
  event: "APPLY_FORCE",
157
432
  effects: [
433
+ ["fetch", "Physics2DData"],
158
434
  ["set", "@entity.vx", ["+", "@entity.vx", "@payload.fx"]],
159
- ["set", "@entity.vy", ["+", "@entity.vy", "@payload.fy"]]
435
+ ["set", "@entity.vy", ["+", "@entity.vy", "@payload.fy"]],
436
+ physicsCanvasView,
437
+ physicsHudView
160
438
  ]
161
439
  },
162
440
  {
@@ -164,22 +442,33 @@ var PHYSICS_2D_BEHAVIOR = {
164
442
  to: "Active",
165
443
  event: "GROUND_HIT",
166
444
  effects: [
445
+ ["fetch", "Physics2DData"],
167
446
  ["set", "@entity.isGrounded", true],
168
447
  ["set", "@entity.vy", 0],
169
- ["set", "@entity.vx", ["*", "@entity.vx", "@entity.friction"]]
448
+ ["set", "@entity.vx", ["*", "@entity.vx", "@entity.friction"]],
449
+ physicsCanvasView,
450
+ physicsHudView
170
451
  ]
171
452
  },
172
453
  {
173
454
  from: "Active",
174
455
  to: "Frozen",
175
456
  event: "FREEZE",
176
- effects: []
457
+ effects: [
458
+ ["fetch", "Physics2DData"],
459
+ physicsFrozenCanvasView,
460
+ physicsFrozenHudView
461
+ ]
177
462
  },
178
463
  {
179
464
  from: "Frozen",
180
465
  to: "Active",
181
466
  event: "UNFREEZE",
182
- effects: []
467
+ effects: [
468
+ ["fetch", "Physics2DData"],
469
+ physicsCanvasView,
470
+ physicsHudView
471
+ ]
183
472
  }
184
473
  ]
185
474
  },
@@ -205,7 +494,14 @@ var PHYSICS_2D_BEHAVIOR = {
205
494
  ]
206
495
  }
207
496
  ],
208
- pages: []
497
+ pages: [
498
+ {
499
+ name: "PhysicsPage",
500
+ path: "/physics",
501
+ isInitial: true,
502
+ traits: [{ ref: "Physics2D" }]
503
+ }
504
+ ]
209
505
  }
210
506
  ]
211
507
  };
@@ -216,47 +512,57 @@ var INPUT_BEHAVIOR = {
216
512
  orbitals: [
217
513
  {
218
514
  name: "InputOrbital",
515
+ theme: GAME_CORE_THEME,
219
516
  entity: {
220
- name: "InputState",
517
+ name: "InputData",
221
518
  persistence: "runtime",
222
519
  fields: [
223
520
  { name: "id", type: "string", required: true },
224
- { name: "left", type: "boolean", default: false },
225
- { name: "right", type: "boolean", default: false },
226
- { name: "up", type: "boolean", default: false },
227
- { name: "down", type: "boolean", default: false },
228
- { name: "jump", type: "boolean", default: false },
229
- { name: "action", type: "boolean", default: false },
230
- { name: "pause", type: "boolean", default: false }
521
+ { name: "lastKeyDown", type: "string", default: "" },
522
+ { name: "lastKeyUp", type: "string", default: "" },
523
+ { name: "isActive", type: "boolean", default: true }
231
524
  ]
232
525
  },
233
526
  traits: [
234
527
  {
235
528
  name: "Input",
236
- linkedEntity: "InputState",
529
+ linkedEntity: "InputData",
237
530
  category: "interaction",
238
531
  stateMachine: {
239
532
  states: [{ name: "Ready", isInitial: true }],
240
533
  events: [
241
- { key: "KEY_DOWN", name: "Key Down" },
242
- { key: "KEY_UP", name: "Key Up" },
243
- { key: "TOUCH_START", name: "Touch Start" },
244
- { key: "TOUCH_END", name: "Touch End" },
534
+ { key: "INIT", name: "Initialize" },
535
+ { key: "KEY_DOWN", name: "Key Down", payloadSchema: [
536
+ { name: "key", type: "string", required: true }
537
+ ] },
538
+ { key: "KEY_UP", name: "Key Up", payloadSchema: [
539
+ { name: "key", type: "string", required: true }
540
+ ] },
245
541
  { key: "RESET", name: "Reset" }
246
542
  ],
247
543
  transitions: [
544
+ {
545
+ from: "Ready",
546
+ to: "Ready",
547
+ event: "INIT",
548
+ effects: [
549
+ ["fetch", "InputData"],
550
+ ["set", "@entity.lastKeyDown", ""],
551
+ ["set", "@entity.lastKeyUp", ""],
552
+ ["set", "@entity.isActive", true],
553
+ inputCanvasView,
554
+ inputHudView
555
+ ]
556
+ },
248
557
  {
249
558
  from: "Ready",
250
559
  to: "Ready",
251
560
  event: "KEY_DOWN",
252
561
  effects: [
253
- ["if", ["or", ["=", "@payload.key", "ArrowLeft"], ["=", "@payload.key", "a"]], ["set", "@entity.left", true]],
254
- ["if", ["or", ["=", "@payload.key", "ArrowRight"], ["=", "@payload.key", "d"]], ["set", "@entity.right", true]],
255
- ["if", ["or", ["=", "@payload.key", "ArrowUp"], ["=", "@payload.key", "w"]], ["set", "@entity.up", true]],
256
- ["if", ["or", ["=", "@payload.key", "ArrowDown"], ["=", "@payload.key", "s"]], ["set", "@entity.down", true]],
257
- ["if", ["=", "@payload.key", " "], ["set", "@entity.jump", true]],
258
- ["if", ["or", ["=", "@payload.key", "Enter"], ["=", "@payload.key", "e"]], ["set", "@entity.action", true]],
259
- ["if", ["or", ["=", "@payload.key", "Escape"], ["=", "@payload.key", "p"]], ["set", "@entity.pause", true]]
562
+ ["fetch", "InputData"],
563
+ ["set", "@entity.lastKeyDown", "@payload.key"],
564
+ inputCanvasView,
565
+ inputHudView
260
566
  ]
261
567
  },
262
568
  {
@@ -264,13 +570,10 @@ var INPUT_BEHAVIOR = {
264
570
  to: "Ready",
265
571
  event: "KEY_UP",
266
572
  effects: [
267
- ["if", ["or", ["=", "@payload.key", "ArrowLeft"], ["=", "@payload.key", "a"]], ["set", "@entity.left", false]],
268
- ["if", ["or", ["=", "@payload.key", "ArrowRight"], ["=", "@payload.key", "d"]], ["set", "@entity.right", false]],
269
- ["if", ["or", ["=", "@payload.key", "ArrowUp"], ["=", "@payload.key", "w"]], ["set", "@entity.up", false]],
270
- ["if", ["or", ["=", "@payload.key", "ArrowDown"], ["=", "@payload.key", "s"]], ["set", "@entity.down", false]],
271
- ["if", ["=", "@payload.key", " "], ["set", "@entity.jump", false]],
272
- ["if", ["or", ["=", "@payload.key", "Enter"], ["=", "@payload.key", "e"]], ["set", "@entity.action", false]],
273
- ["if", ["or", ["=", "@payload.key", "Escape"], ["=", "@payload.key", "p"]], ["set", "@entity.pause", false]]
573
+ ["fetch", "InputData"],
574
+ ["set", "@entity.lastKeyUp", "@payload.key"],
575
+ inputCanvasView,
576
+ inputHudView
274
577
  ]
275
578
  },
276
579
  {
@@ -278,20 +581,25 @@ var INPUT_BEHAVIOR = {
278
581
  to: "Ready",
279
582
  event: "RESET",
280
583
  effects: [
281
- ["set", "@entity.left", false],
282
- ["set", "@entity.right", false],
283
- ["set", "@entity.up", false],
284
- ["set", "@entity.down", false],
285
- ["set", "@entity.jump", false],
286
- ["set", "@entity.action", false],
287
- ["set", "@entity.pause", false]
584
+ ["fetch", "InputData"],
585
+ ["set", "@entity.lastKeyDown", ""],
586
+ ["set", "@entity.lastKeyUp", ""],
587
+ inputCanvasView,
588
+ inputHudView
288
589
  ]
289
590
  }
290
591
  ]
291
592
  }
292
593
  }
293
594
  ],
294
- pages: []
595
+ pages: [
596
+ {
597
+ name: "InputPage",
598
+ path: "/input",
599
+ isInitial: true,
600
+ traits: [{ ref: "Input" }]
601
+ }
602
+ ]
295
603
  }
296
604
  ]
297
605
  };
@@ -302,22 +610,20 @@ var COLLISION_BEHAVIOR = {
302
610
  orbitals: [
303
611
  {
304
612
  name: "CollisionOrbital",
613
+ theme: GAME_CORE_THEME,
305
614
  entity: {
306
- name: "CollisionState",
615
+ name: "CollisionData",
307
616
  persistence: "runtime",
308
617
  fields: [
309
618
  { name: "id", type: "string", required: true },
310
619
  { name: "isColliding", type: "boolean", default: false },
311
- { name: "collidingWith", type: "array", default: [] },
312
- // Config fields (previously @config bindings)
313
- { name: "onCollision", type: "string", default: null },
314
- { name: "onTrigger", type: "string", default: null }
620
+ { name: "lastCollisionId", type: "string", default: "" }
315
621
  ]
316
622
  },
317
623
  traits: [
318
624
  {
319
625
  name: "Collision",
320
- linkedEntity: "CollisionState",
626
+ linkedEntity: "CollisionData",
321
627
  category: "interaction",
322
628
  stateMachine: {
323
629
  states: [
@@ -325,9 +631,11 @@ var COLLISION_BEHAVIOR = {
325
631
  { name: "Disabled" }
326
632
  ],
327
633
  events: [
328
- { key: "COLLISION", name: "Collision" },
329
- { key: "TRIGGER_ENTER", name: "Trigger Enter" },
330
- { key: "TRIGGER_EXIT", name: "Trigger Exit" },
634
+ { key: "INIT", name: "Initialize" },
635
+ { key: "COLLISION", name: "Collision", payloadSchema: [
636
+ { name: "entityId", type: "string", required: true }
637
+ ] },
638
+ { key: "CLEAR", name: "Clear Collision" },
331
639
  { key: "ENABLE", name: "Enable" },
332
640
  { key: "DISABLE", name: "Disable" }
333
641
  ],
@@ -335,28 +643,38 @@ var COLLISION_BEHAVIOR = {
335
643
  {
336
644
  from: "Active",
337
645
  to: "Active",
338
- event: "COLLISION",
646
+ event: "INIT",
339
647
  effects: [
340
- ["set", "@entity.isColliding", true],
341
- ["set", "@entity.collidingWith", ["array/append", "@entity.collidingWith", "@payload.entityId"]],
342
- ["if", "@entity.onCollision", ["emit", "@entity.onCollision", { entityId: "@payload.entityId", side: "@payload.side" }]]
648
+ ["fetch", "CollisionData"],
649
+ ["set", "@entity.isColliding", false],
650
+ ["set", "@entity.lastCollisionId", ""],
651
+ collisionCanvasView,
652
+ collisionHudView
343
653
  ]
344
654
  },
345
655
  {
346
656
  from: "Active",
347
657
  to: "Active",
348
- event: "TRIGGER_ENTER",
658
+ event: "COLLISION",
349
659
  effects: [
350
- ["if", "@entity.onTrigger", ["emit", "@entity.onTrigger", { entityId: "@payload.entityId", action: "enter" }]]
660
+ ["fetch", "CollisionData"],
661
+ ["set", "@entity.isColliding", true],
662
+ ["set", "@entity.lastCollisionId", "@payload.entityId"],
663
+ collisionCanvasView,
664
+ collisionHudView,
665
+ collisionHitEffectView
351
666
  ]
352
667
  },
353
668
  {
354
669
  from: "Active",
355
670
  to: "Active",
356
- event: "TRIGGER_EXIT",
671
+ event: "CLEAR",
357
672
  effects: [
358
- ["set", "@entity.collidingWith", ["array/filter", "@entity.collidingWith", ["fn", "id", ["!=", "@id", "@payload.entityId"]]]],
359
- ["if", ["=", ["array/len", "@entity.collidingWith"], 0], ["set", "@entity.isColliding", false]]
673
+ ["fetch", "CollisionData"],
674
+ ["set", "@entity.isColliding", false],
675
+ ["set", "@entity.lastCollisionId", ""],
676
+ collisionCanvasView,
677
+ collisionHudView
360
678
  ]
361
679
  },
362
680
  {
@@ -364,21 +682,35 @@ var COLLISION_BEHAVIOR = {
364
682
  to: "Disabled",
365
683
  event: "DISABLE",
366
684
  effects: [
685
+ ["fetch", "CollisionData"],
367
686
  ["set", "@entity.isColliding", false],
368
- ["set", "@entity.collidingWith", []]
687
+ ["set", "@entity.lastCollisionId", ""],
688
+ collisionDisabledCanvasView,
689
+ collisionDisabledHudView
369
690
  ]
370
691
  },
371
692
  {
372
693
  from: "Disabled",
373
694
  to: "Active",
374
695
  event: "ENABLE",
375
- effects: []
696
+ effects: [
697
+ ["fetch", "CollisionData"],
698
+ collisionCanvasView,
699
+ collisionHudView
700
+ ]
376
701
  }
377
702
  ]
378
703
  }
379
704
  }
380
705
  ],
381
- pages: []
706
+ pages: [
707
+ {
708
+ name: "CollisionPage",
709
+ path: "/collision",
710
+ isInitial: true,
711
+ traits: [{ ref: "Collision" }]
712
+ }
713
+ ]
382
714
  }
383
715
  ]
384
716
  };