@rezless/vm 0.1.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.
- package/LICENSE +202 -0
- package/NOTICE +32 -0
- package/dist/builtins/base64.d.ts +25 -0
- package/dist/builtins/base64.d.ts.map +1 -0
- package/dist/builtins/base64.js +43 -0
- package/dist/builtins/base64.js.map +1 -0
- package/dist/builtins/chat.d.ts +10 -0
- package/dist/builtins/chat.d.ts.map +1 -0
- package/dist/builtins/chat.js +36 -0
- package/dist/builtins/chat.js.map +1 -0
- package/dist/builtins/dataserver.d.ts +26 -0
- package/dist/builtins/dataserver.d.ts.map +1 -0
- package/dist/builtins/dataserver.js +20 -0
- package/dist/builtins/dataserver.js.map +1 -0
- package/dist/builtins/detected.d.ts +40 -0
- package/dist/builtins/detected.d.ts.map +1 -0
- package/dist/builtins/detected.js +23 -0
- package/dist/builtins/detected.js.map +1 -0
- package/dist/builtins/hash.d.ts +6 -0
- package/dist/builtins/hash.d.ts.map +1 -0
- package/dist/builtins/hash.js +34 -0
- package/dist/builtins/hash.js.map +1 -0
- package/dist/builtins/http.d.ts +40 -0
- package/dist/builtins/http.d.ts.map +1 -0
- package/dist/builtins/http.js +87 -0
- package/dist/builtins/http.js.map +1 -0
- package/dist/builtins/identity.d.ts +14 -0
- package/dist/builtins/identity.d.ts.map +1 -0
- package/dist/builtins/identity.js +17 -0
- package/dist/builtins/identity.js.map +1 -0
- package/dist/builtins/index.d.ts +8 -0
- package/dist/builtins/index.d.ts.map +1 -0
- package/dist/builtins/index.js +232 -0
- package/dist/builtins/index.js.map +1 -0
- package/dist/builtins/inventory.d.ts +33 -0
- package/dist/builtins/inventory.d.ts.map +1 -0
- package/dist/builtins/inventory.js +134 -0
- package/dist/builtins/inventory.js.map +1 -0
- package/dist/builtins/json.d.ts +7 -0
- package/dist/builtins/json.d.ts.map +1 -0
- package/dist/builtins/json.js +690 -0
- package/dist/builtins/json.js.map +1 -0
- package/dist/builtins/link-info.d.ts +10 -0
- package/dist/builtins/link-info.d.ts.map +1 -0
- package/dist/builtins/link-info.js +26 -0
- package/dist/builtins/link-info.js.map +1 -0
- package/dist/builtins/linked.d.ts +23 -0
- package/dist/builtins/linked.d.ts.map +1 -0
- package/dist/builtins/linked.js +20 -0
- package/dist/builtins/linked.js.map +1 -0
- package/dist/builtins/linksetdata.d.ts +20 -0
- package/dist/builtins/linksetdata.d.ts.map +1 -0
- package/dist/builtins/linksetdata.js +196 -0
- package/dist/builtins/linksetdata.js.map +1 -0
- package/dist/builtins/listen.d.ts +33 -0
- package/dist/builtins/listen.d.ts.map +1 -0
- package/dist/builtins/listen.js +45 -0
- package/dist/builtins/listen.js.map +1 -0
- package/dist/builtins/lists.d.ts +37 -0
- package/dist/builtins/lists.d.ts.map +1 -0
- package/dist/builtins/lists.js +275 -0
- package/dist/builtins/lists.js.map +1 -0
- package/dist/builtins/math.d.ts +32 -0
- package/dist/builtins/math.d.ts.map +1 -0
- package/dist/builtins/math.js +104 -0
- package/dist/builtins/math.js.map +1 -0
- package/dist/builtins/object.d.ts +29 -0
- package/dist/builtins/object.d.ts.map +1 -0
- package/dist/builtins/object.js +50 -0
- package/dist/builtins/object.js.map +1 -0
- package/dist/builtins/prim-accessors.d.ts +56 -0
- package/dist/builtins/prim-accessors.d.ts.map +1 -0
- package/dist/builtins/prim-accessors.js +353 -0
- package/dist/builtins/prim-accessors.js.map +1 -0
- package/dist/builtins/prim-params.d.ts +12 -0
- package/dist/builtins/prim-params.d.ts.map +1 -0
- package/dist/builtins/prim-params.js +124 -0
- package/dist/builtins/prim-params.js.map +1 -0
- package/dist/builtins/script-control.d.ts +13 -0
- package/dist/builtins/script-control.d.ts.map +1 -0
- package/dist/builtins/script-control.js +41 -0
- package/dist/builtins/script-control.js.map +1 -0
- package/dist/builtins/strings.d.ts +23 -0
- package/dist/builtins/strings.d.ts.map +1 -0
- package/dist/builtins/strings.js +130 -0
- package/dist/builtins/strings.js.map +1 -0
- package/dist/builtins/time.d.ts +28 -0
- package/dist/builtins/time.d.ts.map +1 -0
- package/dist/builtins/time.js +54 -0
- package/dist/builtins/time.js.map +1 -0
- package/dist/clock.d.ts +75 -0
- package/dist/clock.d.ts.map +1 -0
- package/dist/clock.js +125 -0
- package/dist/clock.js.map +1 -0
- package/dist/coverage.d.ts +110 -0
- package/dist/coverage.d.ts.map +1 -0
- package/dist/coverage.js +221 -0
- package/dist/coverage.js.map +1 -0
- package/dist/dispatch.d.ts +19 -0
- package/dist/dispatch.d.ts.map +1 -0
- package/dist/dispatch.js +42 -0
- package/dist/dispatch.js.map +1 -0
- package/dist/env.d.ts +33 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +76 -0
- package/dist/env.js.map +1 -0
- package/dist/generated/constants.d.ts +967 -0
- package/dist/generated/constants.d.ts.map +1 -0
- package/dist/generated/constants.js +969 -0
- package/dist/generated/constants.js.map +1 -0
- package/dist/generated/constants_table.d.ts +11 -0
- package/dist/generated/constants_table.d.ts.map +1 -0
- package/dist/generated/constants_table.js +978 -0
- package/dist/generated/constants_table.js.map +1 -0
- package/dist/generated/events.d.ts +545 -0
- package/dist/generated/events.d.ts.map +1 -0
- package/dist/generated/events.js +49 -0
- package/dist/generated/events.js.map +1 -0
- package/dist/generated/functions.d.ts +6051 -0
- package/dist/generated/functions.d.ts.map +1 -0
- package/dist/generated/functions.js +526 -0
- package/dist/generated/functions.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/interpreter.d.ts +39 -0
- package/dist/interpreter.d.ts.map +1 -0
- package/dist/interpreter.js +381 -0
- package/dist/interpreter.js.map +1 -0
- package/dist/inventory.d.ts +52 -0
- package/dist/inventory.d.ts.map +1 -0
- package/dist/inventory.js +45 -0
- package/dist/inventory.js.map +1 -0
- package/dist/linkset.d.ts +89 -0
- package/dist/linkset.d.ts.map +1 -0
- package/dist/linkset.js +179 -0
- package/dist/linkset.js.map +1 -0
- package/dist/prim-params.d.ts +221 -0
- package/dist/prim-params.d.ts.map +1 -0
- package/dist/prim-params.js +852 -0
- package/dist/prim-params.js.map +1 -0
- package/dist/prim.d.ts +79 -0
- package/dist/prim.d.ts.map +1 -0
- package/dist/prim.js +96 -0
- package/dist/prim.js.map +1 -0
- package/dist/random.d.ts +16 -0
- package/dist/random.d.ts.map +1 -0
- package/dist/random.js +29 -0
- package/dist/random.js.map +1 -0
- package/dist/runtime.d.ts +108 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +2 -0
- package/dist/runtime.js.map +1 -0
- package/dist/script.d.ts +248 -0
- package/dist/script.d.ts.map +1 -0
- package/dist/script.js +667 -0
- package/dist/script.js.map +1 -0
- package/dist/values/coerce.d.ts +22 -0
- package/dist/values/coerce.d.ts.map +1 -0
- package/dist/values/coerce.js +184 -0
- package/dist/values/coerce.js.map +1 -0
- package/dist/values/format.d.ts +20 -0
- package/dist/values/format.d.ts.map +1 -0
- package/dist/values/format.js +47 -0
- package/dist/values/format.js.map +1 -0
- package/dist/values/ops.d.ts +19 -0
- package/dist/values/ops.d.ts.map +1 -0
- package/dist/values/ops.js +345 -0
- package/dist/values/ops.js.map +1 -0
- package/dist/values/types.d.ts +39 -0
- package/dist/values/types.d.ts.map +1 -0
- package/dist/values/types.js +68 -0
- package/dist/values/types.js.map +1 -0
- package/package.json +52 -0
package/dist/linkset.js
ADDED
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { LinksetClock } from './clock.js';
|
|
2
|
+
import { Prim } from './prim.js';
|
|
3
|
+
import { NULL_KEY } from './values/types.js';
|
|
4
|
+
import { LINK_ROOT, LINK_SET, LINK_ALL_OTHERS, LINK_ALL_CHILDREN, LINK_THIS, } from './generated/constants.js';
|
|
5
|
+
// Re-export so `import { LINK_* } from '@rezless/vm'` keeps working.
|
|
6
|
+
export { LINK_ROOT, LINK_SET, LINK_ALL_OTHERS, LINK_ALL_CHILDREN, LINK_THIS };
|
|
7
|
+
/**
|
|
8
|
+
* A linkset owns the shared world state for its prims and scripts: the
|
|
9
|
+
* single virtual clock, the LSD store, the cross-script link_message
|
|
10
|
+
* capture, and the registry of prims + scripts. Per-script state stays on
|
|
11
|
+
* `Script` / `ScriptState`.
|
|
12
|
+
*
|
|
13
|
+
* Single-script default: when `new Script(ast, options)` is called without
|
|
14
|
+
* a host prim, a 1-prim/1-script linkset is auto-allocated. Existing tests
|
|
15
|
+
* see no behavioral change.
|
|
16
|
+
*/
|
|
17
|
+
export class Linkset {
|
|
18
|
+
clock = new LinksetClock();
|
|
19
|
+
prims = [];
|
|
20
|
+
/** Linkset-wide LSD store (was per-script before multi-script support). */
|
|
21
|
+
linksetData = new Map();
|
|
22
|
+
/**
|
|
23
|
+
* Cross-script capture of every `llMessageLinked` invocation in this
|
|
24
|
+
* linkset. Append-only; long-running tests should call
|
|
25
|
+
* `clearLinkedMessages()` between scenarios to keep memory bounded.
|
|
26
|
+
*/
|
|
27
|
+
linkedMessages = [];
|
|
28
|
+
/** Drop every captured cross-script linked-message entry. */
|
|
29
|
+
clearLinkedMessages() {
|
|
30
|
+
this.linkedMessages.length = 0;
|
|
31
|
+
}
|
|
32
|
+
owner;
|
|
33
|
+
constructor(opts = {}) {
|
|
34
|
+
this.owner = opts.owner ?? NULL_KEY;
|
|
35
|
+
}
|
|
36
|
+
/** Add a prim to the linkset; assigns a 1-based linkNumber. */
|
|
37
|
+
addPrim(prim) {
|
|
38
|
+
prim.linkset = this;
|
|
39
|
+
this.prims.push(prim);
|
|
40
|
+
this.recomputeLinkNumbers();
|
|
41
|
+
return prim;
|
|
42
|
+
}
|
|
43
|
+
recomputeLinkNumbers() {
|
|
44
|
+
if (this.prims.length === 1) {
|
|
45
|
+
// LSL: a lone unlinked prim reports linkNumber 0.
|
|
46
|
+
this.prims[0].linkNumber = 0;
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
for (let i = 0; i < this.prims.length; i++) {
|
|
50
|
+
this.prims[i].linkNumber = i + 1;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/** Flat list of every script in every prim, in prim/inventory order. */
|
|
54
|
+
allScripts() {
|
|
55
|
+
const out = [];
|
|
56
|
+
for (const p of this.prims) {
|
|
57
|
+
for (const s of p.scripts)
|
|
58
|
+
out.push(s);
|
|
59
|
+
}
|
|
60
|
+
return out;
|
|
61
|
+
}
|
|
62
|
+
/** Locate the prim containing `script`, or undefined. */
|
|
63
|
+
primOf(script) {
|
|
64
|
+
return this.prims.find((p) => p.scripts.includes(script));
|
|
65
|
+
}
|
|
66
|
+
/** Resolve LINK_* / specific link number to the set of target prims. */
|
|
67
|
+
resolveTargets(senderLink, target) {
|
|
68
|
+
if (target === LINK_THIS) {
|
|
69
|
+
const me = this.prims.find((p) => p.linkNumber === senderLink) ?? this.prims[0];
|
|
70
|
+
return me ? [me] : [];
|
|
71
|
+
}
|
|
72
|
+
if (target === LINK_SET)
|
|
73
|
+
return [...this.prims];
|
|
74
|
+
if (target === LINK_ALL_OTHERS) {
|
|
75
|
+
return this.prims.filter((p) => p.linkNumber !== senderLink);
|
|
76
|
+
}
|
|
77
|
+
if (target === LINK_ALL_CHILDREN) {
|
|
78
|
+
// children = everything except root (LINK_ROOT in a real linkset; a
|
|
79
|
+
// lone prim has linkNumber 0 → no children).
|
|
80
|
+
if (this.prims.length <= 1)
|
|
81
|
+
return [];
|
|
82
|
+
return this.prims.filter((p) => p.linkNumber !== LINK_ROOT);
|
|
83
|
+
}
|
|
84
|
+
if (target >= LINK_ROOT) {
|
|
85
|
+
const p = this.prims.find((pp) => pp.linkNumber === target);
|
|
86
|
+
return p ? [p] : [];
|
|
87
|
+
}
|
|
88
|
+
if (target === 0 && this.prims.length === 1) {
|
|
89
|
+
// Lone unlinked prim accepts target 0 as "self".
|
|
90
|
+
return [this.prims[0]];
|
|
91
|
+
}
|
|
92
|
+
return [];
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Schedule `linkset_data` events on every script in the linkset. The
|
|
96
|
+
* caller is expected to have already mutated the shared LSD store before
|
|
97
|
+
* broadcasting.
|
|
98
|
+
*/
|
|
99
|
+
broadcastLinksetData(action, name, value) {
|
|
100
|
+
const at = this.clock.now;
|
|
101
|
+
for (const s of this.allScripts()) {
|
|
102
|
+
this.clock.schedule(s, at, 'linkset_data', { action, name, value });
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Send a `link_message` according to LSL fan-out semantics.
|
|
107
|
+
* `senderLink` is the calling prim's link number; the event payload's
|
|
108
|
+
* `sender_num` is set to that value. The capture array on the linkset
|
|
109
|
+
* records every invocation for cross-script test assertions.
|
|
110
|
+
*/
|
|
111
|
+
deliverLinkMessage(senderLink, target, num, str, id) {
|
|
112
|
+
this.linkedMessages.push({ target, num, str, id });
|
|
113
|
+
const targets = this.resolveTargets(senderLink, target);
|
|
114
|
+
const at = this.clock.now;
|
|
115
|
+
for (const p of targets) {
|
|
116
|
+
for (const s of p.scripts) {
|
|
117
|
+
this.clock.schedule(s, at, 'link_message', { sender_num: senderLink, num, str, id });
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Deliver chat to every script in the linkset whose listens match. Useful
|
|
123
|
+
* for region/world-level chat simulation. `Script.deliverChat` remains
|
|
124
|
+
* available for the single-script case (delivers only to that script).
|
|
125
|
+
*/
|
|
126
|
+
deliverChat(opts) {
|
|
127
|
+
for (const s of this.allScripts()) {
|
|
128
|
+
s.matchChatListens(opts);
|
|
129
|
+
}
|
|
130
|
+
this.drainQueue();
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Advance the shared clock by `ms` and drain every event that becomes
|
|
134
|
+
* due, dispatching each to its target script.
|
|
135
|
+
*/
|
|
136
|
+
advanceTime(ms) {
|
|
137
|
+
this.clock.advance(ms);
|
|
138
|
+
this.drainQueue();
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Drain due events in chronological order. Each event is delivered to
|
|
142
|
+
* its target script via `script.deliver(event, payload)`. If a handler
|
|
143
|
+
* triggers more events (timers, chained chats, …) they may become due
|
|
144
|
+
* inside this loop and are picked up in the next iteration.
|
|
145
|
+
*
|
|
146
|
+
* The script roster is captured once per drain. Adding a script
|
|
147
|
+
* mid-drain is rare (and would require an explicit prim mutation by a
|
|
148
|
+
* builtin); when it happens, the new script's events are simply picked
|
|
149
|
+
* up on the next outer drain. Worth-the-trade for avoiding an O(scripts)
|
|
150
|
+
* allocation per event.
|
|
151
|
+
*/
|
|
152
|
+
drainQueue() {
|
|
153
|
+
const scripts = this.allScripts();
|
|
154
|
+
if (scripts.length === 0)
|
|
155
|
+
return;
|
|
156
|
+
while (true) {
|
|
157
|
+
const next = this.clock.takeNextDue(scripts);
|
|
158
|
+
if (!next)
|
|
159
|
+
return;
|
|
160
|
+
const target = next.target;
|
|
161
|
+
if (target.dead)
|
|
162
|
+
continue;
|
|
163
|
+
// `__reset` (from llResetOtherScript) must run regardless of the
|
|
164
|
+
// target's running flag — per LSL, a stopped script is still reset
|
|
165
|
+
// when commanded, it just stays stopped afterward.
|
|
166
|
+
if (!target.running && next.event !== '__reset') {
|
|
167
|
+
// Park for replay when the script is re-enabled. A paused script
|
|
168
|
+
// must not block other scripts' events, so we stash on the script
|
|
169
|
+
// itself rather than holding a slot in the linkset queue.
|
|
170
|
+
target.parkedEvents.push({ at: next.at, event: next.event, payload: next.payload });
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
173
|
+
// ResetScriptSignal is caught inside `Script.runHandler`; it never
|
|
174
|
+
// bubbles up to here, so no try/catch is needed.
|
|
175
|
+
target.deliver(next.event, next.payload);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=linkset.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linkset.js","sourceRoot":"","sources":["../src/linkset.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
import type { LslValue, Rotation, Vector } from './values/types.js';
|
|
2
|
+
import type { Prim } from './prim.js';
|
|
3
|
+
/**
|
|
4
|
+
* Backing store for the PRIM_* family of llSetPrimitiveParams /
|
|
5
|
+
* llGetPrimitiveParams values. The full wiki surface is modeled here so
|
|
6
|
+
* that the seam in `Prim` (`getPrimParam` / `setPrimParam`) is the single
|
|
7
|
+
* place where every PRIM_* rule is interpreted, whether the caller is a
|
|
8
|
+
* direct llSetPrimitiveParams or one of the alternative accessors
|
|
9
|
+
* (llSetPos, llSetColor, llSitTarget, …).
|
|
10
|
+
*/
|
|
11
|
+
export interface PrimParams {
|
|
12
|
+
position: Vector;
|
|
13
|
+
rotation: Rotation;
|
|
14
|
+
size: Vector;
|
|
15
|
+
/** Per-face slots. LSL uses face index `ALL_SIDES = -1` to mean "every face". */
|
|
16
|
+
faces: PrimFace[];
|
|
17
|
+
pointLight: {
|
|
18
|
+
enabled: boolean;
|
|
19
|
+
color: Vector;
|
|
20
|
+
intensity: number;
|
|
21
|
+
radius: number;
|
|
22
|
+
falloff: number;
|
|
23
|
+
};
|
|
24
|
+
/** Legacy mirror of `faces[i].glow`. Kept for direct field access. */
|
|
25
|
+
glow: number[];
|
|
26
|
+
omega: {
|
|
27
|
+
axis: Vector;
|
|
28
|
+
spinrate: number;
|
|
29
|
+
gain: number;
|
|
30
|
+
};
|
|
31
|
+
physicsShapeType: number;
|
|
32
|
+
flexible: {
|
|
33
|
+
enabled: boolean;
|
|
34
|
+
softness: number;
|
|
35
|
+
gravity: number;
|
|
36
|
+
friction: number;
|
|
37
|
+
wind: number;
|
|
38
|
+
tension: number;
|
|
39
|
+
force: Vector;
|
|
40
|
+
};
|
|
41
|
+
sculpt: {
|
|
42
|
+
textureKey: string;
|
|
43
|
+
type: number;
|
|
44
|
+
};
|
|
45
|
+
slice: Vector;
|
|
46
|
+
shape: PrimShape;
|
|
47
|
+
material: number;
|
|
48
|
+
tempOnRez: boolean;
|
|
49
|
+
castShadows: boolean;
|
|
50
|
+
allowUnsit: boolean;
|
|
51
|
+
scriptedSitOnly: boolean;
|
|
52
|
+
sitTarget: {
|
|
53
|
+
enabled: boolean;
|
|
54
|
+
offset: Vector;
|
|
55
|
+
rotation: Rotation;
|
|
56
|
+
};
|
|
57
|
+
sitFlags: number;
|
|
58
|
+
projector: {
|
|
59
|
+
texture: string;
|
|
60
|
+
fov: number;
|
|
61
|
+
focus: number;
|
|
62
|
+
ambiance: number;
|
|
63
|
+
};
|
|
64
|
+
clickAction: number;
|
|
65
|
+
damage: {
|
|
66
|
+
amount: number;
|
|
67
|
+
type: number;
|
|
68
|
+
};
|
|
69
|
+
health: number;
|
|
70
|
+
reflectionProbe: {
|
|
71
|
+
enabled: boolean;
|
|
72
|
+
ambiance: number;
|
|
73
|
+
clipDistance: number;
|
|
74
|
+
flags: number;
|
|
75
|
+
};
|
|
76
|
+
physicsMaterial: {
|
|
77
|
+
gravityMultiplier: number;
|
|
78
|
+
restitution: number;
|
|
79
|
+
friction: number;
|
|
80
|
+
density: number;
|
|
81
|
+
};
|
|
82
|
+
textureAnim: {
|
|
83
|
+
mode: number;
|
|
84
|
+
face: number;
|
|
85
|
+
sizex: number;
|
|
86
|
+
sizey: number;
|
|
87
|
+
start: number;
|
|
88
|
+
length: number;
|
|
89
|
+
rate: number;
|
|
90
|
+
};
|
|
91
|
+
passCollisions: number;
|
|
92
|
+
passTouches: number;
|
|
93
|
+
}
|
|
94
|
+
export interface PrimFaceMaterial {
|
|
95
|
+
texture: string;
|
|
96
|
+
textureRepeats: Vector;
|
|
97
|
+
textureOffsets: Vector;
|
|
98
|
+
textureRotation: number;
|
|
99
|
+
}
|
|
100
|
+
export interface PrimFace {
|
|
101
|
+
texture: string;
|
|
102
|
+
textureRepeats: Vector;
|
|
103
|
+
textureOffsets: Vector;
|
|
104
|
+
textureRotation: number;
|
|
105
|
+
color: Vector;
|
|
106
|
+
alpha: number;
|
|
107
|
+
bumpShiny: {
|
|
108
|
+
shiny: number;
|
|
109
|
+
bump: number;
|
|
110
|
+
};
|
|
111
|
+
fullBright: boolean;
|
|
112
|
+
glow: number;
|
|
113
|
+
texgen: number;
|
|
114
|
+
renderMaterial: string;
|
|
115
|
+
normal: PrimFaceMaterial;
|
|
116
|
+
specular: PrimFaceMaterial & {
|
|
117
|
+
color: Vector;
|
|
118
|
+
glossiness: number;
|
|
119
|
+
environment: number;
|
|
120
|
+
};
|
|
121
|
+
alphaMode: {
|
|
122
|
+
mode: number;
|
|
123
|
+
cutoff: number;
|
|
124
|
+
};
|
|
125
|
+
gltf: {
|
|
126
|
+
baseColor: PrimFaceMaterial & {
|
|
127
|
+
color: Vector;
|
|
128
|
+
alpha: number;
|
|
129
|
+
alphaMode: number;
|
|
130
|
+
alphaCutoff: number;
|
|
131
|
+
doubleSided: number;
|
|
132
|
+
};
|
|
133
|
+
normal: PrimFaceMaterial;
|
|
134
|
+
metallicRoughness: PrimFaceMaterial & {
|
|
135
|
+
metallic: number;
|
|
136
|
+
roughness: number;
|
|
137
|
+
};
|
|
138
|
+
emissive: PrimFaceMaterial & {
|
|
139
|
+
tint: Vector;
|
|
140
|
+
};
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Typed-literal aliases for the kwdb PRIM_TYPE_* constants. The
|
|
145
|
+
* generated module exports them as `: number` so TS can't narrow on
|
|
146
|
+
* them; we re-pin them to their literal values here. The `as` assertions
|
|
147
|
+
* are runtime-asserted below so a future kwdb renumber would surface as
|
|
148
|
+
* a load-time failure rather than silent corruption.
|
|
149
|
+
*/
|
|
150
|
+
declare const SHAPE_BOX: 0;
|
|
151
|
+
declare const SHAPE_CYLINDER: 1;
|
|
152
|
+
declare const SHAPE_PRISM: 2;
|
|
153
|
+
declare const SHAPE_SPHERE: 3;
|
|
154
|
+
declare const SHAPE_TORUS: 4;
|
|
155
|
+
declare const SHAPE_TUBE: 5;
|
|
156
|
+
declare const SHAPE_RING: 6;
|
|
157
|
+
declare const SHAPE_SCULPT: 7;
|
|
158
|
+
export type PrimShape = {
|
|
159
|
+
kind: typeof SHAPE_BOX | typeof SHAPE_CYLINDER | typeof SHAPE_PRISM;
|
|
160
|
+
hole: number;
|
|
161
|
+
cut: Vector;
|
|
162
|
+
hollow: number;
|
|
163
|
+
twist: Vector;
|
|
164
|
+
topSize: Vector;
|
|
165
|
+
topShear: Vector;
|
|
166
|
+
} | {
|
|
167
|
+
kind: typeof SHAPE_SPHERE;
|
|
168
|
+
hole: number;
|
|
169
|
+
cut: Vector;
|
|
170
|
+
hollow: number;
|
|
171
|
+
twist: Vector;
|
|
172
|
+
dimple: Vector;
|
|
173
|
+
} | {
|
|
174
|
+
kind: typeof SHAPE_TORUS | typeof SHAPE_TUBE | typeof SHAPE_RING;
|
|
175
|
+
hole: number;
|
|
176
|
+
cut: Vector;
|
|
177
|
+
hollow: number;
|
|
178
|
+
twist: Vector;
|
|
179
|
+
holeSize: Vector;
|
|
180
|
+
topShear: Vector;
|
|
181
|
+
advancedCut: Vector;
|
|
182
|
+
taper: Vector;
|
|
183
|
+
revolutions: number;
|
|
184
|
+
radiusOffset: number;
|
|
185
|
+
skew: number;
|
|
186
|
+
} | {
|
|
187
|
+
kind: typeof SHAPE_SCULPT;
|
|
188
|
+
map: string;
|
|
189
|
+
type: number;
|
|
190
|
+
};
|
|
191
|
+
export declare function defaultFace(): PrimFace;
|
|
192
|
+
export declare function defaultShape(): PrimShape;
|
|
193
|
+
export declare function defaultPrimParams(): PrimParams;
|
|
194
|
+
/**
|
|
195
|
+
* Slot count for a PRIM_* rule's *write* form, given the rule constant
|
|
196
|
+
* and (for variable-shape rules like PRIM_TYPE) the rules list + cursor
|
|
197
|
+
* to peek at the discriminator. Does NOT mutate the prim. Returns null
|
|
198
|
+
* for unsupported / unknown rule constants. Used by the walker to skip
|
|
199
|
+
* past rules that can't be applied (e.g. PRIM_LINK_TARGET resolved to
|
|
200
|
+
* an empty target set) without losing track of cursor position.
|
|
201
|
+
*/
|
|
202
|
+
export declare function writePrimParamSlots(param: number, rules: ReadonlyArray<LslValue>, cursor: number): number | null;
|
|
203
|
+
/**
|
|
204
|
+
* Apply one PRIM_* rule starting at `cursor` in `rules`. Returns the
|
|
205
|
+
* number of slots after `param` consumed by the rule (so the walker
|
|
206
|
+
* advances by `1 + consumed`). Returns `null` for unsupported / unknown
|
|
207
|
+
* rule constants — the walker stops parsing the list, matching LSL.
|
|
208
|
+
*/
|
|
209
|
+
export declare function writePrimParam(prim: Prim, param: number, rules: ReadonlyArray<LslValue>, cursor: number): number | null;
|
|
210
|
+
/**
|
|
211
|
+
* Read a single PRIM_* rule, returning the flat values it expands to and
|
|
212
|
+
* the number of slots after `param` consumed (face index, etc.). Returns
|
|
213
|
+
* `null` for unsupported constants — caller stops parsing and returns
|
|
214
|
+
* the prefix accumulated so far.
|
|
215
|
+
*/
|
|
216
|
+
export declare function readPrimParam(prim: Prim, param: number, rules: ReadonlyArray<LslValue>, cursor: number): {
|
|
217
|
+
values: LslValue[];
|
|
218
|
+
consumed: number;
|
|
219
|
+
} | null;
|
|
220
|
+
export {};
|
|
221
|
+
//# sourceMappingURL=prim-params.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prim-params.d.ts","sourceRoot":"","sources":["../src/prim-params.ts"],"names":[],"mappings":"AAmEA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAEnE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAErC;;;;;;;GAOG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,QAAQ,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,iFAAiF;IACjF,KAAK,EAAE,QAAQ,EAAE,CAAA;IACjB,UAAU,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;IACnG,sEAAsE;IACtE,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;IACvD,gBAAgB,EAAE,MAAM,CAAA;IACxB,QAAQ,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;IACjI,MAAM,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;IAC5C,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,SAAS,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,OAAO,CAAA;IAClB,WAAW,EAAE,OAAO,CAAA;IACpB,UAAU,EAAE,OAAO,CAAA;IACnB,eAAe,EAAE,OAAO,CAAA;IACxB,SAAS,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,QAAQ,CAAA;KAAE,CAAA;IACnE,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAA;IAC5E,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;IACxC,MAAM,EAAE,MAAM,CAAA;IACd,eAAe,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;IAC5F,eAAe,EAAE;QAAE,iBAAiB,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;IACtG,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;IACtH,cAAc,EAAE,MAAM,CAAA;IACtB,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAA;IACf,cAAc,EAAE,MAAM,CAAA;IACtB,cAAc,EAAE,MAAM,CAAA;IACtB,eAAe,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAA;IACf,cAAc,EAAE,MAAM,CAAA;IACtB,cAAc,EAAE,MAAM,CAAA;IACtB,eAAe,EAAE,MAAM,CAAA;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;IAC1C,UAAU,EAAE,OAAO,CAAA;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,cAAc,EAAE,MAAM,CAAA;IACtB,MAAM,EAAE,gBAAgB,CAAA;IACxB,QAAQ,EAAE,gBAAgB,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAA;IACvF,SAAS,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IAC3C,IAAI,EAAE;QACJ,SAAS,EAAE,gBAAgB,GAAG;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,CAAA;SAAE,CAAA;QAC3H,MAAM,EAAE,gBAAgB,CAAA;QACxB,iBAAiB,EAAE,gBAAgB,GAAG;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,CAAA;QAC7E,QAAQ,EAAE,gBAAgB,GAAG;YAAE,IAAI,EAAE,MAAM,CAAA;SAAE,CAAA;KAC9C,CAAA;CACF;AAED;;;;;;GAMG;AACH,QAAA,MAAM,SAAS,EAAoB,CAAC,CAAA;AACpC,QAAA,MAAM,cAAc,EAAyB,CAAC,CAAA;AAC9C,QAAA,MAAM,WAAW,EAAsB,CAAC,CAAA;AACxC,QAAA,MAAM,YAAY,EAAuB,CAAC,CAAA;AAC1C,QAAA,MAAM,WAAW,EAAsB,CAAC,CAAA;AACxC,QAAA,MAAM,UAAU,EAAqB,CAAC,CAAA;AACtC,QAAA,MAAM,UAAU,EAAqB,CAAC,CAAA;AACtC,QAAA,MAAM,YAAY,EAAuB,CAAC,CAAA;AAS1C,MAAM,MAAM,SAAS,GACjB;IAAE,IAAI,EAAE,OAAO,SAAS,GAAG,OAAO,cAAc,GAAG,OAAO,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACpK;IAAE,IAAI,EAAE,OAAO,YAAY,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACvG;IACE,IAAI,EAAE,OAAO,WAAW,GAAG,OAAO,UAAU,GAAG,OAAO,UAAU,CAAA;IAChE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;IACxD,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;IACtE,WAAW,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CACxD,GACD;IAAE,IAAI,EAAE,OAAO,YAAY,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AAU5D,wBAAgB,WAAW,IAAI,QAAQ,CAuBtC;AAED,wBAAgB,YAAY,IAAI,SAAS,CAUxC;AAED,wBAAgB,iBAAiB,IAAI,UAAU,CA+B9C;AAiCD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,EAC9B,MAAM,EAAE,MAAM,GACb,MAAM,GAAG,IAAI,CAyCf;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,EAC9B,MAAM,EAAE,MAAM,GACb,MAAM,GAAG,IAAI,CAwUf;AA8DD;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,EAC9B,MAAM,EAAE,MAAM,GACb;IAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAkNjD"}
|