@rezless/vm 0.7.0 → 0.8.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 (235) hide show
  1. package/dist/builtins/agents.d.ts +14 -0
  2. package/dist/builtins/agents.d.ts.map +1 -0
  3. package/dist/builtins/agents.js +117 -0
  4. package/dist/builtins/agents.js.map +1 -0
  5. package/dist/builtins/animation.d.ts +46 -0
  6. package/dist/builtins/animation.d.ts.map +1 -0
  7. package/dist/builtins/animation.js +316 -0
  8. package/dist/builtins/animation.js.map +1 -0
  9. package/dist/builtins/attachments.d.ts +9 -0
  10. package/dist/builtins/attachments.d.ts.map +1 -0
  11. package/dist/builtins/attachments.js +127 -0
  12. package/dist/builtins/attachments.js.map +1 -0
  13. package/dist/builtins/base64.d.ts +8 -0
  14. package/dist/builtins/base64.d.ts.map +1 -1
  15. package/dist/builtins/base64.js +1 -1
  16. package/dist/builtins/base64.js.map +1 -1
  17. package/dist/builtins/camera.d.ts +35 -0
  18. package/dist/builtins/camera.d.ts.map +1 -0
  19. package/dist/builtins/camera.js +104 -0
  20. package/dist/builtins/camera.js.map +1 -0
  21. package/dist/builtins/collision.d.ts +21 -0
  22. package/dist/builtins/collision.d.ts.map +1 -0
  23. package/dist/builtins/collision.js +44 -0
  24. package/dist/builtins/collision.js.map +1 -0
  25. package/dist/builtins/controls.d.ts +19 -0
  26. package/dist/builtins/controls.d.ts.map +1 -0
  27. package/dist/builtins/controls.js +27 -0
  28. package/dist/builtins/controls.js.map +1 -0
  29. package/dist/builtins/damage.d.ts +24 -0
  30. package/dist/builtins/damage.d.ts.map +1 -0
  31. package/dist/builtins/damage.js +166 -0
  32. package/dist/builtins/damage.js.map +1 -0
  33. package/dist/builtins/detected.d.ts +22 -1
  34. package/dist/builtins/detected.d.ts.map +1 -1
  35. package/dist/builtins/detected.js +27 -1
  36. package/dist/builtins/detected.js.map +1 -1
  37. package/dist/builtins/dialog.d.ts +23 -0
  38. package/dist/builtins/dialog.d.ts.map +1 -0
  39. package/dist/builtins/dialog.js +69 -0
  40. package/dist/builtins/dialog.js.map +1 -0
  41. package/dist/builtins/email.d.ts +61 -0
  42. package/dist/builtins/email.d.ts.map +1 -0
  43. package/dist/builtins/email.js +121 -0
  44. package/dist/builtins/email.js.map +1 -0
  45. package/dist/builtins/environment.d.ts +27 -0
  46. package/dist/builtins/environment.d.ts.map +1 -0
  47. package/dist/builtins/environment.js +126 -0
  48. package/dist/builtins/environment.js.map +1 -0
  49. package/dist/builtins/experience.d.ts +51 -0
  50. package/dist/builtins/experience.d.ts.map +1 -0
  51. package/dist/builtins/experience.js +202 -0
  52. package/dist/builtins/experience.js.map +1 -0
  53. package/dist/builtins/game-control.d.ts +17 -0
  54. package/dist/builtins/game-control.d.ts.map +1 -0
  55. package/dist/builtins/game-control.js +21 -0
  56. package/dist/builtins/game-control.js.map +1 -0
  57. package/dist/builtins/give.d.ts +16 -0
  58. package/dist/builtins/give.d.ts.map +1 -0
  59. package/dist/builtins/give.js +137 -0
  60. package/dist/builtins/give.js.map +1 -0
  61. package/dist/builtins/ground.d.ts +18 -0
  62. package/dist/builtins/ground.d.ts.map +1 -0
  63. package/dist/builtins/ground.js +83 -0
  64. package/dist/builtins/ground.js.map +1 -0
  65. package/dist/builtins/http.d.ts +99 -4
  66. package/dist/builtins/http.d.ts.map +1 -1
  67. package/dist/builtins/http.js +216 -6
  68. package/dist/builtins/http.js.map +1 -1
  69. package/dist/builtins/index.d.ts.map +1 -1
  70. package/dist/builtins/index.js +235 -10
  71. package/dist/builtins/index.js.map +1 -1
  72. package/dist/builtins/inventory.d.ts +1 -0
  73. package/dist/builtins/inventory.d.ts.map +1 -1
  74. package/dist/builtins/inventory.js +1 -1
  75. package/dist/builtins/inventory.js.map +1 -1
  76. package/dist/builtins/land.d.ts +29 -0
  77. package/dist/builtins/land.d.ts.map +1 -0
  78. package/dist/builtins/land.js +339 -0
  79. package/dist/builtins/land.js.map +1 -0
  80. package/dist/builtins/links.d.ts +20 -0
  81. package/dist/builtins/links.d.ts.map +1 -0
  82. package/dist/builtins/links.js +53 -0
  83. package/dist/builtins/links.js.map +1 -0
  84. package/dist/builtins/linksetdata.d.ts +5 -0
  85. package/dist/builtins/linksetdata.d.ts.map +1 -1
  86. package/dist/builtins/linksetdata.js +16 -0
  87. package/dist/builtins/linksetdata.js.map +1 -1
  88. package/dist/builtins/lists.d.ts +6 -0
  89. package/dist/builtins/lists.d.ts.map +1 -1
  90. package/dist/builtins/lists.js +19 -6
  91. package/dist/builtins/lists.js.map +1 -1
  92. package/dist/builtins/math.d.ts +16 -0
  93. package/dist/builtins/math.d.ts.map +1 -1
  94. package/dist/builtins/math.js +74 -0
  95. package/dist/builtins/math.js.map +1 -1
  96. package/dist/builtins/media.d.ts +8 -0
  97. package/dist/builtins/media.d.ts.map +1 -0
  98. package/dist/builtins/media.js +167 -0
  99. package/dist/builtins/media.js.map +1 -0
  100. package/dist/builtins/motion.d.ts +79 -0
  101. package/dist/builtins/motion.d.ts.map +1 -0
  102. package/dist/builtins/motion.js +396 -0
  103. package/dist/builtins/motion.js.map +1 -0
  104. package/dist/builtins/notecard-search.d.ts +15 -0
  105. package/dist/builtins/notecard-search.d.ts.map +1 -0
  106. package/dist/builtins/notecard-search.js +374 -0
  107. package/dist/builtins/notecard-search.js.map +1 -0
  108. package/dist/builtins/object-animation.d.ts +21 -0
  109. package/dist/builtins/object-animation.d.ts.map +1 -0
  110. package/dist/builtins/object-animation.js +193 -0
  111. package/dist/builtins/object-animation.js.map +1 -0
  112. package/dist/builtins/object-reads.d.ts +39 -0
  113. package/dist/builtins/object-reads.d.ts.map +1 -0
  114. package/dist/builtins/object-reads.js +332 -0
  115. package/dist/builtins/object-reads.js.map +1 -0
  116. package/dist/builtins/object.d.ts +6 -0
  117. package/dist/builtins/object.d.ts.map +1 -1
  118. package/dist/builtins/object.js +19 -3
  119. package/dist/builtins/object.js.map +1 -1
  120. package/dist/builtins/particles.d.ts +4 -0
  121. package/dist/builtins/particles.d.ts.map +1 -0
  122. package/dist/builtins/particles.js +65 -0
  123. package/dist/builtins/particles.js.map +1 -0
  124. package/dist/builtins/pathfinding.d.ts +39 -0
  125. package/dist/builtins/pathfinding.d.ts.map +1 -0
  126. package/dist/builtins/pathfinding.js +83 -0
  127. package/dist/builtins/pathfinding.js.map +1 -0
  128. package/dist/builtins/permissions.d.ts.map +1 -1
  129. package/dist/builtins/permissions.js +6 -0
  130. package/dist/builtins/permissions.js.map +1 -1
  131. package/dist/builtins/physics.d.ts +49 -0
  132. package/dist/builtins/physics.d.ts.map +1 -0
  133. package/dist/builtins/physics.js +47 -0
  134. package/dist/builtins/physics.js.map +1 -0
  135. package/dist/builtins/prim-accessors.d.ts +3 -0
  136. package/dist/builtins/prim-accessors.d.ts.map +1 -1
  137. package/dist/builtins/prim-accessors.js +27 -7
  138. package/dist/builtins/prim-accessors.js.map +1 -1
  139. package/dist/builtins/raycast.d.ts +3 -0
  140. package/dist/builtins/raycast.d.ts.map +1 -0
  141. package/dist/builtins/raycast.js +65 -0
  142. package/dist/builtins/raycast.js.map +1 -0
  143. package/dist/builtins/region.d.ts +31 -0
  144. package/dist/builtins/region.d.ts.map +1 -0
  145. package/dist/builtins/region.js +125 -0
  146. package/dist/builtins/region.js.map +1 -0
  147. package/dist/builtins/remote-load.d.ts +3 -0
  148. package/dist/builtins/remote-load.d.ts.map +1 -0
  149. package/dist/builtins/remote-load.js +53 -0
  150. package/dist/builtins/remote-load.js.map +1 -0
  151. package/dist/builtins/rez.d.ts +10 -0
  152. package/dist/builtins/rez.d.ts.map +1 -0
  153. package/dist/builtins/rez.js +255 -0
  154. package/dist/builtins/rez.js.map +1 -0
  155. package/dist/builtins/rsa.d.ts +4 -0
  156. package/dist/builtins/rsa.d.ts.map +1 -0
  157. package/dist/builtins/rsa.js +44 -0
  158. package/dist/builtins/rsa.js.map +1 -0
  159. package/dist/builtins/script-control.d.ts +6 -2
  160. package/dist/builtins/script-control.d.ts.map +1 -1
  161. package/dist/builtins/script-control.js +9 -4
  162. package/dist/builtins/script-control.js.map +1 -1
  163. package/dist/builtins/sensor.d.ts +11 -0
  164. package/dist/builtins/sensor.d.ts.map +1 -0
  165. package/dist/builtins/sensor.js +145 -0
  166. package/dist/builtins/sensor.js.map +1 -0
  167. package/dist/builtins/sit.d.ts +23 -0
  168. package/dist/builtins/sit.d.ts.map +1 -0
  169. package/dist/builtins/sit.js +150 -0
  170. package/dist/builtins/sit.js.map +1 -0
  171. package/dist/builtins/sound.d.ts +19 -0
  172. package/dist/builtins/sound.d.ts.map +1 -0
  173. package/dist/builtins/sound.js +113 -0
  174. package/dist/builtins/sound.js.map +1 -0
  175. package/dist/builtins/targets.d.ts +12 -0
  176. package/dist/builtins/targets.d.ts.map +1 -0
  177. package/dist/builtins/targets.js +121 -0
  178. package/dist/builtins/targets.js.map +1 -0
  179. package/dist/builtins/time.d.ts +12 -0
  180. package/dist/builtins/time.d.ts.map +1 -1
  181. package/dist/builtins/time.js +32 -4
  182. package/dist/builtins/time.js.map +1 -1
  183. package/dist/builtins/vehicles.d.ts +22 -0
  184. package/dist/builtins/vehicles.d.ts.map +1 -0
  185. package/dist/builtins/vehicles.js +78 -0
  186. package/dist/builtins/vehicles.js.map +1 -0
  187. package/dist/builtins/viewer.d.ts +39 -0
  188. package/dist/builtins/viewer.d.ts.map +1 -0
  189. package/dist/builtins/viewer.js +74 -0
  190. package/dist/builtins/viewer.js.map +1 -0
  191. package/dist/clock.d.ts +29 -1
  192. package/dist/clock.d.ts.map +1 -1
  193. package/dist/clock.js +89 -5
  194. package/dist/clock.js.map +1 -1
  195. package/dist/experience.d.ts +39 -0
  196. package/dist/experience.d.ts.map +1 -0
  197. package/dist/experience.js +38 -0
  198. package/dist/experience.js.map +1 -0
  199. package/dist/index.d.ts +20 -3
  200. package/dist/index.d.ts.map +1 -1
  201. package/dist/index.js +1 -0
  202. package/dist/index.js.map +1 -1
  203. package/dist/interpreter.d.ts +0 -1
  204. package/dist/interpreter.d.ts.map +1 -1
  205. package/dist/interpreter.js.map +1 -1
  206. package/dist/inventory.d.ts +2 -0
  207. package/dist/inventory.d.ts.map +1 -1
  208. package/dist/inventory.js +2 -0
  209. package/dist/inventory.js.map +1 -1
  210. package/dist/linkset.d.ts +139 -11
  211. package/dist/linkset.d.ts.map +1 -1
  212. package/dist/linkset.js +376 -24
  213. package/dist/linkset.js.map +1 -1
  214. package/dist/prim-params.d.ts.map +1 -1
  215. package/dist/prim-params.js +11 -3
  216. package/dist/prim-params.js.map +1 -1
  217. package/dist/prim.d.ts +94 -4
  218. package/dist/prim.d.ts.map +1 -1
  219. package/dist/prim.js +94 -5
  220. package/dist/prim.js.map +1 -1
  221. package/dist/runtime.d.ts +41 -0
  222. package/dist/runtime.d.ts.map +1 -1
  223. package/dist/script.d.ts +147 -2
  224. package/dist/script.d.ts.map +1 -1
  225. package/dist/script.js +373 -19
  226. package/dist/script.js.map +1 -1
  227. package/dist/values/ops.d.ts +3 -0
  228. package/dist/values/ops.d.ts.map +1 -1
  229. package/dist/values/ops.js +2 -2
  230. package/dist/values/ops.js.map +1 -1
  231. package/dist/world.d.ts +247 -1
  232. package/dist/world.d.ts.map +1 -1
  233. package/dist/world.js +318 -6
  234. package/dist/world.js.map +1 -1
  235. package/package.json +2 -2
@@ -0,0 +1,39 @@
1
+ import type { BuiltinImpl, CallContext } from '../runtime.js';
2
+ import type { Prim } from '../prim.js';
3
+ /** The prim with key `id` in a live linkset in the caller's region, matched without regard to case. */
4
+ export declare function findObjectPrim(ctx: CallContext, id: string): Prim | undefined;
5
+ /** llKey2Name(key id) — the prim's name, or "" for a key with no prim in the region. */
6
+ export declare const llKey2Name: BuiltinImpl;
7
+ /** llGetObjectPrimCount(key id) — prims in the linkset holding `id`, or 0. */
8
+ export declare const llGetObjectPrimCount: BuiltinImpl;
9
+ /**
10
+ * llGetObjectLinkKey(key id, integer link) — the key of link `link` in the
11
+ * linkset holding `id`. Link 0 is the root (or a lone prim) and LINK_THIS is
12
+ * the prim `id` itself.
13
+ */
14
+ export declare const llGetObjectLinkKey: BuiltinImpl;
15
+ /**
16
+ * llGetObjectMass(key id) — for a root or lone prim, the linkset's mass; for
17
+ * a child, its own mass. Second Life keeps a child's mass from when it was
18
+ * linked; here it follows the child's current shape.
19
+ */
20
+ export declare const llGetObjectMass: BuiltinImpl;
21
+ /** llGetBoundingBox(key id) — [min, max] of the linkset holding `id`, or [] for no prim. */
22
+ export declare const llGetBoundingBox: BuiltinImpl;
23
+ /** llGetGeometricCenter() — the mean of the prims' positions relative to the root, in its frame. */
24
+ export declare const llGetGeometricCenter: BuiltinImpl;
25
+ /**
26
+ * llGetObjectDetails(key id, list params) — the entries for each OBJECT_*
27
+ * flag (five masks for OBJECT_PERMS), and OBJECT_UNKNOWN_DETAIL for a number
28
+ * that is not a flag. An entry that is not an integer is dropped and turns
29
+ * the last entry so far into OBJECT_UNKNOWN_DETAIL. A key with no prim in
30
+ * the region gives [].
31
+ */
32
+ /**
33
+ * llGetObjectPermMask(integer category) — one of the object's five masks,
34
+ * ANDed with its contents' masks when MASK_COMBINED is set. Only the low five
35
+ * bits of the category count.
36
+ */
37
+ export declare const llGetObjectPermMask: BuiltinImpl;
38
+ export declare const llGetObjectDetails: BuiltinImpl;
39
+ //# sourceMappingURL=object-reads.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object-reads.d.ts","sourceRoot":"","sources":["../../src/builtins/object-reads.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC7D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAqFtC,uGAAuG;AACvG,wBAAgB,cAAc,CAAC,GAAG,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAS7E;AA0GD,wFAAwF;AACxF,eAAO,MAAM,UAAU,EAAE,WAA0E,CAAA;AAEnG,8EAA8E;AAC9E,eAAO,MAAM,oBAAoB,EAAE,WAGlC,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,EAAE,WAQhC,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,WAI7B,CAAA;AAED,4FAA4F;AAC5F,eAAO,MAAM,gBAAgB,EAAE,WAG9B,CAAA;AAED,oGAAoG;AACpG,eAAO,MAAM,oBAAoB,EAAE,WAYlC,CAAA;AA4ID;;;;;;GAMG;AACH;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,EAAE,WAIjC,CAAA;AAED,eAAO,MAAM,kBAAkB,EAAE,WAiBhC,CAAA"}
@@ -0,0 +1,332 @@
1
+ import { NULL_KEY, ZERO_ROTATION, ZERO_VECTOR } from '../values/types.js';
2
+ import { mulRotation, rotateVector } from '../values/ops.js';
3
+ import { listElementType, typedList } from '../values/list-types.js';
4
+ import { formatTimestamp } from './time.js';
5
+ import { LINK_THIS, PRIM_HOLE_CIRCLE, PRIM_HOLE_DEFAULT, PRIM_HOLE_TRIANGLE, OBJECT_ACCOUNT_LEVEL, OBJECT_ANIMATED_COUNT, OBJECT_ANIMATED_SLOTS_AVAILABLE, OBJECT_ATTACHED_POINT, OBJECT_ATTACHED_SLOTS_AVAILABLE, OBJECT_BODY_SHAPE_TYPE, OBJECT_CHARACTER_TIME, OBJECT_CLICK_ACTION, OBJECT_CREATION_TIME, OBJECT_CREATOR, OBJECT_DAMAGE, OBJECT_DAMAGE_TYPE, OBJECT_DESC, OBJECT_GROUP, OBJECT_GROUP_TAG, OBJECT_HEALTH, OBJECT_HOVER_HEIGHT, OBJECT_LAST_OWNER_ID, OBJECT_LINK_NUMBER, OBJECT_LOCKED, OBJECT_MASS, OBJECT_MATERIAL, OBJECT_NAME, OBJECT_OMEGA, OBJECT_OWNER, OBJECT_PATHFINDING_TYPE, MASK_COMBINED, OBJECT_PERMS, OBJECT_PERMS_COMBINED, OBJECT_PHANTOM, OBJECT_PHYSICS, OBJECT_PHYSICS_COST, OBJECT_POS, OBJECT_PRIM_COUNT, OBJECT_PRIM_EQUIVALENCE, OBJECT_RENDER_WEIGHT, OBJECT_REZZER_KEY, OBJECT_REZ_TIME, OBJECT_ROOT, OBJECT_ROT, OBJECT_RUNNING_SCRIPT_COUNT, OBJECT_SCALE, OBJECT_SCRIPT_MEMORY, OBJECT_SCRIPT_TIME, OBJECT_SELECT_COUNT, OBJECT_SERVER_COST, OBJECT_SIT_COUNT, OBJECT_STREAMING_COST, OBJECT_TEMP_ATTACHED, OBJECT_TEMP_ON_REZ, OBJECT_TEXT, OBJECT_TEXT_ALPHA, OBJECT_TEXT_COLOR, OBJECT_TOTAL_INVENTORY_COUNT, OBJECT_TOTAL_SCRIPT_COUNT, OBJECT_UNKNOWN_DETAIL, OBJECT_VELOCITY, OBJECT_VOLUME_DETECT, PERM_ALL, PERM_MOVE, PERM_TRANSFER, PRIM_PHYSICS_SHAPE_NONE, PRIM_TEXT, PRIM_TYPE_BOX, PRIM_TYPE_CYLINDER, PRIM_TYPE_PRISM, PRIM_TYPE_SPHERE, STATUS_PHANTOM, STATUS_PHYSICS, } from '../generated/constants.js';
6
+ const KEY_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
7
+ /** The prim with key `id` in a live linkset in the caller's region, matched without regard to case. */
8
+ export function findObjectPrim(ctx, id) {
9
+ if (!KEY_PATTERN.test(id) || id === NULL_KEY)
10
+ return undefined;
11
+ const wanted = id.toLowerCase();
12
+ const { peers, region } = ctx.linkset;
13
+ for (const linkset of peers.filter((l) => l.region === region && !l.dead)) {
14
+ const prim = linkset.prims.find((p) => p.key.toLowerCase() === wanted);
15
+ if (prim)
16
+ return prim;
17
+ }
18
+ return undefined;
19
+ }
20
+ const keyArg = (args) => args[0] ?? '';
21
+ const rootOf = (prim) => prim.linkset?.prims[0] ?? prim;
22
+ const primsOf = (prim) => prim.linkset?.prims ?? [prim];
23
+ const TRIANGLE = (3 * Math.sqrt(3)) / 16;
24
+ /** Second Life's physics draws a hollow's circle as a nine-sided polygon. */
25
+ const NONAGON = 4.5 * 0.25 * Math.sin((2 * Math.PI) / 9);
26
+ /** Area of a hole of each PRIM_HOLE_* shape, in a unit profile. */
27
+ function holeArea(shape) {
28
+ switch (shape.hole === PRIM_HOLE_DEFAULT ? shape.kind : shape.hole) {
29
+ case PRIM_HOLE_CIRCLE:
30
+ case PRIM_TYPE_CYLINDER:
31
+ return NONAGON;
32
+ case PRIM_HOLE_TRIANGLE:
33
+ case PRIM_TYPE_PRISM:
34
+ return TRIANGLE;
35
+ default:
36
+ return 1;
37
+ }
38
+ }
39
+ /** Area of a unit profile: a solid cylinder is a true circle, a hollow one a nonagon. */
40
+ function profileArea(shape) {
41
+ switch (shape.kind) {
42
+ case PRIM_TYPE_CYLINDER:
43
+ return shape.hollow > 0 ? NONAGON : Math.PI / 4;
44
+ case PRIM_TYPE_PRISM:
45
+ return TRIANGLE;
46
+ default:
47
+ return 1;
48
+ }
49
+ }
50
+ /**
51
+ * Volume of a prim's physics shape in cubic metres. Boxes, cylinders and
52
+ * prisms are extrusions, so a path cut and a taper scale the volume by
53
+ * their share of the profile, and a hollow takes out its hole: the hole's
54
+ * shape scaled by the hollow, or by half the hollow in a prism. Two axes
55
+ * tapering toward opposite ends leave less volume than two tapering toward
56
+ * the same end. A sphere is a whole ellipsoid, whatever its cut, hollow or
57
+ * dimple. Other shapes read as a solid box of their size.
58
+ */
59
+ function volume(prim) {
60
+ const { size, shape } = prim.params;
61
+ const box = size.x * size.y * size.z;
62
+ if ('topSize' in shape) {
63
+ const scale = shape.kind === PRIM_TYPE_PRISM ? shape.hollow / 2 : shape.hollow;
64
+ const solid = profileArea(shape) - scale * scale * holeArea(shape);
65
+ const cut = shape.cut.y - shape.cut.x;
66
+ const tx = 1 - shape.topSize.x;
67
+ const ty = 1 - shape.topSize.y;
68
+ const taper = 1 - (Math.abs(tx) + Math.abs(ty)) / 2 + (tx * ty >= 0 ? Math.abs(tx * ty) / 3 : Math.abs(tx * ty) / 6);
69
+ return box * solid * cut * taper;
70
+ }
71
+ if (shape.kind === PRIM_TYPE_SPHERE)
72
+ return (box * Math.PI) / 6;
73
+ return box;
74
+ }
75
+ /** Mass in kilograms: volume times density, or 0 for a prim with no physics shape. */
76
+ function primMass(prim) {
77
+ if (prim.params.physicsShapeType === PRIM_PHYSICS_SHAPE_NONE)
78
+ return 0;
79
+ return volume(prim) * prim.params.physicsMaterial.density;
80
+ }
81
+ /** Mass of the whole linkset in kilograms. */
82
+ function linksetMass(prim) {
83
+ return primsOf(prim).reduce((sum, p) => sum + primMass(p), 0);
84
+ }
85
+ /**
86
+ * The linkset's bounding box, relative to the root and in its frame,
87
+ * leaving out children with no physics shape. Each prim is a box of its
88
+ * size with rounded edges: every half-size is at least 0.025 m, and the
89
+ * edges round off by the smaller of 0.05 m and half the smallest half-size.
90
+ */
91
+ function boundingBox(prim) {
92
+ const root = rootOf(prim);
93
+ const min = { x: Infinity, y: Infinity, z: Infinity };
94
+ const max = { x: -Infinity, y: -Infinity, z: -Infinity };
95
+ for (const p of primsOf(prim)) {
96
+ if (p !== root && p.params.physicsShapeType === PRIM_PHYSICS_SHAPE_NONE)
97
+ continue;
98
+ const { size, position, rotation } = p.params;
99
+ const half = { x: Math.max(size.x / 2, 0.025), y: Math.max(size.y / 2, 0.025), z: Math.max(size.z / 2, 0.025) };
100
+ const round = Math.min(0.05, Math.min(half.x, half.y, half.z) / 2);
101
+ const centre = p === root ? ZERO_VECTOR : position;
102
+ const turn = p === root ? ZERO_ROTATION : rotation;
103
+ const axes = [
104
+ rotateVector({ x: half.x - round, y: 0, z: 0 }, turn),
105
+ rotateVector({ x: 0, y: half.y - round, z: 0 }, turn),
106
+ rotateVector({ x: 0, y: 0, z: half.z - round }, turn),
107
+ ];
108
+ for (const c of ['x', 'y', 'z']) {
109
+ const reach = axes.reduce((sum, a) => sum + Math.abs(a[c]), 0) + round;
110
+ min[c] = Math.min(min[c], centre[c] - reach);
111
+ max[c] = Math.max(max[c], centre[c] + reach);
112
+ }
113
+ }
114
+ return [min, max];
115
+ }
116
+ /** llKey2Name(key id) — the prim's name, or "" for a key with no prim in the region. */
117
+ export const llKey2Name = (ctx, args) => findObjectPrim(ctx, keyArg(args))?.name ?? '';
118
+ /** llGetObjectPrimCount(key id) — prims in the linkset holding `id`, or 0. */
119
+ export const llGetObjectPrimCount = (ctx, args) => {
120
+ const prim = findObjectPrim(ctx, keyArg(args));
121
+ return prim ? primsOf(prim).length : 0;
122
+ };
123
+ /**
124
+ * llGetObjectLinkKey(key id, integer link) — the key of link `link` in the
125
+ * linkset holding `id`. Link 0 is the root (or a lone prim) and LINK_THIS is
126
+ * the prim `id` itself.
127
+ */
128
+ export const llGetObjectLinkKey = (ctx, args) => {
129
+ const prim = findObjectPrim(ctx, keyArg(args));
130
+ if (!prim)
131
+ return NULL_KEY;
132
+ const link = args[1] ?? 0;
133
+ if (link === LINK_THIS)
134
+ return prim.key;
135
+ const prims = primsOf(prim);
136
+ if (link === 0 || (link === 1 && prims.length === 1))
137
+ return rootOf(prim).key;
138
+ return prims.find((p) => p.linkNumber === link)?.key ?? NULL_KEY;
139
+ };
140
+ /**
141
+ * llGetObjectMass(key id) — for a root or lone prim, the linkset's mass; for
142
+ * a child, its own mass. Second Life keeps a child's mass from when it was
143
+ * linked; here it follows the child's current shape.
144
+ */
145
+ export const llGetObjectMass = (ctx, args) => {
146
+ const prim = findObjectPrim(ctx, keyArg(args));
147
+ if (!prim)
148
+ return 0;
149
+ return (rootOf(prim) === prim ? linksetMass(prim) : primMass(prim)) / 100;
150
+ };
151
+ /** llGetBoundingBox(key id) — [min, max] of the linkset holding `id`, or [] for no prim. */
152
+ export const llGetBoundingBox = (ctx, args) => {
153
+ const prim = findObjectPrim(ctx, keyArg(args));
154
+ return prim ? boundingBox(prim) : [];
155
+ };
156
+ /** llGetGeometricCenter() — the mean of the prims' positions relative to the root, in its frame. */
157
+ export const llGetGeometricCenter = (ctx) => {
158
+ const prims = ctx.linkset.prims;
159
+ const root = prims[0];
160
+ const sum = { x: 0, y: 0, z: 0 };
161
+ for (const p of prims) {
162
+ if (p === root)
163
+ continue;
164
+ sum.x += p.params.position.x;
165
+ sum.y += p.params.position.y;
166
+ sum.z += p.params.position.z;
167
+ }
168
+ const n = Math.max(prims.length, 1);
169
+ return { x: sum.x / n, y: sum.y / n, z: sum.z / n };
170
+ };
171
+ /** The object's own base, owner, group, everyone and next-owner masks. */
172
+ const PERMS = [PERM_ALL, PERM_ALL, 0, 0, PERM_MOVE | PERM_TRANSFER];
173
+ /** The object's masks ANDed with those of every item in every prim's inventory. */
174
+ function combinedPerms(prim) {
175
+ return primsOf(prim)
176
+ .flatMap((p) => p.inventory)
177
+ .reduce((masks, { permMask: m }) => [masks[0] & m.base, masks[1] & m.owner, masks[2] & m.group, masks[3] & m.everyone, masks[4] & m.next], PERMS);
178
+ }
179
+ function regionRotation(prim) {
180
+ const root = rootOf(prim);
181
+ return root === prim ? prim.params.rotation : mulRotation(prim.params.rotation, root.params.rotation);
182
+ }
183
+ const scriptsOf = (prim) => primsOf(prim).flatMap((p) => p.scripts);
184
+ function timestamp(prim) {
185
+ const start = prim.linkset?.clock.startUnixTime ?? 0;
186
+ return formatTimestamp(Math.floor(start * 1e6 + prim.createdAt * 1000));
187
+ }
188
+ /** The entries one OBJECT_* flag gives for `prim`, or undefined for a number that is not a flag. */
189
+ function detail(prim, flag) {
190
+ const root = rootOf(prim);
191
+ const owner = prim.linkset?.owner ?? NULL_KEY;
192
+ const count = primsOf(prim).length;
193
+ const text = prim.getPrimParam(PRIM_TEXT, [], 0)?.values ?? ['', ZERO_VECTOR, 1];
194
+ const int = (v) => [[v, 'integer']];
195
+ const float = (v) => [[v, 'float']];
196
+ switch (flag) {
197
+ case OBJECT_NAME:
198
+ return [[prim.name, 'string']];
199
+ case OBJECT_DESC:
200
+ return [[prim.description, 'string']];
201
+ case OBJECT_POS:
202
+ return [[prim.regionPosition(), 'vector']];
203
+ case OBJECT_ROT:
204
+ return [[regionRotation(prim), 'rotation']];
205
+ case OBJECT_VELOCITY:
206
+ return [[prim.linkset?.rez?.velocity ?? prim.linkset?.world?.sensorProperties.get(prim.linkset)?.velocity ?? ZERO_VECTOR, 'vector']];
207
+ case OBJECT_OMEGA: {
208
+ const { axis, spinrate } = root.params.omega;
209
+ return [[{ x: axis.x * spinrate, y: axis.y * spinrate, z: axis.z * spinrate }, 'vector']];
210
+ }
211
+ case OBJECT_OWNER:
212
+ case OBJECT_CREATOR:
213
+ return [[owner, 'key']];
214
+ case OBJECT_REZZER_KEY:
215
+ return [[prim.linkset?.rez?.rezzerKey ?? owner, 'key']];
216
+ case OBJECT_GROUP:
217
+ case OBJECT_LAST_OWNER_ID:
218
+ return [[NULL_KEY, 'key']];
219
+ case OBJECT_ROOT:
220
+ return [[root.key, 'key']];
221
+ case OBJECT_RUNNING_SCRIPT_COUNT:
222
+ return int(scriptsOf(prim).filter((s) => s.running && !s.dead).length);
223
+ case OBJECT_TOTAL_SCRIPT_COUNT:
224
+ return int(scriptsOf(prim).length);
225
+ case OBJECT_SCRIPT_MEMORY:
226
+ return int(scriptsOf(prim).reduce((sum, s) => sum + s.memoryLimit, 0));
227
+ case OBJECT_PRIM_EQUIVALENCE:
228
+ case OBJECT_PRIM_COUNT:
229
+ return int(count);
230
+ case OBJECT_SERVER_COST:
231
+ return float(count / 2 + Math.max(scriptsOf(prim).length - 1, 0) / 4);
232
+ case OBJECT_PHYSICS_COST:
233
+ return float(count);
234
+ case OBJECT_SCRIPT_TIME:
235
+ case OBJECT_STREAMING_COST:
236
+ case OBJECT_CHARACTER_TIME:
237
+ case OBJECT_HOVER_HEIGHT:
238
+ return float(0);
239
+ case OBJECT_HEALTH:
240
+ return float(prim.params.health);
241
+ case OBJECT_DAMAGE:
242
+ return float(prim.params.damage.amount);
243
+ case OBJECT_DAMAGE_TYPE:
244
+ return int(prim.params.damage.type);
245
+ case OBJECT_BODY_SHAPE_TYPE:
246
+ return float(-1);
247
+ case OBJECT_ACCOUNT_LEVEL:
248
+ return int(-1);
249
+ case OBJECT_ATTACHED_POINT:
250
+ case OBJECT_PATHFINDING_TYPE:
251
+ case OBJECT_RENDER_WEIGHT:
252
+ case OBJECT_TEMP_ATTACHED:
253
+ case OBJECT_ATTACHED_SLOTS_AVAILABLE:
254
+ case OBJECT_SELECT_COUNT:
255
+ case OBJECT_SIT_COUNT:
256
+ case OBJECT_ANIMATED_COUNT:
257
+ case OBJECT_ANIMATED_SLOTS_AVAILABLE:
258
+ case OBJECT_LOCKED:
259
+ case OBJECT_VOLUME_DETECT:
260
+ return int(0);
261
+ case OBJECT_PHYSICS:
262
+ return int((root.statusFlags & STATUS_PHYSICS) !== 0 ? 1 : 0);
263
+ case OBJECT_PHANTOM:
264
+ return int((root.statusFlags & STATUS_PHANTOM) !== 0 ? 1 : 0);
265
+ case OBJECT_TEMP_ON_REZ:
266
+ return int(root.params.tempOnRez ? 1 : 0);
267
+ case OBJECT_CLICK_ACTION:
268
+ return int(prim.params.clickAction);
269
+ case OBJECT_MATERIAL:
270
+ return int(prim.params.material);
271
+ case OBJECT_TOTAL_INVENTORY_COUNT:
272
+ return int(primsOf(prim).reduce((sum, p) => sum + p.inventory.length, 0));
273
+ case OBJECT_LINK_NUMBER:
274
+ return int(prim.linkNumber);
275
+ case OBJECT_MASS:
276
+ return float(linksetMass(prim));
277
+ case OBJECT_GROUP_TAG:
278
+ return [['', 'string']];
279
+ case OBJECT_CREATION_TIME:
280
+ case OBJECT_REZ_TIME:
281
+ return [[timestamp(prim), 'string']];
282
+ case OBJECT_TEXT:
283
+ return [[text[0], 'string']];
284
+ case OBJECT_TEXT_COLOR:
285
+ return [[text[1], 'vector']];
286
+ case OBJECT_TEXT_ALPHA:
287
+ return float(text[2]);
288
+ case OBJECT_SCALE:
289
+ return [[prim.params.size, 'vector']];
290
+ case OBJECT_PERMS:
291
+ return PERMS.map((m) => [m, 'integer']);
292
+ case OBJECT_PERMS_COMBINED:
293
+ return combinedPerms(prim).map((m) => [m, 'integer']);
294
+ default:
295
+ return undefined;
296
+ }
297
+ }
298
+ /**
299
+ * llGetObjectDetails(key id, list params) — the entries for each OBJECT_*
300
+ * flag (five masks for OBJECT_PERMS), and OBJECT_UNKNOWN_DETAIL for a number
301
+ * that is not a flag. An entry that is not an integer is dropped and turns
302
+ * the last entry so far into OBJECT_UNKNOWN_DETAIL. A key with no prim in
303
+ * the region gives [].
304
+ */
305
+ /**
306
+ * llGetObjectPermMask(integer category) — one of the object's five masks,
307
+ * ANDed with its contents' masks when MASK_COMBINED is set. Only the low five
308
+ * bits of the category count.
309
+ */
310
+ export const llGetObjectPermMask = (ctx, args) => {
311
+ const category = (typeof args[0] === 'number' ? args[0] : 0) & 0x1f;
312
+ const masks = category & MASK_COMBINED ? combinedPerms(ctx.prim) : PERMS;
313
+ return masks[category & ~MASK_COMBINED] ?? 0;
314
+ };
315
+ export const llGetObjectDetails = (ctx, args) => {
316
+ const prim = findObjectPrim(ctx, keyArg(args));
317
+ if (!prim)
318
+ return [];
319
+ const flags = args[1] ?? [];
320
+ const out = [];
321
+ flags.forEach((flag, i) => {
322
+ const type = listElementType(flags, i) ?? (typeof flag === 'number' && Number.isInteger(flag) ? 'integer' : undefined);
323
+ if (type !== 'integer') {
324
+ if (out.length > 0)
325
+ out[out.length - 1] = [OBJECT_UNKNOWN_DETAIL, 'integer'];
326
+ return;
327
+ }
328
+ out.push(...(detail(prim, flag) ?? [[OBJECT_UNKNOWN_DETAIL, 'integer']]));
329
+ });
330
+ return typedList(out.map(([v]) => v), out.map(([, t]) => t));
331
+ };
332
+ //# sourceMappingURL=object-reads.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object-reads.js","sourceRoot":"","sources":["../../src/builtins/object-reads.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,12 @@ export declare const llSetText: BuiltinImpl;
10
10
  export declare const llSetObjectDesc: BuiltinImpl;
11
11
  /** llGetObjectDesc() */
12
12
  export declare const llGetObjectDesc: BuiltinImpl;
13
+ /** llSetTouchText(string text) */
14
+ export declare const llSetTouchText: BuiltinImpl;
15
+ /** llSetSitText(string text) */
16
+ export declare const llSetSitText: BuiltinImpl;
17
+ /** llSetPayPrice(integer price, list quick_pay_buttons) */
18
+ export declare const llSetPayPrice: BuiltinImpl;
13
19
  /**
14
20
  * llDie() — deletes the entire linked object. In real LSL this kills
15
21
  * every prim and every script in the linkset, not just the calling one.
@@ -1 +1 @@
1
- {"version":3,"file":"object.d.ts","sourceRoot":"","sources":["../../src/builtins/object.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAIhD;;;;GAIG;AAEH,8EAA8E;AAC9E,eAAO,MAAM,SAAS,EAAE,WAUvB,CAAA;AAED,wEAAwE;AACxE,eAAO,MAAM,eAAe,EAAE,WAM7B,CAAA;AAED,wBAAwB;AACxB,eAAO,MAAM,eAAe,EAAE,WAA2C,CAAA;AAEzE;;;;;;GAMG;AACH,eAAO,MAAM,KAAK,EAAE,WAMnB,CAAA;AAED,uEAAuE;AACvE,qBAAa,UAAU;CAAG;AAE1B;;;;GAIG;AACH,qBAAa,iBAAiB;CAAG;AACjC,eAAO,MAAM,aAAa,EAAE,WAG3B,CAAA"}
1
+ {"version":3,"file":"object.d.ts","sourceRoot":"","sources":["../../src/builtins/object.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAIhD;;;;GAIG;AAEH,8EAA8E;AAC9E,eAAO,MAAM,SAAS,EAAE,WAUvB,CAAA;AAED,wEAAwE;AACxE,eAAO,MAAM,eAAe,EAAE,WAM7B,CAAA;AAED,wBAAwB;AACxB,eAAO,MAAM,eAAe,EAAE,WAA2C,CAAA;AAEzE,kCAAkC;AAClC,eAAO,MAAM,cAAc,EAAE,WAG5B,CAAA;AAED,gCAAgC;AAChC,eAAO,MAAM,YAAY,EAAE,WAG1B,CAAA;AAED,2DAA2D;AAC3D,eAAO,MAAM,aAAa,EAAE,WAM3B,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,KAAK,EAAE,WAInB,CAAA;AAED,uEAAuE;AACvE,qBAAa,UAAU;CAAG;AAE1B;;;;GAIG;AACH,qBAAa,iBAAiB;CAAG;AACjC,eAAO,MAAM,aAAa,EAAE,WAG3B,CAAA"}
@@ -26,6 +26,24 @@ export const llSetObjectDesc = (ctx, args) => {
26
26
  };
27
27
  /** llGetObjectDesc() */
28
28
  export const llGetObjectDesc = (ctx) => ctx.prim.description;
29
+ /** llSetTouchText(string text) */
30
+ export const llSetTouchText = (ctx, args) => {
31
+ ctx.prim.touchText = args[0] ?? '';
32
+ return undefined;
33
+ };
34
+ /** llSetSitText(string text) */
35
+ export const llSetSitText = (ctx, args) => {
36
+ ctx.prim.sitText = args[0] ?? '';
37
+ return undefined;
38
+ };
39
+ /** llSetPayPrice(integer price, list quick_pay_buttons) */
40
+ export const llSetPayPrice = (ctx, args) => {
41
+ ctx.prim.payPrice = {
42
+ price: args[0] ?? 0,
43
+ buttons: [...(args[1] ?? [])],
44
+ };
45
+ return undefined;
46
+ };
29
47
  /**
30
48
  * llDie() — deletes the entire linked object. In real LSL this kills
31
49
  * every prim and every script in the linkset, not just the calling one.
@@ -34,9 +52,7 @@ export const llGetObjectDesc = (ctx) => ctx.prim.description;
34
52
  * once its next builtin call returns or at its next loop iteration.
35
53
  */
36
54
  export const llDie = (ctx) => {
37
- for (const s of ctx.linkset.allScripts()) {
38
- s.markDead();
39
- }
55
+ ctx.linkset.remove();
40
56
  ctx.state.lifecycle.dying = true;
41
57
  return undefined;
42
58
  };
@@ -1 +1 @@
1
- {"version":3,"file":"object.js","sourceRoot":"","sources":["../../src/builtins/object.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAEhE;;;;GAIG;AAEH,8EAA8E;AAC9E,MAAM,CAAC,MAAM,SAAS,GAAgB,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;IAClD,MAAM,IAAI,GAAI,IAAI,CAAC,CAAC,CAAwB,IAAI,EAAE,CAAA;IAClD,MAAM,QAAQ,GAAI,IAAI,CAAC,CAAC,CAAwB,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAA;IACxE,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IACxD,MAAM,KAAK,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAA;IAClF,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAG,IAAI,CAAC,CAAC,CAAwB,IAAI,CAAC,CAAC,CAAC,CAAA;IAC5E,uEAAuE;IACvE,qEAAqE;IACrE,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAA;IACzD,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA;AAED,wEAAwE;AACxE,MAAM,CAAC,MAAM,eAAe,GAAgB,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;IACxD,MAAM,IAAI,GAAI,IAAI,CAAC,CAAC,CAAwB,IAAI,EAAE,CAAA;IAClD,yEAAyE;IACzE,yEAAyE;IACzE,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;IAC3C,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA;AAED,wBAAwB;AACxB,MAAM,CAAC,MAAM,eAAe,GAAgB,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAA;AAEzE;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,KAAK,GAAgB,CAAC,GAAG,EAAE,EAAE;IACxC,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;QACzC,CAAC,CAAC,QAAQ,EAAE,CAAA;IACd,CAAC;IACD,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,GAAG,IAAI,CAAA;IAChC,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA;AAED,uEAAuE;AACvE,MAAM,OAAO,UAAU;CAAG;AAE1B;;;;GAIG;AACH,MAAM,OAAO,iBAAiB;CAAG;AACjC,MAAM,CAAC,MAAM,aAAa,GAAgB,CAAC,GAAG,EAAE,EAAE;IAChD,IAAI,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK;QAAE,OAAO,SAAS,CAAA;IAC/C,MAAM,IAAI,iBAAiB,EAAE,CAAA;AAC/B,CAAC,CAAA"}
1
+ {"version":3,"file":"object.js","sourceRoot":"","sources":["../../src/builtins/object.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { BuiltinImpl } from '../runtime.js';
2
+ export declare const llParticleSystem: BuiltinImpl;
3
+ export declare const llLinkParticleSystem: BuiltinImpl;
4
+ //# sourceMappingURL=particles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"particles.d.ts","sourceRoot":"","sources":["../../src/builtins/particles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAe,MAAM,eAAe,CAAA;AAyD7D,eAAO,MAAM,gBAAgB,EAAE,WAG9B,CAAA;AAED,eAAO,MAAM,oBAAoB,EAAE,WAGlC,CAAA"}
@@ -0,0 +1,65 @@
1
+ import { isVector, NULL_KEY } from '../values/types.js';
2
+ import { listElementType, sliceList } from '../values/list-types.js';
3
+ import { InventoryType } from '../inventory.js';
4
+ import { PSYS_SRC_TEXTURE } from '../generated/constants.js';
5
+ const integers = new Set([0, 9, 15, 24, 25]);
6
+ const floats = new Set([2, 4, 7, 10, 11, 13, 16, 17, 18, 19, 22, 23, 26, 27]);
7
+ const vectors = new Set([1, 3, 5, 6, 8, 21]);
8
+ const UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
9
+ function integer(rules, index) {
10
+ const type = listElementType(rules, index);
11
+ return type === 'integer' || (type === undefined && typeof rules[index] === 'number' && Number.isInteger(rules[index]));
12
+ }
13
+ // Unknown/noninteger rule ids and incomplete tails are ignored. A wrong value
14
+ // type for a known rule disables the entire emitter, without DEBUG_CHANNEL chat.
15
+ function valid(rules) {
16
+ for (let i = 0; i + 1 < rules.length; i += 2) {
17
+ if (!integer(rules, i))
18
+ continue;
19
+ const rule = rules[i];
20
+ const value = rules[i + 1];
21
+ if (integers.has(rule) && !integer(rules, i + 1))
22
+ return false;
23
+ if (floats.has(rule) && typeof value !== 'number')
24
+ return false;
25
+ if (vectors.has(rule) && !isVector(value))
26
+ return false;
27
+ if ((rule === PSYS_SRC_TEXTURE || rule === 20) && typeof value !== 'string')
28
+ return false;
29
+ }
30
+ return true;
31
+ }
32
+ function texture(prim, rules) {
33
+ let name = '';
34
+ for (let i = 0; i + 1 < rules.length; i += 2) {
35
+ if (integer(rules, i) && rules[i] === PSYS_SRC_TEXTURE)
36
+ name = rules[i + 1];
37
+ }
38
+ if (UUID.test(name))
39
+ return name.toLowerCase();
40
+ return prim.inventory.find(item => item.type === InventoryType.TEXTURE && item.name === name)?.key.toLowerCase() ?? NULL_KEY;
41
+ }
42
+ function set(prim, rules) {
43
+ prim.particles = rules.length === 0 || !valid(rules)
44
+ ? null
45
+ : { rules: sliceList(rules, 0), texture: texture(prim, rules) };
46
+ }
47
+ function targets(ctx, link) {
48
+ if (link < -4) {
49
+ const other = ctx.linkset.prims.find(prim => prim !== ctx.prim);
50
+ return other ? [other] : [];
51
+ }
52
+ if (link === 0 && ctx.prim.linkNumber > 1)
53
+ return [ctx.linkset.prims[0]];
54
+ return ctx.linkset.resolveTargets(ctx.prim.linkNumber, link);
55
+ }
56
+ export const llParticleSystem = (ctx, args) => {
57
+ set(ctx.prim, args[0]);
58
+ return undefined;
59
+ };
60
+ export const llLinkParticleSystem = (ctx, args) => {
61
+ for (const prim of targets(ctx, args[0]))
62
+ set(prim, args[1]);
63
+ return undefined;
64
+ };
65
+ //# sourceMappingURL=particles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"particles.js","sourceRoot":"","sources":["../../src/builtins/particles.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AACvD,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAE5D,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;AAC5C,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;AAC7E,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;AAC5C,MAAM,IAAI,GAAG,iEAAiE,CAAA;AAE9E,SAAS,OAAO,CAAC,KAA8B,EAAE,KAAa;IAC5D,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;IAC1C,OAAO,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AACzH,CAAC;AAED,8EAA8E;AAC9E,iFAAiF;AACjF,SAAS,KAAK,CAAC,KAA8B;IAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7C,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;YAAE,SAAQ;QAChC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAW,CAAA;QAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAE,CAAA;QAC3B,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC;YAAE,OAAO,KAAK,CAAA;QAC9D,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAA;QAC/D,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAA;QACvD,IAAI,CAAC,IAAI,KAAK,gBAAgB,IAAI,IAAI,KAAK,EAAE,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAA;IAC3F,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,OAAO,CAAC,IAAU,EAAE,KAA8B;IACzD,IAAI,IAAI,GAAG,EAAE,CAAA;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7C,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,gBAAgB;YAAE,IAAI,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAW,CAAA;IACvF,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,WAAW,EAAE,CAAA;IAC9C,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,GAAG,CAAC,WAAW,EAAE,IAAI,QAAQ,CAAA;AAC9H,CAAC;AAED,SAAS,GAAG,CAAC,IAAU,EAAE,KAA8B;IACrD,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QAClD,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAA;AACnE,CAAC;AAED,SAAS,OAAO,CAAC,GAAgB,EAAE,IAAY;IAC7C,IAAI,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC;QACd,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,CAAA;QAC/D,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAC7B,CAAC;IACD,IAAI,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC;QAAE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAA;IACzE,OAAO,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;AAC9D,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAgB,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;IACzD,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAA4B,CAAC,CAAA;IACjD,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAgB,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;IAC7D,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAW,CAAC;QAAE,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAA4B,CAAC,CAAA;IACjG,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA"}
@@ -0,0 +1,39 @@
1
+ import type { BuiltinImpl } from '../runtime.js';
2
+ import type { Script } from '../script.js';
3
+ import type { LslValue, Vector } from '../values/types.js';
4
+ /** A pathfinding operation requested by a script, in call order. */
5
+ export interface CharacterCommand {
6
+ readonly name: string;
7
+ readonly args: ReadonlyArray<LslValue>;
8
+ }
9
+ /** Requested configuration and command history, shared by an object's scripts. */
10
+ export interface Character {
11
+ /** Explicit option values. Simulator defaults, clamping and capsule fitting are not calculated. */
12
+ readonly options: ReadonlyMap<number, LslValue>;
13
+ readonly commands: ReadonlyArray<CharacterCommand>;
14
+ }
15
+ /** Fixed answers to navigation queries; use script.mock for answers that depend on the arguments. */
16
+ export interface NavigationResults {
17
+ readonly closestNavPoint?: ReadonlyArray<Vector>;
18
+ /** Waypoints followed by a status integer, or a single failure status. */
19
+ readonly staticPath?: ReadonlyArray<LslValue>;
20
+ }
21
+ export declare function characterFor(script: Script): Character | null;
22
+ export declare function setNavigationResults(script: Script, results: NavigationResults): void;
23
+ export declare const llCreateCharacter: BuiltinImpl;
24
+ export declare const llUpdateCharacter: BuiltinImpl;
25
+ export declare const llDeleteCharacter: BuiltinImpl;
26
+ export declare const llEvade: BuiltinImpl;
27
+ export declare const llExecCharacterCmd: BuiltinImpl;
28
+ export declare const llFleeFrom: BuiltinImpl;
29
+ export declare const llNavigateTo: BuiltinImpl;
30
+ export declare const llPatrolPoints: BuiltinImpl;
31
+ export declare const llPursue: BuiltinImpl;
32
+ export declare const llWanderWithin: BuiltinImpl;
33
+ /** Without a supplied navmesh answer, there is no nearby navigation point. */
34
+ export declare const llGetClosestNavPoint: BuiltinImpl;
35
+ /** Without a supplied path, the goal cannot be found in navigation geometry. */
36
+ export declare const llGetStaticPath: BuiltinImpl;
37
+ /** Deliver one simulator result to the root prim's scripts, not the child prims. */
38
+ export declare function pathUpdate(script: Script, type: number, reserved?: ReadonlyArray<LslValue>): void;
39
+ //# sourceMappingURL=pathfinding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pathfinding.d.ts","sourceRoot":"","sources":["../../src/builtins/pathfinding.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAEhD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAI1D,oEAAoE;AACpE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAA;CACvC;AAED,kFAAkF;AAClF,MAAM,WAAW,SAAS;IACxB,mGAAmG;IACnG,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IAC/C,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAA;CACnD;AAOD,qGAAqG;AACrG,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,eAAe,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IAChD,0EAA0E;IAC1E,QAAQ,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAA;CAC9C;AAOD,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAE7D;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAErF;AASD,eAAO,MAAM,iBAAiB,EAAE,WAa/B,CAAA;AAED,eAAO,MAAM,iBAAiB,EAAE,WAI/B,CAAA;AAED,eAAO,MAAM,iBAAiB,EAAE,WAG/B,CAAA;AAcD,eAAO,MAAM,OAAO,aAAqB,CAAA;AACzC,eAAO,MAAM,kBAAkB,aAAgC,CAAA;AAC/D,eAAO,MAAM,UAAU,aAAwB,CAAA;AAC/C,eAAO,MAAM,YAAY,aAA0B,CAAA;AACnD,eAAO,MAAM,cAAc,aAA4B,CAAA;AACvD,eAAO,MAAM,QAAQ,aAAsB,CAAA;AAC3C,eAAO,MAAM,cAAc,aAA4B,CAAA;AAEvD,8EAA8E;AAC9E,eAAO,MAAM,oBAAoB,EAAE,WACiC,CAAA;AAEpE,gFAAgF;AAChF,eAAO,MAAM,eAAe,EAAE,WAI7B,CAAA;AAED,oFAAoF;AACpF,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,GAAE,aAAa,CAAC,QAAQ,CAAM,GAAG,IAAI,CAQrG"}