@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
@@ -1,5 +1,5 @@
1
1
  {
2
- "description": "CityBoard3D — 3D delivery board organism; courier car drives city roads delivering to shops via game-canvas-3d.",
2
+ "description": "CityBoard3D — courier car follows city roads to deliver to every shop within a move budget or the run is lost.",
3
3
  "name": "ui-city-board-3d",
4
4
  "orbitals": [
5
5
  {
@@ -236,6 +236,51 @@
236
236
  "name": "targets",
237
237
  "type": "array"
238
238
  },
239
+ {
240
+ "default": [],
241
+ "items": {
242
+ "properties": {
243
+ "id": {
244
+ "name": "id",
245
+ "required": true,
246
+ "type": "string"
247
+ },
248
+ "message": {
249
+ "name": "message",
250
+ "required": false,
251
+ "type": "string"
252
+ },
253
+ "ttl": {
254
+ "name": "ttl",
255
+ "required": true,
256
+ "type": "number"
257
+ },
258
+ "type": {
259
+ "name": "type",
260
+ "required": true,
261
+ "type": "string"
262
+ },
263
+ "x": {
264
+ "name": "x",
265
+ "required": true,
266
+ "type": "number"
267
+ },
268
+ "y": {
269
+ "name": "y",
270
+ "required": false,
271
+ "type": "number"
272
+ },
273
+ "z": {
274
+ "name": "z",
275
+ "required": false,
276
+ "type": "number"
277
+ }
278
+ },
279
+ "type": "object"
280
+ },
281
+ "name": "fx",
282
+ "type": "array"
283
+ },
239
284
  {
240
285
  "default": 0.0,
241
286
  "name": "deliveries",
@@ -246,13 +291,19 @@
246
291
  "name": "totalTargets",
247
292
  "type": "number"
248
293
  },
294
+ {
295
+ "default": 16.0,
296
+ "name": "movesLeft",
297
+ "type": "number"
298
+ },
249
299
  {
250
300
  "default": "none",
251
301
  "name": "result",
252
302
  "type": "string",
253
303
  "values": [
254
304
  "none",
255
- "won"
305
+ "won",
306
+ "lost"
256
307
  ]
257
308
  },
258
309
  {
@@ -266,7 +317,7 @@
266
317
  "type": "number"
267
318
  },
268
319
  {
269
- "default": 6.0,
320
+ "default": 1.0,
270
321
  "name": "movementRange",
271
322
  "type": "number"
272
323
  }
@@ -515,6 +566,13 @@
515
566
  "tier": "presentation",
516
567
  "type": "boolean"
517
568
  },
569
+ "moveBudget": {
570
+ "default": 16.0,
571
+ "description": "Delivery moves allowed before the run is lost with shops unfilled",
572
+ "label": "Move Budget",
573
+ "tier": "presentation",
574
+ "type": "number"
575
+ },
518
576
  "scale": {
519
577
  "default": 0.4,
520
578
  "description": "Canvas render scale",
@@ -1727,9 +1785,11 @@
1727
1785
  "provides": [
1728
1786
  "attackTargets",
1729
1787
  "deliveries",
1788
+ "fx",
1730
1789
  "gridHeight",
1731
1790
  "gridWidth",
1732
1791
  "movementRange",
1792
+ "movesLeft",
1733
1793
  "result",
1734
1794
  "selectedUnitId",
1735
1795
  "targets",
@@ -1854,6 +1914,11 @@
1854
1914
  "@entity.targets",
1855
1915
  "@config.targets"
1856
1916
  ],
1917
+ [
1918
+ "set",
1919
+ "@entity.fx",
1920
+ []
1921
+ ],
1857
1922
  [
1858
1923
  "set",
1859
1924
  "@entity.deliveries",
@@ -1864,6 +1929,11 @@
1864
1929
  "@entity.totalTargets",
1865
1930
  3.0
1866
1931
  ],
1932
+ [
1933
+ "set",
1934
+ "@entity.movesLeft",
1935
+ "@config.moveBudget"
1936
+ ],
1867
1937
  [
1868
1938
  "set",
1869
1939
  "@entity.result",
@@ -1882,15 +1952,35 @@
1882
1952
  [
1883
1953
  "set",
1884
1954
  "@entity.movementRange",
1885
- 6.0
1955
+ 1.0
1886
1956
  ],
1887
1957
  [
1888
1958
  "render-ui",
1889
1959
  "main",
1890
1960
  {
1961
+ "addons": {
1962
+ "children": [
1963
+ {
1964
+ "action": "CANCEL",
1965
+ "label": "Cancel",
1966
+ "type": "button",
1967
+ "variant": "secondary"
1968
+ },
1969
+ {
1970
+ "action": "PLAY_AGAIN",
1971
+ "label": "Restart",
1972
+ "type": "button",
1973
+ "variant": "secondary"
1974
+ }
1975
+ ],
1976
+ "direction": "vertical",
1977
+ "gap": "sm",
1978
+ "type": "stack"
1979
+ },
1891
1980
  "children": [
1892
1981
  {
1893
1982
  "attackTargets": "@entity.attackTargets",
1983
+ "events": "@entity.fx",
1894
1984
  "features": "@config.features",
1895
1985
  "interpolateUnits": true,
1896
1986
  "scale": "@config.scale",
@@ -1908,6 +1998,10 @@
1908
1998
  "label": "Deliveries",
1909
1999
  "value": "@entity.deliveries"
1910
2000
  },
2001
+ {
2002
+ "label": "Moves",
2003
+ "value": "@entity.movesLeft"
2004
+ },
1911
2005
  {
1912
2006
  "label": "Result",
1913
2007
  "value": "@entity.result"
@@ -1939,9 +2033,29 @@
1939
2033
  "render-ui",
1940
2034
  "main",
1941
2035
  {
2036
+ "addons": {
2037
+ "children": [
2038
+ {
2039
+ "action": "CANCEL",
2040
+ "label": "Cancel",
2041
+ "type": "button",
2042
+ "variant": "secondary"
2043
+ },
2044
+ {
2045
+ "action": "PLAY_AGAIN",
2046
+ "label": "Restart",
2047
+ "type": "button",
2048
+ "variant": "secondary"
2049
+ }
2050
+ ],
2051
+ "direction": "vertical",
2052
+ "gap": "sm",
2053
+ "type": "stack"
2054
+ },
1942
2055
  "children": [
1943
2056
  {
1944
2057
  "attackTargets": "@entity.attackTargets",
2058
+ "events": "@entity.fx",
1945
2059
  "features": "@config.features",
1946
2060
  "interpolateUnits": true,
1947
2061
  "scale": "@config.scale",
@@ -1959,6 +2073,10 @@
1959
2073
  "label": "Deliveries",
1960
2074
  "value": "@entity.deliveries"
1961
2075
  },
2076
+ {
2077
+ "label": "Moves",
2078
+ "value": "@entity.movesLeft"
2079
+ },
1962
2080
  {
1963
2081
  "label": "Result",
1964
2082
  "value": "@entity.result"
@@ -2124,9 +2242,29 @@
2124
2242
  "render-ui",
2125
2243
  "main",
2126
2244
  {
2245
+ "addons": {
2246
+ "children": [
2247
+ {
2248
+ "action": "CANCEL",
2249
+ "label": "Cancel",
2250
+ "type": "button",
2251
+ "variant": "secondary"
2252
+ },
2253
+ {
2254
+ "action": "PLAY_AGAIN",
2255
+ "label": "Restart",
2256
+ "type": "button",
2257
+ "variant": "secondary"
2258
+ }
2259
+ ],
2260
+ "direction": "vertical",
2261
+ "gap": "sm",
2262
+ "type": "stack"
2263
+ },
2127
2264
  "children": [
2128
2265
  {
2129
2266
  "attackTargets": "@entity.attackTargets",
2267
+ "events": "@entity.fx",
2130
2268
  "features": "@config.features",
2131
2269
  "interpolateUnits": true,
2132
2270
  "scale": "@config.scale",
@@ -2144,6 +2282,10 @@
2144
2282
  "label": "Deliveries",
2145
2283
  "value": "@entity.deliveries"
2146
2284
  },
2285
+ {
2286
+ "label": "Moves",
2287
+ "value": "@entity.movesLeft"
2288
+ },
2147
2289
  {
2148
2290
  "label": "Result",
2149
2291
  "value": "@entity.result"
@@ -2183,165 +2325,334 @@
2183
2325
  {
2184
2326
  "effects": [
2185
2327
  [
2186
- "set",
2187
- "@entity.units",
2328
+ "let",
2188
2329
  [
2189
- "array/map",
2190
- "@entity.units",
2191
2330
  [
2192
- "fn",
2193
- "u",
2331
+ "newlyDelivered",
2194
2332
  [
2195
- "if",
2333
+ "array/filter",
2334
+ "@entity.targets",
2196
2335
  [
2197
- "==",
2198
- "@u.id",
2199
- "@entity.selectedUnitId"
2200
- ],
2201
- [
2202
- "object/merge",
2203
- "@u",
2204
- {
2205
- "position": {
2206
- "x": "@payload.x",
2207
- "y": "@payload.z"
2208
- }
2209
- }
2210
- ],
2211
- "@u"
2336
+ "fn",
2337
+ "t",
2338
+ [
2339
+ "and",
2340
+ [
2341
+ "==",
2342
+ [
2343
+ "object/get",
2344
+ "@t",
2345
+ "delivered"
2346
+ ],
2347
+ false
2348
+ ],
2349
+ [
2350
+ "<=",
2351
+ [
2352
+ "grid/manhattan-distance",
2353
+ {
2354
+ "x": "@payload.x",
2355
+ "y": "@payload.z"
2356
+ },
2357
+ {
2358
+ "x": [
2359
+ "object/get",
2360
+ "@t",
2361
+ "x"
2362
+ ],
2363
+ "y": [
2364
+ "object/get",
2365
+ "@t",
2366
+ "y"
2367
+ ]
2368
+ }
2369
+ ],
2370
+ 1.0
2371
+ ]
2372
+ ]
2373
+ ]
2212
2374
  ]
2213
2375
  ]
2214
- ]
2215
- ],
2216
- [
2217
- "set",
2218
- "@entity.targets",
2376
+ ],
2219
2377
  [
2220
- "array/map",
2221
- "@entity.targets",
2378
+ "do",
2222
2379
  [
2223
- "fn",
2224
- "t",
2380
+ "set",
2381
+ "@entity.units",
2225
2382
  [
2226
- "if",
2383
+ "array/map",
2384
+ "@entity.units",
2227
2385
  [
2228
- "and",
2386
+ "fn",
2387
+ "u",
2229
2388
  [
2230
- "==",
2389
+ "if",
2231
2390
  [
2232
- "object/get",
2233
- "t",
2234
- "delivered"
2391
+ "==",
2392
+ "@u.id",
2393
+ "@entity.selectedUnitId"
2235
2394
  ],
2236
- false
2237
- ],
2238
- [
2239
- "<=",
2240
2395
  [
2241
- "grid/manhattan-distance",
2242
- {
2243
- "x": "@payload.x",
2244
- "y": "@payload.z"
2245
- },
2396
+ "object/merge",
2397
+ "@u",
2246
2398
  {
2247
- "x": [
2399
+ "position": {
2400
+ "x": "@payload.x",
2401
+ "y": "@payload.z"
2402
+ }
2403
+ }
2404
+ ],
2405
+ "@u"
2406
+ ]
2407
+ ]
2408
+ ]
2409
+ ],
2410
+ [
2411
+ "set",
2412
+ "@entity.targets",
2413
+ [
2414
+ "array/map",
2415
+ "@entity.targets",
2416
+ [
2417
+ "fn",
2418
+ "t",
2419
+ [
2420
+ "if",
2421
+ [
2422
+ "and",
2423
+ [
2424
+ "==",
2425
+ [
2248
2426
  "object/get",
2249
- "t",
2250
- "x"
2427
+ "@t",
2428
+ "delivered"
2251
2429
  ],
2252
- "y": [
2253
- "object/get",
2254
- "t",
2255
- "y"
2256
- ]
2430
+ false
2431
+ ],
2432
+ [
2433
+ "<=",
2434
+ [
2435
+ "grid/manhattan-distance",
2436
+ {
2437
+ "x": "@payload.x",
2438
+ "y": "@payload.z"
2439
+ },
2440
+ {
2441
+ "x": [
2442
+ "object/get",
2443
+ "@t",
2444
+ "x"
2445
+ ],
2446
+ "y": [
2447
+ "object/get",
2448
+ "@t",
2449
+ "y"
2450
+ ]
2451
+ }
2452
+ ],
2453
+ 1.0
2454
+ ]
2455
+ ],
2456
+ [
2457
+ "object/merge",
2458
+ "@t",
2459
+ {
2460
+ "delivered": true
2257
2461
  }
2258
2462
  ],
2259
- 1.0
2463
+ "@t"
2260
2464
  ]
2261
- ],
2465
+ ]
2466
+ ]
2467
+ ],
2468
+ [
2469
+ "set",
2470
+ "@entity.deliveries",
2471
+ [
2472
+ "array/len",
2262
2473
  [
2263
- "object/merge",
2264
- "t",
2265
- {
2266
- "delivered": true
2267
- }
2474
+ "array/filter",
2475
+ "@entity.targets",
2476
+ [
2477
+ "fn",
2478
+ "t",
2479
+ [
2480
+ "==",
2481
+ [
2482
+ "object/get",
2483
+ "@t",
2484
+ "delivered"
2485
+ ],
2486
+ true
2487
+ ]
2488
+ ]
2489
+ ]
2490
+ ]
2491
+ ],
2492
+ [
2493
+ "set",
2494
+ "@entity.movesLeft",
2495
+ [
2496
+ "math/max",
2497
+ 0.0,
2498
+ [
2499
+ "-",
2500
+ "@entity.movesLeft",
2501
+ 1.0
2502
+ ]
2503
+ ]
2504
+ ],
2505
+ [
2506
+ "set",
2507
+ "@entity.fx",
2508
+ [
2509
+ "array/reduce",
2510
+ "@newlyDelivered",
2511
+ [
2512
+ "fn",
2513
+ [
2514
+ "acc",
2515
+ "t"
2516
+ ],
2517
+ [
2518
+ "array/append",
2519
+ "@acc",
2520
+ {
2521
+ "id": [
2522
+ "str/concat",
2523
+ "fx-deliver-",
2524
+ [
2525
+ "object/get",
2526
+ "@t",
2527
+ "id"
2528
+ ]
2529
+ ],
2530
+ "message": "Delivered",
2531
+ "ttl": 3.0,
2532
+ "type": "pickup",
2533
+ "x": [
2534
+ "object/get",
2535
+ "@t",
2536
+ "x"
2537
+ ],
2538
+ "z": [
2539
+ "object/get",
2540
+ "@t",
2541
+ "y"
2542
+ ]
2543
+ }
2544
+ ]
2268
2545
  ],
2269
- "t"
2546
+ "@entity.fx"
2270
2547
  ]
2271
- ]
2272
- ]
2273
- ],
2274
- [
2275
- "set",
2276
- "@entity.deliveries",
2277
- [
2278
- "array/len",
2548
+ ],
2279
2549
  [
2280
- "array/filter",
2281
- "@entity.targets",
2550
+ "set",
2551
+ "@entity.result",
2282
2552
  [
2283
- "fn",
2284
- "t",
2553
+ "if",
2285
2554
  [
2286
2555
  "==",
2556
+ "@entity.deliveries",
2557
+ "@entity.totalTargets"
2558
+ ],
2559
+ "won",
2560
+ [
2561
+ "if",
2287
2562
  [
2288
- "object/get",
2289
- "t",
2290
- "delivered"
2563
+ "<=",
2564
+ "@entity.movesLeft",
2565
+ 0.0
2291
2566
  ],
2292
- true
2567
+ "lost",
2568
+ "none"
2293
2569
  ]
2294
2570
  ]
2295
- ]
2296
- ]
2297
- ],
2298
- [
2299
- "set",
2300
- "@entity.result",
2301
- [
2302
- "if",
2571
+ ],
2303
2572
  [
2304
- "==",
2305
- "@entity.deliveries",
2306
- "@entity.totalTargets"
2573
+ "set",
2574
+ "@entity.fx",
2575
+ [
2576
+ "if",
2577
+ [
2578
+ "==",
2579
+ "@entity.result",
2580
+ "lost"
2581
+ ],
2582
+ [
2583
+ "array/append",
2584
+ "@entity.fx",
2585
+ {
2586
+ "id": [
2587
+ "str/concat",
2588
+ "fx-fail-",
2589
+ "@payload.x"
2590
+ ],
2591
+ "message": "Out of moves",
2592
+ "ttl": 3.0,
2593
+ "type": "lose",
2594
+ "x": "@payload.x",
2595
+ "z": "@payload.z"
2596
+ }
2597
+ ],
2598
+ "@entity.fx"
2599
+ ]
2307
2600
  ],
2308
- "won",
2309
- "none"
2601
+ [
2602
+ "if",
2603
+ [
2604
+ "!=",
2605
+ "@entity.result",
2606
+ "none"
2607
+ ],
2608
+ [
2609
+ "emit",
2610
+ "GAME_END",
2611
+ {
2612
+ "result": "@entity.result"
2613
+ }
2614
+ ],
2615
+ null
2616
+ ],
2617
+ [
2618
+ "set",
2619
+ "@entity.selectedUnitId",
2620
+ ""
2621
+ ],
2622
+ [
2623
+ "set",
2624
+ "@entity.validMoves",
2625
+ []
2626
+ ]
2310
2627
  ]
2311
2628
  ],
2312
- [
2313
- "if",
2314
- [
2315
- "!=",
2316
- "@entity.result",
2317
- "none"
2318
- ],
2319
- [
2320
- "emit",
2321
- "GAME_END",
2322
- {
2323
- "result": "@entity.result"
2324
- }
2325
- ],
2326
- null
2327
- ],
2328
- [
2329
- "set",
2330
- "@entity.selectedUnitId",
2331
- ""
2332
- ],
2333
- [
2334
- "set",
2335
- "@entity.validMoves",
2336
- []
2337
- ],
2338
2629
  [
2339
2630
  "render-ui",
2340
2631
  "main",
2341
2632
  {
2633
+ "addons": {
2634
+ "children": [
2635
+ {
2636
+ "action": "CANCEL",
2637
+ "label": "Cancel",
2638
+ "type": "button",
2639
+ "variant": "secondary"
2640
+ },
2641
+ {
2642
+ "action": "PLAY_AGAIN",
2643
+ "label": "Restart",
2644
+ "type": "button",
2645
+ "variant": "secondary"
2646
+ }
2647
+ ],
2648
+ "direction": "vertical",
2649
+ "gap": "sm",
2650
+ "type": "stack"
2651
+ },
2342
2652
  "children": [
2343
2653
  {
2344
2654
  "attackTargets": "@entity.attackTargets",
2655
+ "events": "@entity.fx",
2345
2656
  "features": "@config.features",
2346
2657
  "interpolateUnits": true,
2347
2658
  "scale": "@config.scale",
@@ -2359,6 +2670,10 @@
2359
2670
  "label": "Deliveries",
2360
2671
  "value": "@entity.deliveries"
2361
2672
  },
2673
+ {
2674
+ "label": "Moves",
2675
+ "value": "@entity.movesLeft"
2676
+ },
2362
2677
  {
2363
2678
  "label": "Result",
2364
2679
  "value": "@entity.result"
@@ -2525,9 +2840,29 @@
2525
2840
  "render-ui",
2526
2841
  "main",
2527
2842
  {
2843
+ "addons": {
2844
+ "children": [
2845
+ {
2846
+ "action": "CANCEL",
2847
+ "label": "Cancel",
2848
+ "type": "button",
2849
+ "variant": "secondary"
2850
+ },
2851
+ {
2852
+ "action": "PLAY_AGAIN",
2853
+ "label": "Restart",
2854
+ "type": "button",
2855
+ "variant": "secondary"
2856
+ }
2857
+ ],
2858
+ "direction": "vertical",
2859
+ "gap": "sm",
2860
+ "type": "stack"
2861
+ },
2528
2862
  "children": [
2529
2863
  {
2530
2864
  "attackTargets": "@entity.attackTargets",
2865
+ "events": "@entity.fx",
2531
2866
  "features": "@config.features",
2532
2867
  "interpolateUnits": true,
2533
2868
  "scale": "@config.scale",
@@ -2545,6 +2880,10 @@
2545
2880
  "label": "Deliveries",
2546
2881
  "value": "@entity.deliveries"
2547
2882
  },
2883
+ {
2884
+ "label": "Moves",
2885
+ "value": "@entity.movesLeft"
2886
+ },
2548
2887
  {
2549
2888
  "label": "Result",
2550
2889
  "value": "@entity.result"
@@ -2581,9 +2920,29 @@
2581
2920
  "render-ui",
2582
2921
  "main",
2583
2922
  {
2923
+ "addons": {
2924
+ "children": [
2925
+ {
2926
+ "action": "CANCEL",
2927
+ "label": "Cancel",
2928
+ "type": "button",
2929
+ "variant": "secondary"
2930
+ },
2931
+ {
2932
+ "action": "PLAY_AGAIN",
2933
+ "label": "Restart",
2934
+ "type": "button",
2935
+ "variant": "secondary"
2936
+ }
2937
+ ],
2938
+ "direction": "vertical",
2939
+ "gap": "sm",
2940
+ "type": "stack"
2941
+ },
2584
2942
  "children": [
2585
2943
  {
2586
2944
  "attackTargets": "@entity.attackTargets",
2945
+ "events": "@entity.fx",
2587
2946
  "features": "@config.features",
2588
2947
  "interpolateUnits": true,
2589
2948
  "scale": "@config.scale",
@@ -2601,6 +2960,10 @@
2601
2960
  "label": "Deliveries",
2602
2961
  "value": "@entity.deliveries"
2603
2962
  },
2963
+ {
2964
+ "label": "Moves",
2965
+ "value": "@entity.movesLeft"
2966
+ },
2604
2967
  {
2605
2968
  "label": "Result",
2606
2969
  "value": "@entity.result"
@@ -2608,6 +2971,29 @@
2608
2971
  ],
2609
2972
  "type": "game-hud"
2610
2973
  },
2974
+ "overlay": {
2975
+ "align": "center",
2976
+ "children": [
2977
+ {
2978
+ "stats": [
2979
+ {
2980
+ "label": "Result",
2981
+ "value": "@entity.result"
2982
+ }
2983
+ ],
2984
+ "type": "game-hud"
2985
+ },
2986
+ {
2987
+ "action": "PLAY_AGAIN",
2988
+ "label": "Play Again",
2989
+ "type": "button",
2990
+ "variant": "primary"
2991
+ }
2992
+ ],
2993
+ "direction": "vertical",
2994
+ "gap": "md",
2995
+ "type": "stack"
2996
+ },
2611
2997
  "type": "game-shell"
2612
2998
  }
2613
2999
  ]
@@ -2648,11 +3034,21 @@
2648
3034
  "@entity.targets",
2649
3035
  "@config.targets"
2650
3036
  ],
3037
+ [
3038
+ "set",
3039
+ "@entity.fx",
3040
+ []
3041
+ ],
2651
3042
  [
2652
3043
  "set",
2653
3044
  "@entity.deliveries",
2654
3045
  0.0
2655
3046
  ],
3047
+ [
3048
+ "set",
3049
+ "@entity.movesLeft",
3050
+ "@config.moveBudget"
3051
+ ],
2656
3052
  [
2657
3053
  "set",
2658
3054
  "@entity.result",
@@ -2662,9 +3058,29 @@
2662
3058
  "render-ui",
2663
3059
  "main",
2664
3060
  {
3061
+ "addons": {
3062
+ "children": [
3063
+ {
3064
+ "action": "CANCEL",
3065
+ "label": "Cancel",
3066
+ "type": "button",
3067
+ "variant": "secondary"
3068
+ },
3069
+ {
3070
+ "action": "PLAY_AGAIN",
3071
+ "label": "Restart",
3072
+ "type": "button",
3073
+ "variant": "secondary"
3074
+ }
3075
+ ],
3076
+ "direction": "vertical",
3077
+ "gap": "sm",
3078
+ "type": "stack"
3079
+ },
2665
3080
  "children": [
2666
3081
  {
2667
3082
  "attackTargets": "@entity.attackTargets",
3083
+ "events": "@entity.fx",
2668
3084
  "features": "@config.features",
2669
3085
  "interpolateUnits": true,
2670
3086
  "scale": "@config.scale",
@@ -2682,6 +3098,10 @@
2682
3098
  "label": "Deliveries",
2683
3099
  "value": "@entity.deliveries"
2684
3100
  },
3101
+ {
3102
+ "label": "Moves",
3103
+ "value": "@entity.movesLeft"
3104
+ },
2685
3105
  {
2686
3106
  "label": "Result",
2687
3107
  "value": "@entity.result"
@@ -2702,6 +3122,49 @@
2702
3122
  "ticks": [
2703
3123
  {
2704
3124
  "effects": [
3125
+ [
3126
+ "set",
3127
+ "@entity.fx",
3128
+ [
3129
+ "array/filter",
3130
+ [
3131
+ "array/map",
3132
+ "@entity.fx",
3133
+ [
3134
+ "fn",
3135
+ "e",
3136
+ [
3137
+ "object/merge",
3138
+ "@e",
3139
+ {
3140
+ "ttl": [
3141
+ "-",
3142
+ [
3143
+ "object/get",
3144
+ "@e",
3145
+ "ttl"
3146
+ ],
3147
+ 1.0
3148
+ ]
3149
+ }
3150
+ ]
3151
+ ]
3152
+ ],
3153
+ [
3154
+ "fn",
3155
+ "e",
3156
+ [
3157
+ ">",
3158
+ [
3159
+ "object/get",
3160
+ "@e",
3161
+ "ttl"
3162
+ ],
3163
+ 0.0
3164
+ ]
3165
+ ]
3166
+ ]
3167
+ ],
2705
3168
  [
2706
3169
  "set",
2707
3170
  "@entity.units",
@@ -2818,79 +3281,224 @@
2818
3281
  ]
2819
3282
  ],
2820
3283
  [
2821
- "object/merge",
2822
- "@u",
2823
- {
2824
- "headingToB": "@nextHeading",
2825
- "position": {
2826
- "x": [
2827
- "math/clamp",
2828
- [
2829
- "+",
3284
+ "let",
3285
+ [
3286
+ [
3287
+ "step",
3288
+ {
3289
+ "x": [
3290
+ "math/clamp",
2830
3291
  [
2831
- "object/get",
2832
- "@cur",
2833
- "x"
3292
+ "+",
3293
+ [
3294
+ "object/get",
3295
+ "@cur",
3296
+ "x"
3297
+ ],
3298
+ [
3299
+ "math/sign",
3300
+ [
3301
+ "-",
3302
+ [
3303
+ "object/get",
3304
+ "@tgt",
3305
+ "x"
3306
+ ],
3307
+ [
3308
+ "object/get",
3309
+ "@cur",
3310
+ "x"
3311
+ ]
3312
+ ]
3313
+ ]
2834
3314
  ],
3315
+ 0.0,
2835
3316
  [
2836
- "math/sign",
3317
+ "-",
3318
+ "@entity.gridWidth",
3319
+ 1.0
3320
+ ]
3321
+ ],
3322
+ "y": [
3323
+ "math/clamp",
3324
+ [
3325
+ "+",
3326
+ [
3327
+ "object/get",
3328
+ "@cur",
3329
+ "y"
3330
+ ],
2837
3331
  [
2838
- "-",
3332
+ "math/sign",
2839
3333
  [
2840
- "object/get",
2841
- "@tgt",
2842
- "x"
3334
+ "-",
3335
+ [
3336
+ "object/get",
3337
+ "@tgt",
3338
+ "y"
3339
+ ],
3340
+ [
3341
+ "object/get",
3342
+ "@cur",
3343
+ "y"
3344
+ ]
3345
+ ]
3346
+ ]
3347
+ ],
3348
+ 0.0,
3349
+ [
3350
+ "-",
3351
+ "@entity.gridHeight",
3352
+ 1.0
3353
+ ]
3354
+ ]
3355
+ }
3356
+ ]
3357
+ ],
3358
+ [
3359
+ "let",
3360
+ [
3361
+ [
3362
+ "ntile",
3363
+ [
3364
+ "array/find",
3365
+ "@config.tiles",
3366
+ [
3367
+ "fn",
3368
+ "t",
3369
+ [
3370
+ "and",
3371
+ [
3372
+ "==",
3373
+ [
3374
+ "object/get",
3375
+ "@t",
3376
+ "x"
3377
+ ],
3378
+ [
3379
+ "object/get",
3380
+ "@step",
3381
+ "x"
3382
+ ]
2843
3383
  ],
2844
3384
  [
2845
- "object/get",
2846
- "@cur",
2847
- "x"
3385
+ "==",
3386
+ [
3387
+ "object/get",
3388
+ "@t",
3389
+ "y"
3390
+ ],
3391
+ [
3392
+ "object/get",
3393
+ "@step",
3394
+ "y"
3395
+ ]
2848
3396
  ]
2849
3397
  ]
2850
3398
  ]
2851
- ],
2852
- 0.0,
2853
- [
2854
- "-",
2855
- "@entity.gridWidth",
2856
- 1.0
2857
3399
  ]
2858
3400
  ],
2859
- "y": [
2860
- "math/clamp",
3401
+ [
3402
+ "occupied",
2861
3403
  [
2862
- "+",
3404
+ "array/find",
3405
+ "@entity.units",
2863
3406
  [
2864
- "object/get",
2865
- "@cur",
2866
- "y"
2867
- ],
2868
- [
2869
- "math/sign",
3407
+ "fn",
3408
+ "o",
2870
3409
  [
2871
- "-",
3410
+ "and",
2872
3411
  [
2873
- "object/get",
2874
- "@tgt",
2875
- "y"
3412
+ "!=",
3413
+ "@o.id",
3414
+ "@u.id"
2876
3415
  ],
2877
3416
  [
2878
- "object/get",
2879
- "@cur",
2880
- "y"
3417
+ "and",
3418
+ [
3419
+ "==",
3420
+ [
3421
+ "object/get",
3422
+ [
3423
+ "object/get",
3424
+ "@o",
3425
+ "position"
3426
+ ],
3427
+ "x"
3428
+ ],
3429
+ [
3430
+ "object/get",
3431
+ "@step",
3432
+ "x"
3433
+ ]
3434
+ ],
3435
+ [
3436
+ "==",
3437
+ [
3438
+ "object/get",
3439
+ [
3440
+ "object/get",
3441
+ "@o",
3442
+ "position"
3443
+ ],
3444
+ "y"
3445
+ ],
3446
+ [
3447
+ "object/get",
3448
+ "@step",
3449
+ "y"
3450
+ ]
3451
+ ]
2881
3452
  ]
2882
3453
  ]
2883
3454
  ]
3455
+ ]
3456
+ ]
3457
+ ],
3458
+ [
3459
+ "if",
3460
+ [
3461
+ "and",
3462
+ [
3463
+ "!=",
3464
+ "@ntile",
3465
+ null
2884
3466
  ],
2885
- 0.0,
2886
3467
  [
2887
- "-",
2888
- "@entity.gridHeight",
2889
- 1.0
3468
+ "and",
3469
+ [
3470
+ "==",
3471
+ [
3472
+ "object/get",
3473
+ "@ntile",
3474
+ "passable"
3475
+ ],
3476
+ true
3477
+ ],
3478
+ [
3479
+ "==",
3480
+ "@occupied",
3481
+ null
3482
+ ]
2890
3483
  ]
3484
+ ],
3485
+ [
3486
+ "object/merge",
3487
+ "@u",
3488
+ {
3489
+ "headingToB": "@nextHeading",
3490
+ "position": "@step"
3491
+ }
3492
+ ],
3493
+ [
3494
+ "object/merge",
3495
+ "@u",
3496
+ {
3497
+ "headingToB": "@nextHeading"
3498
+ }
2891
3499
  ]
2892
- }
2893
- }
3500
+ ]
3501
+ ]
2894
3502
  ]
2895
3503
  ]
2896
3504
  ]
@@ -2905,9 +3513,29 @@
2905
3513
  "render-ui",
2906
3514
  "main",
2907
3515
  {
3516
+ "addons": {
3517
+ "children": [
3518
+ {
3519
+ "action": "CANCEL",
3520
+ "label": "Cancel",
3521
+ "type": "button",
3522
+ "variant": "secondary"
3523
+ },
3524
+ {
3525
+ "action": "PLAY_AGAIN",
3526
+ "label": "Restart",
3527
+ "type": "button",
3528
+ "variant": "secondary"
3529
+ }
3530
+ ],
3531
+ "direction": "vertical",
3532
+ "gap": "sm",
3533
+ "type": "stack"
3534
+ },
2908
3535
  "children": [
2909
3536
  {
2910
3537
  "attackTargets": "@entity.attackTargets",
3538
+ "events": "@entity.fx",
2911
3539
  "features": "@config.features",
2912
3540
  "interpolateUnits": true,
2913
3541
  "scale": "@config.scale",
@@ -2925,6 +3553,10 @@
2925
3553
  "label": "Deliveries",
2926
3554
  "value": "@entity.deliveries"
2927
3555
  },
3556
+ {
3557
+ "label": "Moves",
3558
+ "value": "@entity.movesLeft"
3559
+ },
2928
3560
  {
2929
3561
  "label": "Result",
2930
3562
  "value": "@entity.result"