@caspertech/node-metaverse 0.6.4 → 0.6.6

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 (69) hide show
  1. package/dist/lib/classes/LLGLTFMaterial.spec.js +47 -17
  2. package/dist/lib/classes/LLGLTFMaterial.spec.js.map +1 -1
  3. package/dist/lib/classes/LLGLTFMaterialData.d.ts +180 -21
  4. package/dist/lib/classes/LLGLTFMaterialOverride.d.ts +16 -0
  5. package/dist/lib/classes/LLGLTFMaterialOverride.js +7 -0
  6. package/dist/lib/classes/LLGLTFMaterialOverride.js.map +1 -0
  7. package/dist/lib/classes/ObjectStoreFull.js +86 -58
  8. package/dist/lib/classes/ObjectStoreFull.js.map +1 -1
  9. package/dist/lib/classes/ObjectStoreLite.d.ts +38 -15
  10. package/dist/lib/classes/ObjectStoreLite.js +229 -116
  11. package/dist/lib/classes/ObjectStoreLite.js.map +1 -1
  12. package/dist/lib/classes/TextureEntry.d.ts +2 -0
  13. package/dist/lib/classes/TextureEntry.js +1 -0
  14. package/dist/lib/classes/TextureEntry.js.map +1 -1
  15. package/dist/lib/classes/commands/CommunicationsCommands.js +21 -0
  16. package/dist/lib/classes/commands/CommunicationsCommands.js.map +1 -1
  17. package/dist/lib/classes/commands/FriendCommands.js +3 -0
  18. package/dist/lib/classes/commands/FriendCommands.js.map +1 -1
  19. package/dist/lib/classes/commands/GroupCommands.js +9 -0
  20. package/dist/lib/classes/commands/GroupCommands.js.map +1 -1
  21. package/dist/lib/classes/llsd/LLSDArray.d.ts +5 -0
  22. package/dist/lib/classes/llsd/LLSDArray.js +45 -0
  23. package/dist/lib/classes/llsd/LLSDArray.js.map +1 -0
  24. package/dist/lib/classes/llsd/LLSDMap.d.ts +10 -0
  25. package/dist/lib/classes/llsd/LLSDMap.js +94 -0
  26. package/dist/lib/classes/llsd/LLSDMap.js.map +1 -0
  27. package/dist/lib/classes/llsd/LLSDNotationParser.d.ts +9 -0
  28. package/dist/lib/classes/llsd/LLSDNotationParser.js +174 -0
  29. package/dist/lib/classes/llsd/LLSDNotationParser.js.map +1 -0
  30. package/dist/lib/classes/llsd/LLSDNotationParser.spec.d.ts +1 -0
  31. package/dist/lib/classes/llsd/LLSDNotationParser.spec.js +167 -0
  32. package/dist/lib/classes/llsd/LLSDNotationParser.spec.js.map +1 -0
  33. package/dist/lib/classes/llsd/LLSDObject.d.ts +4 -0
  34. package/dist/lib/classes/llsd/LLSDObject.js +10 -0
  35. package/dist/lib/classes/llsd/LLSDObject.js.map +1 -0
  36. package/dist/lib/classes/llsd/LLSDToken.d.ts +10 -0
  37. package/dist/lib/classes/llsd/LLSDToken.js +3 -0
  38. package/dist/lib/classes/llsd/LLSDToken.js.map +1 -0
  39. package/dist/lib/classes/llsd/LLSDTokenContainer.d.ts +7 -0
  40. package/dist/lib/classes/llsd/LLSDTokenContainer.js +3 -0
  41. package/dist/lib/classes/llsd/LLSDTokenContainer.js.map +1 -0
  42. package/dist/lib/classes/llsd/LLSDTokenGenerator.d.ts +2 -0
  43. package/dist/lib/classes/llsd/LLSDTokenGenerator.js +3 -0
  44. package/dist/lib/classes/llsd/LLSDTokenGenerator.js.map +1 -0
  45. package/dist/lib/classes/llsd/LLSDTokenSpec.d.ts +5 -0
  46. package/dist/lib/classes/llsd/LLSDTokenSpec.js +3 -0
  47. package/dist/lib/classes/llsd/LLSDTokenSpec.js.map +1 -0
  48. package/dist/lib/classes/llsd/LLSDTokenType.d.ts +22 -0
  49. package/dist/lib/classes/llsd/LLSDTokenType.js +27 -0
  50. package/dist/lib/classes/llsd/LLSDTokenType.js.map +1 -0
  51. package/dist/lib/classes/llsd/LLSDType.d.ts +4 -0
  52. package/dist/lib/classes/llsd/LLSDType.js +3 -0
  53. package/dist/lib/classes/llsd/LLSDType.js.map +1 -0
  54. package/dist/lib/classes/public/GameObject.js +161 -2
  55. package/dist/lib/classes/public/GameObject.js.map +1 -1
  56. package/dist/lib/classes/public/GameObject.spec.d.ts +1 -0
  57. package/dist/lib/classes/public/GameObject.spec.js +148 -0
  58. package/dist/lib/classes/public/GameObject.spec.js.map +1 -0
  59. package/dist/lib/classes/python/PythonDict.js +6 -2
  60. package/dist/lib/classes/python/PythonDict.js.map +1 -1
  61. package/dist/lib/classes/python/PythonParser.js +5 -4
  62. package/dist/lib/classes/python/PythonParser.js.map +1 -1
  63. package/dist/lib/classes/python/PythonParser.spec.js +8 -0
  64. package/dist/lib/classes/python/PythonParser.spec.js.map +1 -1
  65. package/dist/lib/classes/python/PythonSet.js +2 -0
  66. package/dist/lib/classes/python/PythonSet.js.map +1 -1
  67. package/dist/lib/classes/python/PythonTokenType.js +2 -2
  68. package/dist/lib/classes/python/PythonTokenType.js.map +1 -1
  69. package/package.json +1 -1
@@ -5,28 +5,58 @@ const assert = require("assert");
5
5
  describe('LLGLTFMaterial', () => {
6
6
  describe('parse', () => {
7
7
  it('should parse a valid GLTF material asset', () => {
8
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y;
8
9
  const buf = Buffer.from('PD8gTExTRC9CaW5hcnkgPz4KewAAAANrAAAABGRhdGFzAAABznsiYXNzZXQiOnsidmVyc2lvbiI6IjIuMCJ9LCJpbWFnZXMiOlt7InVyaSI6IjJjN2U3MzMyLTM3MTctNWY0ZS04ZjIyLTZlZTlkYTUyNzVmYiJ9LHsidXJpIjoiMTA3OGY1ZWMtMWM1Ni1lNzNmLThmOGYtYmUzNmM0MGU1MTIxIn0seyJ1cmkiOiIyMzBkMmQyZC1iMDkyLTliZjUtYmE3ZS1iMzE5NTY2MzIyYTYifSx7InVyaSI6IjIzMGQyZDJkLWIwOTItOWJmNS1iYTdlLWIzMTk1NjYzMjJhNiJ9XSwibWF0ZXJpYWxzIjpbeyJub3JtYWxUZXh0dXJlIjp7ImluZGV4IjoxfSwib2NjbHVzaW9uVGV4dHVyZSI6eyJpbmRleCI6M30sInBick1ldGFsbGljUm91Z2huZXNzIjp7ImJhc2VDb2xvclRleHR1cmUiOnsiaW5kZXgiOjB9LCJtZXRhbGxpY1JvdWdobmVzc1RleHR1cmUiOnsiaW5kZXgiOjJ9fX1dLCJ0ZXh0dXJlcyI6W3sic291cmNlIjowfSx7InNvdXJjZSI6MX0seyJzb3VyY2UiOjJ9LHsic291cmNlIjozfV19CmsAAAAEdHlwZXMAAAAIR0xURiAyLjBrAAAAB3ZlcnNpb25zAAAAAzEuMX0A', 'base64');
9
10
  const mat = new LLGLTFMaterial_1.LLGLTFMaterial(buf);
10
11
  assert.equal(mat.version, '1.1');
11
12
  assert.equal(mat.type, 'GLTF 2.0');
12
13
  assert.ok(mat.data);
13
- assert.equal(mat.data.asset.version, '2.0');
14
- assert.equal(mat.data.images.length, 4);
15
- assert.equal(mat.data.images[0].uri, '2c7e7332-3717-5f4e-8f22-6ee9da5275fb');
16
- assert.equal(mat.data.images[1].uri, '1078f5ec-1c56-e73f-8f8f-be36c40e5121');
17
- assert.equal(mat.data.images[2].uri, '230d2d2d-b092-9bf5-ba7e-b319566322a6');
18
- assert.equal(mat.data.images[3].uri, '230d2d2d-b092-9bf5-ba7e-b319566322a6');
19
- assert.equal(mat.data.materials.length, 1);
20
- const mat0 = mat.data.materials[0];
21
- assert.equal(mat0.normalTexture.index, 1);
22
- assert.equal(mat0.occlusionTexture.index, 3);
23
- assert.equal(mat0.pbrMetallicRoughness.baseColorTexture.index, 0);
24
- assert.equal(mat0.pbrMetallicRoughness.metallicRoughnessTexture.index, 2);
25
- assert.equal(mat.data.textures.length, 4);
26
- assert.equal(mat.data.textures[0].source, 0);
27
- assert.equal(mat.data.textures[1].source, 1);
28
- assert.equal(mat.data.textures[2].source, 2);
29
- assert.equal(mat.data.textures[3].source, 3);
14
+ assert.equal((_a = mat.data.asset) === null || _a === void 0 ? void 0 : _a.version, '2.0');
15
+ assert.equal((_b = mat.data.images) === null || _b === void 0 ? void 0 : _b.length, 4);
16
+ let image = (_d = (_c = mat.data) === null || _c === void 0 ? void 0 : _c.images) === null || _d === void 0 ? void 0 : _d[0];
17
+ if (image && 'uri' in image) {
18
+ assert.equal(image.uri, '2c7e7332-3717-5f4e-8f22-6ee9da5275fb');
19
+ }
20
+ else {
21
+ assert(false, 'Image missing');
22
+ }
23
+ image = (_f = (_e = mat.data) === null || _e === void 0 ? void 0 : _e.images) === null || _f === void 0 ? void 0 : _f[1];
24
+ if (image && 'uri' in image) {
25
+ assert.equal(image.uri, '1078f5ec-1c56-e73f-8f8f-be36c40e5121');
26
+ }
27
+ else {
28
+ assert(false, 'Image missing');
29
+ }
30
+ image = (_h = (_g = mat.data) === null || _g === void 0 ? void 0 : _g.images) === null || _h === void 0 ? void 0 : _h[2];
31
+ if (image && 'uri' in image) {
32
+ assert.equal(image.uri, '230d2d2d-b092-9bf5-ba7e-b319566322a6');
33
+ }
34
+ else {
35
+ assert(false, 'Image missing');
36
+ }
37
+ image = (_k = (_j = mat.data) === null || _j === void 0 ? void 0 : _j.images) === null || _k === void 0 ? void 0 : _k[3];
38
+ if (image && 'uri' in image) {
39
+ assert.equal(image.uri, '230d2d2d-b092-9bf5-ba7e-b319566322a6');
40
+ }
41
+ else {
42
+ assert(false, 'Image missing');
43
+ }
44
+ assert.equal((_l = mat.data.materials) === null || _l === void 0 ? void 0 : _l.length, 1);
45
+ const mat0 = (_m = mat.data.materials) === null || _m === void 0 ? void 0 : _m[0];
46
+ if (mat0) {
47
+ assert.equal((_o = mat0.normalTexture) === null || _o === void 0 ? void 0 : _o.index, 1);
48
+ assert.equal((_p = mat0.occlusionTexture) === null || _p === void 0 ? void 0 : _p.index, 3);
49
+ assert.equal((_r = (_q = mat0.pbrMetallicRoughness) === null || _q === void 0 ? void 0 : _q.baseColorTexture) === null || _r === void 0 ? void 0 : _r.index, 0);
50
+ assert.equal((_t = (_s = mat0.pbrMetallicRoughness) === null || _s === void 0 ? void 0 : _s.metallicRoughnessTexture) === null || _t === void 0 ? void 0 : _t.index, 2);
51
+ }
52
+ else {
53
+ assert(false, 'Material missing');
54
+ }
55
+ assert.equal((_u = mat.data.textures) === null || _u === void 0 ? void 0 : _u.length, 4);
56
+ assert.equal((_v = mat.data.textures) === null || _v === void 0 ? void 0 : _v[0].source, 0);
57
+ assert.equal((_w = mat.data.textures) === null || _w === void 0 ? void 0 : _w[1].source, 1);
58
+ assert.equal((_x = mat.data.textures) === null || _x === void 0 ? void 0 : _x[2].source, 2);
59
+ assert.equal((_y = mat.data.textures) === null || _y === void 0 ? void 0 : _y[3].source, 3);
30
60
  });
31
61
  });
32
62
  });
@@ -1 +1 @@
1
- {"version":3,"file":"LLGLTFMaterial.spec.js","sourceRoot":"","sources":["../../../lib/classes/LLGLTFMaterial.spec.ts"],"names":[],"mappings":";;AAAA,qDAAkD;AAClD,iCAAiC;AAEjC,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAE5B,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;QAEnB,EAAE,CAAE,0CAA0C,EAAE,GAAG,EAAE;YAEjD,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,stBAAstB,EAAE,QAAQ,CAAC,CAAC;YAC1vB,MAAM,GAAG,GAAG,IAAI,+BAAc,CAAC,GAAG,CAAC,CAAC;YAEpC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACjC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YACnC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACpB,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC5C,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACxC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,sCAAsC,CAAC,CAAC;YAC7E,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,sCAAsC,CAAC,CAAC;YAC7E,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,sCAAsC,CAAC,CAAC;YAC7E,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,sCAAsC,CAAC,CAAC;YAC7E,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAE3C,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YACnC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAC1C,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAC7C,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAClE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,wBAAwB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAE1E,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAC1C,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAC7C,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAC7C,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAC7C,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"LLGLTFMaterial.spec.js","sourceRoot":"","sources":["../../../lib/classes/LLGLTFMaterial.spec.ts"],"names":[],"mappings":"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"}
@@ -1,27 +1,186 @@
1
- export interface LLGLTFMaterialData {
2
- asset: {
1
+ export interface LLGLTFExtensionsAndExtras {
2
+ extensions?: Record<string, unknown>;
3
+ extras?: Record<string, unknown>;
4
+ }
5
+ export interface LLGLTFTexture {
6
+ index: number;
7
+ extensions?: Record<string, unknown>;
8
+ extras?: Record<string, unknown>;
9
+ texCoord?: number;
10
+ }
11
+ export type LLGLTFTextureInfo = LLGLTFTexture & LLGLTFExtensionsAndExtras;
12
+ export interface LLGLTFMaterialDataPart {
13
+ asset?: {
3
14
  version: string;
4
- };
5
- images: {
6
- uri: string;
7
- }[];
8
- materials: {
9
- normalTexture: {
15
+ generator?: string;
16
+ minVersion?: string;
17
+ copyright?: string;
18
+ } & LLGLTFExtensionsAndExtras;
19
+ extensionsUsed?: string[];
20
+ extensionsRequired?: string[];
21
+ buffers?: ({
22
+ byteLength: number;
23
+ uri?: string;
24
+ type?: string;
25
+ name?: string;
26
+ } & LLGLTFExtensionsAndExtras)[];
27
+ bufferViews?: ({
28
+ buffer: number;
29
+ byteOffset?: number;
30
+ byteLength: number;
31
+ byteStride?: number;
32
+ target: number;
33
+ name?: string;
34
+ } & LLGLTFExtensionsAndExtras)[];
35
+ accessors?: ({
36
+ bufferView?: number;
37
+ byteOffset?: number;
38
+ normalized?: number;
39
+ componentType: number;
40
+ count: number;
41
+ type: string;
42
+ name?: string;
43
+ minValues?: number[];
44
+ maxValues?: number[];
45
+ sparse?: {
46
+ count: number;
47
+ bufferView: number;
48
+ indices: {
49
+ bufferView: number;
50
+ byteOffset?: number;
51
+ componentType?: number;
52
+ } & LLGLTFExtensionsAndExtras;
53
+ values: {
54
+ bufferView: number;
55
+ byteOffset?: number;
56
+ } & LLGLTFExtensionsAndExtras;
57
+ } & LLGLTFExtensionsAndExtras;
58
+ } & LLGLTFExtensionsAndExtras)[];
59
+ meshes?: ({
60
+ name?: string;
61
+ primitives?: ({
62
+ material?: number;
63
+ mode?: number;
64
+ indices?: number;
65
+ targets?: Record<string, number>[];
66
+ } & LLGLTFExtensionsAndExtras)[];
67
+ weights?: number[];
68
+ } & LLGLTFExtensionsAndExtras)[];
69
+ nodes?: ({
70
+ name?: string;
71
+ skin?: number;
72
+ camera?: number;
73
+ mesh?: number;
74
+ children?: number[];
75
+ weights?: number[];
76
+ emitter?: number;
77
+ light?: number;
78
+ } & ({
79
+ rotation?: number[];
80
+ scale?: number[];
81
+ translaction?: number[];
82
+ } | {
83
+ matrix?: number[];
84
+ })) & LLGLTFExtensionsAndExtras[];
85
+ scenes?: ({
86
+ name?: string;
87
+ nodes?: number[];
88
+ } & LLGLTFExtensionsAndExtras)[];
89
+ scene?: number;
90
+ materials?: ({
91
+ name?: string;
92
+ emissiveFactor?: number[];
93
+ alphaMode?: string;
94
+ alphaCutoff?: number;
95
+ doubleSided?: boolean;
96
+ pbrMetallicRoughness?: {
97
+ baseColorFactor: number[];
98
+ baseColorTexture?: LLGLTFTextureInfo;
99
+ metallicRoughnessTexture?: LLGLTFTextureInfo;
100
+ metallicFactor: number;
101
+ roughnessFactor: number;
102
+ } & LLGLTFExtensionsAndExtras;
103
+ normalTexture?: {
10
104
  index: number;
11
- };
12
- occlusionTexture: {
105
+ texCoord?: number;
106
+ scale?: number;
107
+ } & LLGLTFExtensionsAndExtras;
108
+ occlusionTexture?: {
13
109
  index: number;
14
- };
15
- pbrMetallicRoughness: {
16
- baseColorTexture: {
17
- index: number;
18
- };
19
- metallicRoughnessTexture: {
20
- index: number;
110
+ texCoord?: number;
111
+ strength?: number;
112
+ } & LLGLTFExtensionsAndExtras;
113
+ emissiveTexture?: {
114
+ extensions?: {
115
+ KHR_texture_transform?: {
116
+ offset: number[];
117
+ rotation: number;
118
+ scale: number[];
119
+ };
21
120
  };
121
+ index: number;
122
+ texCoord?: number;
22
123
  };
23
- }[];
24
- textures: {
25
- source: number;
26
- }[];
124
+ } & LLGLTFExtensionsAndExtras)[];
125
+ images?: (({
126
+ bufferView: number;
127
+ mimeType: string;
128
+ width: number;
129
+ height: number;
130
+ } | {
131
+ uri: string;
132
+ }) & LLGLTFExtensionsAndExtras)[];
133
+ textures?: ({
134
+ sampler?: number;
135
+ source?: number;
136
+ name?: string;
137
+ } & LLGLTFExtensionsAndExtras)[];
138
+ animations?: ({
139
+ name?: string;
140
+ channels?: ({
141
+ sampler: number;
142
+ target?: {
143
+ node?: number;
144
+ path: string;
145
+ } & LLGLTFExtensionsAndExtras;
146
+ } & LLGLTFExtensionsAndExtras)[];
147
+ samplers?: ({
148
+ input: number;
149
+ output: number;
150
+ interpolation?: string;
151
+ } & LLGLTFExtensionsAndExtras)[];
152
+ } & LLGLTFExtensionsAndExtras)[];
153
+ skins?: ({
154
+ name?: string;
155
+ joints?: number[];
156
+ skeleton?: number;
157
+ inverseBindMatrices: number;
158
+ } & LLGLTFExtensionsAndExtras)[];
159
+ samplers?: ({
160
+ name?: string;
161
+ minFilter?: number;
162
+ magFilter: number;
163
+ wrapS?: number;
164
+ wrapT?: number;
165
+ } & LLGLTFExtensionsAndExtras)[];
166
+ cameras?: (({
167
+ name?: string;
168
+ type: 'orthographic';
169
+ orthographic: {
170
+ xmag: number;
171
+ ymag: number;
172
+ zfar: number;
173
+ znear: number;
174
+ } & LLGLTFExtensionsAndExtras;
175
+ } | {
176
+ name?: string;
177
+ type: 'perspective';
178
+ perspective: {
179
+ yfov: number;
180
+ znear: number;
181
+ aspectRatio?: number;
182
+ zfar?: number;
183
+ } & LLGLTFExtensionsAndExtras;
184
+ }) & LLGLTFExtensionsAndExtras)[];
27
185
  }
186
+ export type LLGLTFMaterialData = LLGLTFMaterialDataPart & LLGLTFExtensionsAndExtras;
@@ -0,0 +1,16 @@
1
+ export interface LLGLTFTextureTransformOverride {
2
+ offset: number[];
3
+ scale: number[];
4
+ rotation: number;
5
+ }
6
+ export declare class LLGLTFMaterialOverride {
7
+ textures?: string[];
8
+ baseColor?: number[];
9
+ emissiveColor?: number[];
10
+ metallicFactor?: number;
11
+ roughnessFactor?: number;
12
+ alphaMode?: number;
13
+ alphaCutoff?: number;
14
+ doubleSided?: boolean;
15
+ textureTransforms?: LLGLTFTextureTransformOverride[];
16
+ }
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LLGLTFMaterialOverride = void 0;
4
+ class LLGLTFMaterialOverride {
5
+ }
6
+ exports.LLGLTFMaterialOverride = LLGLTFMaterialOverride;
7
+ //# sourceMappingURL=LLGLTFMaterialOverride.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LLGLTFMaterialOverride.js","sourceRoot":"","sources":["../../../lib/classes/LLGLTFMaterialOverride.ts"],"names":[],"mappings":";;;AAOA,MAAa,sBAAsB;CAWlC;AAXD,wDAWC"}
@@ -31,31 +31,35 @@ class ObjectStoreFull extends ObjectStoreLite_1.ObjectStoreLite {
31
31
  constructor(circuit, agent, clientEvents, options) {
32
32
  super(circuit, agent, clientEvents, options);
33
33
  this.rtree = new dist_1.RBush3D();
34
+ this.fullStore = true;
34
35
  }
35
36
  objectUpdate(objectUpdate) {
37
+ var _a;
36
38
  for (const objData of objectUpdate.ObjectData) {
37
39
  const localID = objData.ID;
38
40
  const parentID = objData.ParentID;
39
41
  let addToParentList = true;
40
42
  let newObject = false;
41
- if (this.objects[localID]) {
42
- if (this.objects[localID].ParentID !== parentID && this.objectsByParent[parentID]) {
43
- const ind = this.objectsByParent[parentID].indexOf(localID);
43
+ let obj = this.objects.get(localID);
44
+ if (obj) {
45
+ const objsByParent = this.objectsByParent.get(parentID !== null && parentID !== void 0 ? parentID : 0);
46
+ if (obj.ParentID !== parentID && objsByParent) {
47
+ const ind = objsByParent.indexOf(localID);
44
48
  if (ind !== -1) {
45
- this.objectsByParent[parentID].splice(ind, 1);
49
+ objsByParent.splice(ind, 1);
46
50
  }
47
51
  }
48
- else if (this.objectsByParent[parentID]) {
52
+ else if (objsByParent) {
49
53
  addToParentList = false;
50
54
  }
51
55
  }
52
56
  else {
53
57
  newObject = true;
54
- this.objects[localID] = new GameObject_1.GameObject();
55
- this.objects[localID].region = this.agent.currentRegion;
58
+ obj = new GameObject_1.GameObject();
59
+ obj.region = this.agent.currentRegion;
60
+ this.objects.set(localID, obj);
56
61
  }
57
- this.objects[localID].deleted = false;
58
- const obj = this.objects[localID];
62
+ obj.deleted = false;
59
63
  obj.ID = objData.ID;
60
64
  obj.State = objData.State;
61
65
  obj.FullID = objData.FullID;
@@ -86,6 +90,11 @@ class ObjectStoreFull extends ObjectStoreLite_1.ObjectStoreLite {
86
90
  obj.ProfileEnd = Utils_1.Utils.unpackEndCut(objData.ProfileEnd);
87
91
  obj.ProfileHollow = Utils_1.Utils.unpackProfileHollow(objData.ProfileHollow);
88
92
  obj.TextureEntry = TextureEntry_1.TextureEntry.from(objData.TextureEntry);
93
+ const override = this.cachedMaterialOverrides.get(obj.ID);
94
+ if (override) {
95
+ obj.TextureEntry.gltfMaterialOverrides = override;
96
+ this.cachedMaterialOverrides.delete(obj.ID);
97
+ }
89
98
  obj.textureAnim = TextureAnim_1.TextureAnim.from(objData.TextureAnim);
90
99
  const pcodeData = objData.Data;
91
100
  obj.Text = Utils_1.Utils.BufferToStringSimple(objData.Text);
@@ -111,53 +120,55 @@ class ObjectStoreFull extends ObjectStoreLite_1.ObjectStoreLite {
111
120
  case PCode_1.PCode.Prim:
112
121
  break;
113
122
  }
114
- if (this.objects[localID].PCode === PCode_1.PCode.Avatar && this.objects[localID].FullID.toString() === this.agent.agentID.toString()) {
123
+ if (obj.PCode === PCode_1.PCode.Avatar && obj.FullID.toString() === this.agent.agentID.toString()) {
115
124
  this.agent.localID = localID;
116
125
  if (this.options & BotOptionFlags_1.BotOptionFlags.StoreMyAttachmentsOnly) {
117
126
  for (const objParentID of Object.keys(this.objectsByParent)) {
118
127
  const parent = parseInt(objParentID, 10);
119
128
  if (parent !== this.agent.localID) {
120
129
  let foundAvatars = false;
121
- for (const objID of this.objectsByParent[parent]) {
122
- if (this.objects[objID]) {
123
- const o = this.objects[objID];
124
- if (o.PCode === PCode_1.PCode.Avatar) {
130
+ const objsByParent = this.objectsByParent.get(parent);
131
+ if (objsByParent) {
132
+ for (const objID of objsByParent) {
133
+ const ob = this.objects.get(objID);
134
+ if (ob && ob.PCode === PCode_1.PCode.Avatar) {
125
135
  foundAvatars = true;
126
136
  }
127
137
  }
128
- }
129
- if (this.objects[parent]) {
130
- const o = this.objects[parent];
131
- if (o.PCode === PCode_1.PCode.Avatar) {
138
+ const o = this.objects.get(parent);
139
+ if (o && o.PCode === PCode_1.PCode.Avatar) {
132
140
  foundAvatars = true;
133
141
  }
134
- }
135
- if (!foundAvatars) {
136
- this.deleteObject(parent);
142
+ if (!foundAvatars) {
143
+ this.deleteObject(parent);
144
+ }
137
145
  }
138
146
  }
139
147
  }
140
148
  }
141
149
  }
142
- this.objects[localID].extraParams = ExtraParams_1.ExtraParams.from(objData.ExtraParams);
143
- this.objects[localID].NameValue = this.parseNameValues(Utils_1.Utils.BufferToStringSimple(objData.NameValue));
144
- this.objects[localID].IsAttachment = this.objects[localID].NameValue['AttachItemID'] !== undefined;
150
+ obj.extraParams = ExtraParams_1.ExtraParams.from(objData.ExtraParams);
151
+ obj.NameValue = this.parseNameValues(Utils_1.Utils.BufferToStringSimple(objData.NameValue));
152
+ obj.IsAttachment = obj.NameValue['AttachItemID'] !== undefined;
145
153
  if (obj.IsAttachment && obj.State !== undefined) {
146
- this.objects[localID].attachmentPoint = this.decodeAttachPoint(obj.State);
154
+ obj.attachmentPoint = this.decodeAttachPoint(obj.State);
147
155
  }
148
- this.objectsByUUID[objData.FullID.toString()] = localID;
149
- if (!this.objectsByParent[parentID]) {
150
- this.objectsByParent[parentID] = [];
156
+ this.objectsByUUID.set(objData.FullID.toString(), localID);
157
+ let objByParent = this.objectsByParent.get(parentID);
158
+ if (!objByParent) {
159
+ objByParent = [];
160
+ this.objectsByParent.set(parentID, objByParent);
151
161
  }
152
162
  if (addToParentList) {
153
- this.objectsByParent[parentID].push(localID);
163
+ objByParent.push(localID);
154
164
  }
155
165
  if (objData.PCode !== PCode_1.PCode.Avatar && this.options & BotOptionFlags_1.BotOptionFlags.StoreMyAttachmentsOnly && (this.agent.localID !== 0 && obj.ParentID !== this.agent.localID)) {
156
166
  this.deleteObject(localID);
157
167
  }
158
168
  else {
159
169
  this.insertIntoRtree(obj);
160
- if (objData.ParentID !== undefined && objData.ParentID !== 0 && !this.objects[objData.ParentID]) {
170
+ const parentObj = this.objects.get((_a = objData.ParentID) !== null && _a !== void 0 ? _a : 0);
171
+ if (objData.ParentID !== undefined && objData.ParentID !== 0 && !parentObj) {
161
172
  this.requestMissingObject(objData.ParentID).then(() => {
162
173
  }).catch(() => {
163
174
  });
@@ -178,7 +189,7 @@ class ObjectStoreFull extends ObjectStoreLite_1.ObjectStoreLite {
178
189
  };
179
190
  rmo.ObjectData = [];
180
191
  for (const obj of objectUpdateCached.ObjectData) {
181
- if (!this.objects[obj.ID]) {
192
+ if (!this.objects.has(obj.ID)) {
182
193
  rmo.ObjectData.push({
183
194
  CacheMissType: 0,
184
195
  ID: obj.ID
@@ -204,14 +215,15 @@ class ObjectStoreFull extends ObjectStoreLite_1.ObjectStoreLite {
204
215
  pos += 4;
205
216
  const pcode = buf.readUInt8(pos++);
206
217
  let newObj = false;
207
- if (!this.objects[localID]) {
218
+ let o = this.objects.get(localID);
219
+ if (!o) {
208
220
  newObj = true;
209
- this.objects[localID] = new GameObject_1.GameObject();
210
- this.objects[localID].region = this.agent.currentRegion;
221
+ o = new GameObject_1.GameObject();
222
+ o.region = this.agent.currentRegion;
223
+ this.objects.set(localID, o);
211
224
  }
212
- const o = this.objects[localID];
213
225
  o.ID = localID;
214
- this.objectsByUUID[fullID.toString()] = localID;
226
+ this.objectsByUUID.set(fullID.toString(), localID);
215
227
  o.FullID = fullID;
216
228
  o.Flags = flags;
217
229
  o.PCode = pcode;
@@ -243,29 +255,34 @@ class ObjectStoreFull extends ObjectStoreLite_1.ObjectStoreLite {
243
255
  o.ParentID = newParentID;
244
256
  let add = true;
245
257
  if (!newObj && o.ParentID !== undefined) {
246
- if (newParentID !== o.ParentID) {
247
- const index = this.objectsByParent[o.ParentID].indexOf(localID);
258
+ const obsByParent = this.objectsByParent.get(o.ParentID);
259
+ if (newParentID !== o.ParentID && obsByParent) {
260
+ const index = obsByParent.indexOf(localID);
248
261
  if (index !== -1) {
249
- this.objectsByParent[o.ParentID].splice(index, 1);
262
+ obsByParent.splice(index, 1);
250
263
  }
251
264
  }
252
- else if (this.objectsByParent[o.ParentID]) {
265
+ else if (obsByParent) {
253
266
  add = false;
254
267
  }
255
268
  }
256
269
  if (add) {
257
- if (!this.objectsByParent[newParentID]) {
258
- this.objectsByParent[newParentID] = [];
270
+ let objsByNewParent = this.objectsByParent.get(newParentID);
271
+ if (!objsByNewParent) {
272
+ objsByNewParent = [];
273
+ this.objectsByParent.set(newParentID, objsByNewParent);
259
274
  }
260
- this.objectsByParent[newParentID].push(localID);
275
+ objsByNewParent.push(localID);
261
276
  }
262
277
  if (pcode !== PCode_1.PCode.Avatar && newObj && this.options & BotOptionFlags_1.BotOptionFlags.StoreMyAttachmentsOnly && (this.agent.localID !== 0 && o.ParentID !== this.agent.localID)) {
263
278
  this.deleteObject(localID);
264
279
  return;
265
280
  }
266
281
  else {
267
- if (o.ParentID !== undefined && o.ParentID !== 0 && !this.objects[o.ParentID]) {
268
- this.requestMissingObject(o.ParentID);
282
+ if (o.ParentID !== undefined && o.ParentID !== 0 && !this.objects.has(o.ParentID)) {
283
+ this.requestMissingObject(o.ParentID).catch((e) => {
284
+ console.error(e);
285
+ });
269
286
  }
270
287
  if (compressedflags & CompressedFlags_1.CompressedFlags.Tree) {
271
288
  o.TreeSpecies = buf.readUInt8(pos++);
@@ -337,6 +354,11 @@ class ObjectStoreFull extends ObjectStoreLite_1.ObjectStoreLite {
337
354
  const textureEntryLength = buf.readUInt32LE(pos);
338
355
  pos = pos + 4;
339
356
  o.TextureEntry = TextureEntry_1.TextureEntry.from(buf.slice(pos, pos + textureEntryLength));
357
+ const override = this.cachedMaterialOverrides.get(o.ID);
358
+ if (override) {
359
+ o.TextureEntry.gltfMaterialOverrides = override;
360
+ this.cachedMaterialOverrides.delete(o.ID);
361
+ }
340
362
  pos = pos + textureEntryLength;
341
363
  if (compressedflags & CompressedFlags_1.CompressedFlags.TextureAnimation) {
342
364
  const textureAnimLength = buf.readUInt32LE(pos);
@@ -345,7 +367,7 @@ class ObjectStoreFull extends ObjectStoreLite_1.ObjectStoreLite {
345
367
  }
346
368
  o.IsAttachment = (compressedflags & CompressedFlags_1.CompressedFlags.HasNameValues) !== 0 && o.ParentID !== 0;
347
369
  if (o.IsAttachment && o.State !== undefined) {
348
- this.objects[localID].attachmentPoint = this.decodeAttachPoint(o.State);
370
+ o.attachmentPoint = this.decodeAttachPoint(o.State);
349
371
  }
350
372
  this.insertIntoRtree(o);
351
373
  this.notifyObjectUpdate(newObj, o);
@@ -363,46 +385,52 @@ class ObjectStoreFull extends ObjectStoreLite_1.ObjectStoreLite {
363
385
  let pos = 0;
364
386
  const localID = objectData.Data.readUInt32LE(pos);
365
387
  pos = pos + 4;
366
- if (this.objects[localID]) {
367
- this.objects[localID].State = objectData.Data.readUInt8(pos++);
388
+ const o = this.objects.get(localID);
389
+ if (o) {
390
+ o.State = objectData.Data.readUInt8(pos++);
368
391
  const avatar = (objectData.Data.readUInt8(pos++) !== 0);
369
392
  if (avatar) {
370
- this.objects[localID].CollisionPlane = new Vector4_1.Vector4(objectData.Data, pos);
393
+ o.CollisionPlane = new Vector4_1.Vector4(objectData.Data, pos);
371
394
  pos += 16;
372
395
  }
373
- this.objects[localID].Position = new Vector3_1.Vector3(objectData.Data, pos);
396
+ o.Position = new Vector3_1.Vector3(objectData.Data, pos);
374
397
  pos += 12;
375
- this.objects[localID].Velocity = new Vector3_1.Vector3([
398
+ o.Velocity = new Vector3_1.Vector3([
376
399
  Utils_1.Utils.UInt16ToFloat(objectData.Data.readUInt16LE(pos), -128.0, 128.0),
377
400
  Utils_1.Utils.UInt16ToFloat(objectData.Data.readUInt16LE(pos + 2), -128.0, 128.0),
378
401
  Utils_1.Utils.UInt16ToFloat(objectData.Data.readUInt16LE(pos + 4), -128.0, 128.0)
379
402
  ]);
380
403
  pos += 6;
381
- this.objects[localID].Acceleration = new Vector3_1.Vector3([
404
+ o.Acceleration = new Vector3_1.Vector3([
382
405
  Utils_1.Utils.UInt16ToFloat(objectData.Data.readUInt16LE(pos), -64.0, 64.0),
383
406
  Utils_1.Utils.UInt16ToFloat(objectData.Data.readUInt16LE(pos + 2), -64.0, 64.0),
384
407
  Utils_1.Utils.UInt16ToFloat(objectData.Data.readUInt16LE(pos + 4), -64.0, 64.0)
385
408
  ]);
386
409
  pos += 6;
387
- this.objects[localID].Rotation = new Quaternion_1.Quaternion([
410
+ o.Rotation = new Quaternion_1.Quaternion([
388
411
  Utils_1.Utils.UInt16ToFloat(objectData.Data.readUInt16LE(pos), -1.0, 1.0),
389
412
  Utils_1.Utils.UInt16ToFloat(objectData.Data.readUInt16LE(pos + 2), -1.0, 1.0),
390
413
  Utils_1.Utils.UInt16ToFloat(objectData.Data.readUInt16LE(pos + 4), -1.0, 1.0),
391
414
  Utils_1.Utils.UInt16ToFloat(objectData.Data.readUInt16LE(pos + 6), -1.0, 1.0)
392
415
  ]);
393
416
  pos += 8;
394
- this.objects[localID].AngularVelocity = new Vector3_1.Vector3([
417
+ o.AngularVelocity = new Vector3_1.Vector3([
395
418
  Utils_1.Utils.UInt16ToFloat(objectData.Data.readUInt16LE(pos), -64.0, 64.0),
396
419
  Utils_1.Utils.UInt16ToFloat(objectData.Data.readUInt16LE(pos + 2), -64.0, 64.0),
397
420
  Utils_1.Utils.UInt16ToFloat(objectData.Data.readUInt16LE(pos + 4), -64.0, 64.0)
398
421
  ]);
399
422
  pos += 6;
400
423
  if (objectData.TextureEntry.length > 0) {
401
- this.objects[localID].TextureEntry = TextureEntry_1.TextureEntry.from(objectData.TextureEntry.slice(4));
402
- this.objects[localID].onTextureUpdate.next();
424
+ o.TextureEntry = TextureEntry_1.TextureEntry.from(objectData.TextureEntry.slice(4));
425
+ const override = this.cachedMaterialOverrides.get(o.ID);
426
+ if (override) {
427
+ o.TextureEntry.gltfMaterialOverrides = override;
428
+ this.cachedMaterialOverrides.delete(o.ID);
429
+ }
430
+ o.onTextureUpdate.next();
403
431
  }
404
- this.insertIntoRtree(this.objects[localID]);
405
- this.notifyTerseUpdate(this.objects[localID]);
432
+ this.insertIntoRtree(o);
433
+ this.notifyTerseUpdate(o);
406
434
  }
407
435
  else {
408
436
  this.requestMissingObject(localID).catch(() => {