@almadar/std 16.108.0 → 16.109.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 (90) hide show
  1. package/behaviors/registry/ui/game/2d/organisms/ui-battle-board.orb +213 -125
  2. package/behaviors/registry/ui/game/2d/organisms/ui-fishing-board.orb +2302 -705
  3. package/behaviors/registry/ui/game/2d/organisms/ui-minigolf-board.orb +7872 -1934
  4. package/behaviors/registry/ui/game/2d/organisms/ui-pinball-board.orb +2739 -3050
  5. package/behaviors/registry/ui/game/2d/organisms/ui-roguelike-board.orb +5204 -2967
  6. package/behaviors/registry/ui/game/2d/organisms/ui-sokoban-board.orb +3330 -1619
  7. package/behaviors/registry/ui/game/2d/organisms/ui-space-shmup-board.orb +4637 -4059
  8. package/behaviors/registry/ui/game/2d/organisms/ui-tanks-board.orb +76 -103
  9. package/behaviors/registry/ui/game/2d/organisms/ui-topdown-dungeon-board.orb +4579 -4356
  10. package/behaviors/registry/ui/game/2d/organisms/ui-uncontrolled-battle-board.orb +1164 -2247
  11. package/behaviors/registry/ui/game/2d/organisms/ui-winter-ski-board.orb +4573 -4553
  12. package/behaviors/registry/ui/game/3d/organisms/ui-arcade-board-3d.orb +379 -2
  13. package/behaviors/registry/ui/game/3d/organisms/ui-brick-sandbox-board-3d.orb +168 -1
  14. package/behaviors/registry/ui/game/3d/organisms/ui-city-board-3d.orb +801 -169
  15. package/behaviors/registry/ui/game/3d/organisms/ui-fantasy-town-board-3d.orb +1666 -702
  16. package/behaviors/registry/ui/game/3d/organisms/ui-game-board-3d.orb +1323 -514
  17. package/behaviors/registry/ui/game/3d/organisms/ui-graveyard-board-3d.orb +1186 -384
  18. package/behaviors/registry/ui/game/3d/organisms/ui-hex-strategy-board-3d.orb +342 -170
  19. package/behaviors/registry/ui/game/3d/organisms/ui-holiday-board-3d.orb +509 -3
  20. package/behaviors/registry/ui/game/3d/organisms/ui-market-board-3d.orb +632 -419
  21. package/behaviors/registry/ui/game/3d/organisms/ui-minigolf-board-3d.orb +503 -145
  22. package/behaviors/registry/ui/game/3d/organisms/ui-nature-survival-board-3d.orb +1157 -134
  23. package/behaviors/registry/ui/game/3d/organisms/ui-pirate-board-3d.orb +1203 -383
  24. package/behaviors/registry/ui/game/3d/organisms/ui-platformer-board-3d.orb +1157 -205
  25. package/behaviors/registry/ui/game/3d/organisms/ui-racing-board-3d.orb +656 -565
  26. package/behaviors/registry/ui/game/3d/organisms/ui-skatepark-board-3d.orb +1205 -137
  27. package/behaviors/registry/ui/game/3d/organisms/ui-space-board-3d.orb +1333 -513
  28. package/behaviors/registry/ui/game/3d/organisms/ui-tower-defense-board-3d.orb +332 -7
  29. package/behaviors/registry/ui/game/3d/organisms/ui-toy-track-board-3d.orb +1202 -287
  30. package/dist/behaviors/behaviors-registry.json +282 -273
  31. package/dist/behaviors/registry/ui/game/2d/organisms/ui-battle-board.orb +213 -125
  32. package/dist/behaviors/registry/ui/game/2d/organisms/ui-fishing-board.orb +2302 -705
  33. package/dist/behaviors/registry/ui/game/2d/organisms/ui-minigolf-board.orb +7872 -1934
  34. package/dist/behaviors/registry/ui/game/2d/organisms/ui-pinball-board.orb +2739 -3050
  35. package/dist/behaviors/registry/ui/game/2d/organisms/ui-roguelike-board.orb +5204 -2967
  36. package/dist/behaviors/registry/ui/game/2d/organisms/ui-sokoban-board.orb +3330 -1619
  37. package/dist/behaviors/registry/ui/game/2d/organisms/ui-space-shmup-board.orb +4637 -4059
  38. package/dist/behaviors/registry/ui/game/2d/organisms/ui-tanks-board.orb +76 -103
  39. package/dist/behaviors/registry/ui/game/2d/organisms/ui-topdown-dungeon-board.orb +4579 -4356
  40. package/dist/behaviors/registry/ui/game/2d/organisms/ui-uncontrolled-battle-board.orb +1164 -2247
  41. package/dist/behaviors/registry/ui/game/2d/organisms/ui-winter-ski-board.orb +4573 -4553
  42. package/dist/behaviors/registry/ui/game/3d/organisms/ui-arcade-board-3d.orb +379 -2
  43. package/dist/behaviors/registry/ui/game/3d/organisms/ui-brick-sandbox-board-3d.orb +168 -1
  44. package/dist/behaviors/registry/ui/game/3d/organisms/ui-city-board-3d.orb +801 -169
  45. package/dist/behaviors/registry/ui/game/3d/organisms/ui-fantasy-town-board-3d.orb +1666 -702
  46. package/dist/behaviors/registry/ui/game/3d/organisms/ui-game-board-3d.orb +1323 -514
  47. package/dist/behaviors/registry/ui/game/3d/organisms/ui-graveyard-board-3d.orb +1186 -384
  48. package/dist/behaviors/registry/ui/game/3d/organisms/ui-hex-strategy-board-3d.orb +342 -170
  49. package/dist/behaviors/registry/ui/game/3d/organisms/ui-holiday-board-3d.orb +509 -3
  50. package/dist/behaviors/registry/ui/game/3d/organisms/ui-market-board-3d.orb +632 -419
  51. package/dist/behaviors/registry/ui/game/3d/organisms/ui-minigolf-board-3d.orb +503 -145
  52. package/dist/behaviors/registry/ui/game/3d/organisms/ui-nature-survival-board-3d.orb +1157 -134
  53. package/dist/behaviors/registry/ui/game/3d/organisms/ui-pirate-board-3d.orb +1203 -383
  54. package/dist/behaviors/registry/ui/game/3d/organisms/ui-platformer-board-3d.orb +1157 -205
  55. package/dist/behaviors/registry/ui/game/3d/organisms/ui-racing-board-3d.orb +656 -565
  56. package/dist/behaviors/registry/ui/game/3d/organisms/ui-skatepark-board-3d.orb +1205 -137
  57. package/dist/behaviors/registry/ui/game/3d/organisms/ui-space-board-3d.orb +1333 -513
  58. package/dist/behaviors/registry/ui/game/3d/organisms/ui-tower-defense-board-3d.orb +332 -7
  59. package/dist/behaviors/registry/ui/game/3d/organisms/ui-toy-track-board-3d.orb +1202 -287
  60. package/dist/behaviors-registry.json +282 -273
  61. package/dist/registry/ui/game/2d/organisms/ui-battle-board.orb +213 -125
  62. package/dist/registry/ui/game/2d/organisms/ui-fishing-board.orb +2302 -705
  63. package/dist/registry/ui/game/2d/organisms/ui-minigolf-board.orb +7872 -1934
  64. package/dist/registry/ui/game/2d/organisms/ui-pinball-board.orb +2739 -3050
  65. package/dist/registry/ui/game/2d/organisms/ui-roguelike-board.orb +5204 -2967
  66. package/dist/registry/ui/game/2d/organisms/ui-sokoban-board.orb +3330 -1619
  67. package/dist/registry/ui/game/2d/organisms/ui-space-shmup-board.orb +4637 -4059
  68. package/dist/registry/ui/game/2d/organisms/ui-tanks-board.orb +76 -103
  69. package/dist/registry/ui/game/2d/organisms/ui-topdown-dungeon-board.orb +4579 -4356
  70. package/dist/registry/ui/game/2d/organisms/ui-uncontrolled-battle-board.orb +1164 -2247
  71. package/dist/registry/ui/game/2d/organisms/ui-winter-ski-board.orb +4573 -4553
  72. package/dist/registry/ui/game/3d/organisms/ui-arcade-board-3d.orb +379 -2
  73. package/dist/registry/ui/game/3d/organisms/ui-brick-sandbox-board-3d.orb +168 -1
  74. package/dist/registry/ui/game/3d/organisms/ui-city-board-3d.orb +801 -169
  75. package/dist/registry/ui/game/3d/organisms/ui-fantasy-town-board-3d.orb +1666 -702
  76. package/dist/registry/ui/game/3d/organisms/ui-game-board-3d.orb +1323 -514
  77. package/dist/registry/ui/game/3d/organisms/ui-graveyard-board-3d.orb +1186 -384
  78. package/dist/registry/ui/game/3d/organisms/ui-hex-strategy-board-3d.orb +342 -170
  79. package/dist/registry/ui/game/3d/organisms/ui-holiday-board-3d.orb +509 -3
  80. package/dist/registry/ui/game/3d/organisms/ui-market-board-3d.orb +632 -419
  81. package/dist/registry/ui/game/3d/organisms/ui-minigolf-board-3d.orb +503 -145
  82. package/dist/registry/ui/game/3d/organisms/ui-nature-survival-board-3d.orb +1157 -134
  83. package/dist/registry/ui/game/3d/organisms/ui-pirate-board-3d.orb +1203 -383
  84. package/dist/registry/ui/game/3d/organisms/ui-platformer-board-3d.orb +1157 -205
  85. package/dist/registry/ui/game/3d/organisms/ui-racing-board-3d.orb +656 -565
  86. package/dist/registry/ui/game/3d/organisms/ui-skatepark-board-3d.orb +1205 -137
  87. package/dist/registry/ui/game/3d/organisms/ui-space-board-3d.orb +1333 -513
  88. package/dist/registry/ui/game/3d/organisms/ui-tower-defense-board-3d.orb +332 -7
  89. package/dist/registry/ui/game/3d/organisms/ui-toy-track-board-3d.orb +1202 -287
  90. package/package.json +1 -1
@@ -167,6 +167,51 @@
167
167
  "name": "attackTargets",
168
168
  "type": "array"
169
169
  },
170
+ {
171
+ "default": [],
172
+ "items": {
173
+ "properties": {
174
+ "id": {
175
+ "name": "id",
176
+ "required": true,
177
+ "type": "string"
178
+ },
179
+ "message": {
180
+ "name": "message",
181
+ "required": false,
182
+ "type": "string"
183
+ },
184
+ "ttl": {
185
+ "name": "ttl",
186
+ "required": true,
187
+ "type": "number"
188
+ },
189
+ "type": {
190
+ "name": "type",
191
+ "required": true,
192
+ "type": "string"
193
+ },
194
+ "x": {
195
+ "name": "x",
196
+ "required": true,
197
+ "type": "number"
198
+ },
199
+ "y": {
200
+ "name": "y",
201
+ "required": false,
202
+ "type": "number"
203
+ },
204
+ "z": {
205
+ "name": "z",
206
+ "required": false,
207
+ "type": "number"
208
+ }
209
+ },
210
+ "type": "object"
211
+ },
212
+ "name": "fx",
213
+ "type": "array"
214
+ },
170
215
  {
171
216
  "default": 0.0,
172
217
  "name": "score",
@@ -202,11 +247,6 @@
202
247
  "name": "movementRange",
203
248
  "type": "number"
204
249
  },
205
- {
206
- "default": 8.0,
207
- "name": "maxPatience",
208
- "type": "number"
209
- },
210
250
  {
211
251
  "default": 10.0,
212
252
  "name": "scoreTarget",
@@ -647,13 +687,6 @@
647
687
  "tier": "presentation",
648
688
  "type": "boolean"
649
689
  },
650
- "maxPatience": {
651
- "default": 8.0,
652
- "description": "Starting/reset patience ticks for each customer",
653
- "label": "Max Patience",
654
- "tier": "presentation",
655
- "type": "number"
656
- },
657
690
  "scale": {
658
691
  "default": 0.45,
659
692
  "description": "Canvas render scale",
@@ -1484,7 +1517,7 @@
1484
1517
  },
1485
1518
  {
1486
1519
  "id": "c2",
1487
- "maxPatience": 8.0,
1520
+ "maxPatience": 12.0,
1488
1521
  "modelUrl": {
1489
1522
  "animations": [
1490
1523
  "static",
@@ -1530,7 +1563,7 @@
1530
1563
  "url": "https://almadar-kflow-assets.web.app/shared/_shared/kenney-mini-characters/units/character-male-a.glb"
1531
1564
  },
1532
1565
  "name": "Customer B",
1533
- "patience": 8.0,
1566
+ "patience": 12.0,
1534
1567
  "position": {
1535
1568
  "x": 3.0,
1536
1569
  "y": 4.0
@@ -1728,10 +1761,10 @@
1728
1761
  "entityContract": {
1729
1762
  "provides": [
1730
1763
  "attackTargets",
1764
+ "fx",
1731
1765
  "gridHeight",
1732
1766
  "gridWidth",
1733
1767
  "lives",
1734
- "maxPatience",
1735
1768
  "movementRange",
1736
1769
  "result",
1737
1770
  "score",
@@ -1748,10 +1781,6 @@
1748
1781
  "scope": "instance",
1749
1782
  "stateMachine": {
1750
1783
  "events": [
1751
- {
1752
- "key": "START",
1753
- "name": "Start"
1754
- },
1755
1784
  {
1756
1785
  "key": "INIT",
1757
1786
  "name": "Initialize"
@@ -1829,9 +1858,6 @@
1829
1858
  "isInitial": true,
1830
1859
  "name": "playing"
1831
1860
  },
1832
- {
1833
- "name": "menu"
1834
- },
1835
1861
  {
1836
1862
  "name": "gameover"
1837
1863
  }
@@ -1864,11 +1890,6 @@
1864
1890
  "@entity.movementRange",
1865
1891
  2.0
1866
1892
  ],
1867
- [
1868
- "set",
1869
- "@entity.maxPatience",
1870
- "@config.maxPatience"
1871
- ],
1872
1893
  [
1873
1894
  "set",
1874
1895
  "@entity.scoreTarget",
@@ -1879,6 +1900,11 @@
1879
1900
  "@entity.attackTargets",
1880
1901
  []
1881
1902
  ],
1903
+ [
1904
+ "set",
1905
+ "@entity.fx",
1906
+ []
1907
+ ],
1882
1908
  [
1883
1909
  "set",
1884
1910
  "@entity.validMoves",
@@ -2032,9 +2058,23 @@
2032
2058
  "render-ui",
2033
2059
  "main",
2034
2060
  {
2061
+ "addons": {
2062
+ "children": [
2063
+ {
2064
+ "action": "PLAY_AGAIN",
2065
+ "label": "Restart",
2066
+ "type": "button",
2067
+ "variant": "secondary"
2068
+ }
2069
+ ],
2070
+ "direction": "vertical",
2071
+ "gap": "sm",
2072
+ "type": "stack"
2073
+ },
2035
2074
  "children": [
2036
2075
  {
2037
2076
  "attackTargets": "@entity.attackTargets",
2077
+ "events": "@entity.fx",
2038
2078
  "features": "@config.features",
2039
2079
  "scale": "@config.scale",
2040
2080
  "selectedUnitId": "@entity.selectedUnitId",
@@ -2068,8 +2108,8 @@
2068
2108
  }
2069
2109
  ]
2070
2110
  ],
2071
- "event": "START",
2072
- "from": "menu",
2111
+ "event": "INIT",
2112
+ "from": "playing",
2073
2113
  "to": "playing"
2074
2114
  },
2075
2115
  {
@@ -2077,42 +2117,33 @@
2077
2117
  [
2078
2118
  "set",
2079
2119
  "@entity.units",
2080
- "@config.units"
2081
- ],
2082
- [
2083
- "set",
2084
- "@entity.selectedUnitId",
2085
- "u1"
2086
- ],
2087
- [
2088
- "set",
2089
- "@entity.gridWidth",
2090
- 5.0
2091
- ],
2092
- [
2093
- "set",
2094
- "@entity.gridHeight",
2095
- 6.0
2096
- ],
2097
- [
2098
- "set",
2099
- "@entity.movementRange",
2100
- 2.0
2101
- ],
2102
- [
2103
- "set",
2104
- "@entity.maxPatience",
2105
- "@config.maxPatience"
2106
- ],
2107
- [
2108
- "set",
2109
- "@entity.scoreTarget",
2110
- "@config.scoreTarget"
2111
- ],
2112
- [
2113
- "set",
2114
- "@entity.attackTargets",
2115
- []
2120
+ [
2121
+ "array/map",
2122
+ "@entity.units",
2123
+ [
2124
+ "fn",
2125
+ "u",
2126
+ [
2127
+ "if",
2128
+ [
2129
+ "==",
2130
+ "@u.id",
2131
+ "u1"
2132
+ ],
2133
+ [
2134
+ "object/merge",
2135
+ "@u",
2136
+ {
2137
+ "position": {
2138
+ "x": "@payload.x",
2139
+ "y": "@payload.z"
2140
+ }
2141
+ }
2142
+ ],
2143
+ "@u"
2144
+ ]
2145
+ ]
2146
+ ]
2116
2147
  ],
2117
2148
  [
2118
2149
  "set",
@@ -2248,28 +2279,27 @@
2248
2279
  ]
2249
2280
  ]
2250
2281
  ],
2251
- [
2252
- "set",
2253
- "@entity.score",
2254
- 0.0
2255
- ],
2256
- [
2257
- "set",
2258
- "@entity.lives",
2259
- 3.0
2260
- ],
2261
- [
2262
- "set",
2263
- "@entity.result",
2264
- "none"
2265
- ],
2266
2282
  [
2267
2283
  "render-ui",
2268
2284
  "main",
2269
2285
  {
2286
+ "addons": {
2287
+ "children": [
2288
+ {
2289
+ "action": "PLAY_AGAIN",
2290
+ "label": "Restart",
2291
+ "type": "button",
2292
+ "variant": "secondary"
2293
+ }
2294
+ ],
2295
+ "direction": "vertical",
2296
+ "gap": "sm",
2297
+ "type": "stack"
2298
+ },
2270
2299
  "children": [
2271
2300
  {
2272
2301
  "attackTargets": "@entity.attackTargets",
2302
+ "events": "@entity.fx",
2273
2303
  "features": "@config.features",
2274
2304
  "scale": "@config.scale",
2275
2305
  "selectedUnitId": "@entity.selectedUnitId",
@@ -2303,281 +2333,70 @@
2303
2333
  }
2304
2334
  ]
2305
2335
  ],
2306
- "event": "INIT",
2336
+ "event": "TILE_CLICK",
2307
2337
  "from": "playing",
2308
- "to": "playing"
2309
- },
2310
- {
2311
- "effects": [
2338
+ "guard": [
2339
+ "and",
2312
2340
  [
2313
- "set",
2314
- "@entity.units",
2315
- [
2316
- "array/map",
2317
- "@entity.units",
2318
- [
2319
- "fn",
2320
- "u",
2321
- [
2322
- "if",
2323
- [
2324
- "==",
2325
- "@u.id",
2326
- "u1"
2327
- ],
2328
- [
2329
- "object/merge",
2330
- "@u",
2331
- {
2332
- "position": {
2333
- "x": "@payload.x",
2334
- "y": "@payload.z"
2335
- }
2336
- }
2337
- ],
2338
- "@u"
2339
- ]
2340
- ]
2341
- ]
2341
+ "==",
2342
+ "@entity.result",
2343
+ "none"
2342
2344
  ],
2343
2345
  [
2344
- "set",
2345
- "@entity.validMoves",
2346
+ "and",
2346
2347
  [
2347
- "array/map",
2348
+ "grid/in-bounds",
2349
+ {
2350
+ "x": "@payload.x",
2351
+ "y": "@payload.z"
2352
+ },
2353
+ "@entity.gridWidth",
2354
+ "@entity.gridHeight"
2355
+ ],
2356
+ [
2357
+ "and",
2348
2358
  [
2349
- "array/filter",
2350
- "@config.tiles",
2359
+ "<=",
2351
2360
  [
2352
- "fn",
2353
- "t",
2361
+ "grid/manhattan-distance",
2354
2362
  [
2355
- "and",
2363
+ "object/get",
2356
2364
  [
2357
- "==",
2365
+ "array/find",
2366
+ "@entity.units",
2358
2367
  [
2359
- "object/get",
2360
- "@t",
2361
- "passable"
2362
- ],
2363
- true
2368
+ "fn",
2369
+ "u",
2370
+ [
2371
+ "==",
2372
+ "@u.id",
2373
+ "u1"
2374
+ ]
2375
+ ]
2364
2376
  ],
2377
+ "position"
2378
+ ],
2379
+ {
2380
+ "x": "@payload.x",
2381
+ "y": "@payload.z"
2382
+ }
2383
+ ],
2384
+ "@entity.movementRange"
2385
+ ],
2386
+ [
2387
+ "and",
2388
+ [
2389
+ "==",
2390
+ [
2391
+ "object/get",
2365
2392
  [
2366
- "and",
2393
+ "array/find",
2394
+ "@config.tiles",
2367
2395
  [
2368
- "<=",
2396
+ "fn",
2397
+ "t",
2369
2398
  [
2370
- "grid/manhattan-distance",
2371
- [
2372
- "object/get",
2373
- [
2374
- "array/find",
2375
- "@entity.units",
2376
- [
2377
- "fn",
2378
- "u",
2379
- [
2380
- "==",
2381
- "@u.id",
2382
- "u1"
2383
- ]
2384
- ]
2385
- ],
2386
- "position"
2387
- ],
2388
- {
2389
- "x": [
2390
- "object/get",
2391
- "@t",
2392
- "x"
2393
- ],
2394
- "y": [
2395
- "object/get",
2396
- "@t",
2397
- "y"
2398
- ]
2399
- }
2400
- ],
2401
- "@entity.movementRange"
2402
- ],
2403
- [
2404
- "==",
2405
- [
2406
- "array/len",
2407
- [
2408
- "array/filter",
2409
- "@entity.units",
2410
- [
2411
- "fn",
2412
- "u",
2413
- [
2414
- "and",
2415
- [
2416
- "==",
2417
- [
2418
- "object/get",
2419
- [
2420
- "object/get",
2421
- "@u",
2422
- "position"
2423
- ],
2424
- "x"
2425
- ],
2426
- [
2427
- "object/get",
2428
- "@t",
2429
- "x"
2430
- ]
2431
- ],
2432
- [
2433
- "==",
2434
- [
2435
- "object/get",
2436
- [
2437
- "object/get",
2438
- "@u",
2439
- "position"
2440
- ],
2441
- "y"
2442
- ],
2443
- [
2444
- "object/get",
2445
- "@t",
2446
- "y"
2447
- ]
2448
- ]
2449
- ]
2450
- ]
2451
- ]
2452
- ],
2453
- 0.0
2454
- ]
2455
- ]
2456
- ]
2457
- ]
2458
- ],
2459
- [
2460
- "fn",
2461
- "t",
2462
- {
2463
- "x": [
2464
- "object/get",
2465
- "@t",
2466
- "x"
2467
- ],
2468
- "z": [
2469
- "object/get",
2470
- "@t",
2471
- "y"
2472
- ]
2473
- }
2474
- ]
2475
- ]
2476
- ],
2477
- [
2478
- "render-ui",
2479
- "main",
2480
- {
2481
- "children": [
2482
- {
2483
- "attackTargets": "@entity.attackTargets",
2484
- "features": "@config.features",
2485
- "scale": "@config.scale",
2486
- "selectedUnitId": "@entity.selectedUnitId",
2487
- "tileClickEvent": "TILE_CLICK",
2488
- "tiles": "@config.tiles",
2489
- "type": "game-canvas-3d",
2490
- "unitClickEvent": "UNIT_CLICK",
2491
- "unitScale": "@config.unitScale",
2492
- "units": "@entity.units",
2493
- "validMoves": "@entity.validMoves"
2494
- }
2495
- ],
2496
- "hud": {
2497
- "stats": [
2498
- {
2499
- "label": "Score",
2500
- "value": "@entity.score"
2501
- },
2502
- {
2503
- "label": "Lives",
2504
- "value": "@entity.lives"
2505
- },
2506
- {
2507
- "label": "Result",
2508
- "value": "@entity.result"
2509
- }
2510
- ],
2511
- "type": "game-hud"
2512
- },
2513
- "type": "game-shell"
2514
- }
2515
- ]
2516
- ],
2517
- "event": "TILE_CLICK",
2518
- "from": "playing",
2519
- "guard": [
2520
- "and",
2521
- [
2522
- "==",
2523
- "@entity.result",
2524
- "none"
2525
- ],
2526
- [
2527
- "and",
2528
- [
2529
- "grid/in-bounds",
2530
- {
2531
- "x": "@payload.x",
2532
- "y": "@payload.z"
2533
- },
2534
- "@entity.gridWidth",
2535
- "@entity.gridHeight"
2536
- ],
2537
- [
2538
- "and",
2539
- [
2540
- "<=",
2541
- [
2542
- "grid/manhattan-distance",
2543
- [
2544
- "object/get",
2545
- [
2546
- "array/find",
2547
- "@entity.units",
2548
- [
2549
- "fn",
2550
- "u",
2551
- [
2552
- "==",
2553
- "@u.id",
2554
- "u1"
2555
- ]
2556
- ]
2557
- ],
2558
- "position"
2559
- ],
2560
- {
2561
- "x": "@payload.x",
2562
- "y": "@payload.z"
2563
- }
2564
- ],
2565
- "@entity.movementRange"
2566
- ],
2567
- [
2568
- "and",
2569
- [
2570
- "==",
2571
- [
2572
- "object/get",
2573
- [
2574
- "array/find",
2575
- "@config.tiles",
2576
- [
2577
- "fn",
2578
- "t",
2579
- [
2580
- "and",
2399
+ "and",
2581
2400
  [
2582
2401
  "==",
2583
2402
  "@t.x",
@@ -2647,6 +2466,66 @@
2647
2466
  },
2648
2467
  {
2649
2468
  "effects": [
2469
+ [
2470
+ "set",
2471
+ "@entity.fx",
2472
+ [
2473
+ "array/append",
2474
+ "@entity.fx",
2475
+ {
2476
+ "id": [
2477
+ "str/concat",
2478
+ "fx-serve-",
2479
+ "@payload.unitId"
2480
+ ],
2481
+ "message": "+1",
2482
+ "ttl": 3.0,
2483
+ "type": "score",
2484
+ "x": [
2485
+ "object/get",
2486
+ [
2487
+ "object/get",
2488
+ [
2489
+ "array/find",
2490
+ "@entity.units",
2491
+ [
2492
+ "fn",
2493
+ "u",
2494
+ [
2495
+ "==",
2496
+ "@u.id",
2497
+ "@payload.unitId"
2498
+ ]
2499
+ ]
2500
+ ],
2501
+ "position"
2502
+ ],
2503
+ "x"
2504
+ ],
2505
+ "z": [
2506
+ "object/get",
2507
+ [
2508
+ "object/get",
2509
+ [
2510
+ "array/find",
2511
+ "@entity.units",
2512
+ [
2513
+ "fn",
2514
+ "u",
2515
+ [
2516
+ "==",
2517
+ "@u.id",
2518
+ "@payload.unitId"
2519
+ ]
2520
+ ]
2521
+ ],
2522
+ "position"
2523
+ ],
2524
+ "y"
2525
+ ]
2526
+ }
2527
+ ]
2528
+ ],
2650
2529
  [
2651
2530
  "set",
2652
2531
  "@entity.units",
@@ -2667,7 +2546,7 @@
2667
2546
  "object/merge",
2668
2547
  "@u",
2669
2548
  {
2670
- "patience": "@entity.maxPatience"
2549
+ "patience": "@u.maxPatience"
2671
2550
  }
2672
2551
  ],
2673
2552
  "@u"
@@ -2718,9 +2597,23 @@
2718
2597
  "render-ui",
2719
2598
  "main",
2720
2599
  {
2600
+ "addons": {
2601
+ "children": [
2602
+ {
2603
+ "action": "PLAY_AGAIN",
2604
+ "label": "Restart",
2605
+ "type": "button",
2606
+ "variant": "secondary"
2607
+ }
2608
+ ],
2609
+ "direction": "vertical",
2610
+ "gap": "sm",
2611
+ "type": "stack"
2612
+ },
2721
2613
  "children": [
2722
2614
  {
2723
2615
  "attackTargets": "@entity.attackTargets",
2616
+ "events": "@entity.fx",
2724
2617
  "features": "@config.features",
2725
2618
  "scale": "@config.scale",
2726
2619
  "selectedUnitId": "@entity.selectedUnitId",
@@ -2847,9 +2740,23 @@
2847
2740
  "render-ui",
2848
2741
  "main",
2849
2742
  {
2743
+ "addons": {
2744
+ "children": [
2745
+ {
2746
+ "action": "PLAY_AGAIN",
2747
+ "label": "Restart",
2748
+ "type": "button",
2749
+ "variant": "secondary"
2750
+ }
2751
+ ],
2752
+ "direction": "vertical",
2753
+ "gap": "sm",
2754
+ "type": "stack"
2755
+ },
2850
2756
  "children": [
2851
2757
  {
2852
2758
  "attackTargets": "@entity.attackTargets",
2759
+ "events": "@entity.fx",
2853
2760
  "features": "@config.features",
2854
2761
  "scale": "@config.scale",
2855
2762
  "selectedUnitId": "@entity.selectedUnitId",
@@ -2879,6 +2786,29 @@
2879
2786
  ],
2880
2787
  "type": "game-hud"
2881
2788
  },
2789
+ "overlay": {
2790
+ "align": "center",
2791
+ "children": [
2792
+ {
2793
+ "stats": [
2794
+ {
2795
+ "label": "Result",
2796
+ "value": "@entity.result"
2797
+ }
2798
+ ],
2799
+ "type": "game-hud"
2800
+ },
2801
+ {
2802
+ "action": "PLAY_AGAIN",
2803
+ "label": "Play Again",
2804
+ "type": "button",
2805
+ "variant": "primary"
2806
+ }
2807
+ ],
2808
+ "direction": "vertical",
2809
+ "gap": "md",
2810
+ "type": "stack"
2811
+ },
2882
2812
  "type": "game-shell"
2883
2813
  }
2884
2814
  ]
@@ -2927,11 +2857,6 @@
2927
2857
  "@entity.movementRange",
2928
2858
  2.0
2929
2859
  ],
2930
- [
2931
- "set",
2932
- "@entity.maxPatience",
2933
- "@config.maxPatience"
2934
- ],
2935
2860
  [
2936
2861
  "set",
2937
2862
  "@entity.scoreTarget",
@@ -2942,6 +2867,11 @@
2942
2867
  "@entity.attackTargets",
2943
2868
  []
2944
2869
  ],
2870
+ [
2871
+ "set",
2872
+ "@entity.fx",
2873
+ []
2874
+ ],
2945
2875
  [
2946
2876
  "set",
2947
2877
  "@entity.validMoves",
@@ -3095,9 +3025,23 @@
3095
3025
  "render-ui",
3096
3026
  "main",
3097
3027
  {
3028
+ "addons": {
3029
+ "children": [
3030
+ {
3031
+ "action": "PLAY_AGAIN",
3032
+ "label": "Restart",
3033
+ "type": "button",
3034
+ "variant": "secondary"
3035
+ }
3036
+ ],
3037
+ "direction": "vertical",
3038
+ "gap": "sm",
3039
+ "type": "stack"
3040
+ },
3098
3041
  "children": [
3099
3042
  {
3100
3043
  "attackTargets": "@entity.attackTargets",
3044
+ "events": "@entity.fx",
3101
3045
  "features": "@config.features",
3102
3046
  "scale": "@config.scale",
3103
3047
  "selectedUnitId": "@entity.selectedUnitId",
@@ -3133,13 +3077,56 @@
3133
3077
  ],
3134
3078
  "event": "PLAY_AGAIN",
3135
3079
  "from": "gameover",
3136
- "to": "menu"
3080
+ "to": "playing"
3137
3081
  }
3138
3082
  ]
3139
3083
  },
3140
3084
  "ticks": [
3141
3085
  {
3142
3086
  "effects": [
3087
+ [
3088
+ "set",
3089
+ "@entity.fx",
3090
+ [
3091
+ "array/filter",
3092
+ [
3093
+ "array/map",
3094
+ "@entity.fx",
3095
+ [
3096
+ "fn",
3097
+ "e",
3098
+ [
3099
+ "object/merge",
3100
+ "@e",
3101
+ {
3102
+ "ttl": [
3103
+ "-",
3104
+ [
3105
+ "object/get",
3106
+ "@e",
3107
+ "ttl"
3108
+ ],
3109
+ 1.0
3110
+ ]
3111
+ }
3112
+ ]
3113
+ ]
3114
+ ],
3115
+ [
3116
+ "fn",
3117
+ "e",
3118
+ [
3119
+ ">",
3120
+ [
3121
+ "object/get",
3122
+ "@e",
3123
+ "ttl"
3124
+ ],
3125
+ 0.0
3126
+ ]
3127
+ ]
3128
+ ]
3129
+ ],
3143
3130
  [
3144
3131
  "set",
3145
3132
  "@entity.units",
@@ -3168,7 +3155,7 @@
3168
3155
  1.0
3169
3156
  ],
3170
3157
  0.0,
3171
- "@entity.maxPatience"
3158
+ "@u.maxPatience"
3172
3159
  ]
3173
3160
  }
3174
3161
  ],
@@ -3178,35 +3165,95 @@
3178
3165
  ]
3179
3166
  ],
3180
3167
  [
3181
- "set",
3182
- "@entity.lives",
3168
+ "let",
3183
3169
  [
3184
- "math/max",
3185
- 0.0,
3186
3170
  [
3187
- "-",
3188
- "@entity.lives",
3171
+ "starved",
3189
3172
  [
3190
- "array/len",
3173
+ "array/filter",
3174
+ "@entity.units",
3191
3175
  [
3192
- "array/filter",
3193
- "@entity.units",
3176
+ "fn",
3177
+ "u",
3194
3178
  [
3195
- "fn",
3196
- "u",
3179
+ "and",
3197
3180
  [
3198
- "and",
3199
- [
3200
- "==",
3201
- "@u.team",
3202
- "neutral"
3181
+ "==",
3182
+ "@u.team",
3183
+ "neutral"
3184
+ ],
3185
+ [
3186
+ "<=",
3187
+ "@u.patience",
3188
+ 0.0
3189
+ ]
3190
+ ]
3191
+ ]
3192
+ ]
3193
+ ]
3194
+ ],
3195
+ [
3196
+ "do",
3197
+ [
3198
+ "set",
3199
+ "@entity.fx",
3200
+ [
3201
+ "array/reduce",
3202
+ "@starved",
3203
+ [
3204
+ "fn",
3205
+ [
3206
+ "acc",
3207
+ "u"
3208
+ ],
3209
+ [
3210
+ "array/append",
3211
+ "@acc",
3212
+ {
3213
+ "id": [
3214
+ "str/concat",
3215
+ "fx-starve-",
3216
+ "@u.id"
3203
3217
  ],
3204
- [
3205
- "<=",
3206
- "@u.patience",
3207
- 0.0
3218
+ "message": "-1 life",
3219
+ "ttl": 3.0,
3220
+ "type": "damage",
3221
+ "x": [
3222
+ "object/get",
3223
+ [
3224
+ "object/get",
3225
+ "@u",
3226
+ "position"
3227
+ ],
3228
+ "x"
3229
+ ],
3230
+ "z": [
3231
+ "object/get",
3232
+ [
3233
+ "object/get",
3234
+ "@u",
3235
+ "position"
3236
+ ],
3237
+ "y"
3208
3238
  ]
3209
- ]
3239
+ }
3240
+ ]
3241
+ ],
3242
+ "@entity.fx"
3243
+ ]
3244
+ ],
3245
+ [
3246
+ "set",
3247
+ "@entity.lives",
3248
+ [
3249
+ "math/max",
3250
+ 0.0,
3251
+ [
3252
+ "-",
3253
+ "@entity.lives",
3254
+ [
3255
+ "array/len",
3256
+ "@starved"
3210
3257
  ]
3211
3258
  ]
3212
3259
  ]
@@ -3241,7 +3288,7 @@
3241
3288
  "object/merge",
3242
3289
  "@u",
3243
3290
  {
3244
- "patience": "@entity.maxPatience"
3291
+ "patience": "@u.maxPatience"
3245
3292
  }
3246
3293
  ],
3247
3294
  "@u"
@@ -3283,9 +3330,23 @@
3283
3330
  "render-ui",
3284
3331
  "main",
3285
3332
  {
3333
+ "addons": {
3334
+ "children": [
3335
+ {
3336
+ "action": "PLAY_AGAIN",
3337
+ "label": "Restart",
3338
+ "type": "button",
3339
+ "variant": "secondary"
3340
+ }
3341
+ ],
3342
+ "direction": "vertical",
3343
+ "gap": "sm",
3344
+ "type": "stack"
3345
+ },
3286
3346
  "children": [
3287
3347
  {
3288
3348
  "attackTargets": "@entity.attackTargets",
3349
+ "events": "@entity.fx",
3289
3350
  "features": "@config.features",
3290
3351
  "scale": "@config.scale",
3291
3352
  "selectedUnitId": "@entity.selectedUnitId",
@@ -3373,81 +3434,219 @@
3373
3434
  ]
3374
3435
  ],
3375
3436
  [
3376
- "tx",
3437
+ "dir",
3438
+ [
3439
+ "math/floor",
3440
+ [
3441
+ "*",
3442
+ [
3443
+ "math/random"
3444
+ ],
3445
+ 4.0
3446
+ ]
3447
+ ]
3448
+ ]
3449
+ ],
3450
+ [
3451
+ "let",
3452
+ [
3377
3453
  [
3378
- "+",
3379
- 1.0,
3454
+ "nx",
3380
3455
  [
3381
- "math/floor",
3456
+ "if",
3457
+ [
3458
+ "==",
3459
+ "@dir",
3460
+ 0.0
3461
+ ],
3382
3462
  [
3383
- "*",
3463
+ "+",
3464
+ "@cx",
3465
+ 1.0
3466
+ ],
3467
+ [
3468
+ "if",
3469
+ [
3470
+ "==",
3471
+ "@dir",
3472
+ 1.0
3473
+ ],
3384
3474
  [
3385
- "math/random"
3475
+ "-",
3476
+ "@cx",
3477
+ 1.0
3386
3478
  ],
3387
- 3.0
3479
+ "@cx"
3388
3480
  ]
3389
3481
  ]
3390
- ]
3391
- ],
3392
- [
3393
- "ty",
3482
+ ],
3394
3483
  [
3395
- "+",
3396
- 1.0,
3484
+ "ny",
3397
3485
  [
3398
- "math/floor",
3486
+ "if",
3399
3487
  [
3400
- "*",
3488
+ "==",
3489
+ "@dir",
3490
+ 2.0
3491
+ ],
3492
+ [
3493
+ "+",
3494
+ "@cy",
3495
+ 1.0
3496
+ ],
3497
+ [
3498
+ "if",
3401
3499
  [
3402
- "math/random"
3500
+ "==",
3501
+ "@dir",
3502
+ 3.0
3403
3503
  ],
3404
- 4.0
3504
+ [
3505
+ "-",
3506
+ "@cy",
3507
+ 1.0
3508
+ ],
3509
+ "@cy"
3405
3510
  ]
3406
3511
  ]
3407
3512
  ]
3408
- ]
3409
- ],
3410
- [
3411
- "object/merge",
3412
- "@u",
3413
- {
3414
- "position": {
3415
- "x": [
3416
- "math/clamp",
3513
+ ],
3514
+ [
3515
+ "let",
3516
+ [
3517
+ [
3518
+ "ntile",
3417
3519
  [
3418
- "+",
3419
- "@cx",
3520
+ "array/find",
3521
+ "@config.tiles",
3420
3522
  [
3421
- "math/sign",
3523
+ "fn",
3524
+ "t",
3422
3525
  [
3423
- "-",
3424
- "@tx",
3425
- "@cx"
3526
+ "and",
3527
+ [
3528
+ "==",
3529
+ [
3530
+ "object/get",
3531
+ "@t",
3532
+ "x"
3533
+ ],
3534
+ "@nx"
3535
+ ],
3536
+ [
3537
+ "==",
3538
+ [
3539
+ "object/get",
3540
+ "@t",
3541
+ "y"
3542
+ ],
3543
+ "@ny"
3544
+ ]
3426
3545
  ]
3427
3546
  ]
3428
- ],
3429
- 1.0,
3430
- 3.0
3547
+ ]
3431
3548
  ],
3432
- "y": [
3433
- "math/clamp",
3549
+ [
3550
+ "occupied",
3434
3551
  [
3435
- "+",
3436
- "@cy",
3552
+ "array/find",
3553
+ "@entity.units",
3437
3554
  [
3438
- "math/sign",
3555
+ "fn",
3556
+ "o",
3439
3557
  [
3440
- "-",
3441
- "@ty",
3442
- "@cy"
3558
+ "and",
3559
+ [
3560
+ "!=",
3561
+ "@o.id",
3562
+ "@u.id"
3563
+ ],
3564
+ [
3565
+ "and",
3566
+ [
3567
+ "==",
3568
+ [
3569
+ "object/get",
3570
+ [
3571
+ "object/get",
3572
+ "@o",
3573
+ "position"
3574
+ ],
3575
+ "x"
3576
+ ],
3577
+ "@nx"
3578
+ ],
3579
+ [
3580
+ "==",
3581
+ [
3582
+ "object/get",
3583
+ [
3584
+ "object/get",
3585
+ "@o",
3586
+ "position"
3587
+ ],
3588
+ "y"
3589
+ ],
3590
+ "@ny"
3591
+ ]
3592
+ ]
3443
3593
  ]
3444
3594
  ]
3445
- ],
3446
- 1.0,
3447
- 4.0
3595
+ ]
3448
3596
  ]
3449
- }
3450
- }
3597
+ ],
3598
+ [
3599
+ "if",
3600
+ [
3601
+ "and",
3602
+ [
3603
+ "grid/in-bounds",
3604
+ {
3605
+ "x": "@nx",
3606
+ "y": "@ny"
3607
+ },
3608
+ "@entity.gridWidth",
3609
+ "@entity.gridHeight"
3610
+ ],
3611
+ [
3612
+ "and",
3613
+ [
3614
+ "!=",
3615
+ "@ntile",
3616
+ null
3617
+ ],
3618
+ [
3619
+ "and",
3620
+ [
3621
+ "==",
3622
+ [
3623
+ "object/get",
3624
+ "@ntile",
3625
+ "passable"
3626
+ ],
3627
+ true
3628
+ ],
3629
+ [
3630
+ "==",
3631
+ "@occupied",
3632
+ null
3633
+ ]
3634
+ ]
3635
+ ]
3636
+ ],
3637
+ [
3638
+ "object/merge",
3639
+ "@u",
3640
+ {
3641
+ "position": {
3642
+ "x": "@nx",
3643
+ "y": "@ny"
3644
+ }
3645
+ }
3646
+ ],
3647
+ "@u"
3648
+ ]
3649
+ ]
3451
3650
  ]
3452
3651
  ],
3453
3652
  "@u"
@@ -3459,9 +3658,23 @@
3459
3658
  "render-ui",
3460
3659
  "main",
3461
3660
  {
3661
+ "addons": {
3662
+ "children": [
3663
+ {
3664
+ "action": "PLAY_AGAIN",
3665
+ "label": "Restart",
3666
+ "type": "button",
3667
+ "variant": "secondary"
3668
+ }
3669
+ ],
3670
+ "direction": "vertical",
3671
+ "gap": "sm",
3672
+ "type": "stack"
3673
+ },
3462
3674
  "children": [
3463
3675
  {
3464
3676
  "attackTargets": "@entity.attackTargets",
3677
+ "events": "@entity.fx",
3465
3678
  "features": "@config.features",
3466
3679
  "scale": "@config.scale",
3467
3680
  "selectedUnitId": "@entity.selectedUnitId",