x_ite 16.5.0 → 16.6.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 (57) hide show
  1. package/README.md +6 -6
  2. package/dist/assets/components/AnnotationComponent.js +1 -1
  3. package/dist/assets/components/AnnotationComponent.min.js +1 -1
  4. package/dist/assets/components/CADGeometryComponent.js +1 -1
  5. package/dist/assets/components/CADGeometryComponent.min.js +1 -1
  6. package/dist/assets/components/CubeMapTexturingComponent.js +1 -1
  7. package/dist/assets/components/CubeMapTexturingComponent.min.js +1 -1
  8. package/dist/assets/components/DISComponent.js +1 -1
  9. package/dist/assets/components/DISComponent.min.js +1 -1
  10. package/dist/assets/components/EventUtilitiesComponent.js +1 -1
  11. package/dist/assets/components/EventUtilitiesComponent.min.js +1 -1
  12. package/dist/assets/components/GaussianSplatsComponent.js +1 -1
  13. package/dist/assets/components/GaussianSplatsComponent.min.js +1 -1
  14. package/dist/assets/components/Geometry2DComponent.js +1 -1
  15. package/dist/assets/components/Geometry2DComponent.min.js +1 -1
  16. package/dist/assets/components/Geometry3DComponent.js +1 -1
  17. package/dist/assets/components/Geometry3DComponent.min.js +1 -1
  18. package/dist/assets/components/GeospatialComponent.js +18 -18
  19. package/dist/assets/components/GeospatialComponent.min.js +2 -2
  20. package/dist/assets/components/HAnimComponent.js +677 -396
  21. package/dist/assets/components/HAnimComponent.min.js +2 -2
  22. package/dist/assets/components/KeyDeviceSensorComponent.js +1 -1
  23. package/dist/assets/components/KeyDeviceSensorComponent.min.js +1 -1
  24. package/dist/assets/components/LayoutComponent.js +1 -1
  25. package/dist/assets/components/LayoutComponent.min.js +1 -1
  26. package/dist/assets/components/NURBSComponent.js +1 -1
  27. package/dist/assets/components/NURBSComponent.min.js +1 -1
  28. package/dist/assets/components/ParticleSystemsComponent.js +1 -1
  29. package/dist/assets/components/ParticleSystemsComponent.min.js +1 -1
  30. package/dist/assets/components/PickingComponent.js +1 -1
  31. package/dist/assets/components/PickingComponent.min.js +1 -1
  32. package/dist/assets/components/RigidBodyPhysicsComponent.js +1 -1
  33. package/dist/assets/components/RigidBodyPhysicsComponent.min.js +1 -1
  34. package/dist/assets/components/ScriptingComponent.js +1 -1
  35. package/dist/assets/components/ScriptingComponent.min.js +1 -1
  36. package/dist/assets/components/TextComponent.js +1 -1
  37. package/dist/assets/components/TextComponent.min.js +1 -1
  38. package/dist/assets/components/TextureProjectionComponent.js +1 -1
  39. package/dist/assets/components/TextureProjectionComponent.min.js +1 -1
  40. package/dist/assets/components/Texturing3DComponent.js +9 -9
  41. package/dist/assets/components/Texturing3DComponent.min.js +2 -2
  42. package/dist/assets/components/VolumeRenderingComponent.js +1 -1
  43. package/dist/assets/components/VolumeRenderingComponent.min.js +1 -1
  44. package/dist/assets/components/WebXRComponent.js +1 -1
  45. package/dist/assets/components/WebXRComponent.min.js +1 -1
  46. package/dist/assets/components/X_ITEComponent.js +1 -1
  47. package/dist/assets/components/X_ITEComponent.min.js +1 -1
  48. package/dist/assets/lib/draco_decoder_gltf.js +1 -1
  49. package/dist/example.html +1 -1
  50. package/dist/x_ite.css +1 -1
  51. package/dist/x_ite.d.ts +3 -3
  52. package/dist/x_ite.js +130 -106
  53. package/dist/x_ite.min.js +2 -2
  54. package/dist/x_ite.min.mjs +2 -2
  55. package/dist/x_ite.mjs +130 -106
  56. package/dist/x_ite.zip +0 -0
  57. package/package.json +4 -3
@@ -1,4 +1,4 @@
1
- /* X_ITE v16.5.0 */
1
+ /* X_ITE v16.6.0 */
2
2
  const __X_ITE_X3D__ = window [Symbol .for ("X_ITE.X3D")];
3
3
  /******/ (() => { // webpackBootstrap
4
4
  /******/ "use strict";
@@ -111,6 +111,9 @@ var external_X_ITE_X3D_Transform_default = /*#__PURE__*/__webpack_require__.n(ex
111
111
  ;// external "__X_ITE_X3D__ .X3DBoundedObject"
112
112
  const external_X_ITE_X3D_X3DBoundedObject_namespaceObject = __X_ITE_X3D__ .X3DBoundedObject;
113
113
  var external_X_ITE_X3D_X3DBoundedObject_default = /*#__PURE__*/__webpack_require__.n(external_X_ITE_X3D_X3DBoundedObject_namespaceObject);
114
+ ;// external "__X_ITE_X3D__ .X3DTransformNode"
115
+ const external_X_ITE_X3D_X3DTransformNode_namespaceObject = __X_ITE_X3D__ .X3DTransformNode;
116
+ var external_X_ITE_X3D_X3DTransformNode_default = /*#__PURE__*/__webpack_require__.n(external_X_ITE_X3D_X3DTransformNode_namespaceObject);
114
117
  ;// external "__X_ITE_X3D__ .TraverseType"
115
118
  const external_X_ITE_X3D_TraverseType_namespaceObject = __X_ITE_X3D__ .TraverseType;
116
119
  var external_X_ITE_X3D_TraverseType_default = /*#__PURE__*/__webpack_require__.n(external_X_ITE_X3D_TraverseType_namespaceObject);
@@ -120,6 +123,164 @@ var external_X_ITE_X3D_X3DCast_default = /*#__PURE__*/__webpack_require__.n(exte
120
123
  ;// external "__X_ITE_X3D__ .Matrix4"
121
124
  const external_X_ITE_X3D_Matrix4_namespaceObject = __X_ITE_X3D__ .Matrix4;
122
125
  var external_X_ITE_X3D_Matrix4_default = /*#__PURE__*/__webpack_require__.n(external_X_ITE_X3D_Matrix4_namespaceObject);
126
+ ;// ./src/x_ite/Components/HAnim/HAnimJoint.js
127
+
128
+
129
+
130
+
131
+
132
+
133
+
134
+
135
+
136
+
137
+ function HAnimJoint (executionContext)
138
+ {
139
+ external_X_ITE_X3D_X3DTransformNode_default().call (this, executionContext);
140
+
141
+ this .addType ((external_X_ITE_X3D_X3DConstants_default()).HAnimJoint);
142
+
143
+ this .addChildObjects ((external_X_ITE_X3D_X3DConstants_default()).outputOnly, "displacements", new (external_X_ITE_X3D_Fields_default()).SFTime (),
144
+ (external_X_ITE_X3D_X3DConstants_default()).outputOnly, "displacementWeights", new (external_X_ITE_X3D_Fields_default()).SFTime ());
145
+
146
+ this .setVisibleObject (true);
147
+ this .addAllowedTypes ((external_X_ITE_X3D_X3DConstants_default()).HAnimJoint, (external_X_ITE_X3D_X3DConstants_default()).HAnimSegment, (external_X_ITE_X3D_X3DConstants_default()).X3DGroupingNode, (external_X_ITE_X3D_X3DConstants_default()).Shape);
148
+
149
+ // Units
150
+
151
+ this ._llimit .setUnit ("angle");
152
+ this ._ulimit .setUnit ("angle");
153
+ this ._minAngle .setUnit ("angle");
154
+ this ._maxAngle .setUnit ("angle");
155
+
156
+ // Legacy
157
+
158
+ if (executionContext .getSpecificationVersion () <= 3.3)
159
+ this .addAllowedTypes ((external_X_ITE_X3D_X3DConstants_default()).HAnimSite);
160
+ else if (executionContext .getSpecificationVersion () <= 4.0)
161
+ this .addAllowedTypes ((external_X_ITE_X3D_X3DConstants_default()).HAnimJoint, (external_X_ITE_X3D_X3DConstants_default()).HAnimSegment);
162
+
163
+ // Private properties
164
+
165
+ this .displacerNodes = [ ];
166
+ this .modelViewMatrix = new (external_X_ITE_X3D_Matrix4_default()) ();
167
+ }
168
+
169
+ Object .assign (Object .setPrototypeOf (HAnimJoint .prototype, (external_X_ITE_X3D_X3DTransformNode_default()).prototype),
170
+ {
171
+ initialize ()
172
+ {
173
+ external_X_ITE_X3D_X3DTransformNode_default().prototype .initialize .call (this);
174
+
175
+ this ._displacers .addInterest ("set_displacers__", this);
176
+
177
+ this .set_displacers__ ();
178
+ },
179
+ getModelViewMatrix ()
180
+ {
181
+ return this .modelViewMatrix;
182
+ },
183
+ getDisplacers ()
184
+ {
185
+ return this .displacerNodes;
186
+ },
187
+ set_visibleObjects__ ()
188
+ { },
189
+ set_displacers__ ()
190
+ {
191
+ const displacerNodes = this .displacerNodes;
192
+
193
+ for (const displacerNode of displacerNodes)
194
+ {
195
+ displacerNode ._coordIndex .removeInterest ("addEvent", this ._displacements);
196
+ displacerNode ._displacements .removeInterest ("addEvent", this ._displacements);
197
+ displacerNode ._coordIndex .removeInterest ("addEvent", this ._displacementWeights);
198
+ displacerNode ._weight .removeInterest ("addEvent", this ._displacementWeights);
199
+ }
200
+
201
+ displacerNodes .length = 0;
202
+
203
+ for (const node of this ._displacers)
204
+ {
205
+ const displacerNode = external_X_ITE_X3D_X3DCast_default() ((external_X_ITE_X3D_X3DConstants_default()).HAnimDisplacer, node);
206
+
207
+ if (displacerNode)
208
+ displacerNodes .push (displacerNode);
209
+ }
210
+
211
+ for (const displacerNode of displacerNodes)
212
+ {
213
+ displacerNode ._coordIndex .addInterest ("addEvent", this ._displacements);
214
+ displacerNode ._displacements .addInterest ("addEvent", this ._displacements);
215
+ displacerNode ._coordIndex .addInterest ("addEvent", this ._displacementWeights);
216
+ displacerNode ._weight .addInterest ("addEvent", this ._displacementWeights);
217
+ }
218
+
219
+ this ._displacements .addEvent ();
220
+ this ._displacementWeights .addEvent ();
221
+ },
222
+ traverse (type, renderObject)
223
+ {
224
+ const modelViewMatrix = renderObject .getModelViewMatrix ();
225
+
226
+ modelViewMatrix .push ();
227
+ modelViewMatrix .multLeft (this .getMatrix ());
228
+
229
+ if (type === (external_X_ITE_X3D_TraverseType_default()).DISPLAY)
230
+ this .modelViewMatrix .assign (modelViewMatrix .get ());
231
+
232
+ external_X_ITE_X3D_X3DTransformNode_default().prototype .groupTraverse .call (this, type, renderObject);
233
+
234
+ modelViewMatrix .pop ();
235
+ },
236
+ groupTraverse (type, renderObject)
237
+ {
238
+ if (type === (external_X_ITE_X3D_TraverseType_default()).DISPLAY)
239
+ this .modelViewMatrix .assign (renderObject .getModelViewMatrix () .get ());
240
+
241
+ external_X_ITE_X3D_X3DTransformNode_default().prototype .groupTraverse .call (this, type, renderObject);
242
+ },
243
+ });
244
+
245
+ Object .defineProperties (HAnimJoint,
246
+ {
247
+ ... external_X_ITE_X3D_X3DNode_default().getStaticProperties ("HAnimJoint", "HAnim", 1, "children", "3.0"),
248
+ fieldDefinitions:
249
+ {
250
+ value: new (external_X_ITE_X3D_FieldDefinitionArray_default()) ([
251
+ new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "metadata", new (external_X_ITE_X3D_Fields_default()).SFNode ()),
252
+ new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "description", new (external_X_ITE_X3D_Fields_default()).SFString ()),
253
+ new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "name", new (external_X_ITE_X3D_Fields_default()).SFString ()),
254
+ new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "translation", new (external_X_ITE_X3D_Fields_default()).SFVec3f ()),
255
+ new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "rotation", new (external_X_ITE_X3D_Fields_default()).SFRotation ()),
256
+ new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "scale", new (external_X_ITE_X3D_Fields_default()).SFVec3f (1, 1, 1)),
257
+ new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "scaleOrientation", new (external_X_ITE_X3D_Fields_default()).SFRotation ()),
258
+ new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "center", new (external_X_ITE_X3D_Fields_default()).SFVec3f ()),
259
+ new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "limitOrientation", new (external_X_ITE_X3D_Fields_default()).SFRotation ()),
260
+ new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "llimit", new (external_X_ITE_X3D_Fields_default()).MFFloat (0, 0, 0)),
261
+ new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "ulimit", new (external_X_ITE_X3D_Fields_default()).MFFloat (0, 0, 0)),
262
+ new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "minAngle", new (external_X_ITE_X3D_Fields_default()).SFFloat ()),
263
+ new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "maxAngle", new (external_X_ITE_X3D_Fields_default()).SFFloat ()),
264
+ new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "stiffness", new (external_X_ITE_X3D_Fields_default()).MFFloat (0, 0, 0)),
265
+ new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "skinCoordIndex", new (external_X_ITE_X3D_Fields_default()).MFInt32 ()),
266
+ new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "skinCoordWeight", new (external_X_ITE_X3D_Fields_default()).MFFloat ()),
267
+ new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "displacers", new (external_X_ITE_X3D_Fields_default()).MFNode ()),
268
+ new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "visible", new (external_X_ITE_X3D_Fields_default()).SFBool (true)),
269
+ new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "bboxDisplay", new (external_X_ITE_X3D_Fields_default()).SFBool ()),
270
+ new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).initializeOnly, "bboxSize", new (external_X_ITE_X3D_Fields_default()).SFVec3f (-1, -1, -1)),
271
+ new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).initializeOnly, "bboxCenter", new (external_X_ITE_X3D_Fields_default()).SFVec3f ()),
272
+ new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOnly, "addChildren", new (external_X_ITE_X3D_Fields_default()).MFNode ()),
273
+ new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOnly, "removeChildren", new (external_X_ITE_X3D_Fields_default()).MFNode ()),
274
+ new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "children", new (external_X_ITE_X3D_Fields_default()).MFNode ()),
275
+ ]),
276
+ enumerable: true,
277
+ },
278
+ });
279
+
280
+ const HAnimJoint_default_ = HAnimJoint;
281
+ ;
282
+
283
+ /* harmony default export */ const HAnim_HAnimJoint = (external_X_ITE_X3D_Namespace_default().add ("HAnimJoint", HAnimJoint_default_));
123
284
  ;// external "__X_ITE_X3D__ .Algorithm"
124
285
  const external_X_ITE_X3D_Algorithm_namespaceObject = __X_ITE_X3D__ .Algorithm;
125
286
  var external_X_ITE_X3D_Algorithm_default = /*#__PURE__*/__webpack_require__.n(external_X_ITE_X3D_Algorithm_namespaceObject);
@@ -202,6 +363,7 @@ return skin;}
202
363
 
203
364
 
204
365
 
366
+
205
367
  // Register shaders.
206
368
 
207
369
 
@@ -213,6 +375,8 @@ external_X_ITE_X3D_ShaderRegistry_default().addIncludeFile ("Skin", Skin2_glsl);
213
375
  * HAnimHumanoid
214
376
  */
215
377
 
378
+ const _hAnimNodes = Symbol .for ("X_ITE.HAnim.hAnimNodes");
379
+
216
380
  function HAnimHumanoid (executionContext)
217
381
  {
218
382
  external_X_ITE_X3D_X3DChildNode_default().call (this, executionContext);
@@ -240,7 +404,7 @@ function HAnimHumanoid (executionContext)
240
404
 
241
405
  // Private properties
242
406
 
243
- this .skeletonNode = new (external_X_ITE_X3D_Group_default()) (executionContext);
407
+ this .skeletonNode = new HAnim_HAnimJoint (executionContext);
244
408
  this .viewpointsNode = new (external_X_ITE_X3D_Group_default()) (executionContext);
245
409
  this .skinNode = new Skin (executionContext, this);
246
410
  this .transformNode = new (external_X_ITE_X3D_Transform_default()) (executionContext);
@@ -268,13 +432,15 @@ Object .assign (Object .setPrototypeOf (HAnimHumanoid .prototype, (external_X_IT
268
432
  this .skeletonNode .addAllowedTypes ((external_X_ITE_X3D_X3DConstants_default()).HAnimJoint, (external_X_ITE_X3D_X3DConstants_default()).HAnimSite);
269
433
  this .viewpointsNode .addAllowedTypes ((external_X_ITE_X3D_X3DConstants_default()).HAnimSite);
270
434
 
435
+ this ._displacers .addFieldInterest (this .skeletonNode ._displacers);
271
436
  this ._skeleton .addFieldInterest (this .skeletonNode ._children);
272
437
  this ._viewpoints .addFieldInterest (this .viewpointsNode ._children);
273
438
  this ._skin .addFieldInterest (this .skinNode ._children);
274
439
 
275
- this .skeletonNode ._children = this ._skeleton;
276
- this .viewpointsNode ._children = this ._viewpoints;
277
- this .skinNode ._children = this ._skin;
440
+ this .skeletonNode ._displacers = this ._displacers;
441
+ this .skeletonNode ._children = this ._skeleton;
442
+ this .viewpointsNode ._children = this ._viewpoints;
443
+ this .skinNode ._children = this ._skin;
278
444
 
279
445
  this .skeletonNode .setPrivate (true);
280
446
  this .viewpointsNode .setPrivate (true);
@@ -387,6 +553,10 @@ Object .assign (Object .setPrototypeOf (HAnimHumanoid .prototype, (external_X_IT
387
553
  {
388
554
  return this .humanoidKey;
389
555
  },
556
+ getSkinCoord ()
557
+ {
558
+ return this .skinCoordNode;
559
+ },
390
560
  set_humanoidKey__ ()
391
561
  {
392
562
  this .humanoidKey = `[${this .numJoints}.${this .numDisplacements}]`;
@@ -523,6 +693,9 @@ Object .assign (Object .setPrototypeOf (HAnimHumanoid .prototype, (external_X_IT
523
693
  jointNodes .length = 0;
524
694
  jointBindingMatrices .length = 0;
525
695
 
696
+ jointNodes .push (this .skeletonNode);
697
+ jointBindingMatrices .push ((external_X_ITE_X3D_Matrix4_default()).IDENTITY);
698
+
526
699
  for (const [i, node] of this ._joints .entries ())
527
700
  {
528
701
  const jointNode = external_X_ITE_X3D_X3DCast_default() ((external_X_ITE_X3D_X3DConstants_default()).HAnimJoint, node);
@@ -573,19 +746,19 @@ Object .assign (Object .setPrototypeOf (HAnimHumanoid .prototype, (external_X_IT
573
746
  joints = Array .from ({ length }, () => [ ]),
574
747
  weights = Array .from ({ length }, () => [ ]);
575
748
 
576
- for (const [joint, jointNode] of this .jointNodes .entries ())
749
+ for (const [jointIndex, jointNode] of this .jointNodes .entries ())
577
750
  {
578
751
  const skinCoordWeight = jointNode ._skinCoordWeight .getValue ();
579
752
 
580
- for (const [i, index] of jointNode ._skinCoordIndex .entries ())
753
+ for (const [i, coordIndex] of jointNode ._skinCoordIndex .entries ())
581
754
  {
582
755
  const weight = skinCoordWeight [i];
583
756
 
584
- if (weight === 0)
757
+ if (!weight)
585
758
  continue;
586
759
 
587
- joints [index] ?.push (joint);
588
- weights [index] ?.push (weight);
760
+ joints [coordIndex] ?.push (jointIndex);
761
+ weights [coordIndex] ?.push (weight);
589
762
  }
590
763
  }
591
764
 
@@ -629,7 +802,7 @@ Object .assign (Object .setPrototypeOf (HAnimHumanoid .prototype, (external_X_IT
629
802
 
630
803
  this .displacementWeights .length = 0;
631
804
 
632
- for (const [joint, jointNode] of this .jointNodes .entries ())
805
+ for (const [jointIndex, jointNode] of this .jointNodes .entries ())
633
806
  {
634
807
  for (const { _weight, _coordIndex, _displacements } of jointNode .getDisplacers ())
635
808
  {
@@ -640,7 +813,7 @@ Object .assign (Object .setPrototypeOf (HAnimHumanoid .prototype, (external_X_IT
640
813
  this .displacementWeights .push (_weight, 0, 0, 0);
641
814
 
642
815
  for (const [i, index] of _coordIndex .entries ())
643
- displacements [index] ?.push (... _displacements [i], joint, displacer, 0, 0, 0);
816
+ displacements [index] ?.push (... _displacements [i], jointIndex, displacer, 0, 0, 0);
644
817
 
645
818
  ++ displacer;
646
819
  }
@@ -843,6 +1016,7 @@ Object .defineProperties (HAnimHumanoid,
843
1016
  new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "segments", new (external_X_ITE_X3D_Fields_default()).MFNode ()),
844
1017
  new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "sites", new (external_X_ITE_X3D_Fields_default()).MFNode ()),
845
1018
  new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "viewpoints", new (external_X_ITE_X3D_Fields_default()).MFNode ()),
1019
+ new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "displacers", new (external_X_ITE_X3D_Fields_default()).MFNode ()),
846
1020
  new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "children", new (external_X_ITE_X3D_Fields_default()).MFNode ()),
847
1021
  new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "motionsEnabled", new (external_X_ITE_X3D_Fields_default()).MFBool ()),
848
1022
  new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "motions", new (external_X_ITE_X3D_Fields_default()).MFNode ()),
@@ -869,11 +1043,15 @@ class Skin extends (external_X_ITE_X3D_Group_default())
869
1043
 
870
1044
  traverse (type, renderObject)
871
1045
  {
872
- renderObject .getHAnimNode () .push (this .#humanoidNode);
1046
+ const
1047
+ coordNode = this .#humanoidNode .getSkinCoord (),
1048
+ hAnimNodes = coordNode [_hAnimNodes] ??= [ ];
1049
+
1050
+ hAnimNodes .push (this .#humanoidNode);
873
1051
 
874
1052
  super .traverse (type, renderObject);
875
1053
 
876
- renderObject .getHAnimNode () .pop ();
1054
+ hAnimNodes .pop ();
877
1055
  }
878
1056
  }
879
1057
 
@@ -900,13 +1078,22 @@ const HAnimHumanoid_default_ = HAnimHumanoid;
900
1078
  ;
901
1079
 
902
1080
  /* harmony default export */ const HAnim_HAnimHumanoid = (external_X_ITE_X3D_Namespace_default().add ("HAnimHumanoid", HAnimHumanoid_default_));
903
- ;// external "__X_ITE_X3D__ .X3DTransformNode"
904
- const external_X_ITE_X3D_X3DTransformNode_namespaceObject = __X_ITE_X3D__ .X3DTransformNode;
905
- var external_X_ITE_X3D_X3DTransformNode_default = /*#__PURE__*/__webpack_require__.n(external_X_ITE_X3D_X3DTransformNode_namespaceObject);
906
- ;// ./src/x_ite/Components/HAnim/HAnimJoint.js
907
-
908
-
909
-
1081
+ ;// external "__X_ITE_X3D__ .TimeSensor"
1082
+ const external_X_ITE_X3D_TimeSensor_namespaceObject = __X_ITE_X3D__ .TimeSensor;
1083
+ var external_X_ITE_X3D_TimeSensor_default = /*#__PURE__*/__webpack_require__.n(external_X_ITE_X3D_TimeSensor_namespaceObject);
1084
+ ;// external "__X_ITE_X3D__ .PositionInterpolator"
1085
+ const external_X_ITE_X3D_PositionInterpolator_namespaceObject = __X_ITE_X3D__ .PositionInterpolator;
1086
+ var external_X_ITE_X3D_PositionInterpolator_default = /*#__PURE__*/__webpack_require__.n(external_X_ITE_X3D_PositionInterpolator_namespaceObject);
1087
+ ;// external "__X_ITE_X3D__ .OrientationInterpolator"
1088
+ const external_X_ITE_X3D_OrientationInterpolator_namespaceObject = __X_ITE_X3D__ .OrientationInterpolator;
1089
+ var external_X_ITE_X3D_OrientationInterpolator_default = /*#__PURE__*/__webpack_require__.n(external_X_ITE_X3D_OrientationInterpolator_namespaceObject);
1090
+ ;// external "__X_ITE_X3D__ .Vector3"
1091
+ const external_X_ITE_X3D_Vector3_namespaceObject = __X_ITE_X3D__ .Vector3;
1092
+ var external_X_ITE_X3D_Vector3_default = /*#__PURE__*/__webpack_require__.n(external_X_ITE_X3D_Vector3_namespaceObject);
1093
+ ;// external "__X_ITE_X3D__ .Rotation4"
1094
+ const external_X_ITE_X3D_Rotation4_namespaceObject = __X_ITE_X3D__ .Rotation4;
1095
+ var external_X_ITE_X3D_Rotation4_default = /*#__PURE__*/__webpack_require__.n(external_X_ITE_X3D_Rotation4_namespaceObject);
1096
+ ;// ./src/x_ite/Components/HAnim/HAnimMotion.js
910
1097
 
911
1098
 
912
1099
 
@@ -914,220 +1101,52 @@ var external_X_ITE_X3D_X3DTransformNode_default = /*#__PURE__*/__webpack_require
914
1101
 
915
1102
 
916
1103
 
917
- function HAnimJoint (executionContext)
918
- {
919
- external_X_ITE_X3D_X3DTransformNode_default().call (this, executionContext);
920
1104
 
921
- this .addType ((external_X_ITE_X3D_X3DConstants_default()).HAnimJoint);
922
1105
 
923
- this .addChildObjects ((external_X_ITE_X3D_X3DConstants_default()).outputOnly, "displacements", new (external_X_ITE_X3D_Fields_default()).SFTime (),
924
- (external_X_ITE_X3D_X3DConstants_default()).outputOnly, "displacementWeights", new (external_X_ITE_X3D_Fields_default()).SFTime ());
925
1106
 
926
- this .setVisibleObject (true);
927
- this .addAllowedTypes ((external_X_ITE_X3D_X3DConstants_default()).HAnimJoint, (external_X_ITE_X3D_X3DConstants_default()).HAnimSegment);
928
1107
 
929
- // Units
930
1108
 
931
- // this ._llimit .setUnit ("angle"); // TODO: seems to be angle, but is it in radians or degrees?
932
- // this ._ulimit .setUnit ("angle"); // TODO: seems to be angle, but is it in radians or degrees?
933
- this ._minAngle .setUnit ("angle");
934
- this ._maxAngle .setUnit ("angle");
935
1109
 
936
- // Legacy
1110
+ function HAnimMotion (executionContext)
1111
+ {
1112
+ external_X_ITE_X3D_X3DChildNode_default().call (this, executionContext);
937
1113
 
938
- if (executionContext .getSpecificationVersion () <= 3.3)
939
- this .addAllowedTypes ((external_X_ITE_X3D_X3DConstants_default()).HAnimSite);
1114
+ this .addType ((external_X_ITE_X3D_X3DConstants_default()).HAnimMotion);
940
1115
 
941
1116
  // Private properties
942
1117
 
943
- this .displacerNodes = [ ];
944
- this .modelViewMatrix = new (external_X_ITE_X3D_Matrix4_default()) ();
1118
+ this .timeSensor = new (external_X_ITE_X3D_TimeSensor_default()) (this .getExecutionContext ());
1119
+ this .interpolators = [ ];
945
1120
  }
946
1121
 
947
- Object .assign (Object .setPrototypeOf (HAnimJoint .prototype, (external_X_ITE_X3D_X3DTransformNode_default()).prototype),
1122
+ Object .assign (Object .setPrototypeOf (HAnimMotion .prototype, (external_X_ITE_X3D_X3DChildNode_default()).prototype),
948
1123
  {
949
1124
  initialize ()
950
1125
  {
951
- external_X_ITE_X3D_X3DTransformNode_default().prototype .initialize .call (this);
1126
+ external_X_ITE_X3D_X3DChildNode_default().prototype .initialize .call (this);
952
1127
 
953
- this ._displacers .addInterest ("set_displacers__", this);
1128
+ this ._loop .addFieldInterest (this .timeSensor ._loop);
954
1129
 
955
- this .set_displacers__ ();
956
- },
957
- getModelViewMatrix ()
958
- {
959
- return this .modelViewMatrix;
960
- },
961
- getDisplacers ()
962
- {
963
- return this .displacerNodes;
964
- },
965
- set_visibleObjects__ ()
966
- { },
967
- set_displacers__ ()
968
- {
969
- const displacerNodes = this .displacerNodes;
1130
+ this .timeSensor ._cycleTime .addFieldInterest (this ._cycleTime);
1131
+ this .timeSensor ._elapsedTime .addFieldInterest (this ._elapsedTime);
970
1132
 
971
- for (const displacerNode of displacerNodes)
972
- {
973
- displacerNode ._coordIndex .removeInterest ("addEvent", this ._displacements);
974
- displacerNode ._displacements .removeInterest ("addEvent", this ._displacements);
975
- displacerNode ._coordIndex .removeInterest ("addEvent", this ._displacementWeights);
976
- displacerNode ._weight .removeInterest ("addEvent", this ._displacementWeights);
977
- }
1133
+ this .timeSensor ._enabled = false;
1134
+ this .timeSensor ._loop = this ._loop;
1135
+ this .timeSensor ._stopTime = 1;
978
1136
 
979
- displacerNodes .length = 0;
1137
+ this .timeSensor .setup ();
980
1138
 
981
- for (const node of this ._displacers)
982
- {
983
- const displacerNode = external_X_ITE_X3D_X3DCast_default() ((external_X_ITE_X3D_X3DConstants_default()).HAnimDisplacer, node);
984
-
985
- if (displacerNode)
986
- displacerNodes .push (displacerNode);
987
- }
988
-
989
- for (const displacerNode of displacerNodes)
990
- {
991
- displacerNode ._coordIndex .addInterest ("addEvent", this ._displacements);
992
- displacerNode ._displacements .addInterest ("addEvent", this ._displacements);
993
- displacerNode ._coordIndex .addInterest ("addEvent", this ._displacementWeights);
994
- displacerNode ._weight .addInterest ("addEvent", this ._displacementWeights);
995
- }
996
-
997
- this ._displacements .addEvent ();
998
- this ._displacementWeights .addEvent ();
999
- },
1000
- traverse (type, renderObject)
1001
- {
1002
- const modelViewMatrix = renderObject .getModelViewMatrix ();
1003
-
1004
- modelViewMatrix .push ();
1005
- modelViewMatrix .multLeft (this .getMatrix ());
1006
-
1007
- if (type === (external_X_ITE_X3D_TraverseType_default()).DISPLAY)
1008
- this .modelViewMatrix .assign (modelViewMatrix .get ());
1009
-
1010
- external_X_ITE_X3D_X3DTransformNode_default().prototype .groupTraverse .call (this, type, renderObject);
1011
-
1012
- modelViewMatrix .pop ();
1013
- },
1014
- groupTraverse (type, renderObject)
1015
- {
1016
- if (type === (external_X_ITE_X3D_TraverseType_default()).DISPLAY)
1017
- this .modelViewMatrix .assign (renderObject .getModelViewMatrix () .get ());
1018
-
1019
- external_X_ITE_X3D_X3DTransformNode_default().prototype .groupTraverse .call (this, type, renderObject);
1020
- },
1021
- });
1022
-
1023
- Object .defineProperties (HAnimJoint,
1024
- {
1025
- ... external_X_ITE_X3D_X3DNode_default().getStaticProperties ("HAnimJoint", "HAnim", 1, "children", "3.0"),
1026
- fieldDefinitions:
1027
- {
1028
- value: new (external_X_ITE_X3D_FieldDefinitionArray_default()) ([
1029
- new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "metadata", new (external_X_ITE_X3D_Fields_default()).SFNode ()),
1030
- new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "description", new (external_X_ITE_X3D_Fields_default()).SFString ()),
1031
- new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "name", new (external_X_ITE_X3D_Fields_default()).SFString ()),
1032
- new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "translation", new (external_X_ITE_X3D_Fields_default()).SFVec3f ()),
1033
- new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "rotation", new (external_X_ITE_X3D_Fields_default()).SFRotation ()),
1034
- new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "scale", new (external_X_ITE_X3D_Fields_default()).SFVec3f (1, 1, 1)),
1035
- new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "scaleOrientation", new (external_X_ITE_X3D_Fields_default()).SFRotation ()),
1036
- new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "center", new (external_X_ITE_X3D_Fields_default()).SFVec3f ()),
1037
- new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "limitOrientation", new (external_X_ITE_X3D_Fields_default()).SFRotation ()),
1038
- new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "llimit", new (external_X_ITE_X3D_Fields_default()).MFFloat (0, 0, 0)),
1039
- new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "ulimit", new (external_X_ITE_X3D_Fields_default()).MFFloat (0, 0, 0)),
1040
- new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "minAngle", new (external_X_ITE_X3D_Fields_default()).SFFloat ()),
1041
- new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "maxAngle", new (external_X_ITE_X3D_Fields_default()).SFFloat ()),
1042
- new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "stiffness", new (external_X_ITE_X3D_Fields_default()).MFFloat (0, 0, 0)),
1043
- new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "skinCoordIndex", new (external_X_ITE_X3D_Fields_default()).MFInt32 ()),
1044
- new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "skinCoordWeight", new (external_X_ITE_X3D_Fields_default()).MFFloat ()),
1045
- new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "displacers", new (external_X_ITE_X3D_Fields_default()).MFNode ()),
1046
- new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "visible", new (external_X_ITE_X3D_Fields_default()).SFBool (true)),
1047
- new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "bboxDisplay", new (external_X_ITE_X3D_Fields_default()).SFBool ()),
1048
- new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).initializeOnly, "bboxSize", new (external_X_ITE_X3D_Fields_default()).SFVec3f (-1, -1, -1)),
1049
- new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).initializeOnly, "bboxCenter", new (external_X_ITE_X3D_Fields_default()).SFVec3f ()),
1050
- new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOnly, "addChildren", new (external_X_ITE_X3D_Fields_default()).MFNode ()),
1051
- new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOnly, "removeChildren", new (external_X_ITE_X3D_Fields_default()).MFNode ()),
1052
- new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "children", new (external_X_ITE_X3D_Fields_default()).MFNode ()),
1053
- ]),
1054
- enumerable: true,
1055
- },
1056
- });
1057
-
1058
- const HAnimJoint_default_ = HAnimJoint;
1059
- ;
1060
-
1061
- /* harmony default export */ const HAnim_HAnimJoint = (external_X_ITE_X3D_Namespace_default().add ("HAnimJoint", HAnimJoint_default_));
1062
- ;// external "__X_ITE_X3D__ .TimeSensor"
1063
- const external_X_ITE_X3D_TimeSensor_namespaceObject = __X_ITE_X3D__ .TimeSensor;
1064
- var external_X_ITE_X3D_TimeSensor_default = /*#__PURE__*/__webpack_require__.n(external_X_ITE_X3D_TimeSensor_namespaceObject);
1065
- ;// external "__X_ITE_X3D__ .PositionInterpolator"
1066
- const external_X_ITE_X3D_PositionInterpolator_namespaceObject = __X_ITE_X3D__ .PositionInterpolator;
1067
- var external_X_ITE_X3D_PositionInterpolator_default = /*#__PURE__*/__webpack_require__.n(external_X_ITE_X3D_PositionInterpolator_namespaceObject);
1068
- ;// external "__X_ITE_X3D__ .OrientationInterpolator"
1069
- const external_X_ITE_X3D_OrientationInterpolator_namespaceObject = __X_ITE_X3D__ .OrientationInterpolator;
1070
- var external_X_ITE_X3D_OrientationInterpolator_default = /*#__PURE__*/__webpack_require__.n(external_X_ITE_X3D_OrientationInterpolator_namespaceObject);
1071
- ;// external "__X_ITE_X3D__ .Vector3"
1072
- const external_X_ITE_X3D_Vector3_namespaceObject = __X_ITE_X3D__ .Vector3;
1073
- var external_X_ITE_X3D_Vector3_default = /*#__PURE__*/__webpack_require__.n(external_X_ITE_X3D_Vector3_namespaceObject);
1074
- ;// external "__X_ITE_X3D__ .Rotation4"
1075
- const external_X_ITE_X3D_Rotation4_namespaceObject = __X_ITE_X3D__ .Rotation4;
1076
- var external_X_ITE_X3D_Rotation4_default = /*#__PURE__*/__webpack_require__.n(external_X_ITE_X3D_Rotation4_namespaceObject);
1077
- ;// ./src/x_ite/Components/HAnim/HAnimMotion.js
1078
-
1079
-
1080
-
1081
-
1082
-
1083
-
1084
-
1085
-
1086
-
1087
-
1088
-
1089
-
1090
-
1091
- function HAnimMotion (executionContext)
1092
- {
1093
- external_X_ITE_X3D_X3DChildNode_default().call (this, executionContext);
1094
-
1095
- this .addType ((external_X_ITE_X3D_X3DConstants_default()).HAnimMotion);
1096
-
1097
- // Private properties
1098
-
1099
- this .timeSensor = new (external_X_ITE_X3D_TimeSensor_default()) (this .getExecutionContext ());
1100
- this .interpolators = [ ];
1101
- }
1102
-
1103
- Object .assign (Object .setPrototypeOf (HAnimMotion .prototype, (external_X_ITE_X3D_X3DChildNode_default()).prototype),
1104
- {
1105
- initialize ()
1106
- {
1107
- external_X_ITE_X3D_X3DChildNode_default().prototype .initialize .call (this);
1108
-
1109
- this ._loop .addFieldInterest (this .timeSensor ._loop);
1110
-
1111
- this .timeSensor ._cycleTime .addFieldInterest (this ._cycleTime);
1112
- this .timeSensor ._elapsedTime .addFieldInterest (this ._elapsedTime);
1113
-
1114
- this .timeSensor ._enabled = false;
1115
- this .timeSensor ._loop = this ._loop;
1116
- this .timeSensor ._stopTime = 1;
1117
-
1118
- this .timeSensor .setup ();
1119
-
1120
- this ._enabled .addInterest ("set_enabled__", this);
1121
- this ._joints .addInterest ("set_joints__", this);
1122
- this ._channels .addInterest ("set_interpolators__", this);
1123
- this ._values .addInterest ("set_interpolators__", this);
1124
- this ._next .addInterest ("set_next_or_previous__", this, 1);
1125
- this ._previous .addInterest ("set_next_or_previous__", this, -1);
1126
- this ._frameIndex .addInterest ("set_frameIndex__", this);
1127
- this ._frameDuration .addInterest ("set_frameDuration__", this);
1128
- this ._frameIncrement .addInterest ("set_frameIncrement__", this);
1129
- this ._startFrame .addInterest ("set_start_or_endFrame__", this);
1130
- this ._endFrame .addInterest ("set_start_or_endFrame__", this);
1139
+ this ._enabled .addInterest ("set_enabled__", this);
1140
+ this ._joints .addInterest ("set_joints__", this);
1141
+ this ._channels .addInterest ("set_interpolators__", this);
1142
+ this ._values .addInterest ("set_interpolators__", this);
1143
+ this ._next .addInterest ("set_next_or_previous__", this, 1);
1144
+ this ._previous .addInterest ("set_next_or_previous__", this, -1);
1145
+ this ._frameIndex .addInterest ("set_frameIndex__", this);
1146
+ this ._frameDuration .addInterest ("set_frameDuration__", this);
1147
+ this ._frameIncrement .addInterest ("set_frameIncrement__", this);
1148
+ this ._startFrame .addInterest ("set_start_or_endFrame__", this);
1149
+ this ._endFrame .addInterest ("set_start_or_endFrame__", this);
1131
1150
 
1132
1151
  this .set_enabled__ ();
1133
1152
  this .set_joints__ ();
@@ -1686,6 +1705,9 @@ const HAnimPose_default_ = HAnimPose;
1686
1705
  ;// external "__X_ITE_X3D__ .X3DGroupingNode"
1687
1706
  const external_X_ITE_X3D_X3DGroupingNode_namespaceObject = __X_ITE_X3D__ .X3DGroupingNode;
1688
1707
  var external_X_ITE_X3D_X3DGroupingNode_default = /*#__PURE__*/__webpack_require__.n(external_X_ITE_X3D_X3DGroupingNode_namespaceObject);
1708
+ ;// external "__X_ITE_X3D__ .X3DCoordinateNode"
1709
+ const external_X_ITE_X3D_X3DCoordinateNode_namespaceObject = __X_ITE_X3D__ .X3DCoordinateNode;
1710
+ var external_X_ITE_X3D_X3DCoordinateNode_default = /*#__PURE__*/__webpack_require__.n(external_X_ITE_X3D_X3DCoordinateNode_namespaceObject);
1689
1711
  ;// ./src/x_ite/Components/HAnim/HAnimSegment.js
1690
1712
 
1691
1713
 
@@ -1697,14 +1719,16 @@ var external_X_ITE_X3D_X3DGroupingNode_default = /*#__PURE__*/__webpack_require_
1697
1719
 
1698
1720
 
1699
1721
 
1722
+
1723
+ const HAnimSegment_hAnimNodes = Symbol .for ("X_ITE.HAnim.hAnimNodes");
1724
+
1700
1725
  function HAnimSegment (executionContext)
1701
1726
  {
1702
1727
  external_X_ITE_X3D_X3DGroupingNode_default().call (this, executionContext);
1703
1728
 
1704
1729
  this .addType ((external_X_ITE_X3D_X3DConstants_default()).HAnimSegment);
1705
1730
 
1706
- this .addChildObjects ((external_X_ITE_X3D_X3DConstants_default()).outputOnly, "displacementsTexture", new (external_X_ITE_X3D_Fields_default()).SFTime (),
1707
- (external_X_ITE_X3D_X3DConstants_default()).outputOnly, "displacementWeightsTexture", new (external_X_ITE_X3D_Fields_default()).SFTime ());
1731
+ this .addAllowedTypes ((external_X_ITE_X3D_X3DConstants_default()).HAnimSite, (external_X_ITE_X3D_X3DConstants_default()).X3DGroupingNode);
1708
1732
 
1709
1733
  // Units
1710
1734
 
@@ -1712,13 +1736,13 @@ function HAnimSegment (executionContext)
1712
1736
 
1713
1737
  // Private properties
1714
1738
 
1715
- const size = Math .ceil (Math .sqrt (1 * 8));
1739
+ this .displacerNodes = [ ];
1740
+ this .jointMatrix = new (external_X_ITE_X3D_Matrix4_default()) ();
1741
+
1742
+ // Legacy
1716
1743
 
1717
- this .numJoints = 0;
1718
- this .numDisplacements = 0;
1719
- this .displacerNodes = [ ];
1720
- this .displacementWeights = [ ];
1721
- this .jointMatricesArray = new Float32Array (size * size * 4);
1744
+ if (executionContext .getSpecificationVersion () <= 4.0)
1745
+ this .addAllowedTypes ((external_X_ITE_X3D_X3DConstants_default()).X3DChildNode);
1722
1746
  }
1723
1747
 
1724
1748
  Object .assign (Object .setPrototypeOf (HAnimSegment .prototype, (external_X_ITE_X3D_X3DGroupingNode_default()).prototype),
@@ -1727,44 +1751,25 @@ Object .assign (Object .setPrototypeOf (HAnimSegment .prototype, (external_X_ITE
1727
1751
  {
1728
1752
  external_X_ITE_X3D_X3DGroupingNode_default().prototype .initialize .call (this);
1729
1753
 
1730
- // Textures
1731
-
1732
- const
1733
- browser = this .getBrowser (),
1734
- gl = browser .getContext ();
1735
-
1736
- this .displacementsTexture = gl .createTexture ();
1737
- this .displacementWeightsTexture = gl .createTexture ();
1738
- this .jointMatricesTexture = gl .createTexture ();
1739
-
1740
- for (const texture of [this .displacementsTexture, this .displacementWeightsTexture, this .jointMatricesTexture])
1741
- {
1742
- gl .bindTexture (gl .TEXTURE_2D, texture);
1743
-
1744
- gl .texParameteri (gl .TEXTURE_2D, gl .TEXTURE_WRAP_S, gl .CLAMP_TO_EDGE);
1745
- gl .texParameteri (gl .TEXTURE_2D, gl .TEXTURE_WRAP_T, gl .CLAMP_TO_EDGE);
1746
- gl .texParameteri (gl .TEXTURE_2D, gl .TEXTURE_MAG_FILTER, gl .NEAREST);
1747
- gl .texParameteri (gl .TEXTURE_2D, gl .TEXTURE_MIN_FILTER, gl .NEAREST);
1748
- }
1749
-
1750
1754
  // Events
1751
1755
 
1752
1756
  this ._displacers .addInterest ("set_displacers__", this);
1753
1757
  this ._coord .addInterest ("set_coord__", this);
1754
1758
 
1755
- this ._displacementsTexture .addInterest ("set_displacementsTexture__", this);
1756
- this ._displacementWeightsTexture .addInterest ("set_displacementWeightsTexture__", this);
1757
-
1758
1759
  this .set_displacers__ ();
1759
1760
  this .set_coord__ ();
1760
1761
  },
1761
1762
  getHAnimKey ()
1762
1763
  {
1763
- return this .humanoidKey;
1764
+ return this .coordNode .getHAnimKey ();
1764
1765
  },
1765
- set_humanoidKey__ ()
1766
+ getDisplacers ()
1766
1767
  {
1767
- this .humanoidKey = `[${this .numJoints}.${this .numDisplacements}]`;
1768
+ return this .displacerNodes;
1769
+ },
1770
+ getJointMatrix ()
1771
+ {
1772
+ return this .jointMatrix;
1768
1773
  },
1769
1774
  set_displacers__ ()
1770
1775
  {
@@ -1772,10 +1777,10 @@ Object .assign (Object .setPrototypeOf (HAnimSegment .prototype, (external_X_ITE
1772
1777
 
1773
1778
  for (const displacerNode of displacerNodes)
1774
1779
  {
1775
- displacerNode ._coordIndex .removeInterest ("addEvent", this ._displacementsTexture);
1776
- displacerNode ._displacements .removeInterest ("addEvent", this ._displacementsTexture);
1777
- displacerNode ._coordIndex .removeInterest ("addEvent", this ._displacementWeightsTexture);
1778
- displacerNode ._weight .removeInterest ("addEvent", this ._displacementWeightsTexture);
1780
+ displacerNode ._coordIndex .removeInterest ("set_displacementsTexture__", this);
1781
+ displacerNode ._displacements .removeInterest ("set_displacementsTexture__", this);
1782
+ displacerNode ._coordIndex .removeInterest ("set_displacementWeightsTexture__", this);
1783
+ displacerNode ._weight .removeInterest ("set_displacementWeightsTexture__", this);
1779
1784
  }
1780
1785
 
1781
1786
  displacerNodes .length = 0;
@@ -1790,166 +1795,270 @@ Object .assign (Object .setPrototypeOf (HAnimSegment .prototype, (external_X_ITE
1790
1795
 
1791
1796
  for (const displacerNode of displacerNodes)
1792
1797
  {
1793
- displacerNode ._coordIndex .addInterest ("addEvent", this ._displacementsTexture);
1794
- displacerNode ._displacements .addInterest ("addEvent", this ._displacementsTexture);
1795
- displacerNode ._coordIndex .addInterest ("addEvent", this ._displacementWeightsTexture);
1796
- displacerNode ._weight .addInterest ("addEvent", this ._displacementWeightsTexture);
1798
+ displacerNode ._coordIndex .addInterest ("set_displacementsTexture__", this);
1799
+ displacerNode ._displacements .addInterest ("set_displacementsTexture__", this);
1800
+ displacerNode ._coordIndex .addInterest ("set_displacementWeightsTexture__", this);
1801
+ displacerNode ._weight .addInterest ("set_displacementWeightsTexture__", this);
1797
1802
  }
1798
1803
 
1799
- this ._displacementsTexture .addEvent ();
1800
- this ._displacementWeightsTexture .addEvent ();
1804
+ this .set_displacementsTexture__ ();
1805
+ this .set_displacementWeightsTexture__ ();
1801
1806
  },
1802
1807
  set_displacementsTexture__ ()
1803
1808
  {
1804
- // Create array.
1805
-
1806
- const
1807
- length = this .coordNode ?._point .length || 1,
1808
- displacements = Array .from ({ length }, () => [ ]);
1809
-
1810
- let displacer = 0;
1811
-
1812
- this .displacementWeights .length = 0;
1813
-
1814
- for (const { _weight, _coordIndex, _displacements } of this .displacerNodes)
1815
- {
1816
- if (!_coordIndex .length)
1817
- continue;
1818
-
1819
- // Store reference to weight SFFloat.
1820
- this .displacementWeights .push (_weight, 0, 0, 0);
1821
-
1822
- for (const [i, index] of _coordIndex .entries ())
1823
- displacements [index] ?.push (... _displacements [i], 0, displacer, 0, 0, 0);
1824
-
1825
- ++ displacer;
1826
- }
1827
-
1828
- const
1829
- numDisplacements = displacements .reduce ((p, n) => Math .max (p, n .length), 0) / 8,
1830
- numElements = numDisplacements * 8,
1831
- size = Math .ceil (Math .sqrt (length * numDisplacements * 2)) || 1,
1832
- displacementsArray = new Float32Array (size * size * 4);
1833
-
1834
- for (let i = 0; i < length; ++ i)
1835
- displacementsArray .set (displacements [i], i * numElements);
1836
-
1837
- // Number of displacements per coord index.
1838
- this .numDisplacements = numDisplacements;
1839
-
1840
- // Upload texture.
1841
-
1842
- const
1843
- browser = this .getBrowser (),
1844
- gl = browser .getContext ();
1845
-
1846
- gl .bindTexture (gl .TEXTURE_2D, this .displacementsTexture);
1847
- gl .texImage2D (gl .TEXTURE_2D, 0, gl .RGBA32F, size, size, 0, gl .RGBA, gl .FLOAT, displacementsArray);
1848
-
1849
- // Weights
1850
-
1851
- this .displacementWeightsSize = Math .ceil (Math .sqrt (displacer));
1852
- this .displacementWeightsArray = new Float32Array (this .displacementWeightsSize * this .displacementWeightsSize * 4);
1853
-
1854
- // Trigger update.
1855
-
1856
- this .set_humanoidKey__ ();
1809
+ this .coordNode ?._displacementsTexture .addEvent ();
1857
1810
  },
1858
1811
  set_displacementWeightsTexture__ ()
1859
1812
  {
1860
- // Upload texture.
1861
-
1862
- const
1863
- gl = this .getBrowser () .getContext (),
1864
- size = this .displacementWeightsSize,
1865
- array = this .displacementWeightsArray;
1866
-
1867
- array .set (this .displacementWeights);
1868
-
1869
- gl .bindTexture (gl .TEXTURE_2D, this .displacementWeightsTexture);
1870
- gl .texImage2D (gl .TEXTURE_2D, 0, gl .RGBA32F, size, size, 0, gl .RGBA, gl .FLOAT, array);
1813
+ this .coordNode ?._displacementWeightsTexture .addEvent ();
1871
1814
  },
1872
1815
  set_coord__ ()
1873
1816
  {
1874
- if (this .coordNode)
1875
- {
1876
- this .coordNode .removeInterest ("addEvent", this ._displacementsTexture);
1877
- this .coordNode .removeInterest ("addEvent", this ._displacementWeightsTexture);
1878
- }
1817
+ this .coordNode ?.removeHAnimDisplacers (this);
1879
1818
 
1880
1819
  this .coordNode = external_X_ITE_X3D_X3DCast_default() ((external_X_ITE_X3D_X3DConstants_default()).Coordinate, this ._coord)
1881
1820
  ?? external_X_ITE_X3D_X3DCast_default() ((external_X_ITE_X3D_X3DConstants_default()).CoordinateDouble, this ._coord);
1882
1821
 
1883
- if (this .coordNode)
1884
- {
1885
- delete this .skinning;
1886
-
1887
- this .coordNode .addInterest ("addEvent", this ._displacementsTexture);
1888
- this .coordNode .addInterest ("addEvent", this ._displacementWeightsTexture);
1889
- }
1890
- else
1891
- {
1892
- this .skinning = Function .prototype;
1893
- }
1822
+ this .coordNode ?.addHAnimDisplacers (this);
1894
1823
 
1895
- this ._displacementsTexture .addEvent ();
1896
- this ._displacementWeightsTexture .addEvent ();
1824
+ this .set_displacementsTexture__ ();
1825
+ this .set_displacementWeightsTexture__ ();
1897
1826
  },
1898
1827
  traverse (type, renderObject)
1899
1828
  {
1900
- if (this .coordNode && this .numDisplacements)
1829
+ if (this .coordNode ?.getNumDisplacements ())
1901
1830
  {
1902
- renderObject .getHAnimNode () .push (this);
1831
+ if (type === (external_X_ITE_X3D_TraverseType_default()).DISPLAY)
1832
+ {
1833
+ const invHumanoidMatrix = renderObject .getInvHumanoidMatrix () .get ();
1903
1834
 
1904
- external_X_ITE_X3D_X3DGroupingNode_default().prototype .traverse .call (this, type, renderObject);
1835
+ this .jointMatrix
1836
+ .assign (renderObject .getModelViewMatrix () .get ())
1837
+ .multRight (invHumanoidMatrix);
1905
1838
 
1906
- this .skinning (type, renderObject);
1839
+ this .coordNode .updateSkin ();
1840
+ }
1907
1841
 
1908
- renderObject .getHAnimNode () .pop ();
1909
- }
1842
+ const hAnimNodes = this .coordNode [HAnimSegment_hAnimNodes] ??= [ ];
1843
+
1844
+ hAnimNodes .push (this);
1845
+
1846
+ external_X_ITE_X3D_X3DGroupingNode_default().prototype .traverse .call (this, type, renderObject);
1847
+
1848
+ hAnimNodes .pop ();
1849
+ }
1910
1850
  else
1911
1851
  {
1912
1852
  external_X_ITE_X3D_X3DGroupingNode_default().prototype .traverse .call (this, type, renderObject);
1913
1853
  }
1914
1854
  },
1915
- skinning: (() =>
1855
+ getShaderOptions (options)
1856
+ {
1857
+ this .coordNode .getHAnimShaderOptions (options);
1858
+ },
1859
+ setShaderUniforms (gl, shaderObject)
1860
+ {
1861
+ this .coordNode .setHAnimShaderUniforms (gl, shaderObject);
1862
+ },
1863
+ });
1864
+
1865
+ Object .defineProperties (HAnimSegment,
1866
+ {
1867
+ ... external_X_ITE_X3D_X3DNode_default().getStaticProperties ("HAnimSegment", "HAnim", 1, "children", "3.0"),
1868
+ fieldDefinitions:
1869
+ {
1870
+ value: new (external_X_ITE_X3D_FieldDefinitionArray_default()) ([
1871
+ new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "metadata", new (external_X_ITE_X3D_Fields_default()).SFNode ()),
1872
+ new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "description", new (external_X_ITE_X3D_Fields_default()).SFString ()),
1873
+ new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "name", new (external_X_ITE_X3D_Fields_default()).SFString ()),
1874
+ new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "mass", new (external_X_ITE_X3D_Fields_default()).SFFloat ()),
1875
+ new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "centerOfMass", new (external_X_ITE_X3D_Fields_default()).SFVec3f ()),
1876
+ new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "momentsOfInertia", new (external_X_ITE_X3D_Fields_default()).MFFloat (0, 0, 0, 0, 0, 0, 0, 0, 0)),
1877
+ new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "displacers", new (external_X_ITE_X3D_Fields_default()).MFNode ()),
1878
+ new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "coord", new (external_X_ITE_X3D_Fields_default()).SFNode ()),
1879
+ new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "visible", new (external_X_ITE_X3D_Fields_default()).SFBool (true)),
1880
+ new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "bboxDisplay", new (external_X_ITE_X3D_Fields_default()).SFBool ()),
1881
+ new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).initializeOnly, "bboxSize", new (external_X_ITE_X3D_Fields_default()).SFVec3f (-1, -1, -1)),
1882
+ new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).initializeOnly, "bboxCenter", new (external_X_ITE_X3D_Fields_default()).SFVec3f ()),
1883
+ new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOnly, "addChildren", new (external_X_ITE_X3D_Fields_default()).MFNode ()),
1884
+ new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOnly, "removeChildren", new (external_X_ITE_X3D_Fields_default()).MFNode ()),
1885
+ new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "children", new (external_X_ITE_X3D_Fields_default()).MFNode ()),
1886
+ ]),
1887
+ enumerable: true,
1888
+ },
1889
+ });
1890
+
1891
+ const HAnimSegment_default_ = HAnimSegment;
1892
+
1893
+ Object .assign ((external_X_ITE_X3D_X3DCoordinateNode_default()).prototype,
1894
+ {
1895
+ getHAnimKey ()
1896
+ {
1897
+ return this .humanoidKey;
1898
+ },
1899
+ set_humanoidKey__ ()
1900
+ {
1901
+ this .humanoidKey = `[${this .numJoints}.${this .numDisplacements}]`;
1902
+ },
1903
+ getNumDisplacements ()
1904
+ {
1905
+ return this .numDisplacements;
1906
+ },
1907
+ initHAnimDisplacers ()
1916
1908
  {
1917
- const modelViewMatrix = new (external_X_ITE_X3D_Matrix4_default()) ();
1909
+ this .addChildObjects ((external_X_ITE_X3D_X3DConstants_default()).outputOnly, "displacementsTexture", new (external_X_ITE_X3D_Fields_default()).SFTime (),
1910
+ (external_X_ITE_X3D_X3DConstants_default()).outputOnly, "displacementWeightsTexture", new (external_X_ITE_X3D_Fields_default()).SFTime ());
1918
1911
 
1919
- return function (type, renderObject)
1912
+ // Private properties
1913
+
1914
+ this .jointNodes = new Set (); // HAnimSegment, HAnimSite
1915
+
1916
+ this .numJoints = 0;
1917
+ this .numDisplacements = 0;
1918
+ this .displacementWeights = [ ];
1919
+
1920
+ // Textures
1921
+
1922
+ const
1923
+ browser = this .getBrowser (),
1924
+ gl = browser .getContext ();
1925
+
1926
+ this .displacementsTexture = gl .createTexture ();
1927
+ this .displacementWeightsTexture = gl .createTexture ();
1928
+ this .jointMatricesTexture = gl .createTexture ();
1929
+
1930
+ for (const texture of [this .displacementsTexture, this .displacementWeightsTexture, this .jointMatricesTexture])
1920
1931
  {
1921
- if (type !== (external_X_ITE_X3D_TraverseType_default()).DISPLAY)
1922
- return;
1932
+ gl .bindTexture (gl .TEXTURE_2D, texture);
1923
1933
 
1924
- // Create joint matrices.
1934
+ gl .texParameteri (gl .TEXTURE_2D, gl .TEXTURE_WRAP_S, gl .CLAMP_TO_EDGE);
1935
+ gl .texParameteri (gl .TEXTURE_2D, gl .TEXTURE_WRAP_T, gl .CLAMP_TO_EDGE);
1936
+ gl .texParameteri (gl .TEXTURE_2D, gl .TEXTURE_MAG_FILTER, gl .NEAREST);
1937
+ gl .texParameteri (gl .TEXTURE_2D, gl .TEXTURE_MIN_FILTER, gl .NEAREST);
1938
+ }
1925
1939
 
1926
- const
1927
- invHumanoidMatrix = renderObject .getInvHumanoidMatrix () .get (),
1928
- jointMatricesArray = this .jointMatricesArray,
1929
- size = Math .ceil (Math .sqrt (1 * 8));
1940
+ this ._displacementsTexture .addInterest ("set_displacementsTexture__", this);
1941
+ this ._displacementWeightsTexture .addInterest ("set_displacementWeightsTexture__", this);
1942
+ },
1943
+ addHAnimDisplacers (hAnimNode)
1944
+ {
1945
+ if (!this .jointNodes)
1946
+ this .initHAnimDisplacers ();
1930
1947
 
1931
- const jointMatrix = modelViewMatrix .assign (renderObject .getModelViewMatrix () .get ()) .multRight (invHumanoidMatrix);
1948
+ this .jointNodes .add (hAnimNode);
1932
1949
 
1933
- jointMatricesArray .set (jointMatrix, 0);
1934
- // No need for jointNormalMatrix.
1950
+ const size = Math .ceil (Math .sqrt (this .jointNodes .size * 8));
1935
1951
 
1936
- // Upload textures.
1952
+ this .jointMatricesArray = new Float32Array (size * size * 4);
1937
1953
 
1938
- const
1939
- browser = this .getBrowser (),
1940
- gl = browser .getContext ();
1954
+ if (this .jointNodes .size === 1)
1955
+ {
1956
+ this .addInterest ("addEvent", this ._displacementsTexture);
1957
+ this .addInterest ("addEvent", this ._displacementWeightsTexture);
1958
+ }
1941
1959
 
1942
- gl .bindTexture (gl .TEXTURE_2D, this .jointMatricesTexture);
1943
- gl .texImage2D (gl .TEXTURE_2D, 0, gl .RGBA32F, size, size, 0, gl .RGBA, gl .FLOAT, jointMatricesArray);
1944
- };
1945
- })(),
1946
- getShaderOptions (options)
1960
+ this ._displacementsTexture .addEvent ();
1961
+ this ._displacementWeightsTexture .addEvent ();
1962
+ },
1963
+ removeHAnimDisplacers (hAnimNode)
1964
+ {
1965
+ this .jointNodes .delete (hAnimNode);
1966
+
1967
+ const size = Math .ceil (Math .sqrt (this .jointNodes .size * 8));
1968
+
1969
+ this .jointMatricesArray = new Float32Array (size * size * 4);
1970
+
1971
+ if (!this .jointNodes .size)
1972
+ {
1973
+ this .removeInterest ("addEvent", this ._displacementsTexture);
1974
+ this .removeInterest ("addEvent", this ._displacementWeightsTexture);
1975
+ }
1976
+
1977
+ this ._displacementsTexture .addEvent ();
1978
+ this ._displacementWeightsTexture .addEvent ();
1979
+ },
1980
+ set_displacementsTexture__ ()
1981
+ {
1982
+ // Create array.
1983
+
1984
+ const
1985
+ length = this ._point .length || 1,
1986
+ displacements = Array .from ({ length }, () => [ ]);
1987
+
1988
+ let jointIndex = 0, displacer = 0;
1989
+
1990
+ this .displacementWeights .length = 0;
1991
+
1992
+ for (const jointNode of this .jointNodes)
1993
+ {
1994
+ for (const { _weight, _coordIndex, _displacements } of jointNode .getDisplacers ())
1995
+ {
1996
+ if (!_coordIndex .length)
1997
+ continue;
1998
+
1999
+ // Store reference to weight SFFloat.
2000
+ this .displacementWeights .push (_weight, 0, 0, 0);
2001
+
2002
+ for (const [i, index] of _coordIndex .entries ())
2003
+ displacements [index] ?.push (... _displacements [i], jointIndex, displacer, 0, 0, 0);
2004
+
2005
+ ++ displacer;
2006
+ }
2007
+
2008
+ ++ jointIndex;
2009
+ }
2010
+
2011
+ const
2012
+ numDisplacements = displacements .reduce ((p, n) => Math .max (p, n .length), 0) / 8,
2013
+ numElements = numDisplacements * 8,
2014
+ size = Math .ceil (Math .sqrt (length * numDisplacements * 2)) || 1,
2015
+ displacementsArray = new Float32Array (size * size * 4);
2016
+
2017
+ for (let i = 0; i < length; ++ i)
2018
+ displacementsArray .set (displacements [i], i * numElements);
2019
+
2020
+ // Number of displacements per coord index.
2021
+ this .numDisplacements = numDisplacements;
2022
+
2023
+ // Upload texture.
2024
+
2025
+ const
2026
+ browser = this .getBrowser (),
2027
+ gl = browser .getContext ();
2028
+
2029
+ gl .bindTexture (gl .TEXTURE_2D, this .displacementsTexture);
2030
+ gl .texImage2D (gl .TEXTURE_2D, 0, gl .RGBA32F, size, size, 0, gl .RGBA, gl .FLOAT, displacementsArray);
2031
+
2032
+ // Weights
2033
+
2034
+ this .displacementWeightsSize = Math .ceil (Math .sqrt (displacer));
2035
+ this .displacementWeightsArray = new Float32Array (this .displacementWeightsSize * this .displacementWeightsSize * 4);
2036
+
2037
+ // Trigger update.
2038
+
2039
+ this .set_humanoidKey__ ();
2040
+ },
2041
+ set_displacementWeightsTexture__ ()
2042
+ {
2043
+ // Upload texture.
2044
+
2045
+ const
2046
+ gl = this .getBrowser () .getContext (),
2047
+ size = this .displacementWeightsSize,
2048
+ array = this .displacementWeightsArray;
2049
+
2050
+ array .set (this .displacementWeights);
2051
+
2052
+ gl .bindTexture (gl .TEXTURE_2D, this .displacementWeightsTexture);
2053
+ gl .texImage2D (gl .TEXTURE_2D, 0, gl .RGBA32F, size, size, 0, gl .RGBA, gl .FLOAT, array);
2054
+ },
2055
+ getHAnimShaderOptions (options)
1947
2056
  {
1948
2057
  options .push ("X3D_SKINNING");
1949
2058
  options .push (`X3D_NUM_JOINT_SETS ${this .numJoints / 4}`);
1950
2059
  options .push (`X3D_NUM_DISPLACEMENTS ${this .numDisplacements}`);
1951
2060
  },
1952
- setShaderUniforms (gl, shaderObject)
2061
+ setHAnimShaderUniforms (gl, shaderObject)
1953
2062
  {
1954
2063
  const
1955
2064
  browser = this .getBrowser (),
@@ -1961,6 +2070,8 @@ Object .assign (Object .setPrototypeOf (HAnimSegment .prototype, (external_X_ITE
1961
2070
  gl .bindTexture (gl .TEXTURE_2D, this .jointMatricesTexture);
1962
2071
  gl .uniform1i (shaderObject .x3d_JointMatricesTexture, jointMatricesTextureUnit);
1963
2072
 
2073
+ this .skinning ();
2074
+
1964
2075
  gl .activeTexture (gl .TEXTURE0 + displacementsTextureTextureUnit);
1965
2076
  gl .bindTexture (gl .TEXTURE_2D, this .displacementsTexture);
1966
2077
  gl .uniform1i (shaderObject .x3d_DisplacementsTexture, displacementsTextureTextureUnit);
@@ -1969,35 +2080,42 @@ Object .assign (Object .setPrototypeOf (HAnimSegment .prototype, (external_X_ITE
1969
2080
  gl .bindTexture (gl .TEXTURE_2D, this .displacementWeightsTexture);
1970
2081
  gl .uniform1i (shaderObject .x3d_DisplacementWeightsTexture, displacementWeightsTextureTextureUnit);
1971
2082
  },
1972
- });
2083
+ skinning ()
2084
+ {
2085
+ if (!this .updateSkinTexture)
2086
+ return;
1973
2087
 
1974
- Object .defineProperties (HAnimSegment,
1975
- {
1976
- ... external_X_ITE_X3D_X3DNode_default().getStaticProperties ("HAnimSegment", "HAnim", 1, "children", "3.0"),
1977
- fieldDefinitions:
2088
+ this .updateSkinTexture = false;
2089
+
2090
+ // Create joint matrices.
2091
+
2092
+ const
2093
+ jointMatricesArray = this .jointMatricesArray,
2094
+ size = Math .ceil (Math .sqrt (this .jointNodes .size * 8));
2095
+
2096
+ let i = 0;
2097
+
2098
+ for (const jointNode of this .jointNodes)
2099
+ {
2100
+ jointMatricesArray .set (jointNode .getJointMatrix (), i * 32);
2101
+ // No need for jointNormalMatrix.
2102
+ ++ i;
2103
+ }
2104
+
2105
+ // Upload textures.
2106
+
2107
+ const
2108
+ browser = this .getBrowser (),
2109
+ gl = browser .getContext ();
2110
+
2111
+ gl .bindTexture (gl .TEXTURE_2D, this .jointMatricesTexture);
2112
+ gl .texImage2D (gl .TEXTURE_2D, 0, gl .RGBA32F, size, size, 0, gl .RGBA, gl .FLOAT, jointMatricesArray);
2113
+ },
2114
+ updateSkin ()
1978
2115
  {
1979
- value: new (external_X_ITE_X3D_FieldDefinitionArray_default()) ([
1980
- new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "metadata", new (external_X_ITE_X3D_Fields_default()).SFNode ()),
1981
- new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "description", new (external_X_ITE_X3D_Fields_default()).SFString ()),
1982
- new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "name", new (external_X_ITE_X3D_Fields_default()).SFString ()),
1983
- new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "mass", new (external_X_ITE_X3D_Fields_default()).SFFloat ()),
1984
- new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "centerOfMass", new (external_X_ITE_X3D_Fields_default()).SFVec3f ()),
1985
- new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "momentsOfInertia", new (external_X_ITE_X3D_Fields_default()).MFFloat (0, 0, 0, 0, 0, 0, 0, 0, 0)),
1986
- new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "displacers", new (external_X_ITE_X3D_Fields_default()).MFNode ()),
1987
- new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "coord", new (external_X_ITE_X3D_Fields_default()).SFNode ()),
1988
- new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "visible", new (external_X_ITE_X3D_Fields_default()).SFBool (true)),
1989
- new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "bboxDisplay", new (external_X_ITE_X3D_Fields_default()).SFBool ()),
1990
- new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).initializeOnly, "bboxSize", new (external_X_ITE_X3D_Fields_default()).SFVec3f (-1, -1, -1)),
1991
- new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).initializeOnly, "bboxCenter", new (external_X_ITE_X3D_Fields_default()).SFVec3f ()),
1992
- new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOnly, "addChildren", new (external_X_ITE_X3D_Fields_default()).MFNode ()),
1993
- new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOnly, "removeChildren", new (external_X_ITE_X3D_Fields_default()).MFNode ()),
1994
- new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "children", new (external_X_ITE_X3D_Fields_default()).MFNode ()),
1995
- ]),
1996
- enumerable: true,
2116
+ this .updateSkinTexture = true;
1997
2117
  },
1998
2118
  });
1999
-
2000
- const HAnimSegment_default_ = HAnimSegment;
2001
2119
  ;
2002
2120
 
2003
2121
  /* harmony default export */ const HAnim_HAnimSegment = (external_X_ITE_X3D_Namespace_default().add ("HAnimSegment", HAnimSegment_default_));
@@ -2009,14 +2127,173 @@ const HAnimSegment_default_ = HAnimSegment;
2009
2127
 
2010
2128
 
2011
2129
 
2130
+
2131
+
2132
+
2133
+ const HAnimSite_hAnimNodes = Symbol .for ("X_ITE.HAnim.hAnimNodes");
2134
+
2012
2135
  function HAnimSite (executionContext)
2013
2136
  {
2014
2137
  external_X_ITE_X3D_X3DTransformNode_default().call (this, executionContext);
2015
2138
 
2016
2139
  this .addType ((external_X_ITE_X3D_X3DConstants_default()).HAnimSite);
2140
+
2141
+ // Private properties
2142
+
2143
+ this .displacerNodes = [ ];
2144
+ this .jointMatrix = new (external_X_ITE_X3D_Matrix4_default()) ();
2017
2145
  }
2018
2146
 
2019
- Object .setPrototypeOf (HAnimSite .prototype, (external_X_ITE_X3D_X3DTransformNode_default()).prototype);
2147
+ Object .assign (Object .setPrototypeOf (HAnimSite .prototype, (external_X_ITE_X3D_X3DTransformNode_default()).prototype),
2148
+ {
2149
+ initialize ()
2150
+ {
2151
+ external_X_ITE_X3D_X3DTransformNode_default().prototype .initialize .call (this);
2152
+
2153
+ // Events
2154
+
2155
+ this ._displacers .addInterest ("set_displacers__", this);
2156
+ this ._coord .addInterest ("set_coord__", this);
2157
+
2158
+ this .set_displacers__ ();
2159
+ this .set_coord__ ();
2160
+ },
2161
+ getHAnimKey ()
2162
+ {
2163
+ return this .coordNode .getHAnimKey ();
2164
+ },
2165
+ getDisplacers ()
2166
+ {
2167
+ return this .displacerNodes;
2168
+ },
2169
+ getJointMatrix ()
2170
+ {
2171
+ return this .jointMatrix;
2172
+ },
2173
+ set_displacers__ ()
2174
+ {
2175
+ const displacerNodes = this .displacerNodes;
2176
+
2177
+ for (const displacerNode of displacerNodes)
2178
+ {
2179
+ displacerNode ._coordIndex .removeInterest ("set_displacementsTexture__", this);
2180
+ displacerNode ._displacements .removeInterest ("set_displacementsTexture__", this);
2181
+ displacerNode ._coordIndex .removeInterest ("set_displacementWeightsTexture__", this);
2182
+ displacerNode ._weight .removeInterest ("set_displacementWeightsTexture__", this);
2183
+ }
2184
+
2185
+ displacerNodes .length = 0;
2186
+
2187
+ for (const node of this ._displacers)
2188
+ {
2189
+ const displacerNode = external_X_ITE_X3D_X3DCast_default() ((external_X_ITE_X3D_X3DConstants_default()).HAnimDisplacer, node);
2190
+
2191
+ if (displacerNode)
2192
+ displacerNodes .push (displacerNode);
2193
+ }
2194
+
2195
+ for (const displacerNode of displacerNodes)
2196
+ {
2197
+ displacerNode ._coordIndex .addInterest ("set_displacementsTexture__", this);
2198
+ displacerNode ._displacements .addInterest ("set_displacementsTexture__", this);
2199
+ displacerNode ._coordIndex .addInterest ("set_displacementWeightsTexture__", this);
2200
+ displacerNode ._weight .addInterest ("set_displacementWeightsTexture__", this);
2201
+ }
2202
+
2203
+ this .set_displacementsTexture__ ();
2204
+ this .set_displacementWeightsTexture__ ();
2205
+ },
2206
+ set_displacementsTexture__ ()
2207
+ {
2208
+ this .coordNode ?._displacementsTexture .addEvent ();
2209
+ },
2210
+ set_displacementWeightsTexture__ ()
2211
+ {
2212
+ this .coordNode ?._displacementWeightsTexture .addEvent ();
2213
+ },
2214
+ set_coord__ ()
2215
+ {
2216
+ this .coordNode ?.removeHAnimDisplacers (this);
2217
+
2218
+ this .coordNode = external_X_ITE_X3D_X3DCast_default() ((external_X_ITE_X3D_X3DConstants_default()).Coordinate, this ._coord)
2219
+ ?? external_X_ITE_X3D_X3DCast_default() ((external_X_ITE_X3D_X3DConstants_default()).CoordinateDouble, this ._coord);
2220
+
2221
+ this .coordNode ?.addHAnimDisplacers (this);
2222
+
2223
+ this .set_displacementsTexture__ ();
2224
+ this .set_displacementWeightsTexture__ ();
2225
+ },
2226
+ traverse (type, renderObject)
2227
+ {
2228
+ if (this .coordNode ?.numDisplacements)
2229
+ {
2230
+ const modelViewMatrix = renderObject .getModelViewMatrix ();
2231
+
2232
+ modelViewMatrix .push ();
2233
+ modelViewMatrix .multLeft (this .getMatrix ());
2234
+
2235
+ if (type === (external_X_ITE_X3D_TraverseType_default()).DISPLAY)
2236
+ {
2237
+ const invHumanoidMatrix = renderObject .getInvHumanoidMatrix () .get ();
2238
+
2239
+ this .jointMatrix
2240
+ .assign (modelViewMatrix .get ())
2241
+ .multRight (invHumanoidMatrix);
2242
+
2243
+ this .coordNode .updateSkin ();
2244
+ }
2245
+
2246
+ const hAnimNodes = this .coordNode [HAnimSite_hAnimNodes] ??= [ ];
2247
+
2248
+ hAnimNodes .push (this);
2249
+
2250
+ external_X_ITE_X3D_X3DTransformNode_default().prototype .groupTraverse .call (this, type, renderObject);
2251
+
2252
+ hAnimNodes .pop ();
2253
+ modelViewMatrix .pop ();
2254
+ }
2255
+ else
2256
+ {
2257
+ external_X_ITE_X3D_X3DTransformNode_default().prototype .traverse .call (this, type, renderObject);
2258
+ }
2259
+ },
2260
+ groupTraverse (type, renderObject)
2261
+ {
2262
+ if (this .coordNode ?.getNumDisplacements ())
2263
+ {
2264
+ if (type === (external_X_ITE_X3D_TraverseType_default()).DISPLAY)
2265
+ {
2266
+ const invHumanoidMatrix = renderObject .getInvHumanoidMatrix () .get ();
2267
+
2268
+ this .jointMatrix
2269
+ .assign (renderObject .getModelViewMatrix () .get ())
2270
+ .multRight (invHumanoidMatrix);
2271
+
2272
+ this .coordNode .updateSkin ();
2273
+ }
2274
+
2275
+ const hAnimNodes = this .coordNode [HAnimSite_hAnimNodes] ??= [ ];
2276
+
2277
+ hAnimNodes .push (this);
2278
+
2279
+ external_X_ITE_X3D_X3DTransformNode_default().prototype .groupTraverse .call (this, type, renderObject);
2280
+
2281
+ hAnimNodes .pop ();
2282
+ }
2283
+ else
2284
+ {
2285
+ external_X_ITE_X3D_X3DTransformNode_default().prototype .groupTraverse .call (this, type, renderObject);
2286
+ }
2287
+ },
2288
+ getShaderOptions (options)
2289
+ {
2290
+ this .coordNode .getHAnimShaderOptions (options);
2291
+ },
2292
+ setShaderUniforms (gl, shaderObject)
2293
+ {
2294
+ this .coordNode .setHAnimShaderUniforms (gl, shaderObject);
2295
+ },
2296
+ });
2020
2297
 
2021
2298
  Object .defineProperties (HAnimSite,
2022
2299
  {
@@ -2027,11 +2304,15 @@ Object .defineProperties (HAnimSite,
2027
2304
  new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "metadata", new (external_X_ITE_X3D_Fields_default()).SFNode ()),
2028
2305
  new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "description", new (external_X_ITE_X3D_Fields_default()).SFString ()),
2029
2306
  new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "name", new (external_X_ITE_X3D_Fields_default()).SFString ()),
2307
+ new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "purpose", new (external_X_ITE_X3D_Fields_default()).SFString ()),
2030
2308
  new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "translation", new (external_X_ITE_X3D_Fields_default()).SFVec3f ()),
2031
2309
  new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "rotation", new (external_X_ITE_X3D_Fields_default()).SFRotation ()),
2032
2310
  new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "scale", new (external_X_ITE_X3D_Fields_default()).SFVec3f (1, 1, 1)),
2033
2311
  new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "scaleOrientation", new (external_X_ITE_X3D_Fields_default()).SFRotation ()),
2034
2312
  new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "center", new (external_X_ITE_X3D_Fields_default()).SFVec3f ()),
2313
+ new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "meshVertexIndex", new (external_X_ITE_X3D_Fields_default()).SFInt32 (-1)),
2314
+ new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "displacers", new (external_X_ITE_X3D_Fields_default()).MFNode ()),
2315
+ new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "coord", new (external_X_ITE_X3D_Fields_default()).SFNode ()),
2035
2316
  new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "visible", new (external_X_ITE_X3D_Fields_default()).SFBool (true)),
2036
2317
  new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "bboxDisplay", new (external_X_ITE_X3D_Fields_default()).SFBool ()),
2037
2318
  new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).initializeOnly, "bboxSize", new (external_X_ITE_X3D_Fields_default()).SFVec3f (-1, -1, -1)),