@almadar/std 16.152.0 → 16.154.0

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 (194) hide show
  1. package/behaviors/lolo/infra/atoms/std-data-erasure.lolo +5 -1
  2. package/behaviors/lolo/ui/core/atoms/std-browse.lolo +1 -0
  3. package/behaviors/lolo/ui/core/molecules/ui-emoji-picker.lolo +56 -0
  4. package/behaviors/lolo/ui/core/molecules/ui-popover.lolo +39 -0
  5. package/behaviors/lolo/ui/core/molecules/ui-table-view.lolo +11 -0
  6. package/behaviors/lolo/ui/game/atoms/ui-draw-sprite.lolo +2 -2
  7. package/behaviors/lolo/ui/game/molecules/std-crew-board-2d.lolo +4 -4
  8. package/behaviors/lolo/ui/game/molecules/std-dungeon-board-2d.lolo +6 -6
  9. package/behaviors/lolo/ui/game/molecules/std-tactics-board-2d.lolo +41 -9
  10. package/behaviors/lolo/ui/game/molecules/std-worldmap-board-2d.lolo +2 -2
  11. package/behaviors/lolo/ui/game/molecules/ui-canvas-2d.lolo +11 -1
  12. package/behaviors/lolo/ui/game/molecules/ui-canvas.lolo +10 -0
  13. package/behaviors/lolo/ui/game/organisms/ui-arena-board.lolo +2 -2
  14. package/behaviors/lolo/ui/game/organisms/ui-battle-board.lolo +110 -7
  15. package/behaviors/lolo/ui/game/organisms/ui-builder-board.lolo +5 -20
  16. package/behaviors/lolo/ui/game/organisms/ui-card-battler-board.lolo +2 -0
  17. package/behaviors/lolo/ui/game/organisms/ui-castle-board.lolo +3 -3
  18. package/behaviors/lolo/ui/game/organisms/ui-city-builder-board.lolo +9 -7
  19. package/behaviors/lolo/ui/game/organisms/ui-fishing-board.lolo +8 -8
  20. package/behaviors/lolo/ui/game/organisms/ui-grid-tactics-demo-board.lolo +2 -2
  21. package/behaviors/lolo/ui/game/organisms/ui-hex-strategy-board.lolo +5 -1
  22. package/behaviors/lolo/ui/game/organisms/ui-holiday-runner-board.lolo +1 -1
  23. package/behaviors/lolo/ui/game/organisms/ui-minigolf-board.lolo +22 -22
  24. package/behaviors/lolo/ui/game/organisms/ui-physics-sandbox-board.lolo +5 -5
  25. package/behaviors/lolo/ui/game/organisms/ui-pinball-board.lolo +7 -7
  26. package/behaviors/lolo/ui/game/organisms/ui-pirate-board.lolo +14 -14
  27. package/behaviors/lolo/ui/game/organisms/ui-platformer-board.lolo +4 -0
  28. package/behaviors/lolo/ui/game/organisms/ui-roguelike-board.lolo +5 -5
  29. package/behaviors/lolo/ui/game/organisms/ui-sokoban-board.lolo +5 -5
  30. package/behaviors/lolo/ui/game/organisms/ui-sports-board.lolo +10 -7
  31. package/behaviors/lolo/ui/game/organisms/ui-state-architect-board.lolo +4 -4
  32. package/behaviors/lolo/ui/game/organisms/ui-tactics-demo-2d.lolo +7 -3
  33. package/behaviors/lolo/ui/game/organisms/ui-tanks-board.lolo +5 -1
  34. package/behaviors/lolo/ui/game/organisms/ui-topdown-rts-board.lolo +5 -1
  35. package/behaviors/lolo/ui/game/organisms/ui-tower-defense-board.lolo +8 -8
  36. package/behaviors/lolo/ui/game/organisms/ui-uncontrolled-battle-board.lolo +5 -5
  37. package/behaviors/lolo/ui/game/organisms/ui-winter-ski-board.lolo +7 -7
  38. package/behaviors/lolo/ui/game/organisms/ui-world-map-board.lolo +3 -3
  39. package/behaviors/registry/factory-signatures.json +6211 -2181
  40. package/behaviors/registry/infra/atoms/std-approval-gate.orb +16 -8
  41. package/behaviors/registry/infra/atoms/std-cache-aside.orb +62 -31
  42. package/behaviors/registry/infra/atoms/std-circuit-breaker.orb +32 -16
  43. package/behaviors/registry/infra/atoms/std-data-erasure.orb +17 -9
  44. package/behaviors/registry/infra/atoms/std-mod-queue.orb +16 -8
  45. package/behaviors/registry/infra/atoms/std-rate-limiter.orb +28 -14
  46. package/behaviors/registry/ml/molecules/std-escalating-decision.orb +10 -5
  47. package/behaviors/registry/ml/molecules/std-knowledge-tracing.orb +4 -2
  48. package/behaviors/registry/ui/core/atoms/std-billable-hour.orb +2 -1
  49. package/behaviors/registry/ui/core/atoms/std-browse.orb +4 -0
  50. package/behaviors/registry/ui/core/atoms/std-dashboard-grid-embedded.orb +2 -1
  51. package/behaviors/registry/ui/core/atoms/std-esign-flow.orb +4 -2
  52. package/behaviors/registry/ui/core/atoms/std-esign-request.orb +6 -3
  53. package/behaviors/registry/ui/core/atoms/std-gallery.orb +18 -9
  54. package/behaviors/registry/ui/core/atoms/std-import.orb +4 -2
  55. package/behaviors/registry/ui/core/molecules/ui-emoji-picker.orb +214 -0
  56. package/behaviors/registry/ui/core/molecules/ui-popover.orb +112 -1
  57. package/behaviors/registry/ui/core/molecules/ui-table-view.orb +44 -0
  58. package/behaviors/registry/ui/game/atoms/std-arcade-flow.orb +1 -0
  59. package/behaviors/registry/ui/game/atoms/std-arcade-play.orb +1 -0
  60. package/behaviors/registry/ui/game/atoms/std-chase-ai.orb +1 -0
  61. package/behaviors/registry/ui/game/atoms/std-dungeon-combat.orb +1 -0
  62. package/behaviors/registry/ui/game/atoms/std-fx-particles.orb +1 -0
  63. package/behaviors/registry/ui/game/atoms/std-gather.orb +1 -0
  64. package/behaviors/registry/ui/game/atoms/std-gold.orb +1 -0
  65. package/behaviors/registry/ui/game/atoms/std-grid-tactics.orb +1 -0
  66. package/behaviors/registry/ui/game/atoms/std-hero-nav.orb +1 -0
  67. package/behaviors/registry/ui/game/atoms/std-market-flow.orb +1 -0
  68. package/behaviors/registry/ui/game/atoms/std-objective-flow.orb +1 -0
  69. package/behaviors/registry/ui/game/atoms/std-objective-reach.orb +1 -0
  70. package/behaviors/registry/ui/game/atoms/std-patience.orb +1 -0
  71. package/behaviors/registry/ui/game/atoms/std-production.orb +1 -0
  72. package/behaviors/registry/ui/game/atoms/std-round-flow.orb +1 -0
  73. package/behaviors/registry/ui/game/atoms/std-score.orb +1 -0
  74. package/behaviors/registry/ui/game/atoms/std-survival-flow.orb +1 -0
  75. package/behaviors/registry/ui/game/atoms/std-xp.orb +1 -0
  76. package/behaviors/registry/ui/game/atoms/ui-draw-sprite.orb +2 -2
  77. package/behaviors/registry/ui/game/molecules/std-crew-board-2d.orb +10 -12
  78. package/behaviors/registry/ui/game/molecules/std-dungeon-board-2d.orb +15 -18
  79. package/behaviors/registry/ui/game/molecules/std-tactics-board-2d.orb +860 -138
  80. package/behaviors/registry/ui/game/molecules/std-worldmap-board-2d.orb +4 -54
  81. package/behaviors/registry/ui/game/molecules/ui-canvas-2d.orb +16 -1
  82. package/behaviors/registry/ui/game/molecules/ui-canvas.orb +14 -0
  83. package/behaviors/registry/ui/game/organisms/ui-arena-board.orb +5 -6
  84. package/behaviors/registry/ui/game/organisms/ui-battle-board.orb +86 -99
  85. package/behaviors/registry/ui/game/organisms/ui-builder-board.orb +21 -226
  86. package/behaviors/registry/ui/game/organisms/ui-card-battler-board.orb +42 -0
  87. package/behaviors/registry/ui/game/organisms/ui-castle-board.orb +30 -9
  88. package/behaviors/registry/ui/game/organisms/ui-city-builder-board.orb +49 -0
  89. package/behaviors/registry/ui/game/organisms/ui-fishing-board.orb +16 -16
  90. package/behaviors/registry/ui/game/organisms/ui-grid-tactics-demo-board.orb +5 -6
  91. package/behaviors/registry/ui/game/organisms/ui-hex-strategy-board.orb +30 -10
  92. package/behaviors/registry/ui/game/organisms/ui-holiday-runner-board.orb +2 -3
  93. package/behaviors/registry/ui/game/organisms/ui-minigolf-board.orb +55 -11
  94. package/behaviors/registry/ui/game/organisms/ui-physics-sandbox-board.orb +10 -10
  95. package/behaviors/registry/ui/game/organisms/ui-pinball-board.orb +8 -8
  96. package/behaviors/registry/ui/game/organisms/ui-pirate-board.orb +14 -0
  97. package/behaviors/registry/ui/game/organisms/ui-platformer-board.orb +72 -0
  98. package/behaviors/registry/ui/game/organisms/ui-roguelike-board.orb +10 -10
  99. package/behaviors/registry/ui/game/organisms/ui-sokoban-board.orb +10 -10
  100. package/behaviors/registry/ui/game/organisms/ui-sports-board.orb +60 -0
  101. package/behaviors/registry/ui/game/organisms/ui-state-architect-board.orb +8 -8
  102. package/behaviors/registry/ui/game/organisms/ui-tactics-demo-2d.orb +48 -28
  103. package/behaviors/registry/ui/game/organisms/ui-tanks-board.orb +30 -10
  104. package/behaviors/registry/ui/game/organisms/ui-topdown-rts-board.orb +31 -12
  105. package/behaviors/registry/ui/game/organisms/ui-tower-defense-board.orb +8 -0
  106. package/behaviors/registry/ui/game/organisms/ui-uncontrolled-battle-board.orb +5 -0
  107. package/behaviors/registry/ui/game/organisms/ui-winter-ski-board.orb +14 -14
  108. package/behaviors/registry/ui/game/organisms/ui-world-map-board.orb +8 -12
  109. package/dist/behaviors/behaviors-embeddings.json +384 -380
  110. package/dist/behaviors/behaviors-registry.json +594 -57
  111. package/dist/behaviors/exports-reader.js +3409 -3101
  112. package/dist/behaviors/functions/index.d.ts +596 -5
  113. package/dist/behaviors/functions/index.js +3389 -3102
  114. package/dist/behaviors/index.d.ts +1 -1
  115. package/dist/behaviors/index.js +3410 -3102
  116. package/dist/behaviors/knob-embeddings.json +1 -1
  117. package/dist/behaviors/query.js +3409 -3101
  118. package/dist/behaviors/registry/factory-signatures.json +6211 -2181
  119. package/dist/behaviors/registry/infra/atoms/std-approval-gate.orb +16 -8
  120. package/dist/behaviors/registry/infra/atoms/std-cache-aside.orb +62 -31
  121. package/dist/behaviors/registry/infra/atoms/std-circuit-breaker.orb +32 -16
  122. package/dist/behaviors/registry/infra/atoms/std-data-erasure.orb +17 -9
  123. package/dist/behaviors/registry/infra/atoms/std-mod-queue.orb +16 -8
  124. package/dist/behaviors/registry/infra/atoms/std-rate-limiter.orb +28 -14
  125. package/dist/behaviors/registry/ml/molecules/std-escalating-decision.orb +10 -5
  126. package/dist/behaviors/registry/ml/molecules/std-knowledge-tracing.orb +4 -2
  127. package/dist/behaviors/registry/ui/core/atoms/std-billable-hour.orb +2 -1
  128. package/dist/behaviors/registry/ui/core/atoms/std-browse.orb +4 -0
  129. package/dist/behaviors/registry/ui/core/atoms/std-dashboard-grid-embedded.orb +2 -1
  130. package/dist/behaviors/registry/ui/core/atoms/std-esign-flow.orb +4 -2
  131. package/dist/behaviors/registry/ui/core/atoms/std-esign-request.orb +6 -3
  132. package/dist/behaviors/registry/ui/core/atoms/std-gallery.orb +18 -9
  133. package/dist/behaviors/registry/ui/core/atoms/std-import.orb +4 -2
  134. package/dist/behaviors/registry/ui/core/molecules/ui-emoji-picker.orb +214 -0
  135. package/dist/behaviors/registry/ui/core/molecules/ui-popover.orb +112 -1
  136. package/dist/behaviors/registry/ui/core/molecules/ui-table-view.orb +44 -0
  137. package/dist/behaviors/registry/ui/game/atoms/std-arcade-flow.orb +1 -0
  138. package/dist/behaviors/registry/ui/game/atoms/std-arcade-play.orb +1 -0
  139. package/dist/behaviors/registry/ui/game/atoms/std-chase-ai.orb +1 -0
  140. package/dist/behaviors/registry/ui/game/atoms/std-dungeon-combat.orb +1 -0
  141. package/dist/behaviors/registry/ui/game/atoms/std-fx-particles.orb +1 -0
  142. package/dist/behaviors/registry/ui/game/atoms/std-gather.orb +1 -0
  143. package/dist/behaviors/registry/ui/game/atoms/std-gold.orb +1 -0
  144. package/dist/behaviors/registry/ui/game/atoms/std-grid-tactics.orb +1 -0
  145. package/dist/behaviors/registry/ui/game/atoms/std-hero-nav.orb +1 -0
  146. package/dist/behaviors/registry/ui/game/atoms/std-market-flow.orb +1 -0
  147. package/dist/behaviors/registry/ui/game/atoms/std-objective-flow.orb +1 -0
  148. package/dist/behaviors/registry/ui/game/atoms/std-objective-reach.orb +1 -0
  149. package/dist/behaviors/registry/ui/game/atoms/std-patience.orb +1 -0
  150. package/dist/behaviors/registry/ui/game/atoms/std-production.orb +1 -0
  151. package/dist/behaviors/registry/ui/game/atoms/std-round-flow.orb +1 -0
  152. package/dist/behaviors/registry/ui/game/atoms/std-score.orb +1 -0
  153. package/dist/behaviors/registry/ui/game/atoms/std-survival-flow.orb +1 -0
  154. package/dist/behaviors/registry/ui/game/atoms/std-xp.orb +1 -0
  155. package/dist/behaviors/registry/ui/game/atoms/ui-draw-sprite.orb +2 -2
  156. package/dist/behaviors/registry/ui/game/molecules/std-crew-board-2d.orb +10 -12
  157. package/dist/behaviors/registry/ui/game/molecules/std-dungeon-board-2d.orb +15 -18
  158. package/dist/behaviors/registry/ui/game/molecules/std-tactics-board-2d.orb +860 -138
  159. package/dist/behaviors/registry/ui/game/molecules/std-worldmap-board-2d.orb +4 -54
  160. package/dist/behaviors/registry/ui/game/molecules/ui-canvas-2d.orb +16 -1
  161. package/dist/behaviors/registry/ui/game/molecules/ui-canvas.orb +14 -0
  162. package/dist/behaviors/registry/ui/game/organisms/ui-arena-board.orb +5 -6
  163. package/dist/behaviors/registry/ui/game/organisms/ui-battle-board.orb +86 -99
  164. package/dist/behaviors/registry/ui/game/organisms/ui-builder-board.orb +21 -226
  165. package/dist/behaviors/registry/ui/game/organisms/ui-card-battler-board.orb +42 -0
  166. package/dist/behaviors/registry/ui/game/organisms/ui-castle-board.orb +30 -9
  167. package/dist/behaviors/registry/ui/game/organisms/ui-city-builder-board.orb +49 -0
  168. package/dist/behaviors/registry/ui/game/organisms/ui-fishing-board.orb +16 -16
  169. package/dist/behaviors/registry/ui/game/organisms/ui-grid-tactics-demo-board.orb +5 -6
  170. package/dist/behaviors/registry/ui/game/organisms/ui-hex-strategy-board.orb +30 -10
  171. package/dist/behaviors/registry/ui/game/organisms/ui-holiday-runner-board.orb +2 -3
  172. package/dist/behaviors/registry/ui/game/organisms/ui-minigolf-board.orb +55 -11
  173. package/dist/behaviors/registry/ui/game/organisms/ui-physics-sandbox-board.orb +10 -10
  174. package/dist/behaviors/registry/ui/game/organisms/ui-pinball-board.orb +8 -8
  175. package/dist/behaviors/registry/ui/game/organisms/ui-pirate-board.orb +14 -0
  176. package/dist/behaviors/registry/ui/game/organisms/ui-platformer-board.orb +72 -0
  177. package/dist/behaviors/registry/ui/game/organisms/ui-roguelike-board.orb +10 -10
  178. package/dist/behaviors/registry/ui/game/organisms/ui-sokoban-board.orb +10 -10
  179. package/dist/behaviors/registry/ui/game/organisms/ui-sports-board.orb +60 -0
  180. package/dist/behaviors/registry/ui/game/organisms/ui-state-architect-board.orb +8 -8
  181. package/dist/behaviors/registry/ui/game/organisms/ui-tactics-demo-2d.orb +48 -28
  182. package/dist/behaviors/registry/ui/game/organisms/ui-tanks-board.orb +30 -10
  183. package/dist/behaviors/registry/ui/game/organisms/ui-topdown-rts-board.orb +31 -12
  184. package/dist/behaviors/registry/ui/game/organisms/ui-tower-defense-board.orb +8 -0
  185. package/dist/behaviors/registry/ui/game/organisms/ui-uncontrolled-battle-board.orb +5 -0
  186. package/dist/behaviors/registry/ui/game/organisms/ui-winter-ski-board.orb +14 -14
  187. package/dist/behaviors/registry/ui/game/organisms/ui-world-map-board.orb +8 -12
  188. package/dist/behaviors-embeddings.json +384 -380
  189. package/dist/behaviors-registry.json +594 -57
  190. package/dist/index.d.ts +1 -1
  191. package/dist/index.js +3410 -3102
  192. package/dist/knob-embeddings.json +1 -1
  193. package/dist/registry/factory-signatures.json +6211 -2181
  194. package/package.json +2 -2
@@ -83,7 +83,7 @@ orbital SokobanBoardOrbital {
83
83
  controls: { type: control-grid, kind: "dpad", directionEvents: { up: "MOVE_UP", down: "MOVE_DOWN", left: "MOVE_LEFT", right: "MOVE_RIGHT" }, directionAssets: { up: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts-pixel-16/terrain/tilemap_packed.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts-pixel-16/terrain/Tilemap_tilemap_packed.tiles.json", sprite: "30,4", role: "ui", category: "ui", animations: [], style: "pixel", variant: "", dimension: "2d", aspect: "1:1", name: "key-up", thumbnailUrl: "" }, down: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts-pixel-16/terrain/tilemap_packed.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts-pixel-16/terrain/Tilemap_tilemap_packed.tiles.json", sprite: "32,4", role: "ui", category: "ui", animations: [], style: "pixel", variant: "", dimension: "2d", aspect: "1:1", name: "key-down", thumbnailUrl: "" }, left: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts-pixel-16/terrain/tilemap_packed.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts-pixel-16/terrain/Tilemap_tilemap_packed.tiles.json", sprite: "33,4", role: "ui", category: "ui", animations: [], style: "pixel", variant: "", dimension: "2d", aspect: "1:1", name: "key-left", thumbnailUrl: "" }, right: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts-pixel-16/terrain/tilemap_packed.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts-pixel-16/terrain/Tilemap_tilemap_packed.tiles.json", sprite: "31,4", role: "ui", category: "ui", animations: [], style: "pixel", variant: "", dimension: "2d", aspect: "1:1", name: "key-right", thumbnailUrl: "" } } }
84
84
  children: [ { type: canvas, camera: { zoom: (math/min 1 (/ 5 (+ 1 (math/max (array/max @config.tiles "x") (array/max @config.tiles "y"))))), pos: { x: (/ (+ (array/min @config.tiles "x") (array/max @config.tiles "x")) 2), y: (/ (+ (array/min @config.tiles "y") (array/max @config.tiles "y")) 2) } }, projection: "flat", showMinimap: false, keyMap: { ArrowUp: "MOVE_UP", KeyW: "MOVE_UP", ArrowDown: "MOVE_DOWN", KeyS: "MOVE_DOWN", ArrowLeft: "MOVE_LEFT", KeyA: "MOVE_LEFT", ArrowRight: "MOVE_RIGHT", KeyD: "MOVE_RIGHT" }, children: [
85
85
  { type: draw-shape-layer, items: (array/map @config.tiles (fn t { type: draw-shape, shape: "cell", position: { x: (object/get @t x), y: (object/get @t y) }, fill: "#5c94fc", stroke: "rgba(255,255,255,0.35)", strokeWidth: 1 })) }
86
- { type: draw-sprite-layer, items: (array/map @config.tiles (fn t { type: draw-sprite, position: { x: (object/get @t x), y: (object/get @t y) }, asset: (object/get @t terrainSprite), anchor: "center", width: 0.5, height: 0.5 })) }
86
+ { type: draw-sprite-layer, items: (array/map @config.tiles (fn t { type: draw-sprite, position: { x: (object/get @t x), y: (object/get @t y) }, asset: (object/get @t terrainSprite), anchor: "center", width: 1, height: 1 })) }
87
87
  { type: draw-sprite-layer, items: (array/map @entity.crates (fn c { type: draw-sprite, position: { x: (object/get @c x), y: (object/get @c y) }, asset: (if (!= (array/find @config.targets (fn t (and (== (object/get @t x) (object/get @c x)) (== (object/get @t y) (object/get @c y))))) null) (object/get (object/get @config.assetManifest features) crate_done) (object/get (object/get @config.assetManifest features) crate)), anchor: "center", width: 0.5, height: 0.5 })) }
88
88
  { type: draw-sprite-layer, items: [ { type: draw-sprite, position: { x: (object/get @entity.player x), y: (object/get @entity.player y) }, asset: (object/get (object/get @config.assetManifest units) pusher), anchor: "ground", width: 0.5, height: 0.5 } ] }
89
89
  { type: draw-sprite-layer, items: (array/map @entity.effects (fn f { type: draw-sprite, position: { x: (object/get @f x), y: (object/get @f y) }, asset: (object/get (object/get @config.assetManifest effects) (object/get @f key)) })) }
@@ -190,7 +190,7 @@ orbital SokobanBoardOrbital {
190
190
  controls: { type: control-grid, kind: "dpad", directionEvents: { up: "MOVE_UP", down: "MOVE_DOWN", left: "MOVE_LEFT", right: "MOVE_RIGHT" }, directionAssets: { up: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts-pixel-16/terrain/tilemap_packed.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts-pixel-16/terrain/Tilemap_tilemap_packed.tiles.json", sprite: "30,4", role: "ui", category: "ui", animations: [], style: "pixel", variant: "", dimension: "2d", aspect: "1:1", name: "key-up", thumbnailUrl: "" }, down: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts-pixel-16/terrain/tilemap_packed.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts-pixel-16/terrain/Tilemap_tilemap_packed.tiles.json", sprite: "32,4", role: "ui", category: "ui", animations: [], style: "pixel", variant: "", dimension: "2d", aspect: "1:1", name: "key-down", thumbnailUrl: "" }, left: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts-pixel-16/terrain/tilemap_packed.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts-pixel-16/terrain/Tilemap_tilemap_packed.tiles.json", sprite: "33,4", role: "ui", category: "ui", animations: [], style: "pixel", variant: "", dimension: "2d", aspect: "1:1", name: "key-left", thumbnailUrl: "" }, right: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts-pixel-16/terrain/tilemap_packed.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts-pixel-16/terrain/Tilemap_tilemap_packed.tiles.json", sprite: "31,4", role: "ui", category: "ui", animations: [], style: "pixel", variant: "", dimension: "2d", aspect: "1:1", name: "key-right", thumbnailUrl: "" } } }
191
191
  children: [ { type: canvas, camera: { zoom: (math/min 1 (/ 5 (+ 1 (math/max (array/max @config.tiles "x") (array/max @config.tiles "y"))))), pos: { x: (/ (+ (array/min @config.tiles "x") (array/max @config.tiles "x")) 2), y: (/ (+ (array/min @config.tiles "y") (array/max @config.tiles "y")) 2) } }, projection: "flat", showMinimap: false, keyMap: { ArrowUp: "MOVE_UP", KeyW: "MOVE_UP", ArrowDown: "MOVE_DOWN", KeyS: "MOVE_DOWN", ArrowLeft: "MOVE_LEFT", KeyA: "MOVE_LEFT", ArrowRight: "MOVE_RIGHT", KeyD: "MOVE_RIGHT" }, children: [
192
192
  { type: draw-shape-layer, items: (array/map @config.tiles (fn t { type: draw-shape, shape: "cell", position: { x: (object/get @t x), y: (object/get @t y) }, fill: "#5c94fc", stroke: "rgba(255,255,255,0.35)", strokeWidth: 1 })) }
193
- { type: draw-sprite-layer, items: (array/map @config.tiles (fn t { type: draw-sprite, position: { x: (object/get @t x), y: (object/get @t y) }, asset: (object/get @t terrainSprite), anchor: "center", width: 0.5, height: 0.5 })) }
193
+ { type: draw-sprite-layer, items: (array/map @config.tiles (fn t { type: draw-sprite, position: { x: (object/get @t x), y: (object/get @t y) }, asset: (object/get @t terrainSprite), anchor: "center", width: 1, height: 1 })) }
194
194
  { type: draw-sprite-layer, items: (array/map @entity.crates (fn c { type: draw-sprite, position: { x: (object/get @c x), y: (object/get @c y) }, asset: (if (!= (array/find @config.targets (fn t (and (== (object/get @t x) (object/get @c x)) (== (object/get @t y) (object/get @c y))))) null) (object/get (object/get @config.assetManifest features) crate_done) (object/get (object/get @config.assetManifest features) crate)), anchor: "center", width: 0.5, height: 0.5 })) }
195
195
  { type: draw-sprite-layer, items: [ { type: draw-sprite, position: { x: (object/get @entity.player x), y: (object/get @entity.player y) }, asset: (object/get (object/get @config.assetManifest units) pusher), anchor: "ground", width: 0.5, height: 0.5 } ] }
196
196
  { type: draw-sprite-layer, items: (array/map @entity.effects (fn f { type: draw-sprite, position: { x: (object/get @f x), y: (object/get @f y) }, asset: (object/get (object/get @config.assetManifest effects) (object/get @f key)) })) }
@@ -208,7 +208,7 @@ orbital SokobanBoardOrbital {
208
208
  overlay: { type: game-menu, title: "SOLVED!", subtitle: (str/concat "All crates home in " (str/concat @entity.moves " moves")), options: [ { id: "again", label: "Play Again", event: "PLAY_AGAIN", variant: "primary" } ] }
209
209
  children: [ { type: canvas, camera: { zoom: (math/min 1 (/ 5 (+ 1 (math/max (array/max @config.tiles "x") (array/max @config.tiles "y"))))), pos: { x: (/ (+ (array/min @config.tiles "x") (array/max @config.tiles "x")) 2), y: (/ (+ (array/min @config.tiles "y") (array/max @config.tiles "y")) 2) } }, projection: "flat", showMinimap: false, keyMap: { ArrowUp: "MOVE_UP", KeyW: "MOVE_UP", ArrowDown: "MOVE_DOWN", KeyS: "MOVE_DOWN", ArrowLeft: "MOVE_LEFT", KeyA: "MOVE_LEFT", ArrowRight: "MOVE_RIGHT", KeyD: "MOVE_RIGHT" }, children: [
210
210
  { type: draw-shape-layer, items: (array/map @config.tiles (fn t { type: draw-shape, shape: "cell", position: { x: (object/get @t x), y: (object/get @t y) }, fill: "#5c94fc", stroke: "rgba(255,255,255,0.35)", strokeWidth: 1 })) }
211
- { type: draw-sprite-layer, items: (array/map @config.tiles (fn t { type: draw-sprite, position: { x: (object/get @t x), y: (object/get @t y) }, asset: (object/get @t terrainSprite), anchor: "center", width: 0.5, height: 0.5 })) }
211
+ { type: draw-sprite-layer, items: (array/map @config.tiles (fn t { type: draw-sprite, position: { x: (object/get @t x), y: (object/get @t y) }, asset: (object/get @t terrainSprite), anchor: "center", width: 1, height: 1 })) }
212
212
  { type: draw-sprite-layer, items: (array/map @entity.crates (fn c { type: draw-sprite, position: { x: (object/get @c x), y: (object/get @c y) }, asset: (if (!= (array/find @config.targets (fn t (and (== (object/get @t x) (object/get @c x)) (== (object/get @t y) (object/get @c y))))) null) (object/get (object/get @config.assetManifest features) crate_done) (object/get (object/get @config.assetManifest features) crate)), anchor: "center", width: 0.5, height: 0.5 })) }
213
213
  { type: draw-sprite-layer, items: [ { type: draw-sprite, position: { x: (object/get @entity.player x), y: (object/get @entity.player y) }, asset: (object/get (object/get @config.assetManifest units) pusher), anchor: "ground", width: 0.5, height: 0.5 } ] }
214
214
  { type: draw-sprite-layer, items: (array/map @entity.effects (fn f { type: draw-sprite, position: { x: (object/get @f x), y: (object/get @f y) }, asset: (object/get (object/get @config.assetManifest effects) (object/get @f key)) })) }
@@ -233,7 +233,7 @@ orbital SokobanBoardOrbital {
233
233
  controls: { type: control-grid, kind: "dpad", directionEvents: { up: "MOVE_UP", down: "MOVE_DOWN", left: "MOVE_LEFT", right: "MOVE_RIGHT" }, directionAssets: { up: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts-pixel-16/terrain/tilemap_packed.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts-pixel-16/terrain/Tilemap_tilemap_packed.tiles.json", sprite: "30,4", role: "ui", category: "ui", animations: [], style: "pixel", variant: "", dimension: "2d", aspect: "1:1", name: "key-up", thumbnailUrl: "" }, down: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts-pixel-16/terrain/tilemap_packed.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts-pixel-16/terrain/Tilemap_tilemap_packed.tiles.json", sprite: "32,4", role: "ui", category: "ui", animations: [], style: "pixel", variant: "", dimension: "2d", aspect: "1:1", name: "key-down", thumbnailUrl: "" }, left: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts-pixel-16/terrain/tilemap_packed.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts-pixel-16/terrain/Tilemap_tilemap_packed.tiles.json", sprite: "33,4", role: "ui", category: "ui", animations: [], style: "pixel", variant: "", dimension: "2d", aspect: "1:1", name: "key-left", thumbnailUrl: "" }, right: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts-pixel-16/terrain/tilemap_packed.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts-pixel-16/terrain/Tilemap_tilemap_packed.tiles.json", sprite: "31,4", role: "ui", category: "ui", animations: [], style: "pixel", variant: "", dimension: "2d", aspect: "1:1", name: "key-right", thumbnailUrl: "" } } }
234
234
  children: [ { type: canvas, camera: { zoom: (math/min 1 (/ 5 (+ 1 (math/max (array/max @config.tiles "x") (array/max @config.tiles "y"))))), pos: { x: (/ (+ (array/min @config.tiles "x") (array/max @config.tiles "x")) 2), y: (/ (+ (array/min @config.tiles "y") (array/max @config.tiles "y")) 2) } }, projection: "flat", showMinimap: false, keyMap: { ArrowUp: "MOVE_UP", KeyW: "MOVE_UP", ArrowDown: "MOVE_DOWN", KeyS: "MOVE_DOWN", ArrowLeft: "MOVE_LEFT", KeyA: "MOVE_LEFT", ArrowRight: "MOVE_RIGHT", KeyD: "MOVE_RIGHT" }, children: [
235
235
  { type: draw-shape-layer, items: (array/map @config.tiles (fn t { type: draw-shape, shape: "cell", position: { x: (object/get @t x), y: (object/get @t y) }, fill: "#5c94fc", stroke: "rgba(255,255,255,0.35)", strokeWidth: 1 })) }
236
- { type: draw-sprite-layer, items: (array/map @config.tiles (fn t { type: draw-sprite, position: { x: (object/get @t x), y: (object/get @t y) }, asset: (object/get @t terrainSprite), anchor: "center", width: 0.5, height: 0.5 })) }
236
+ { type: draw-sprite-layer, items: (array/map @config.tiles (fn t { type: draw-sprite, position: { x: (object/get @t x), y: (object/get @t y) }, asset: (object/get @t terrainSprite), anchor: "center", width: 1, height: 1 })) }
237
237
  { type: draw-sprite-layer, items: (array/map @entity.crates (fn c { type: draw-sprite, position: { x: (object/get @c x), y: (object/get @c y) }, asset: (if (!= (array/find @config.targets (fn t (and (== (object/get @t x) (object/get @c x)) (== (object/get @t y) (object/get @c y))))) null) (object/get (object/get @config.assetManifest features) crate_done) (object/get (object/get @config.assetManifest features) crate)), anchor: "center", width: 0.5, height: 0.5 })) }
238
238
  { type: draw-sprite-layer, items: [ { type: draw-sprite, position: { x: (object/get @entity.player x), y: (object/get @entity.player y) }, asset: (object/get (object/get @config.assetManifest units) pusher), anchor: "ground", width: 0.5, height: 0.5 } ] }
239
239
  { type: draw-sprite-layer, items: (array/map @entity.effects (fn f { type: draw-sprite, position: { x: (object/get @f x), y: (object/get @f y) }, asset: (object/get (object/get @config.assetManifest effects) (object/get @f key)) })) }
@@ -253,7 +253,7 @@ orbital SokobanBoardOrbital {
253
253
  controls: { type: control-grid, kind: "dpad", directionEvents: { up: "MOVE_UP", down: "MOVE_DOWN", left: "MOVE_LEFT", right: "MOVE_RIGHT" }, directionAssets: { up: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts-pixel-16/terrain/tilemap_packed.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts-pixel-16/terrain/Tilemap_tilemap_packed.tiles.json", sprite: "30,4", role: "ui", category: "ui", animations: [], style: "pixel", variant: "", dimension: "2d", aspect: "1:1", name: "key-up", thumbnailUrl: "" }, down: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts-pixel-16/terrain/tilemap_packed.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts-pixel-16/terrain/Tilemap_tilemap_packed.tiles.json", sprite: "32,4", role: "ui", category: "ui", animations: [], style: "pixel", variant: "", dimension: "2d", aspect: "1:1", name: "key-down", thumbnailUrl: "" }, left: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts-pixel-16/terrain/tilemap_packed.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts-pixel-16/terrain/Tilemap_tilemap_packed.tiles.json", sprite: "33,4", role: "ui", category: "ui", animations: [], style: "pixel", variant: "", dimension: "2d", aspect: "1:1", name: "key-left", thumbnailUrl: "" }, right: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts-pixel-16/terrain/tilemap_packed.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-input-prompts-pixel-16/terrain/Tilemap_tilemap_packed.tiles.json", sprite: "31,4", role: "ui", category: "ui", animations: [], style: "pixel", variant: "", dimension: "2d", aspect: "1:1", name: "key-right", thumbnailUrl: "" } } }
254
254
  children: [ { type: canvas, camera: { zoom: (math/min 1 (/ 5 (+ 1 (math/max (array/max @config.tiles "x") (array/max @config.tiles "y"))))), pos: { x: (/ (+ (array/min @config.tiles "x") (array/max @config.tiles "x")) 2), y: (/ (+ (array/min @config.tiles "y") (array/max @config.tiles "y")) 2) } }, projection: "flat", showMinimap: false, keyMap: { ArrowUp: "MOVE_UP", KeyW: "MOVE_UP", ArrowDown: "MOVE_DOWN", KeyS: "MOVE_DOWN", ArrowLeft: "MOVE_LEFT", KeyA: "MOVE_LEFT", ArrowRight: "MOVE_RIGHT", KeyD: "MOVE_RIGHT" }, children: [
255
255
  { type: draw-shape-layer, items: (array/map @config.tiles (fn t { type: draw-shape, shape: "cell", position: { x: (object/get @t x), y: (object/get @t y) }, fill: "#5c94fc", stroke: "rgba(255,255,255,0.35)", strokeWidth: 1 })) }
256
- { type: draw-sprite-layer, items: (array/map @config.tiles (fn t { type: draw-sprite, position: { x: (object/get @t x), y: (object/get @t y) }, asset: (object/get @t terrainSprite), anchor: "center", width: 0.5, height: 0.5 })) }
256
+ { type: draw-sprite-layer, items: (array/map @config.tiles (fn t { type: draw-sprite, position: { x: (object/get @t x), y: (object/get @t y) }, asset: (object/get @t terrainSprite), anchor: "center", width: 1, height: 1 })) }
257
257
  { type: draw-sprite-layer, items: (array/map @entity.crates (fn c { type: draw-sprite, position: { x: (object/get @c x), y: (object/get @c y) }, asset: (if (!= (array/find @config.targets (fn t (and (== (object/get @t x) (object/get @c x)) (== (object/get @t y) (object/get @c y))))) null) (object/get (object/get @config.assetManifest features) crate_done) (object/get (object/get @config.assetManifest features) crate)), anchor: "center", width: 0.5, height: 0.5 })) }
258
258
  { type: draw-sprite-layer, items: [ { type: draw-sprite, position: { x: (object/get @entity.player x), y: (object/get @entity.player y) }, asset: (object/get (object/get @config.assetManifest units) pusher), anchor: "ground", width: 0.5, height: 0.5 } ] }
259
259
  { type: draw-sprite-layer, items: (array/map @entity.effects (fn f { type: draw-sprite, position: { x: (object/get @f x), y: (object/get @f y) }, asset: (object/get (object/get @config.assetManifest effects) (object/get @f key)) })) }
@@ -122,7 +122,7 @@ orbital SportsBoardOrbital {
122
122
  backgroundAsset: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-pack/ui/greySheet.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-pack/ui/greySheet.json", sprite: "grey_panel.png", role: "ui", category: "ui", animations: [], style: "generic", variant: "", dimension: "2d", aspect: "1:1", name: "panel-frame", thumbnailUrl: "" }
123
123
  hudBackgroundAsset: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-pack/ui/greySheet.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-pack/ui/greySheet.json", sprite: "grey_panel.png", role: "ui", category: "ui", animations: [], style: "generic", variant: "", dimension: "2d", aspect: "1:1", name: "panel-frame", thumbnailUrl: "" }
124
124
  hud: { type: stack, direction: horizontal, gap: md, justify: between, children: [ { type: game-hud, stats: [ { label: "Home", value: @entity.homeScore, iconUrl: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.json", sprite: "icon_button_a", role: "ui", category: "ui", animations: [], style: "generic", variant: "", dimension: "2d", aspect: "1:1", name: "icon-home", thumbnailUrl: "" } }, { label: "Away", value: @entity.awayScore, iconUrl: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.json", sprite: "icon_button_b", role: "ui", category: "ui", animations: [], style: "generic", variant: "", dimension: "2d", aspect: "1:1", name: "icon-away", thumbnailUrl: "" } } ] }, { type: game-icon, label: "Phase", value: @entity.phase, assetUrl: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.json", sprite: "icon_cog", role: "ui", category: "ui", animations: [], style: "generic", variant: "", dimension: "2d", aspect: "1:1", name: "icon-phase", thumbnailUrl: "" } }, { type: button, action: RESET, label: "Reset", iconAsset: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.json", sprite: "icon_arrow_rotate", role: "ui", category: "ui", animations: [], style: "generic", variant: "", dimension: "2d", aspect: "1:1", name: "icon-reset", thumbnailUrl: "" }, variant: secondary } ] }
125
- children: [ { type: canvas, camera: { zoom: @config.scale }, projection: "flat", showMinimap: false, tileClickEvent: TILE_CLICK, unitClickEvent: UNIT_CLICK, children: [
125
+ children: [ { type: canvas, fit: true, camera: { zoom: @config.scale }, projection: "flat", showMinimap: false, tileClickEvent: TILE_CLICK, unitClickEvent: UNIT_CLICK, children: [
126
126
  { type: draw-sprite-layer, items: (array/map @config.tiles (fn t { type: draw-sprite, position: { x: (object/get @t x), y: (object/get @t y) }, asset: (object/get @t terrainSprite) })) }
127
127
  { type: draw-sprite-layer, items: (array/map @config.features (fn f { type: draw-sprite, position: { x: (object/get @f x), y: (object/get @f y) }, asset: (object/get @f assetUrl) })) }
128
128
  { type: draw-shape-layer, items: (array/map @entity.validMoves (fn m { type: draw-shape, shape: "cell", position: { x: (object/get @m x), y: (object/get @m y) }, fill: "rgba(74,222,128,0.4)" })) }
@@ -145,7 +145,7 @@ orbital SportsBoardOrbital {
145
145
  backgroundAsset: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-pack/ui/greySheet.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-pack/ui/greySheet.json", sprite: "grey_panel.png", role: "ui", category: "ui", animations: [], style: "generic", variant: "", dimension: "2d", aspect: "1:1", name: "panel-frame", thumbnailUrl: "" }
146
146
  hudBackgroundAsset: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-pack/ui/greySheet.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-pack/ui/greySheet.json", sprite: "grey_panel.png", role: "ui", category: "ui", animations: [], style: "generic", variant: "", dimension: "2d", aspect: "1:1", name: "panel-frame", thumbnailUrl: "" }
147
147
  hud: { type: stack, direction: horizontal, gap: md, justify: between, children: [ { type: game-hud, stats: [ { label: "Home", value: @entity.homeScore, iconUrl: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.json", sprite: "icon_button_a", role: "ui", category: "ui", animations: [], style: "generic", variant: "", dimension: "2d", aspect: "1:1", name: "icon-home", thumbnailUrl: "" } }, { label: "Away", value: @entity.awayScore, iconUrl: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.json", sprite: "icon_button_b", role: "ui", category: "ui", animations: [], style: "generic", variant: "", dimension: "2d", aspect: "1:1", name: "icon-away", thumbnailUrl: "" } } ] }, { type: game-icon, label: "Phase", value: @entity.phase, assetUrl: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.json", sprite: "icon_cog", role: "ui", category: "ui", animations: [], style: "generic", variant: "", dimension: "2d", aspect: "1:1", name: "icon-phase", thumbnailUrl: "" } }, { type: button, action: RESET, label: "Reset", iconAsset: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.json", sprite: "icon_arrow_rotate", role: "ui", category: "ui", animations: [], style: "generic", variant: "", dimension: "2d", aspect: "1:1", name: "icon-reset", thumbnailUrl: "" }, variant: secondary } ] }
148
- children: [ { type: canvas, camera: { zoom: @config.scale }, projection: "flat", showMinimap: false, tileClickEvent: TILE_CLICK, unitClickEvent: UNIT_CLICK, children: [
148
+ children: [ { type: canvas, fit: true, camera: { zoom: @config.scale }, projection: "flat", showMinimap: false, tileClickEvent: TILE_CLICK, unitClickEvent: UNIT_CLICK, children: [
149
149
  { type: draw-sprite-layer, items: (array/map @config.tiles (fn t { type: draw-sprite, position: { x: (object/get @t x), y: (object/get @t y) }, asset: (object/get @t terrainSprite) })) }
150
150
  { type: draw-sprite-layer, items: (array/map @config.features (fn f { type: draw-sprite, position: { x: (object/get @f x), y: (object/get @f y) }, asset: (object/get @f assetUrl) })) }
151
151
  { type: draw-shape-layer, items: (array/map @entity.validMoves (fn m { type: draw-shape, shape: "cell", position: { x: (object/get @m x), y: (object/get @m y) }, fill: "rgba(74,222,128,0.4)" })) }
@@ -168,7 +168,7 @@ orbital SportsBoardOrbital {
168
168
  backgroundAsset: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-pack/ui/greySheet.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-pack/ui/greySheet.json", sprite: "grey_panel.png", role: "ui", category: "ui", animations: [], style: "generic", variant: "", dimension: "2d", aspect: "1:1", name: "panel-frame", thumbnailUrl: "" }
169
169
  hudBackgroundAsset: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-pack/ui/greySheet.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-pack/ui/greySheet.json", sprite: "grey_panel.png", role: "ui", category: "ui", animations: [], style: "generic", variant: "", dimension: "2d", aspect: "1:1", name: "panel-frame", thumbnailUrl: "" }
170
170
  hud: { type: stack, direction: horizontal, gap: md, justify: between, children: [ { type: game-hud, stats: [ { label: "Home", value: @entity.homeScore, iconUrl: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.json", sprite: "icon_button_a", role: "ui", category: "ui", animations: [], style: "generic", variant: "", dimension: "2d", aspect: "1:1", name: "icon-home", thumbnailUrl: "" } }, { label: "Away", value: @entity.awayScore, iconUrl: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.json", sprite: "icon_button_b", role: "ui", category: "ui", animations: [], style: "generic", variant: "", dimension: "2d", aspect: "1:1", name: "icon-away", thumbnailUrl: "" } } ] }, { type: game-icon, label: "Phase", value: @entity.phase, assetUrl: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.json", sprite: "icon_cog", role: "ui", category: "ui", animations: [], style: "generic", variant: "", dimension: "2d", aspect: "1:1", name: "icon-phase", thumbnailUrl: "" } }, { type: button, action: RESET, label: "Reset", iconAsset: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.json", sprite: "icon_arrow_rotate", role: "ui", category: "ui", animations: [], style: "generic", variant: "", dimension: "2d", aspect: "1:1", name: "icon-reset", thumbnailUrl: "" }, variant: secondary } ] }
171
- children: [ { type: canvas, camera: { zoom: @config.scale }, projection: "flat", showMinimap: false, tileClickEvent: TILE_CLICK, unitClickEvent: UNIT_CLICK, children: [
171
+ children: [ { type: canvas, fit: true, camera: { zoom: @config.scale }, projection: "flat", showMinimap: false, tileClickEvent: TILE_CLICK, unitClickEvent: UNIT_CLICK, children: [
172
172
  { type: draw-sprite-layer, items: (array/map @config.tiles (fn t { type: draw-sprite, position: { x: (object/get @t x), y: (object/get @t y) }, asset: (object/get @t terrainSprite) })) }
173
173
  { type: draw-sprite-layer, items: (array/map @config.features (fn f { type: draw-sprite, position: { x: (object/get @f x), y: (object/get @f y) }, asset: (object/get @f assetUrl) })) }
174
174
  { type: draw-shape-layer, items: (array/map @entity.validMoves (fn m { type: draw-shape, shape: "cell", position: { x: (object/get @m x), y: (object/get @m y) }, fill: "rgba(74,222,128,0.4)" })) }
@@ -192,7 +192,7 @@ orbital SportsBoardOrbital {
192
192
  backgroundAsset: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-pack/ui/greySheet.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-pack/ui/greySheet.json", sprite: "grey_panel.png", role: "ui", category: "ui", animations: [], style: "generic", variant: "", dimension: "2d", aspect: "1:1", name: "panel-frame", thumbnailUrl: "" }
193
193
  hudBackgroundAsset: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-pack/ui/greySheet.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-pack/ui/greySheet.json", sprite: "grey_panel.png", role: "ui", category: "ui", animations: [], style: "generic", variant: "", dimension: "2d", aspect: "1:1", name: "panel-frame", thumbnailUrl: "" }
194
194
  hud: { type: stack, direction: horizontal, gap: md, justify: between, children: [ { type: game-hud, stats: [ { label: "Home", value: @entity.homeScore, iconUrl: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.json", sprite: "icon_button_a", role: "ui", category: "ui", animations: [], style: "generic", variant: "", dimension: "2d", aspect: "1:1", name: "icon-home", thumbnailUrl: "" } }, { label: "Away", value: @entity.awayScore, iconUrl: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.json", sprite: "icon_button_b", role: "ui", category: "ui", animations: [], style: "generic", variant: "", dimension: "2d", aspect: "1:1", name: "icon-away", thumbnailUrl: "" } } ] }, { type: game-icon, label: "Phase", value: @entity.phase, assetUrl: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.json", sprite: "icon_cog", role: "ui", category: "ui", animations: [], style: "generic", variant: "", dimension: "2d", aspect: "1:1", name: "icon-phase", thumbnailUrl: "" } }, { type: button, action: RESET, label: "Reset", iconAsset: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.json", sprite: "icon_arrow_rotate", role: "ui", category: "ui", animations: [], style: "generic", variant: "", dimension: "2d", aspect: "1:1", name: "icon-reset", thumbnailUrl: "" }, variant: secondary } ] }
195
- children: [ { type: canvas, camera: { zoom: @config.scale }, projection: "flat", showMinimap: false, tileClickEvent: TILE_CLICK, unitClickEvent: UNIT_CLICK, children: [
195
+ children: [ { type: canvas, fit: true, camera: { zoom: @config.scale }, projection: "flat", showMinimap: false, tileClickEvent: TILE_CLICK, unitClickEvent: UNIT_CLICK, children: [
196
196
  { type: draw-sprite-layer, items: (array/map @config.tiles (fn t { type: draw-sprite, position: { x: (object/get @t x), y: (object/get @t y) }, asset: (object/get @t terrainSprite) })) }
197
197
  { type: draw-sprite-layer, items: (array/map @config.features (fn f { type: draw-sprite, position: { x: (object/get @f x), y: (object/get @f y) }, asset: (object/get @f assetUrl) })) }
198
198
  { type: draw-shape-layer, items: (array/map @entity.validMoves (fn m { type: draw-shape, shape: "cell", position: { x: (object/get @m x), y: (object/get @m y) }, fill: "rgba(74,222,128,0.4)" })) }
@@ -205,6 +205,9 @@ orbital SportsBoardOrbital {
205
205
  { type: draw-sprite-layer, items: (array/map @entity.effects (fn e { type: draw-sprite, position: { x: (object/get @e x), y: (object/get @e y) }, asset: (object/get (object/get @config.assetManifest effects) (object/get @e key)) })) }
206
206
  ] } ]
207
207
  })
208
+ (if (!= (array/find @config.features (fn f (and (== @f.type "goal") (and (== @f.x ?x) (== @f.y ?y))))) null)
209
+ (emit GOAL { team: (if (== ?x 0) "enemy" "player") })
210
+ null)
208
211
 
209
212
  GOAL -> playing
210
213
  (set @entity.homeScore (if (== ?team "player") (+ @entity.homeScore 1) @entity.homeScore))
@@ -215,7 +218,7 @@ orbital SportsBoardOrbital {
215
218
  backgroundAsset: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-pack/ui/greySheet.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-pack/ui/greySheet.json", sprite: "grey_panel.png", role: "ui", category: "ui", animations: [], style: "generic", variant: "", dimension: "2d", aspect: "1:1", name: "panel-frame", thumbnailUrl: "" }
216
219
  hudBackgroundAsset: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-pack/ui/greySheet.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-pack/ui/greySheet.json", sprite: "grey_panel.png", role: "ui", category: "ui", animations: [], style: "generic", variant: "", dimension: "2d", aspect: "1:1", name: "panel-frame", thumbnailUrl: "" }
217
220
  hud: { type: stack, direction: horizontal, gap: md, justify: between, children: [ { type: game-hud, stats: [ { label: "Home", value: @entity.homeScore, iconUrl: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.json", sprite: "icon_button_a", role: "ui", category: "ui", animations: [], style: "generic", variant: "", dimension: "2d", aspect: "1:1", name: "icon-home", thumbnailUrl: "" } }, { label: "Away", value: @entity.awayScore, iconUrl: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.json", sprite: "icon_button_b", role: "ui", category: "ui", animations: [], style: "generic", variant: "", dimension: "2d", aspect: "1:1", name: "icon-away", thumbnailUrl: "" } } ] }, { type: game-icon, label: "Phase", value: @entity.phase, assetUrl: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.json", sprite: "icon_cog", role: "ui", category: "ui", animations: [], style: "generic", variant: "", dimension: "2d", aspect: "1:1", name: "icon-phase", thumbnailUrl: "" } }, { type: button, action: RESET, label: "Reset", iconAsset: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.json", sprite: "icon_arrow_rotate", role: "ui", category: "ui", animations: [], style: "generic", variant: "", dimension: "2d", aspect: "1:1", name: "icon-reset", thumbnailUrl: "" }, variant: secondary } ] }
218
- children: [ { type: canvas, camera: { zoom: @config.scale }, projection: "flat", showMinimap: false, tileClickEvent: TILE_CLICK, unitClickEvent: UNIT_CLICK, children: [
221
+ children: [ { type: canvas, fit: true, camera: { zoom: @config.scale }, projection: "flat", showMinimap: false, tileClickEvent: TILE_CLICK, unitClickEvent: UNIT_CLICK, children: [
219
222
  { type: draw-sprite-layer, items: (array/map @config.tiles (fn t { type: draw-sprite, position: { x: (object/get @t x), y: (object/get @t y) }, asset: (object/get @t terrainSprite) })) }
220
223
  { type: draw-sprite-layer, items: (array/map @config.features (fn f { type: draw-sprite, position: { x: (object/get @f x), y: (object/get @f y) }, asset: (object/get @f assetUrl) })) }
221
224
  { type: draw-shape-layer, items: (array/map @entity.validMoves (fn m { type: draw-shape, shape: "cell", position: { x: (object/get @m x), y: (object/get @m y) }, fill: "rgba(74,222,128,0.4)" })) }
@@ -242,7 +245,7 @@ orbital SportsBoardOrbital {
242
245
  backgroundAsset: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-pack/ui/greySheet.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-pack/ui/greySheet.json", sprite: "grey_panel.png", role: "ui", category: "ui", animations: [], style: "generic", variant: "", dimension: "2d", aspect: "1:1", name: "panel-frame", thumbnailUrl: "" }
243
246
  hudBackgroundAsset: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-pack/ui/greySheet.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-pack/ui/greySheet.json", sprite: "grey_panel.png", role: "ui", category: "ui", animations: [], style: "generic", variant: "", dimension: "2d", aspect: "1:1", name: "panel-frame", thumbnailUrl: "" }
244
247
  hud: { type: stack, direction: horizontal, gap: md, justify: between, children: [ { type: game-hud, stats: [ { label: "Home", value: @entity.homeScore, iconUrl: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.json", sprite: "icon_button_a", role: "ui", category: "ui", animations: [], style: "generic", variant: "", dimension: "2d", aspect: "1:1", name: "icon-home", thumbnailUrl: "" } }, { label: "Away", value: @entity.awayScore, iconUrl: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.json", sprite: "icon_button_b", role: "ui", category: "ui", animations: [], style: "generic", variant: "", dimension: "2d", aspect: "1:1", name: "icon-away", thumbnailUrl: "" } } ] }, { type: game-icon, label: "Phase", value: @entity.phase, assetUrl: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.json", sprite: "icon_cog", role: "ui", category: "ui", animations: [], style: "generic", variant: "", dimension: "2d", aspect: "1:1", name: "icon-phase", thumbnailUrl: "" } }, { type: button, action: RESET, label: "Reset", iconAsset: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.json", sprite: "icon_arrow_rotate", role: "ui", category: "ui", animations: [], style: "generic", variant: "", dimension: "2d", aspect: "1:1", name: "icon-reset", thumbnailUrl: "" }, variant: secondary } ] }
245
- children: [ { type: canvas, camera: { zoom: @config.scale }, projection: "flat", showMinimap: false, tileClickEvent: TILE_CLICK, unitClickEvent: UNIT_CLICK, children: [
248
+ children: [ { type: canvas, fit: true, camera: { zoom: @config.scale }, projection: "flat", showMinimap: false, tileClickEvent: TILE_CLICK, unitClickEvent: UNIT_CLICK, children: [
246
249
  { type: draw-sprite-layer, items: (array/map @config.tiles (fn t { type: draw-sprite, position: { x: (object/get @t x), y: (object/get @t y) }, asset: (object/get @t terrainSprite) })) }
247
250
  { type: draw-sprite-layer, items: (array/map @config.features (fn f { type: draw-sprite, position: { x: (object/get @f x), y: (object/get @f y) }, asset: (object/get @f assetUrl) })) }
248
251
  { type: draw-shape-layer, items: (array/map @entity.validMoves (fn m { type: draw-shape, shape: "cell", position: { x: (object/get @m x), y: (object/get @m y) }, fill: "rgba(74,222,128,0.4)" })) }
@@ -264,7 +267,7 @@ orbital SportsBoardOrbital {
264
267
  backgroundAsset: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-pack/ui/greySheet.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-pack/ui/greySheet.json", sprite: "grey_panel.png", role: "ui", category: "ui", animations: [], style: "generic", variant: "", dimension: "2d", aspect: "1:1", name: "panel-frame", thumbnailUrl: "" }
265
268
  hudBackgroundAsset: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-pack/ui/greySheet.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-pack/ui/greySheet.json", sprite: "grey_panel.png", role: "ui", category: "ui", animations: [], style: "generic", variant: "", dimension: "2d", aspect: "1:1", name: "panel-frame", thumbnailUrl: "" }
266
269
  hud: { type: stack, direction: horizontal, gap: md, justify: between, children: [ { type: game-hud, stats: [ { label: "Home", value: @entity.homeScore, iconUrl: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.json", sprite: "icon_button_a", role: "ui", category: "ui", animations: [], style: "generic", variant: "", dimension: "2d", aspect: "1:1", name: "icon-home", thumbnailUrl: "" } }, { label: "Away", value: @entity.awayScore, iconUrl: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.json", sprite: "icon_button_b", role: "ui", category: "ui", animations: [], style: "generic", variant: "", dimension: "2d", aspect: "1:1", name: "icon-away", thumbnailUrl: "" } } ] }, { type: game-icon, label: "Phase", value: @entity.phase, assetUrl: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.json", sprite: "icon_cog", role: "ui", category: "ui", animations: [], style: "generic", variant: "", dimension: "2d", aspect: "1:1", name: "icon-phase", thumbnailUrl: "" } }, { type: button, action: RESET, label: "Reset", iconAsset: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.json", sprite: "icon_arrow_rotate", role: "ui", category: "ui", animations: [], style: "generic", variant: "", dimension: "2d", aspect: "1:1", name: "icon-reset", thumbnailUrl: "" }, variant: secondary } ] }
267
- children: [ { type: canvas, camera: { zoom: @config.scale }, projection: "flat", showMinimap: false, tileClickEvent: TILE_CLICK, unitClickEvent: UNIT_CLICK, children: [
270
+ children: [ { type: canvas, fit: true, camera: { zoom: @config.scale }, projection: "flat", showMinimap: false, tileClickEvent: TILE_CLICK, unitClickEvent: UNIT_CLICK, children: [
268
271
  { type: draw-sprite-layer, items: (array/map @config.tiles (fn t { type: draw-sprite, position: { x: (object/get @t x), y: (object/get @t y) }, asset: (object/get @t terrainSprite) })) }
269
272
  { type: draw-sprite-layer, items: (array/map @config.features (fn f { type: draw-sprite, position: { x: (object/get @f x), y: (object/get @f y) }, asset: (object/get @f assetUrl) })) }
270
273
  { type: draw-shape-layer, items: (array/map @entity.validMoves (fn m { type: draw-shape, shape: "cell", position: { x: (object/get @m x), y: (object/get @m y) }, fill: "rgba(74,222,128,0.4)" })) }
@@ -195,9 +195,9 @@ orbital StateArchitectBoardOrbital {
195
195
  ]
196
196
  })
197
197
 
198
- RUN_TESTS -> complete when (and (> (array/len @entity.transitions) 0) (== @entity.totalTests (array/len (array/filter @entity.testCases (fn tc (== (array/reduce @tc.events (fn st e (object/get (array/find @entity.transitions (fn t (and (== @t.from @st) (== @t.event @e)))) "to" @st)) @entity.initialState) @tc.expectedState))))))
198
+ RUN_TESTS -> complete when (and (> (array/len @entity.transitions) 0) (== @entity.totalTests (array/len (array/filter @entity.testCases (fn tc (== (array/reduce @tc.events @entity.initialState (fn st e (object/get (array/find @entity.transitions (fn t (and (== @t.from @st) (== @t.event @e)))) "to" @st))) @tc.expectedState))))))
199
199
  (set @entity.attempts (+ @entity.attempts 1))
200
- (set @entity.passedTests (array/len (array/filter @entity.testCases (fn tc (== (array/reduce @tc.events (fn st e (object/get (array/find @entity.transitions (fn t (and (== @t.from @st) (== @t.event @e)))) "to" @st)) @entity.initialState) @tc.expectedState)))))
200
+ (set @entity.passedTests (array/len (array/filter @entity.testCases (fn tc (== (array/reduce @tc.events @entity.initialState (fn st e (object/get (array/find @entity.transitions (fn t (and (== @t.from @st) (== @t.event @e)))) "to" @st))) @tc.expectedState)))))
201
201
  (set @entity.result "win")
202
202
  (render-ui main {
203
203
  type: game-shell
@@ -211,9 +211,9 @@ orbital StateArchitectBoardOrbital {
211
211
  ]
212
212
  })
213
213
 
214
- RUN_TESTS -> playing when (or (== (array/len @entity.transitions) 0) (!= @entity.totalTests (array/len (array/filter @entity.testCases (fn tc (== (array/reduce @tc.events (fn st e (object/get (array/find @entity.transitions (fn t (and (== @t.from @st) (== @t.event @e)))) "to" @st)) @entity.initialState) @tc.expectedState))))))
214
+ RUN_TESTS -> playing when (or (== (array/len @entity.transitions) 0) (!= @entity.totalTests (array/len (array/filter @entity.testCases (fn tc (== (array/reduce @tc.events @entity.initialState (fn st e (object/get (array/find @entity.transitions (fn t (and (== @t.from @st) (== @t.event @e)))) "to" @st))) @tc.expectedState))))))
215
215
  (set @entity.attempts (+ @entity.attempts 1))
216
- (set @entity.passedTests (array/len (array/filter @entity.testCases (fn tc (== (array/reduce @tc.events (fn st e (object/get (array/find @entity.transitions (fn t (and (== @t.from @st) (== @t.event @e)))) "to" @st)) @entity.initialState) @tc.expectedState)))))
216
+ (set @entity.passedTests (array/len (array/filter @entity.testCases (fn tc (== (array/reduce @tc.events @entity.initialState (fn st e (object/get (array/find @entity.transitions (fn t (and (== @t.from @st) (== @t.event @e)))) "to" @st))) @tc.expectedState)))))
217
217
  (render-ui main {
218
218
  type: game-shell
219
219
  hud: { type: stack, direction: horizontal, gap: md, justify: between, children: [ { type: game-hud, stats: [ { label: "Passed", value: @entity.passedTests }, { label: "Total", value: @entity.totalTests }, { label: "Attempts", value: @entity.attempts }, { label: "Result", value: @entity.result } ] }, { type: stack, direction: horizontal, gap: sm, children: [ { type: button, action: START_CONNECT, label: "Add Transition", variant: ghost }, { type: button, action: RUN_TESTS, label: "Run Tests", variant: primary }, { type: button, action: PLAY_AGAIN, label: "Reset", variant: secondary } ] } ] }
@@ -70,7 +70,7 @@ orbital TacticsDemo2DOrbital {
70
70
  id : string!
71
71
  units : [Unit] = [ { id: "p1", position: { x: 0, y: 0 }, x: 0, y: 0, z: 0, team: "player", health: 3, maxHealth: 3, unitType: "soldier", name: "Soldier A", modelUrl: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.json", sprite: "blue_body_square.png", role: "player", category: "unit", animations: ["idle"], style: "vector", dimension: "2d", aspect: "1:1", name: "player-unit", thumbnailUrl: "" } }, { id: "p2", position: { x: 0, y: 2 }, x: 0, y: 2, z: 0, team: "player", health: 3, maxHealth: 3, unitType: "soldier", name: "Soldier B", modelUrl: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.json", sprite: "blue_body_square.png", role: "player", category: "unit", animations: ["idle"], style: "vector", dimension: "2d", aspect: "1:1", name: "player-unit", thumbnailUrl: "" } }, { id: "e1", position: { x: 2, y: 1 }, x: 2, y: 1, z: 0, team: "enemy", health: 2, maxHealth: 2, unitType: "raider", name: "Raider", modelUrl: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.json", sprite: "red_body_square.png", role: "enemy", category: "unit", animations: ["idle"], style: "vector", dimension: "2d", aspect: "1:1", name: "enemy-unit", thumbnailUrl: "" } } ]
72
72
  fx : [Fx] = []
73
- tiles : [Tile] = [ { id: "t-0-0", x: 0, y: 0, terrain: "grass", passable: true, terrainSprite: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.json", sprite: "grey_body_square.png", role: "tile", category: "grass", animations: ["static"], style: "vector", dimension: "2d", aspect: "1:1", name: "grass", thumbnailUrl: "" } }, { id: "t-1-0", x: 1, y: 0, terrain: "grass", passable: true, terrainSprite: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.json", sprite: "grey_body_square.png", role: "tile", category: "grass", animations: ["static"], style: "vector", dimension: "2d", aspect: "1:1", name: "grass", thumbnailUrl: "" } }, { id: "t-2-0", x: 2, y: 0, terrain: "grass", passable: true, terrainSprite: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.json", sprite: "grey_body_square.png", role: "tile", category: "grass", animations: ["static"], style: "vector", dimension: "2d", aspect: "1:1", name: "grass", thumbnailUrl: "" } }, { id: "t-0-1", x: 0, y: 1, terrain: "grass", passable: true, terrainSprite: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.json", sprite: "grey_body_square.png", role: "tile", category: "grass", animations: ["static"], style: "vector", dimension: "2d", aspect: "1:1", name: "grass", thumbnailUrl: "" } }, { id: "t-1-1", x: 1, y: 1, terrain: "grass", passable: true, terrainSprite: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.json", sprite: "grey_body_square.png", role: "tile", category: "grass", animations: ["static"], style: "vector", dimension: "2d", aspect: "1:1", name: "grass", thumbnailUrl: "" } }, { id: "t-2-1", x: 2, y: 1, terrain: "grass", passable: true, terrainSprite: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.json", sprite: "grey_body_square.png", role: "tile", category: "grass", animations: ["static"], style: "vector", dimension: "2d", aspect: "1:1", name: "grass", thumbnailUrl: "" } }, { id: "t-0-2", x: 0, y: 2, terrain: "grass", passable: true, terrainSprite: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.json", sprite: "grey_body_square.png", role: "tile", category: "grass", animations: ["static"], style: "vector", dimension: "2d", aspect: "1:1", name: "grass", thumbnailUrl: "" } }, { id: "t-1-2", x: 1, y: 2, terrain: "grass", passable: true, terrainSprite: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.json", sprite: "grey_body_square.png", role: "tile", category: "grass", animations: ["static"], style: "vector", dimension: "2d", aspect: "1:1", name: "grass", thumbnailUrl: "" } }, { id: "t-2-2", x: 2, y: 2, terrain: "grass", passable: true, terrainSprite: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.json", sprite: "grey_body_square.png", role: "tile", category: "grass", animations: ["static"], style: "vector", dimension: "2d", aspect: "1:1", name: "grass", thumbnailUrl: "" } } ]
73
+ tiles : [Tile] = [ { id: "t-0-0", x: 0, y: 0, terrain: "grass", passable: true, terrainSprite: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.json", sprite: "tile_grey.png", role: "tile", category: "grass", animations: ["static"], style: "vector", dimension: "2d", aspect: "1:1", name: "grass", thumbnailUrl: "" } }, { id: "t-1-0", x: 1, y: 0, terrain: "grass", passable: true, terrainSprite: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.json", sprite: "tile_grey.png", role: "tile", category: "grass", animations: ["static"], style: "vector", dimension: "2d", aspect: "1:1", name: "grass", thumbnailUrl: "" } }, { id: "t-2-0", x: 2, y: 0, terrain: "grass", passable: true, terrainSprite: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.json", sprite: "tile_grey.png", role: "tile", category: "grass", animations: ["static"], style: "vector", dimension: "2d", aspect: "1:1", name: "grass", thumbnailUrl: "" } }, { id: "t-0-1", x: 0, y: 1, terrain: "grass", passable: true, terrainSprite: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.json", sprite: "tile_grey.png", role: "tile", category: "grass", animations: ["static"], style: "vector", dimension: "2d", aspect: "1:1", name: "grass", thumbnailUrl: "" } }, { id: "t-1-1", x: 1, y: 1, terrain: "grass", passable: true, terrainSprite: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.json", sprite: "tile_grey.png", role: "tile", category: "grass", animations: ["static"], style: "vector", dimension: "2d", aspect: "1:1", name: "grass", thumbnailUrl: "" } }, { id: "t-2-1", x: 2, y: 1, terrain: "grass", passable: true, terrainSprite: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.json", sprite: "tile_grey.png", role: "tile", category: "grass", animations: ["static"], style: "vector", dimension: "2d", aspect: "1:1", name: "grass", thumbnailUrl: "" } }, { id: "t-0-2", x: 0, y: 2, terrain: "grass", passable: true, terrainSprite: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.json", sprite: "tile_grey.png", role: "tile", category: "grass", animations: ["static"], style: "vector", dimension: "2d", aspect: "1:1", name: "grass", thumbnailUrl: "" } }, { id: "t-1-2", x: 1, y: 2, terrain: "grass", passable: true, terrainSprite: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.json", sprite: "tile_grey.png", role: "tile", category: "grass", animations: ["static"], style: "vector", dimension: "2d", aspect: "1:1", name: "grass", thumbnailUrl: "" } }, { id: "t-2-2", x: 2, y: 2, terrain: "grass", passable: true, terrainSprite: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.json", sprite: "tile_grey.png", role: "tile", category: "grass", animations: ["static"], style: "vector", dimension: "2d", aspect: "1:1", name: "grass", thumbnailUrl: "" } } ]
74
74
  result : string = "none"
75
75
  selectedUnitId : string = ""
76
76
  validMoves : [ValidMove] = []
@@ -88,7 +88,7 @@ orbital TacticsDemo2DOrbital {
88
88
  gridHeight: 3
89
89
  attackDamage: 2
90
90
  units: [ { id: "p1", position: { x: 0, y: 0 }, x: 0, y: 0, z: 0, team: "player", health: 3, maxHealth: 3, unitType: "soldier", name: "Soldier A", modelUrl: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.json", sprite: "blue_body_square.png", role: "player", category: "unit", animations: ["idle"], style: "vector", dimension: "2d", aspect: "1:1", name: "player-unit", thumbnailUrl: "" } }, { id: "p2", position: { x: 0, y: 2 }, x: 0, y: 2, z: 0, team: "player", health: 3, maxHealth: 3, unitType: "soldier", name: "Soldier B", modelUrl: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.json", sprite: "blue_body_square.png", role: "player", category: "unit", animations: ["idle"], style: "vector", dimension: "2d", aspect: "1:1", name: "player-unit", thumbnailUrl: "" } }, { id: "e1", position: { x: 2, y: 1 }, x: 2, y: 1, z: 0, team: "enemy", health: 2, maxHealth: 2, unitType: "raider", name: "Raider", modelUrl: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.json", sprite: "red_body_square.png", role: "enemy", category: "unit", animations: ["idle"], style: "vector", dimension: "2d", aspect: "1:1", name: "enemy-unit", thumbnailUrl: "" } } ]
91
- tiles: [ { id: "t-0-0", x: 0, y: 0, terrain: "grass", passable: true, terrainSprite: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.json", sprite: "grey_body_square.png", role: "tile", category: "grass", animations: ["static"], style: "vector", dimension: "2d", aspect: "1:1", name: "grass", thumbnailUrl: "" } }, { id: "t-1-0", x: 1, y: 0, terrain: "grass", passable: true, terrainSprite: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.json", sprite: "grey_body_square.png", role: "tile", category: "grass", animations: ["static"], style: "vector", dimension: "2d", aspect: "1:1", name: "grass", thumbnailUrl: "" } }, { id: "t-2-0", x: 2, y: 0, terrain: "grass", passable: true, terrainSprite: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.json", sprite: "grey_body_square.png", role: "tile", category: "grass", animations: ["static"], style: "vector", dimension: "2d", aspect: "1:1", name: "grass", thumbnailUrl: "" } }, { id: "t-0-1", x: 0, y: 1, terrain: "grass", passable: true, terrainSprite: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.json", sprite: "grey_body_square.png", role: "tile", category: "grass", animations: ["static"], style: "vector", dimension: "2d", aspect: "1:1", name: "grass", thumbnailUrl: "" } }, { id: "t-1-1", x: 1, y: 1, terrain: "grass", passable: true, terrainSprite: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.json", sprite: "grey_body_square.png", role: "tile", category: "grass", animations: ["static"], style: "vector", dimension: "2d", aspect: "1:1", name: "grass", thumbnailUrl: "" } }, { id: "t-2-1", x: 2, y: 1, terrain: "grass", passable: true, terrainSprite: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.json", sprite: "grey_body_square.png", role: "tile", category: "grass", animations: ["static"], style: "vector", dimension: "2d", aspect: "1:1", name: "grass", thumbnailUrl: "" } }, { id: "t-0-2", x: 0, y: 2, terrain: "grass", passable: true, terrainSprite: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.json", sprite: "grey_body_square.png", role: "tile", category: "grass", animations: ["static"], style: "vector", dimension: "2d", aspect: "1:1", name: "grass", thumbnailUrl: "" } }, { id: "t-1-2", x: 1, y: 2, terrain: "grass", passable: true, terrainSprite: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.json", sprite: "grey_body_square.png", role: "tile", category: "grass", animations: ["static"], style: "vector", dimension: "2d", aspect: "1:1", name: "grass", thumbnailUrl: "" } }, { id: "t-2-2", x: 2, y: 2, terrain: "grass", passable: true, terrainSprite: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.json", sprite: "grey_body_square.png", role: "tile", category: "grass", animations: ["static"], style: "vector", dimension: "2d", aspect: "1:1", name: "grass", thumbnailUrl: "" } } ]
91
+ tiles: [ { id: "t-0-0", x: 0, y: 0, terrain: "grass", passable: true, terrainSprite: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.json", sprite: "tile_grey.png", role: "tile", category: "grass", animations: ["static"], style: "vector", dimension: "2d", aspect: "1:1", name: "grass", thumbnailUrl: "" } }, { id: "t-1-0", x: 1, y: 0, terrain: "grass", passable: true, terrainSprite: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.json", sprite: "tile_grey.png", role: "tile", category: "grass", animations: ["static"], style: "vector", dimension: "2d", aspect: "1:1", name: "grass", thumbnailUrl: "" } }, { id: "t-2-0", x: 2, y: 0, terrain: "grass", passable: true, terrainSprite: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.json", sprite: "tile_grey.png", role: "tile", category: "grass", animations: ["static"], style: "vector", dimension: "2d", aspect: "1:1", name: "grass", thumbnailUrl: "" } }, { id: "t-0-1", x: 0, y: 1, terrain: "grass", passable: true, terrainSprite: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.json", sprite: "tile_grey.png", role: "tile", category: "grass", animations: ["static"], style: "vector", dimension: "2d", aspect: "1:1", name: "grass", thumbnailUrl: "" } }, { id: "t-1-1", x: 1, y: 1, terrain: "grass", passable: true, terrainSprite: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.json", sprite: "tile_grey.png", role: "tile", category: "grass", animations: ["static"], style: "vector", dimension: "2d", aspect: "1:1", name: "grass", thumbnailUrl: "" } }, { id: "t-2-1", x: 2, y: 1, terrain: "grass", passable: true, terrainSprite: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.json", sprite: "tile_grey.png", role: "tile", category: "grass", animations: ["static"], style: "vector", dimension: "2d", aspect: "1:1", name: "grass", thumbnailUrl: "" } }, { id: "t-0-2", x: 0, y: 2, terrain: "grass", passable: true, terrainSprite: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.json", sprite: "tile_grey.png", role: "tile", category: "grass", animations: ["static"], style: "vector", dimension: "2d", aspect: "1:1", name: "grass", thumbnailUrl: "" } }, { id: "t-1-2", x: 1, y: 2, terrain: "grass", passable: true, terrainSprite: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.json", sprite: "tile_grey.png", role: "tile", category: "grass", animations: ["static"], style: "vector", dimension: "2d", aspect: "1:1", name: "grass", thumbnailUrl: "" } }, { id: "t-2-2", x: 2, y: 2, terrain: "grass", passable: true, terrainSprite: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-shape-characters/units/spritesheet_default.json", sprite: "tile_grey.png", role: "tile", category: "grass", animations: ["static"], style: "vector", dimension: "2d", aspect: "1:1", name: "grass", thumbnailUrl: "" } } ]
92
92
  }
93
93
  }
94
94
 
@@ -104,6 +104,10 @@ orbital TacticsDemo2DOrbital {
104
104
  config { running: true, initialEnemies: 1 }
105
105
  }
106
106
 
107
+ trait AnimClock = Frame.traits.AnimClock -> GameState {
108
+ config { frames: [] }
109
+ }
110
+
107
111
  trait Player = Frame.traits.PlayerIntent -> GameState {
108
112
  config {
109
113
  gridWidth: 3
@@ -117,5 +121,5 @@ orbital TacticsDemo2DOrbital {
117
121
  }
118
122
  }
119
123
 
120
- page "/tactics-demo-2d" as TacticsDemo2DPage -> Authority, FxDecay, RoundLogic, ScoreKeeper, Player
124
+ page "/tactics-demo-2d" as TacticsDemo2DPage -> Authority, FxDecay, RoundLogic, ScoreKeeper, Player, AnimClock
121
125
  }
@@ -105,6 +105,10 @@ orbital TanksBoardOrbital {
105
105
  config { running: true, pointsPerKill: 10, startScore: 0, initialEnemies: 2 }
106
106
  }
107
107
 
108
+ trait AnimClock = Frame.traits.AnimClock -> GameState {
109
+ config { frames: [] }
110
+ }
111
+
108
112
  trait Player = Frame.traits.PlayerIntent -> GameState {
109
113
  config {
110
114
  gridWidth: 8
@@ -120,5 +124,5 @@ orbital TanksBoardOrbital {
120
124
  }
121
125
  }
122
126
 
123
- page "/tanks-board" as TanksBoardPage -> Authority, FxDecay, RoundLogic, ScoreKeeper, Player
127
+ page "/tanks-board" as TanksBoardPage -> Authority, FxDecay, RoundLogic, ScoreKeeper, Player, AnimClock
124
128
  }
@@ -111,6 +111,10 @@ orbital TopdownRtsBoardOrbital {
111
111
  config { running: true, startPoints: 3, pointsPerTurn: 2, spawnCost: 3, spawnX: 0, spawnY: 0, spawnTeam: "player", spawnUnitType: "tank", spawnHealth: 10 }
112
112
  }
113
113
 
114
+ trait AnimClock = Frame.traits.AnimClock -> GameState {
115
+ config { frames: [] }
116
+ }
117
+
114
118
  trait Player = Frame.traits.PlayerIntent -> GameState {
115
119
  config {
116
120
  gridWidth: 8
@@ -127,5 +131,5 @@ orbital TopdownRtsBoardOrbital {
127
131
  }
128
132
  }
129
133
 
130
- page "/topdown-rts-board" as TopdownRtsBoardPage -> Authority, FxDecay, RoundLogic, ScoreKeeper, Producer, Player
134
+ page "/topdown-rts-board" as TopdownRtsBoardPage -> Authority, FxDecay, RoundLogic, ScoreKeeper, Producer, Player, AnimClock
131
135
  }
@@ -124,7 +124,7 @@ orbital TowerDefenseBoardOrbital {
124
124
  hudBackgroundAsset: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-adventure-pack/ui/uipack_rpg_sheet.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-adventure-pack/ui/uipack_rpg_sheet.json", sprite: "panel_beige.png", role: "ui", category: "ui", animations: [], style: "vector", variant: "", dimension: "2d", aspect: "1:1", name: "panel-frame", thumbnailUrl: "" }
125
125
  hud: { type: game-hud, stats: [ { label: "Gold", value: @entity.gold, iconUrl: { url: "https://almadar-kflow-assets.web.app/shared/ui-tower-defense-board/kenney-cartography-pack/ui/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/ui-tower-defense-board/kenney-cartography-pack/ui/spritesheet_default.json", sprite: "chest.png", role: "ui", category: "ui", animations: [], style: "vector", variant: "", dimension: "2d", aspect: "1:1", name: "icon-gold", thumbnailUrl: "" } }, { label: "Lives", value: @entity.lives, max: @config.lives, format: "bar", iconUrl: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-emote-pack/ui/vector_style1.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-emote-pack/ui/vector_style1.json", sprite: "emote_heart.png", role: "ui", category: "ui", animations: [], style: "vector", variant: "", dimension: "2d", aspect: "1:1", name: "icon-lives", thumbnailUrl: "" } }, { label: "Wave", value: @entity.wave, max: @config.maxWaves, iconUrl: { url: "https://almadar-kflow-assets.web.app/shared/ui-tower-defense-board/kenney-cartography-pack/ui/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/ui-tower-defense-board/kenney-cartography-pack/ui/spritesheet_default.json", sprite: "flag.png", role: "ui", category: "ui", animations: [], style: "vector", variant: "", dimension: "2d", aspect: "1:1", name: "icon-wave", thumbnailUrl: "" } }, { label: "Towers", value: (array/len @entity.towers), iconUrl: { url: "https://almadar-kflow-assets.web.app/shared/ui-tower-defense-board/kenney-cartography-pack/ui/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/ui-tower-defense-board/kenney-cartography-pack/ui/spritesheet_default.json", sprite: "tower.png", role: "ui", category: "ui", animations: [], style: "vector", variant: "", dimension: "2d", aspect: "1:1", name: "icon-towers", thumbnailUrl: "" } } ] }
126
126
  addons: { type: button, action: START_WAVE, label: "Start Wave", iconAsset: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.json", sprite: "icon_play", role: "ui", category: "ui", animations: [], style: "vector", variant: "", dimension: "2d", aspect: "1:1", name: "icon-start-wave", thumbnailUrl: "" }, variant: primary }
127
- children: [ { type: canvas, camera: { zoom: @config.scale }, projection: "isometric", showMinimap: true, tileClickEvent: PLACE_TOWER, unitClickEvent: UNIT_CLICK, children: [
127
+ children: [ { type: canvas, fit: true, camera: { zoom: @config.scale }, projection: "isometric", showMinimap: true, tileClickEvent: PLACE_TOWER, unitClickEvent: UNIT_CLICK, children: [
128
128
  { type: draw-sprite-layer, items: (array/map @config.tiles (fn t { type: draw-sprite, position: { x: (object/get @t x), y: (object/get @t y) }, asset: (object/get @t terrainSprite) })) }
129
129
  { type: draw-sprite-layer, items: (array/map @entity.towers (fn t { type: draw-sprite, position: { x: (object/get @t x), y: (object/get @t y) }, asset: (object/get (object/get @config.assetManifest features) "tower") })) }
130
130
  { type: draw-shape-layer, items: (array/map @entity.validMoves (fn m { type: draw-shape, shape: "cell", position: { x: (object/get @m x), y: (object/get @m y) }, fill: "rgba(74,222,128,0.4)" })) }
@@ -146,7 +146,7 @@ orbital TowerDefenseBoardOrbital {
146
146
  hudBackgroundAsset: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-adventure-pack/ui/uipack_rpg_sheet.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-adventure-pack/ui/uipack_rpg_sheet.json", sprite: "panel_beige.png", role: "ui", category: "ui", animations: [], style: "vector", variant: "", dimension: "2d", aspect: "1:1", name: "panel-frame", thumbnailUrl: "" }
147
147
  hud: { type: game-hud, stats: [ { label: "Gold", value: @entity.gold, iconUrl: { url: "https://almadar-kflow-assets.web.app/shared/ui-tower-defense-board/kenney-cartography-pack/ui/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/ui-tower-defense-board/kenney-cartography-pack/ui/spritesheet_default.json", sprite: "chest.png", role: "ui", category: "ui", animations: [], style: "vector", variant: "", dimension: "2d", aspect: "1:1", name: "icon-gold", thumbnailUrl: "" } }, { label: "Lives", value: @entity.lives, max: @config.lives, format: "bar", iconUrl: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-emote-pack/ui/vector_style1.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-emote-pack/ui/vector_style1.json", sprite: "emote_heart.png", role: "ui", category: "ui", animations: [], style: "vector", variant: "", dimension: "2d", aspect: "1:1", name: "icon-lives", thumbnailUrl: "" } }, { label: "Wave", value: @entity.wave, max: @config.maxWaves, iconUrl: { url: "https://almadar-kflow-assets.web.app/shared/ui-tower-defense-board/kenney-cartography-pack/ui/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/ui-tower-defense-board/kenney-cartography-pack/ui/spritesheet_default.json", sprite: "flag.png", role: "ui", category: "ui", animations: [], style: "vector", variant: "", dimension: "2d", aspect: "1:1", name: "icon-wave", thumbnailUrl: "" } }, { label: "Towers", value: (array/len @entity.towers), iconUrl: { url: "https://almadar-kflow-assets.web.app/shared/ui-tower-defense-board/kenney-cartography-pack/ui/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/ui-tower-defense-board/kenney-cartography-pack/ui/spritesheet_default.json", sprite: "tower.png", role: "ui", category: "ui", animations: [], style: "vector", variant: "", dimension: "2d", aspect: "1:1", name: "icon-towers", thumbnailUrl: "" } } ] }
148
148
  addons: { type: button, action: START_WAVE, label: "Start Wave", iconAsset: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.json", sprite: "icon_play", role: "ui", category: "ui", animations: [], style: "vector", variant: "", dimension: "2d", aspect: "1:1", name: "icon-start-wave", thumbnailUrl: "" }, variant: primary }
149
- children: [ { type: canvas, camera: { zoom: @config.scale }, projection: "isometric", showMinimap: true, tileClickEvent: PLACE_TOWER, unitClickEvent: UNIT_CLICK, children: [
149
+ children: [ { type: canvas, fit: true, camera: { zoom: @config.scale }, projection: "isometric", showMinimap: true, tileClickEvent: PLACE_TOWER, unitClickEvent: UNIT_CLICK, children: [
150
150
  { type: draw-sprite-layer, items: (array/map @config.tiles (fn t { type: draw-sprite, position: { x: (object/get @t x), y: (object/get @t y) }, asset: (object/get @t terrainSprite) })) }
151
151
  { type: draw-sprite-layer, items: (array/map @entity.towers (fn t { type: draw-sprite, position: { x: (object/get @t x), y: (object/get @t y) }, asset: (object/get (object/get @config.assetManifest features) "tower") })) }
152
152
  { type: draw-shape-layer, items: (array/map @entity.validMoves (fn m { type: draw-shape, shape: "cell", position: { x: (object/get @m x), y: (object/get @m y) }, fill: "rgba(74,222,128,0.4)" })) }
@@ -168,7 +168,7 @@ orbital TowerDefenseBoardOrbital {
168
168
  hudBackgroundAsset: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-adventure-pack/ui/uipack_rpg_sheet.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-adventure-pack/ui/uipack_rpg_sheet.json", sprite: "panel_beige.png", role: "ui", category: "ui", animations: [], style: "vector", variant: "", dimension: "2d", aspect: "1:1", name: "panel-frame", thumbnailUrl: "" }
169
169
  hud: { type: game-hud, stats: [ { label: "Gold", value: @entity.gold, iconUrl: { url: "https://almadar-kflow-assets.web.app/shared/ui-tower-defense-board/kenney-cartography-pack/ui/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/ui-tower-defense-board/kenney-cartography-pack/ui/spritesheet_default.json", sprite: "chest.png", role: "ui", category: "ui", animations: [], style: "vector", variant: "", dimension: "2d", aspect: "1:1", name: "icon-gold", thumbnailUrl: "" } }, { label: "Lives", value: @entity.lives, max: @config.lives, format: "bar", iconUrl: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-emote-pack/ui/vector_style1.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-emote-pack/ui/vector_style1.json", sprite: "emote_heart.png", role: "ui", category: "ui", animations: [], style: "vector", variant: "", dimension: "2d", aspect: "1:1", name: "icon-lives", thumbnailUrl: "" } }, { label: "Wave", value: @entity.wave, max: @config.maxWaves, iconUrl: { url: "https://almadar-kflow-assets.web.app/shared/ui-tower-defense-board/kenney-cartography-pack/ui/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/ui-tower-defense-board/kenney-cartography-pack/ui/spritesheet_default.json", sprite: "flag.png", role: "ui", category: "ui", animations: [], style: "vector", variant: "", dimension: "2d", aspect: "1:1", name: "icon-wave", thumbnailUrl: "" } }, { label: "Towers", value: (array/len @entity.towers), iconUrl: { url: "https://almadar-kflow-assets.web.app/shared/ui-tower-defense-board/kenney-cartography-pack/ui/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/ui-tower-defense-board/kenney-cartography-pack/ui/spritesheet_default.json", sprite: "tower.png", role: "ui", category: "ui", animations: [], style: "vector", variant: "", dimension: "2d", aspect: "1:1", name: "icon-towers", thumbnailUrl: "" } } ] }
170
170
  addons: { type: button, action: START_WAVE, label: "Start Wave", iconAsset: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.json", sprite: "icon_play", role: "ui", category: "ui", animations: [], style: "vector", variant: "", dimension: "2d", aspect: "1:1", name: "icon-start-wave", thumbnailUrl: "" }, variant: primary }
171
- children: [ { type: canvas, camera: { zoom: @config.scale }, projection: "isometric", showMinimap: true, tileClickEvent: PLACE_TOWER, unitClickEvent: UNIT_CLICK, children: [
171
+ children: [ { type: canvas, fit: true, camera: { zoom: @config.scale }, projection: "isometric", showMinimap: true, tileClickEvent: PLACE_TOWER, unitClickEvent: UNIT_CLICK, children: [
172
172
  { type: draw-sprite-layer, items: (array/map @config.tiles (fn t { type: draw-sprite, position: { x: (object/get @t x), y: (object/get @t y) }, asset: (object/get @t terrainSprite) })) }
173
173
  { type: draw-sprite-layer, items: (array/map @entity.towers (fn t { type: draw-sprite, position: { x: (object/get @t x), y: (object/get @t y) }, asset: (object/get (object/get @config.assetManifest features) "tower") })) }
174
174
  { type: draw-shape-layer, items: (array/map @entity.validMoves (fn m { type: draw-shape, shape: "cell", position: { x: (object/get @m x), y: (object/get @m y) }, fill: "rgba(74,222,128,0.4)" })) }
@@ -188,7 +188,7 @@ orbital TowerDefenseBoardOrbital {
188
188
  hudBackgroundAsset: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-adventure-pack/ui/uipack_rpg_sheet.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-adventure-pack/ui/uipack_rpg_sheet.json", sprite: "panel_beige.png", role: "ui", category: "ui", animations: [], style: "vector", variant: "", dimension: "2d", aspect: "1:1", name: "panel-frame", thumbnailUrl: "" }
189
189
  hud: { type: game-hud, stats: [ { label: "Gold", value: @entity.gold, iconUrl: { url: "https://almadar-kflow-assets.web.app/shared/ui-tower-defense-board/kenney-cartography-pack/ui/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/ui-tower-defense-board/kenney-cartography-pack/ui/spritesheet_default.json", sprite: "chest.png", role: "ui", category: "ui", animations: [], style: "vector", variant: "", dimension: "2d", aspect: "1:1", name: "icon-gold", thumbnailUrl: "" } }, { label: "Lives", value: @entity.lives, max: @config.lives, format: "bar", iconUrl: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-emote-pack/ui/vector_style1.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-emote-pack/ui/vector_style1.json", sprite: "emote_heart.png", role: "ui", category: "ui", animations: [], style: "vector", variant: "", dimension: "2d", aspect: "1:1", name: "icon-lives", thumbnailUrl: "" } }, { label: "Wave", value: @entity.wave, max: @config.maxWaves, iconUrl: { url: "https://almadar-kflow-assets.web.app/shared/ui-tower-defense-board/kenney-cartography-pack/ui/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/ui-tower-defense-board/kenney-cartography-pack/ui/spritesheet_default.json", sprite: "flag.png", role: "ui", category: "ui", animations: [], style: "vector", variant: "", dimension: "2d", aspect: "1:1", name: "icon-wave", thumbnailUrl: "" } }, { label: "Towers", value: (array/len @entity.towers), iconUrl: { url: "https://almadar-kflow-assets.web.app/shared/ui-tower-defense-board/kenney-cartography-pack/ui/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/ui-tower-defense-board/kenney-cartography-pack/ui/spritesheet_default.json", sprite: "tower.png", role: "ui", category: "ui", animations: [], style: "vector", variant: "", dimension: "2d", aspect: "1:1", name: "icon-towers", thumbnailUrl: "" } } ] }
190
190
  overlay: { type: game-menu, title: (if (== @entity.result "won") "VICTORY" "DEFEAT"), subtitle: (if (== @entity.result "won") "All waves survived" "The base has fallen"), options: [ { id: "again", label: "Play Again", event: "PLAY_AGAIN", variant: "primary" } ] }
191
- children: [ { type: canvas, camera: { zoom: @config.scale }, projection: "isometric", showMinimap: true, tileClickEvent: PLACE_TOWER, unitClickEvent: UNIT_CLICK, children: [
191
+ children: [ { type: canvas, fit: true, camera: { zoom: @config.scale }, projection: "isometric", showMinimap: true, tileClickEvent: PLACE_TOWER, unitClickEvent: UNIT_CLICK, children: [
192
192
  { type: draw-sprite-layer, items: (array/map @config.tiles (fn t { type: draw-sprite, position: { x: (object/get @t x), y: (object/get @t y) }, asset: (object/get @t terrainSprite) })) }
193
193
  { type: draw-sprite-layer, items: (array/map @entity.towers (fn t { type: draw-sprite, position: { x: (object/get @t x), y: (object/get @t y) }, asset: (object/get (object/get @config.assetManifest features) "tower") })) }
194
194
  { type: draw-shape-layer, items: (array/map @entity.validMoves (fn m { type: draw-shape, shape: "cell", position: { x: (object/get @m x), y: (object/get @m y) }, fill: "rgba(74,222,128,0.4)" })) }
@@ -223,7 +223,7 @@ orbital TowerDefenseBoardOrbital {
223
223
  hudBackgroundAsset: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-adventure-pack/ui/uipack_rpg_sheet.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-adventure-pack/ui/uipack_rpg_sheet.json", sprite: "panel_beige.png", role: "ui", category: "ui", animations: [], style: "vector", variant: "", dimension: "2d", aspect: "1:1", name: "panel-frame", thumbnailUrl: "" }
224
224
  hud: { type: game-hud, stats: [ { label: "Gold", value: @entity.gold, iconUrl: { url: "https://almadar-kflow-assets.web.app/shared/ui-tower-defense-board/kenney-cartography-pack/ui/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/ui-tower-defense-board/kenney-cartography-pack/ui/spritesheet_default.json", sprite: "chest.png", role: "ui", category: "ui", animations: [], style: "vector", variant: "", dimension: "2d", aspect: "1:1", name: "icon-gold", thumbnailUrl: "" } }, { label: "Lives", value: @entity.lives, max: @config.lives, format: "bar", iconUrl: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-emote-pack/ui/vector_style1.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-emote-pack/ui/vector_style1.json", sprite: "emote_heart.png", role: "ui", category: "ui", animations: [], style: "vector", variant: "", dimension: "2d", aspect: "1:1", name: "icon-lives", thumbnailUrl: "" } }, { label: "Wave", value: @entity.wave, max: @config.maxWaves, iconUrl: { url: "https://almadar-kflow-assets.web.app/shared/ui-tower-defense-board/kenney-cartography-pack/ui/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/ui-tower-defense-board/kenney-cartography-pack/ui/spritesheet_default.json", sprite: "flag.png", role: "ui", category: "ui", animations: [], style: "vector", variant: "", dimension: "2d", aspect: "1:1", name: "icon-wave", thumbnailUrl: "" } }, { label: "Towers", value: (array/len @entity.towers), iconUrl: { url: "https://almadar-kflow-assets.web.app/shared/ui-tower-defense-board/kenney-cartography-pack/ui/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/ui-tower-defense-board/kenney-cartography-pack/ui/spritesheet_default.json", sprite: "tower.png", role: "ui", category: "ui", animations: [], style: "vector", variant: "", dimension: "2d", aspect: "1:1", name: "icon-towers", thumbnailUrl: "" } } ] }
225
225
  addons: { type: button, action: START_WAVE, label: "Start Wave", iconAsset: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.json", sprite: "icon_play", role: "ui", category: "ui", animations: [], style: "vector", variant: "", dimension: "2d", aspect: "1:1", name: "icon-start-wave", thumbnailUrl: "" }, variant: primary }
226
- children: [ { type: canvas, camera: { zoom: @config.scale }, projection: "isometric", showMinimap: true, tileClickEvent: PLACE_TOWER, unitClickEvent: UNIT_CLICK, children: [
226
+ children: [ { type: canvas, fit: true, camera: { zoom: @config.scale }, projection: "isometric", showMinimap: true, tileClickEvent: PLACE_TOWER, unitClickEvent: UNIT_CLICK, children: [
227
227
  { type: draw-sprite-layer, items: (array/map @config.tiles (fn t { type: draw-sprite, position: { x: (object/get @t x), y: (object/get @t y) }, asset: (object/get @t terrainSprite) })) }
228
228
  { type: draw-sprite-layer, items: (array/map @entity.towers (fn t { type: draw-sprite, position: { x: (object/get @t x), y: (object/get @t y) }, asset: (object/get (object/get @config.assetManifest features) "tower") })) }
229
229
  { type: draw-shape-layer, items: (array/map @entity.validMoves (fn m { type: draw-shape, shape: "cell", position: { x: (object/get @m x), y: (object/get @m y) }, fill: "rgba(74,222,128,0.4)" })) }
@@ -248,7 +248,7 @@ orbital TowerDefenseBoardOrbital {
248
248
  hudBackgroundAsset: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-adventure-pack/ui/uipack_rpg_sheet.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-adventure-pack/ui/uipack_rpg_sheet.json", sprite: "panel_beige.png", role: "ui", category: "ui", animations: [], style: "vector", variant: "", dimension: "2d", aspect: "1:1", name: "panel-frame", thumbnailUrl: "" }
249
249
  hud: { type: game-hud, stats: [ { label: "Gold", value: @entity.gold, iconUrl: { url: "https://almadar-kflow-assets.web.app/shared/ui-tower-defense-board/kenney-cartography-pack/ui/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/ui-tower-defense-board/kenney-cartography-pack/ui/spritesheet_default.json", sprite: "chest.png", role: "ui", category: "ui", animations: [], style: "vector", variant: "", dimension: "2d", aspect: "1:1", name: "icon-gold", thumbnailUrl: "" } }, { label: "Lives", value: @entity.lives, max: @config.lives, format: "bar", iconUrl: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-emote-pack/ui/vector_style1.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-emote-pack/ui/vector_style1.json", sprite: "emote_heart.png", role: "ui", category: "ui", animations: [], style: "vector", variant: "", dimension: "2d", aspect: "1:1", name: "icon-lives", thumbnailUrl: "" } }, { label: "Wave", value: @entity.wave, max: @config.maxWaves, iconUrl: { url: "https://almadar-kflow-assets.web.app/shared/ui-tower-defense-board/kenney-cartography-pack/ui/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/ui-tower-defense-board/kenney-cartography-pack/ui/spritesheet_default.json", sprite: "flag.png", role: "ui", category: "ui", animations: [], style: "vector", variant: "", dimension: "2d", aspect: "1:1", name: "icon-wave", thumbnailUrl: "" } }, { label: "Towers", value: (array/len @entity.towers), iconUrl: { url: "https://almadar-kflow-assets.web.app/shared/ui-tower-defense-board/kenney-cartography-pack/ui/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/ui-tower-defense-board/kenney-cartography-pack/ui/spritesheet_default.json", sprite: "tower.png", role: "ui", category: "ui", animations: [], style: "vector", variant: "", dimension: "2d", aspect: "1:1", name: "icon-towers", thumbnailUrl: "" } } ] }
250
250
  addons: { type: button, action: START_WAVE, label: "Start Wave", iconAsset: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.json", sprite: "icon_play", role: "ui", category: "ui", animations: [], style: "vector", variant: "", dimension: "2d", aspect: "1:1", name: "icon-start-wave", thumbnailUrl: "" }, variant: primary }
251
- children: [ { type: canvas, camera: { zoom: @config.scale }, projection: "isometric", showMinimap: true, tileClickEvent: PLACE_TOWER, unitClickEvent: UNIT_CLICK, children: [
251
+ children: [ { type: canvas, fit: true, camera: { zoom: @config.scale }, projection: "isometric", showMinimap: true, tileClickEvent: PLACE_TOWER, unitClickEvent: UNIT_CLICK, children: [
252
252
  { type: draw-sprite-layer, items: (array/map @config.tiles (fn t { type: draw-sprite, position: { x: (object/get @t x), y: (object/get @t y) }, asset: (object/get @t terrainSprite) })) }
253
253
  { type: draw-sprite-layer, items: (array/map @entity.towers (fn t { type: draw-sprite, position: { x: (object/get @t x), y: (object/get @t y) }, asset: (object/get (object/get @config.assetManifest features) "tower") })) }
254
254
  { type: draw-shape-layer, items: (array/map @entity.validMoves (fn m { type: draw-shape, shape: "cell", position: { x: (object/get @m x), y: (object/get @m y) }, fill: "rgba(74,222,128,0.4)" })) }
@@ -279,7 +279,7 @@ orbital TowerDefenseBoardOrbital {
279
279
  hudBackgroundAsset: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-adventure-pack/ui/uipack_rpg_sheet.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-adventure-pack/ui/uipack_rpg_sheet.json", sprite: "panel_beige.png", role: "ui", category: "ui", animations: [], style: "vector", variant: "", dimension: "2d", aspect: "1:1", name: "panel-frame", thumbnailUrl: "" }
280
280
  hud: { type: game-hud, stats: [ { label: "Gold", value: @entity.gold, iconUrl: { url: "https://almadar-kflow-assets.web.app/shared/ui-tower-defense-board/kenney-cartography-pack/ui/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/ui-tower-defense-board/kenney-cartography-pack/ui/spritesheet_default.json", sprite: "chest.png", role: "ui", category: "ui", animations: [], style: "vector", variant: "", dimension: "2d", aspect: "1:1", name: "icon-gold", thumbnailUrl: "" } }, { label: "Lives", value: @entity.lives, max: @config.lives, format: "bar", iconUrl: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-emote-pack/ui/vector_style1.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-emote-pack/ui/vector_style1.json", sprite: "emote_heart.png", role: "ui", category: "ui", animations: [], style: "vector", variant: "", dimension: "2d", aspect: "1:1", name: "icon-lives", thumbnailUrl: "" } }, { label: "Wave", value: @entity.wave, max: @config.maxWaves, iconUrl: { url: "https://almadar-kflow-assets.web.app/shared/ui-tower-defense-board/kenney-cartography-pack/ui/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/ui-tower-defense-board/kenney-cartography-pack/ui/spritesheet_default.json", sprite: "flag.png", role: "ui", category: "ui", animations: [], style: "vector", variant: "", dimension: "2d", aspect: "1:1", name: "icon-wave", thumbnailUrl: "" } }, { label: "Towers", value: (array/len @entity.towers), iconUrl: { url: "https://almadar-kflow-assets.web.app/shared/ui-tower-defense-board/kenney-cartography-pack/ui/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/ui-tower-defense-board/kenney-cartography-pack/ui/spritesheet_default.json", sprite: "tower.png", role: "ui", category: "ui", animations: [], style: "vector", variant: "", dimension: "2d", aspect: "1:1", name: "icon-towers", thumbnailUrl: "" } } ] }
281
281
  addons: { type: button, action: START_WAVE, label: "Start Wave", iconAsset: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.json", sprite: "icon_play", role: "ui", category: "ui", animations: [], style: "vector", variant: "", dimension: "2d", aspect: "1:1", name: "icon-start-wave", thumbnailUrl: "" }, variant: primary }
282
- children: [ { type: canvas, camera: { zoom: @config.scale }, projection: "isometric", showMinimap: true, tileClickEvent: PLACE_TOWER, unitClickEvent: UNIT_CLICK, children: [
282
+ children: [ { type: canvas, fit: true, camera: { zoom: @config.scale }, projection: "isometric", showMinimap: true, tileClickEvent: PLACE_TOWER, unitClickEvent: UNIT_CLICK, children: [
283
283
  { type: draw-sprite-layer, items: (array/map @config.tiles (fn t { type: draw-sprite, position: { x: (object/get @t x), y: (object/get @t y) }, asset: (object/get @t terrainSprite) })) }
284
284
  { type: draw-sprite-layer, items: (array/map @entity.towers (fn t { type: draw-sprite, position: { x: (object/get @t x), y: (object/get @t y) }, asset: (object/get (object/get @config.assetManifest features) "tower") })) }
285
285
  { type: draw-shape-layer, items: (array/map @entity.validMoves (fn m { type: draw-shape, shape: "cell", position: { x: (object/get @m x), y: (object/get @m y) }, fill: "rgba(74,222,128,0.4)" })) }
@@ -304,7 +304,7 @@ orbital TowerDefenseBoardOrbital {
304
304
  hudBackgroundAsset: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-adventure-pack/ui/uipack_rpg_sheet.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-ui-adventure-pack/ui/uipack_rpg_sheet.json", sprite: "panel_beige.png", role: "ui", category: "ui", animations: [], style: "vector", variant: "", dimension: "2d", aspect: "1:1", name: "panel-frame", thumbnailUrl: "" }
305
305
  hud: { type: game-hud, stats: [ { label: "Gold", value: @entity.gold, iconUrl: { url: "https://almadar-kflow-assets.web.app/shared/ui-tower-defense-board/kenney-cartography-pack/ui/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/ui-tower-defense-board/kenney-cartography-pack/ui/spritesheet_default.json", sprite: "chest.png", role: "ui", category: "ui", animations: [], style: "vector", variant: "", dimension: "2d", aspect: "1:1", name: "icon-gold", thumbnailUrl: "" } }, { label: "Lives", value: @entity.lives, max: @config.lives, format: "bar", iconUrl: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-emote-pack/ui/vector_style1.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-emote-pack/ui/vector_style1.json", sprite: "emote_heart.png", role: "ui", category: "ui", animations: [], style: "vector", variant: "", dimension: "2d", aspect: "1:1", name: "icon-lives", thumbnailUrl: "" } }, { label: "Wave", value: @entity.wave, max: @config.maxWaves, iconUrl: { url: "https://almadar-kflow-assets.web.app/shared/ui-tower-defense-board/kenney-cartography-pack/ui/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/ui-tower-defense-board/kenney-cartography-pack/ui/spritesheet_default.json", sprite: "flag.png", role: "ui", category: "ui", animations: [], style: "vector", variant: "", dimension: "2d", aspect: "1:1", name: "icon-wave", thumbnailUrl: "" } }, { label: "Towers", value: (array/len @entity.towers), iconUrl: { url: "https://almadar-kflow-assets.web.app/shared/ui-tower-defense-board/kenney-cartography-pack/ui/spritesheet_default.png", atlas: "https://almadar-kflow-assets.web.app/shared/ui-tower-defense-board/kenney-cartography-pack/ui/spritesheet_default.json", sprite: "tower.png", role: "ui", category: "ui", animations: [], style: "vector", variant: "", dimension: "2d", aspect: "1:1", name: "icon-towers", thumbnailUrl: "" } } ] }
306
306
  addons: { type: button, action: START_WAVE, label: "Start Wave", iconAsset: { url: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.png", atlas: "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mobile-controls/ui/icons-default.json", sprite: "icon_play", role: "ui", category: "ui", animations: [], style: "vector", variant: "", dimension: "2d", aspect: "1:1", name: "icon-start-wave", thumbnailUrl: "" }, variant: primary }
307
- children: [ { type: canvas, camera: { zoom: @config.scale }, projection: "isometric", showMinimap: true, tileClickEvent: PLACE_TOWER, unitClickEvent: UNIT_CLICK, children: [
307
+ children: [ { type: canvas, fit: true, camera: { zoom: @config.scale }, projection: "isometric", showMinimap: true, tileClickEvent: PLACE_TOWER, unitClickEvent: UNIT_CLICK, children: [
308
308
  { type: draw-sprite-layer, items: (array/map @config.tiles (fn t { type: draw-sprite, position: { x: (object/get @t x), y: (object/get @t y) }, asset: (object/get @t terrainSprite) })) }
309
309
  { type: draw-sprite-layer, items: (array/map @entity.towers (fn t { type: draw-sprite, position: { x: (object/get @t x), y: (object/get @t y) }, asset: (object/get (object/get @config.assetManifest features) "tower") })) }
310
310
  { type: draw-shape-layer, items: (array/map @entity.validMoves (fn m { type: draw-shape, shape: "cell", position: { x: (object/get @m x), y: (object/get @m y) }, fill: "rgba(74,222,128,0.4)" })) }