@almadar/std 16.186.0 → 16.188.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 (83) hide show
  1. package/behaviors/lolo/ui/core/.hand-authored.json +4 -0
  2. package/behaviors/lolo/ui/core/atoms/std-board.lolo +138 -4
  3. package/behaviors/lolo/ui/core/atoms/std-browse.lolo +148 -8
  4. package/behaviors/lolo/ui/core/atoms/std-calendar.lolo +141 -3
  5. package/behaviors/lolo/ui/core/atoms/std-event-log.lolo +255 -2
  6. package/behaviors/lolo/ui/core/atoms/std-gallery.lolo +148 -1
  7. package/behaviors/lolo/ui/core/atoms/std-list.lolo +193 -1
  8. package/behaviors/lolo/ui/core/atoms/std-record-detail.lolo +329 -0
  9. package/behaviors/lolo/ui/core/atoms/std-selection.lolo +182 -1
  10. package/behaviors/lolo/ui/core/atoms/std-tree.lolo +113 -3
  11. package/behaviors/lolo/ui/game/atoms/std-area-fill.lolo +93 -0
  12. package/behaviors/lolo/ui/game/atoms/std-loop-lock.lolo +79 -0
  13. package/behaviors/lolo/ui/game/atoms/std-pad-lock.lolo +93 -0
  14. package/behaviors/lolo/ui/game/atoms/std-patrol-hazard.lolo +14 -7
  15. package/behaviors/lolo/ui/game/atoms/std-platformer-body.lolo +21 -4
  16. package/behaviors/lolo/ui/game/atoms/std-velocity-gate.lolo +101 -0
  17. package/behaviors/registry/infra/atoms/std-approval-gate.orb +16 -8
  18. package/behaviors/registry/infra/atoms/std-cache-aside.orb +62 -31
  19. package/behaviors/registry/infra/atoms/std-circuit-breaker.orb +32 -16
  20. package/behaviors/registry/infra/atoms/std-data-erasure.orb +16 -8
  21. package/behaviors/registry/infra/atoms/std-mod-queue.orb +16 -8
  22. package/behaviors/registry/infra/atoms/std-rate-limiter.orb +28 -14
  23. package/behaviors/registry/infra/organisms/std-status-lifecycle-control.orb +2 -1
  24. package/behaviors/registry/ml/organisms/std-escalating-decision.orb +10 -5
  25. package/behaviors/registry/ml/organisms/std-knowledge-tracing.orb +4 -2
  26. package/behaviors/registry/ui/core/atoms/std-billable-hour.orb +2 -1
  27. package/behaviors/registry/ui/core/atoms/std-board.orb +355 -2
  28. package/behaviors/registry/ui/core/atoms/std-browse.orb +304 -31
  29. package/behaviors/registry/ui/core/atoms/std-calendar.orb +344 -0
  30. package/behaviors/registry/ui/core/atoms/std-dashboard-grid-embedded.orb +2 -1
  31. package/behaviors/registry/ui/core/atoms/std-esign-flow.orb +4 -2
  32. package/behaviors/registry/ui/core/atoms/std-esign-request.orb +6 -3
  33. package/behaviors/registry/ui/core/atoms/std-event-log.orb +773 -0
  34. package/behaviors/registry/ui/core/atoms/std-export.orb +4 -2
  35. package/behaviors/registry/ui/core/atoms/std-gallery.orb +390 -0
  36. package/behaviors/registry/ui/core/atoms/std-import.orb +4 -2
  37. package/behaviors/registry/ui/core/atoms/std-list.orb +451 -0
  38. package/behaviors/registry/ui/core/atoms/std-record-detail.orb +1141 -0
  39. package/behaviors/registry/ui/core/atoms/std-selection.orb +436 -0
  40. package/behaviors/registry/ui/core/atoms/std-tree.orb +292 -1
  41. package/behaviors/registry/ui/game/atoms/std-area-fill.orb +955 -0
  42. package/behaviors/registry/ui/game/atoms/std-fx-trail.orb +1 -1
  43. package/behaviors/registry/ui/game/atoms/std-gate-lock.orb +1 -1
  44. package/behaviors/registry/ui/game/atoms/std-lives.orb +1 -1
  45. package/behaviors/registry/ui/game/atoms/std-loop-lock.orb +785 -0
  46. package/behaviors/registry/ui/game/atoms/std-pad-lock.orb +903 -0
  47. package/behaviors/registry/ui/game/atoms/std-patrol-hazard.orb +190 -44
  48. package/behaviors/registry/ui/game/atoms/std-platformer-body.orb +868 -637
  49. package/behaviors/registry/ui/game/atoms/std-velocity-gate.orb +1040 -0
  50. package/behaviors/registry/ui/game/organisms/std-arcade-board-3d.orb +8 -4
  51. package/behaviors/registry/ui/game/organisms/std-crew-board-2d.orb +6 -3
  52. package/behaviors/registry/ui/game/organisms/std-dungeon-board-2d.orb +10 -5
  53. package/behaviors/registry/ui/game/organisms/std-market-board-3d.orb +8 -4
  54. package/behaviors/registry/ui/game/organisms/std-objective-board-3d.orb +8 -4
  55. package/behaviors/registry/ui/game/organisms/std-platformer-board-2d.orb +7 -4
  56. package/behaviors/registry/ui/game/organisms/std-survival-board-3d.orb +8 -4
  57. package/behaviors/registry/ui/game/organisms/std-tactics-board-2d.orb +12 -6
  58. package/behaviors/registry/ui/game/organisms/std-tactics-board-3d.orb +8 -4
  59. package/behaviors/registry/ui/game/organisms/std-worldmap-board-2d.orb +6 -3
  60. package/behaviors/registry/ui/learning/atoms/std-learn-slope-probe.orb +1 -1
  61. package/behaviors/registry/ui/marketing/atoms/std-marketing-article.orb +2 -1
  62. package/behaviors/registry/ui/marketing/atoms/std-marketing-footer.orb +2 -1
  63. package/behaviors/registry/ui/marketing/atoms/std-marketing-split.orb +2 -1
  64. package/behaviors/registry/ui/marketing/atoms/std-marketing-stats.orb +2 -1
  65. package/behaviors/registry/ui/marketing/atoms/std-marketing-steps.orb +2 -1
  66. package/behaviors/registry/ui/marketing/atoms/std-marketing-team.orb +2 -1
  67. package/dist/behaviors/exports-reader.js +7822 -3996
  68. package/dist/behaviors/functions/index.d.ts +598 -270
  69. package/dist/behaviors/functions/index.js +7805 -3989
  70. package/dist/behaviors/index.d.ts +1 -1
  71. package/dist/behaviors/index.js +7823 -3997
  72. package/dist/behaviors/query.js +7822 -3996
  73. package/dist/behaviors-embeddings.hash.json +3 -3
  74. package/dist/behaviors-embeddings.json +535 -519
  75. package/dist/behaviors-registry.json +2877 -2268
  76. package/dist/index.d.ts +1 -1
  77. package/dist/index.js +7823 -3997
  78. package/dist/knob-embeddings.hash.json +3 -3
  79. package/dist/knob-embeddings.json +1 -1
  80. package/dist/registry/factory-signatures.json +1 -1
  81. package/package.json +1 -1
  82. package/behaviors/lolo/ui/core/organisms/ui-ui-slot-renderer.lolo +0 -71
  83. package/behaviors/registry/ui/core/organisms/ui-ui-slot-renderer.orb +0 -234
@@ -0,0 +1,785 @@
1
+ {
2
+ "description": "Headless winding-lock mechanic: locks that open only after the player travels a full revolution around their anchor. Listens BODY_MOVED and, while the player stays within a radial band of a lock's ring, accumulates the wrapped angular delta of their position into swept (radians, signed — either direction counts); when |swept| reaches turns × 2π the lock flips unlocked and emits LOOP_UNLOCKED once. Entering the band reseeds the angle so leaving and returning never jumps the sweep; progress is kept across exits, so a revolution can be completed in stages. RESTART re-locks every lock. Renders nothing; boards draw the ring/chest and read swept from the shared entity (the render authority).",
3
+ "ledger": {
4
+ "entries": {
5
+ "ent_01M119MVXMDX7KPCDQRRYHABX8": {
6
+ "bakedName": "LoopLockData",
7
+ "curName": "LoopLockData",
8
+ "id": "ent_01M119MVXMDX7KPCDQRRYHABX8",
9
+ "kind": "entity",
10
+ "owner": "workspace",
11
+ "renames": []
12
+ },
13
+ "evt_01M119MVXMEK1Z3KT723H1BM95": {
14
+ "bakedName": "LOOP_UNLOCKED",
15
+ "curName": "LOOP_UNLOCKED",
16
+ "id": "evt_01M119MVXMEK1Z3KT723H1BM95",
17
+ "kind": "event",
18
+ "owner": "workspace",
19
+ "parent": "trt_01M119MVXMETN5BG3SCSWD03ZZ",
20
+ "renames": []
21
+ },
22
+ "evt_01M119MVXMEM68Q7N4HQT3DPSC": {
23
+ "bakedName": "RESTART",
24
+ "curName": "RESTART",
25
+ "id": "evt_01M119MVXMEM68Q7N4HQT3DPSC",
26
+ "kind": "event",
27
+ "owner": "workspace",
28
+ "parent": "trt_01M119MVXMETN5BG3SCSWD03ZZ",
29
+ "renames": []
30
+ },
31
+ "evt_01M119MVXMJAZTPAEY07C7C9XC": {
32
+ "bakedName": "INIT",
33
+ "curName": "INIT",
34
+ "id": "evt_01M119MVXMJAZTPAEY07C7C9XC",
35
+ "kind": "event",
36
+ "owner": "workspace",
37
+ "parent": "trt_01M119MVXMETN5BG3SCSWD03ZZ",
38
+ "renames": []
39
+ },
40
+ "evt_01M119MVXMZ1D551Q50N583X54": {
41
+ "bakedName": "BODY_MOVED",
42
+ "curName": "BODY_MOVED",
43
+ "id": "evt_01M119MVXMZ1D551Q50N583X54",
44
+ "kind": "event",
45
+ "owner": "workspace",
46
+ "parent": "trt_01M119MVXMETN5BG3SCSWD03ZZ",
47
+ "renames": []
48
+ },
49
+ "orb_01M119MVXM55QAFWY6F0BTF8FT": {
50
+ "bakedName": "LoopLockOrbital",
51
+ "curName": "LoopLockOrbital",
52
+ "id": "orb_01M119MVXM55QAFWY6F0BTF8FT",
53
+ "kind": "orbital",
54
+ "owner": "workspace",
55
+ "renames": []
56
+ },
57
+ "pag_01M119MVXMEKXSA909Q3ZW8ZE7": {
58
+ "bakedName": "LoopLockPage",
59
+ "curName": "LoopLockPage",
60
+ "id": "pag_01M119MVXMEKXSA909Q3ZW8ZE7",
61
+ "kind": "page",
62
+ "owner": "workspace",
63
+ "renames": []
64
+ },
65
+ "trt_01M119MVXMETN5BG3SCSWD03ZZ": {
66
+ "bakedName": "LoopLock",
67
+ "curName": "LoopLock",
68
+ "id": "trt_01M119MVXMETN5BG3SCSWD03ZZ",
69
+ "kind": "trait",
70
+ "owner": "workspace",
71
+ "renames": []
72
+ }
73
+ },
74
+ "schemaVersion": 1
75
+ },
76
+ "name": "std-loop-lock",
77
+ "orbitals": [
78
+ {
79
+ "entity": {
80
+ "fields": [
81
+ {
82
+ "name": "id",
83
+ "required": true,
84
+ "type": "string"
85
+ },
86
+ {
87
+ "default": [],
88
+ "items": {
89
+ "properties": {
90
+ "band": {
91
+ "name": "band",
92
+ "required": true,
93
+ "type": "number"
94
+ },
95
+ "id": {
96
+ "name": "id",
97
+ "required": true,
98
+ "type": "string"
99
+ },
100
+ "inside": {
101
+ "name": "inside",
102
+ "required": false,
103
+ "type": "boolean"
104
+ },
105
+ "lastAngle": {
106
+ "name": "lastAngle",
107
+ "required": false,
108
+ "type": "number"
109
+ },
110
+ "radius": {
111
+ "name": "radius",
112
+ "required": true,
113
+ "type": "number"
114
+ },
115
+ "reported": {
116
+ "name": "reported",
117
+ "required": false,
118
+ "type": "boolean"
119
+ },
120
+ "swept": {
121
+ "name": "swept",
122
+ "required": false,
123
+ "type": "number"
124
+ },
125
+ "turns": {
126
+ "name": "turns",
127
+ "required": true,
128
+ "type": "number"
129
+ },
130
+ "unlocked": {
131
+ "name": "unlocked",
132
+ "required": false,
133
+ "type": "boolean"
134
+ },
135
+ "x": {
136
+ "name": "x",
137
+ "required": true,
138
+ "type": "number"
139
+ },
140
+ "y": {
141
+ "name": "y",
142
+ "required": true,
143
+ "type": "number"
144
+ }
145
+ },
146
+ "type": "object"
147
+ },
148
+ "name": "locks",
149
+ "type": "array"
150
+ }
151
+ ],
152
+ "id": "ent_01M119MVXMDX7KPCDQRRYHABX8",
153
+ "name": "LoopLockData",
154
+ "persistence": "runtime",
155
+ "shared": true
156
+ },
157
+ "id": "orb_01M119MVXM55QAFWY6F0BTF8FT",
158
+ "name": "LoopLockOrbital",
159
+ "pages": [
160
+ {
161
+ "id": "pag_01M119MVXMEKXSA909Q3ZW8ZE7",
162
+ "name": "LoopLockPage",
163
+ "path": "/loop-lock",
164
+ "traits": [
165
+ {
166
+ "ref": "LoopLock",
167
+ "refId": "trt_01M119MVXMETN5BG3SCSWD03ZZ"
168
+ }
169
+ ]
170
+ }
171
+ ],
172
+ "traits": [
173
+ {
174
+ "category": "lifecycle",
175
+ "config": {
176
+ "locks": {
177
+ "default": [],
178
+ "description": "One row per winding lock: id, anchor (x, y in world units), ring radius, radial tolerance band, and revolutions required. swept/inside/unlocked are stamped at runtime.",
179
+ "items": {
180
+ "properties": {
181
+ "band": {
182
+ "name": "band",
183
+ "required": true,
184
+ "type": "number"
185
+ },
186
+ "id": {
187
+ "name": "id",
188
+ "required": true,
189
+ "type": "string"
190
+ },
191
+ "inside": {
192
+ "name": "inside",
193
+ "required": false,
194
+ "type": "boolean"
195
+ },
196
+ "lastAngle": {
197
+ "name": "lastAngle",
198
+ "required": false,
199
+ "type": "number"
200
+ },
201
+ "radius": {
202
+ "name": "radius",
203
+ "required": true,
204
+ "type": "number"
205
+ },
206
+ "reported": {
207
+ "name": "reported",
208
+ "required": false,
209
+ "type": "boolean"
210
+ },
211
+ "swept": {
212
+ "name": "swept",
213
+ "required": false,
214
+ "type": "number"
215
+ },
216
+ "turns": {
217
+ "name": "turns",
218
+ "required": true,
219
+ "type": "number"
220
+ },
221
+ "unlocked": {
222
+ "name": "unlocked",
223
+ "required": false,
224
+ "type": "boolean"
225
+ },
226
+ "x": {
227
+ "name": "x",
228
+ "required": true,
229
+ "type": "number"
230
+ },
231
+ "y": {
232
+ "name": "y",
233
+ "required": true,
234
+ "type": "number"
235
+ }
236
+ },
237
+ "type": "object"
238
+ },
239
+ "label": "Locks",
240
+ "tier": "domain",
241
+ "type": "[LoopLock]"
242
+ },
243
+ "running": {
244
+ "default": true,
245
+ "description": "When true, BODY_MOVED accumulates angular sweep and unlocks locks; toggle to freeze every lock as-is.",
246
+ "label": "Running",
247
+ "tier": "domain",
248
+ "type": "boolean"
249
+ }
250
+ },
251
+ "emits": [
252
+ {
253
+ "description": "A lock's angular sweep reached turns × 2π and it flipped unlocked; boards layer treasure fx and rewards. When several locks open on one move, the first reports and the shared entity carries the rest.",
254
+ "event": "LOOP_UNLOCKED",
255
+ "eventId": "evt_01M119MVXMEK1Z3KT723H1BM95",
256
+ "payloadSchema": [
257
+ {
258
+ "name": "id",
259
+ "required": true,
260
+ "type": "string"
261
+ },
262
+ {
263
+ "name": "x",
264
+ "required": true,
265
+ "type": "number"
266
+ },
267
+ {
268
+ "name": "y",
269
+ "required": true,
270
+ "type": "number"
271
+ }
272
+ ],
273
+ "scope": "external",
274
+ "tier": "domain"
275
+ }
276
+ ],
277
+ "entityContract": {
278
+ "provides": [
279
+ "locks"
280
+ ],
281
+ "requires": []
282
+ },
283
+ "entityRebindable": true,
284
+ "entityRefIds": {
285
+ "LoopLockData": "ent_01M119MVXMDX7KPCDQRRYHABX8"
286
+ },
287
+ "id": "trt_01M119MVXMETN5BG3SCSWD03ZZ",
288
+ "linkedEntity": "LoopLockData",
289
+ "linkedEntityId": "ent_01M119MVXMDX7KPCDQRRYHABX8",
290
+ "name": "LoopLock",
291
+ "scope": "instance",
292
+ "stateMachine": {
293
+ "events": [
294
+ {
295
+ "id": "evt_01M119MVXMJAZTPAEY07C7C9XC",
296
+ "key": "INIT",
297
+ "name": "Initialize"
298
+ },
299
+ {
300
+ "id": "evt_01M119MVXMZ1D551Q50N583X54",
301
+ "key": "BODY_MOVED",
302
+ "name": "Body Moved",
303
+ "payloadSchema": [
304
+ {
305
+ "name": "x",
306
+ "required": true,
307
+ "type": "number"
308
+ },
309
+ {
310
+ "name": "y",
311
+ "required": true,
312
+ "type": "number"
313
+ },
314
+ {
315
+ "name": "vx",
316
+ "required": true,
317
+ "type": "number"
318
+ },
319
+ {
320
+ "name": "vy",
321
+ "required": true,
322
+ "type": "number"
323
+ },
324
+ {
325
+ "name": "grounded",
326
+ "required": true,
327
+ "type": "boolean"
328
+ },
329
+ {
330
+ "name": "skating",
331
+ "required": true,
332
+ "type": "boolean"
333
+ },
334
+ {
335
+ "name": "speed",
336
+ "required": true,
337
+ "type": "number"
338
+ }
339
+ ]
340
+ },
341
+ {
342
+ "id": "evt_01M119MVXMEM68Q7N4HQT3DPSC",
343
+ "key": "RESTART",
344
+ "name": "Restart",
345
+ "payloadSchema": [
346
+ {
347
+ "name": "id",
348
+ "type": "string"
349
+ }
350
+ ]
351
+ },
352
+ {
353
+ "description": "A lock's angular sweep reached turns × 2π and it flipped unlocked; boards layer treasure fx and rewards. When several locks open on one move, the first reports and the shared entity carries the rest.",
354
+ "id": "evt_01M119MVXMEK1Z3KT723H1BM95",
355
+ "key": "LOOP_UNLOCKED",
356
+ "name": "Loop Unlocked",
357
+ "payloadSchema": [
358
+ {
359
+ "name": "id",
360
+ "required": true,
361
+ "type": "string"
362
+ },
363
+ {
364
+ "name": "x",
365
+ "required": true,
366
+ "type": "number"
367
+ },
368
+ {
369
+ "name": "y",
370
+ "required": true,
371
+ "type": "number"
372
+ }
373
+ ],
374
+ "tier": "domain"
375
+ }
376
+ ],
377
+ "states": [
378
+ {
379
+ "isInitial": true,
380
+ "name": "active"
381
+ }
382
+ ],
383
+ "transitions": [
384
+ {
385
+ "effects": [
386
+ [
387
+ "set",
388
+ "@entity.locks",
389
+ [
390
+ "array/map",
391
+ "@config.locks",
392
+ [
393
+ "fn",
394
+ "l",
395
+ [
396
+ "object/merge",
397
+ "@l",
398
+ {
399
+ "inside": false,
400
+ "lastAngle": 0.0,
401
+ "reported": false,
402
+ "swept": 0.0,
403
+ "unlocked": false
404
+ }
405
+ ]
406
+ ]
407
+ ]
408
+ ]
409
+ ],
410
+ "event": "INIT",
411
+ "eventId": "evt_01M119MVXMJAZTPAEY07C7C9XC",
412
+ "from": "active",
413
+ "to": "active"
414
+ },
415
+ {
416
+ "effects": [
417
+ [
418
+ "set",
419
+ "@entity.locks",
420
+ [
421
+ "array/map",
422
+ "@entity.locks",
423
+ [
424
+ "fn",
425
+ "l",
426
+ [
427
+ "let",
428
+ [
429
+ [
430
+ "dx",
431
+ [
432
+ "-",
433
+ "@payload.x",
434
+ [
435
+ "object/get",
436
+ "@l",
437
+ "x"
438
+ ]
439
+ ]
440
+ ],
441
+ [
442
+ "dy",
443
+ [
444
+ "-",
445
+ "@payload.y",
446
+ [
447
+ "object/get",
448
+ "@l",
449
+ "y"
450
+ ]
451
+ ]
452
+ ]
453
+ ],
454
+ [
455
+ "let",
456
+ [
457
+ [
458
+ "dist",
459
+ [
460
+ "math/hypot",
461
+ "@dx",
462
+ "@dy"
463
+ ]
464
+ ],
465
+ [
466
+ "ang",
467
+ [
468
+ "math/atan2",
469
+ "@dy",
470
+ "@dx"
471
+ ]
472
+ ]
473
+ ],
474
+ [
475
+ "let",
476
+ [
477
+ [
478
+ "in",
479
+ [
480
+ "<=",
481
+ [
482
+ "math/abs",
483
+ [
484
+ "-",
485
+ "@dist",
486
+ [
487
+ "object/get",
488
+ "@l",
489
+ "radius"
490
+ ]
491
+ ]
492
+ ],
493
+ [
494
+ "object/get",
495
+ "@l",
496
+ "band"
497
+ ]
498
+ ]
499
+ ]
500
+ ],
501
+ [
502
+ "let",
503
+ [
504
+ [
505
+ "d",
506
+ [
507
+ "if",
508
+ [
509
+ "and",
510
+ "@in",
511
+ [
512
+ "==",
513
+ [
514
+ "object/get",
515
+ "@l",
516
+ "inside"
517
+ ],
518
+ true
519
+ ]
520
+ ],
521
+ [
522
+ "math/atan2",
523
+ [
524
+ "math/sin",
525
+ [
526
+ "-",
527
+ "@ang",
528
+ [
529
+ "object/get",
530
+ "@l",
531
+ "lastAngle"
532
+ ]
533
+ ]
534
+ ],
535
+ [
536
+ "math/cos",
537
+ [
538
+ "-",
539
+ "@ang",
540
+ [
541
+ "object/get",
542
+ "@l",
543
+ "lastAngle"
544
+ ]
545
+ ]
546
+ ]
547
+ ],
548
+ 0.0
549
+ ]
550
+ ]
551
+ ],
552
+ [
553
+ "let",
554
+ [
555
+ [
556
+ "swept",
557
+ [
558
+ "+",
559
+ [
560
+ "object/get",
561
+ "@l",
562
+ "swept"
563
+ ],
564
+ "@d"
565
+ ]
566
+ ]
567
+ ],
568
+ [
569
+ "object/merge",
570
+ "@l",
571
+ {
572
+ "inside": "@in",
573
+ "lastAngle": [
574
+ "if",
575
+ "@in",
576
+ "@ang",
577
+ [
578
+ "object/get",
579
+ "@l",
580
+ "lastAngle"
581
+ ]
582
+ ],
583
+ "swept": "@swept",
584
+ "unlocked": [
585
+ "or",
586
+ [
587
+ "object/get",
588
+ "@l",
589
+ "unlocked"
590
+ ],
591
+ [
592
+ ">=",
593
+ [
594
+ "math/abs",
595
+ "@swept"
596
+ ],
597
+ [
598
+ "*",
599
+ [
600
+ "object/get",
601
+ "@l",
602
+ "turns"
603
+ ],
604
+ 6.283185307179586
605
+ ]
606
+ ]
607
+ ]
608
+ }
609
+ ]
610
+ ]
611
+ ]
612
+ ]
613
+ ]
614
+ ]
615
+ ]
616
+ ]
617
+ ],
618
+ [
619
+ "let",
620
+ [
621
+ [
622
+ "newly",
623
+ [
624
+ "array/filter",
625
+ "@entity.locks",
626
+ [
627
+ "fn",
628
+ "l",
629
+ [
630
+ "and",
631
+ [
632
+ "==",
633
+ [
634
+ "object/get",
635
+ "@l",
636
+ "unlocked"
637
+ ],
638
+ true
639
+ ],
640
+ [
641
+ "==",
642
+ [
643
+ "object/get",
644
+ "@l",
645
+ "reported"
646
+ ],
647
+ false
648
+ ]
649
+ ]
650
+ ]
651
+ ]
652
+ ]
653
+ ],
654
+ [
655
+ "if",
656
+ [
657
+ ">",
658
+ [
659
+ "array/len",
660
+ "@newly"
661
+ ],
662
+ 0.0
663
+ ],
664
+ [
665
+ "do",
666
+ [
667
+ "set",
668
+ "@entity.locks",
669
+ [
670
+ "array/map",
671
+ "@entity.locks",
672
+ [
673
+ "fn",
674
+ "l",
675
+ [
676
+ "if",
677
+ [
678
+ "==",
679
+ [
680
+ "object/get",
681
+ "@l",
682
+ "id"
683
+ ],
684
+ [
685
+ "object/get",
686
+ [
687
+ "array/first",
688
+ "@newly"
689
+ ],
690
+ "id"
691
+ ]
692
+ ],
693
+ [
694
+ "object/merge",
695
+ "@l",
696
+ {
697
+ "reported": true
698
+ }
699
+ ],
700
+ "@l"
701
+ ]
702
+ ]
703
+ ]
704
+ ],
705
+ [
706
+ "emit",
707
+ "LOOP_UNLOCKED",
708
+ {
709
+ "id": [
710
+ "object/get",
711
+ [
712
+ "array/first",
713
+ "@newly"
714
+ ],
715
+ "id"
716
+ ],
717
+ "x": [
718
+ "object/get",
719
+ [
720
+ "array/first",
721
+ "@newly"
722
+ ],
723
+ "x"
724
+ ],
725
+ "y": [
726
+ "object/get",
727
+ [
728
+ "array/first",
729
+ "@newly"
730
+ ],
731
+ "y"
732
+ ]
733
+ }
734
+ ]
735
+ ],
736
+ null
737
+ ]
738
+ ]
739
+ ],
740
+ "event": "BODY_MOVED",
741
+ "eventId": "evt_01M119MVXMZ1D551Q50N583X54",
742
+ "from": "active",
743
+ "guard": "@config.running",
744
+ "to": "active"
745
+ },
746
+ {
747
+ "effects": [
748
+ [
749
+ "set",
750
+ "@entity.locks",
751
+ [
752
+ "array/map",
753
+ "@config.locks",
754
+ [
755
+ "fn",
756
+ "l",
757
+ [
758
+ "object/merge",
759
+ "@l",
760
+ {
761
+ "inside": false,
762
+ "lastAngle": 0.0,
763
+ "reported": false,
764
+ "swept": 0.0,
765
+ "unlocked": false
766
+ }
767
+ ]
768
+ ]
769
+ ]
770
+ ]
771
+ ],
772
+ "event": "RESTART",
773
+ "eventId": "evt_01M119MVXMEM68Q7N4HQT3DPSC",
774
+ "from": "active",
775
+ "to": "active"
776
+ }
777
+ ]
778
+ }
779
+ }
780
+ ]
781
+ }
782
+ ],
783
+ "schemaVersion": 1,
784
+ "version": "1.0.0"
785
+ }