@babylonjs/core 6.16.0 → 6.16.1

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 (141) hide show
  1. package/Bones/boneIKController.js +1 -0
  2. package/Bones/boneIKController.js.map +1 -1
  3. package/Decorators/nodeDecorator.d.ts +2 -1
  4. package/Decorators/nodeDecorator.js.map +1 -1
  5. package/Engines/thinEngine.js +2 -2
  6. package/Engines/thinEngine.js.map +1 -1
  7. package/Gizmos/planeDragGizmo.js +13 -5
  8. package/Gizmos/planeDragGizmo.js.map +1 -1
  9. package/Materials/Node/Blocks/Dual/sceneDepthBlock.js +7 -3
  10. package/Materials/Node/Blocks/Dual/sceneDepthBlock.js.map +1 -1
  11. package/Materials/Node/nodeMaterial.d.ts +1 -1
  12. package/Materials/Node/nodeMaterial.js +6 -2
  13. package/Materials/Node/nodeMaterial.js.map +1 -1
  14. package/Materials/greasedLinePluginMaterial.d.ts +96 -4
  15. package/Materials/greasedLinePluginMaterial.js +15 -6
  16. package/Materials/greasedLinePluginMaterial.js.map +1 -1
  17. package/Materials/greasedLineSimpleMaterial.d.ts +228 -0
  18. package/Materials/greasedLineSimpleMaterial.js +435 -0
  19. package/Materials/greasedLineSimpleMaterial.js.map +1 -0
  20. package/Materials/material.decalMapConfiguration.js +2 -0
  21. package/Materials/material.decalMapConfiguration.js.map +1 -1
  22. package/Materials/meshDebugPluginMaterial.d.ts +66 -17
  23. package/Materials/meshDebugPluginMaterial.js +65 -75
  24. package/Materials/meshDebugPluginMaterial.js.map +1 -1
  25. package/Maths/math.vector.js.map +1 -1
  26. package/Meshes/Builders/greasedLineBuilder.d.ts +3 -2
  27. package/Meshes/Builders/greasedLineBuilder.js +26 -15
  28. package/Meshes/Builders/greasedLineBuilder.js.map +1 -1
  29. package/Meshes/Builders/textBuilder.d.ts +4 -0
  30. package/Meshes/Builders/textBuilder.js +2 -0
  31. package/Meshes/Builders/textBuilder.js.map +1 -1
  32. package/Meshes/Node/Blocks/Instances/instantiateOnFacesBlock.d.ts +2 -2
  33. package/Meshes/Node/Blocks/Instances/instantiateOnFacesBlock.js +9 -3
  34. package/Meshes/Node/Blocks/Instances/instantiateOnFacesBlock.js.map +1 -1
  35. package/Meshes/Node/Blocks/Instances/instantiateOnVerticesBlock.js +1 -1
  36. package/Meshes/Node/Blocks/Instances/instantiateOnVerticesBlock.js.map +1 -1
  37. package/Meshes/Node/Blocks/Set/setNormalsBlock.d.ts +1 -1
  38. package/Meshes/Node/Blocks/Set/setNormalsBlock.js +1 -1
  39. package/Meshes/Node/Blocks/Set/setNormalsBlock.js.map +1 -1
  40. package/Meshes/Node/Blocks/Set/setUVsBlock.js +1 -1
  41. package/Meshes/Node/Blocks/Set/setUVsBlock.js.map +1 -1
  42. package/Meshes/Node/Blocks/Sources/boxBlock.js +1 -1
  43. package/Meshes/Node/Blocks/Sources/boxBlock.js.map +1 -1
  44. package/Meshes/Node/Blocks/Sources/capsuleBlock.js +1 -1
  45. package/Meshes/Node/Blocks/Sources/capsuleBlock.js.map +1 -1
  46. package/Meshes/Node/Blocks/Sources/cylinderBlock.js +1 -1
  47. package/Meshes/Node/Blocks/Sources/cylinderBlock.js.map +1 -1
  48. package/Meshes/Node/Blocks/Sources/discBlock.d.ts +1 -1
  49. package/Meshes/Node/Blocks/Sources/discBlock.js +2 -2
  50. package/Meshes/Node/Blocks/Sources/discBlock.js.map +1 -1
  51. package/Meshes/Node/Blocks/Sources/gridBlock.js +1 -1
  52. package/Meshes/Node/Blocks/Sources/gridBlock.js.map +1 -1
  53. package/Meshes/Node/Blocks/Sources/icoSphereBlock.d.ts +3 -3
  54. package/Meshes/Node/Blocks/Sources/icoSphereBlock.js +4 -4
  55. package/Meshes/Node/Blocks/Sources/icoSphereBlock.js.map +1 -1
  56. package/Meshes/Node/Blocks/Sources/meshBlock.d.ts +1 -1
  57. package/Meshes/Node/Blocks/Sources/meshBlock.js +1 -1
  58. package/Meshes/Node/Blocks/Sources/meshBlock.js.map +1 -1
  59. package/Meshes/Node/Blocks/Sources/nullBlock.d.ts +22 -0
  60. package/Meshes/Node/Blocks/Sources/nullBlock.js +34 -0
  61. package/Meshes/Node/Blocks/Sources/nullBlock.js.map +1 -0
  62. package/Meshes/Node/Blocks/Sources/planeBlock.js +1 -1
  63. package/Meshes/Node/Blocks/Sources/planeBlock.js.map +1 -1
  64. package/Meshes/Node/Blocks/Sources/sphereBlock.js +1 -1
  65. package/Meshes/Node/Blocks/Sources/sphereBlock.js.map +1 -1
  66. package/Meshes/Node/Blocks/Sources/torusBlock.d.ts +1 -1
  67. package/Meshes/Node/Blocks/Sources/torusBlock.js +2 -2
  68. package/Meshes/Node/Blocks/Sources/torusBlock.js.map +1 -1
  69. package/Meshes/Node/Blocks/Teleport/teleportOutBlock.js +1 -1
  70. package/Meshes/Node/Blocks/Teleport/teleportOutBlock.js.map +1 -1
  71. package/Meshes/Node/Blocks/conditionBlock.d.ts +1 -1
  72. package/Meshes/Node/Blocks/conditionBlock.js +2 -2
  73. package/Meshes/Node/Blocks/conditionBlock.js.map +1 -1
  74. package/Meshes/Node/Blocks/geometryInputBlock.d.ts +1 -0
  75. package/Meshes/Node/Blocks/geometryInputBlock.js +32 -1
  76. package/Meshes/Node/Blocks/geometryInputBlock.js.map +1 -1
  77. package/Meshes/Node/Blocks/geometryOptimizeBlock.d.ts +43 -0
  78. package/Meshes/Node/Blocks/geometryOptimizeBlock.js +118 -0
  79. package/Meshes/Node/Blocks/geometryOptimizeBlock.js.map +1 -0
  80. package/Meshes/Node/Blocks/geometryOutputBlock.js +1 -0
  81. package/Meshes/Node/Blocks/geometryOutputBlock.js.map +1 -1
  82. package/Meshes/Node/Blocks/geometryTransformBlock.d.ts +8 -1
  83. package/Meshes/Node/Blocks/geometryTransformBlock.js +20 -1
  84. package/Meshes/Node/Blocks/geometryTransformBlock.js.map +1 -1
  85. package/Meshes/Node/Blocks/geometryTrigonometryBlock.js +4 -1
  86. package/Meshes/Node/Blocks/geometryTrigonometryBlock.js.map +1 -1
  87. package/Meshes/Node/Blocks/{IntFloatConverterBlock.js → intFloatConverterBlock.js} +1 -1
  88. package/Meshes/Node/Blocks/{IntFloatConverterBlock.js.map → intFloatConverterBlock.js.map} +1 -1
  89. package/Meshes/Node/Blocks/mathBlock.d.ts +1 -1
  90. package/Meshes/Node/Blocks/mathBlock.js +6 -2
  91. package/Meshes/Node/Blocks/mathBlock.js.map +1 -1
  92. package/Meshes/Node/Blocks/mergeGeometryBlock.js +1 -1
  93. package/Meshes/Node/Blocks/mergeGeometryBlock.js.map +1 -1
  94. package/Meshes/Node/Blocks/noiseBlock.js +2 -2
  95. package/Meshes/Node/Blocks/noiseBlock.js.map +1 -1
  96. package/Meshes/Node/Blocks/normalizeVectorBlock.d.ts +1 -1
  97. package/Meshes/Node/Blocks/normalizeVectorBlock.js +1 -1
  98. package/Meshes/Node/Blocks/normalizeVectorBlock.js.map +1 -1
  99. package/Meshes/Node/Blocks/randomBlock.d.ts +2 -2
  100. package/Meshes/Node/Blocks/randomBlock.js +7 -2
  101. package/Meshes/Node/Blocks/randomBlock.js.map +1 -1
  102. package/Meshes/Node/Blocks/vectorConverterBlock.d.ts +1 -0
  103. package/Meshes/Node/Blocks/vectorConverterBlock.js +35 -7
  104. package/Meshes/Node/Blocks/vectorConverterBlock.js.map +1 -1
  105. package/Meshes/Node/Enums/nodeGeometryConnectionPointTypes.d.ts +5 -5
  106. package/Meshes/Node/Enums/nodeGeometryConnectionPointTypes.js +5 -5
  107. package/Meshes/Node/Enums/nodeGeometryConnectionPointTypes.js.map +1 -1
  108. package/Meshes/Node/Enums/nodeGeometryContextualSources.d.ts +1 -3
  109. package/Meshes/Node/Enums/nodeGeometryContextualSources.js +0 -2
  110. package/Meshes/Node/Enums/nodeGeometryContextualSources.js.map +1 -1
  111. package/Meshes/Node/Interfaces/nodeGeometryExecutionContext.d.ts +1 -1
  112. package/Meshes/Node/Interfaces/nodeGeometryExecutionContext.js.map +1 -1
  113. package/Meshes/Node/index.d.ts +3 -1
  114. package/Meshes/Node/index.js +3 -1
  115. package/Meshes/Node/index.js.map +1 -1
  116. package/Meshes/Node/nodeGeometry.d.ts +3 -2
  117. package/Meshes/Node/nodeGeometry.js +10 -9
  118. package/Meshes/Node/nodeGeometry.js.map +1 -1
  119. package/Meshes/Node/nodeGeometryBlock.d.ts +7 -1
  120. package/Meshes/Node/nodeGeometryBlock.js +26 -6
  121. package/Meshes/Node/nodeGeometryBlock.js.map +1 -1
  122. package/Meshes/Node/nodeGeometryBlockConnectionPoint.d.ts +1 -1
  123. package/Meshes/Node/nodeGeometryBlockConnectionPoint.js.map +1 -1
  124. package/Meshes/Node/nodeGeometryBuildState.d.ts +1 -1
  125. package/Meshes/Node/nodeGeometryBuildState.js +3 -3
  126. package/Meshes/Node/nodeGeometryBuildState.js.map +1 -1
  127. package/Meshes/greasedLineMesh.d.ts +4 -2
  128. package/Meshes/greasedLineMesh.js +26 -2
  129. package/Meshes/greasedLineMesh.js.map +1 -1
  130. package/Meshes/mesh.vertexData.js.map +1 -1
  131. package/Misc/greasedLineTools.d.ts +1 -1
  132. package/Misc/greasedLineTools.js +1 -1
  133. package/Misc/greasedLineTools.js.map +1 -1
  134. package/Shaders/greasedLine.fragment.d.ts +5 -0
  135. package/Shaders/greasedLine.fragment.js +16 -0
  136. package/Shaders/greasedLine.fragment.js.map +1 -0
  137. package/Shaders/greasedLine.vertex.d.ts +5 -0
  138. package/Shaders/greasedLine.vertex.js +19 -0
  139. package/Shaders/greasedLine.vertex.js.map +1 -0
  140. package/package.json +1 -1
  141. /package/Meshes/Node/Blocks/{IntFloatConverterBlock.d.ts → intFloatConverterBlock.d.ts} +0 -0
@@ -73,6 +73,7 @@ export class BoneIKController {
73
73
  return;
74
74
  }
75
75
  this.mesh = mesh;
76
+ bone.getSkeleton().computeAbsoluteMatrices();
76
77
  const bonePos = bone.getPosition();
77
78
  if (bone.getAbsoluteMatrix().determinant() > 0) {
78
79
  this._rightHandedSystem = true;
@@ -1 +1 @@
1
- {"version":3,"file":"boneIKController.js","sourceRoot":"","sources":["../../../../dev/core/src/Bones/boneIKController.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Bone } from \"./bone\";\r\nimport { Vector3, Quaternion, Matrix } from \"../Maths/math.vector\";\r\nimport type { TransformNode } from \"../Meshes/transformNode\";\r\nimport type { Nullable } from \"../types\";\r\nimport { Space } from \"../Maths/math.axis\";\r\nimport { Logger } from \"../Misc/logger\";\r\n\r\n/**\r\n * Class used to apply inverse kinematics to bones\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/bonesSkeletons#boneikcontroller\r\n */\r\nexport class BoneIKController {\r\n private static _TmpVecs: Vector3[] = [Vector3.Zero(), Vector3.Zero(), Vector3.Zero(), Vector3.Zero(), Vector3.Zero(), Vector3.Zero()];\r\n private static _TmpQuat = Quaternion.Identity();\r\n private static _TmpMats: Matrix[] = [Matrix.Identity(), Matrix.Identity()];\r\n\r\n /**\r\n * Gets or sets the target TransformNode\r\n * Name kept as mesh for back compatibility\r\n */\r\n public targetMesh: TransformNode;\r\n\r\n /** Gets or sets the mesh used as pole */\r\n public poleTargetMesh: TransformNode;\r\n\r\n /**\r\n * Gets or sets the bone used as pole\r\n */\r\n public poleTargetBone: Nullable<Bone>;\r\n\r\n /**\r\n * Gets or sets the target position\r\n */\r\n public targetPosition = Vector3.Zero();\r\n\r\n /**\r\n * Gets or sets the pole target position\r\n */\r\n public poleTargetPosition = Vector3.Zero();\r\n\r\n /**\r\n * Gets or sets the pole target local offset\r\n */\r\n public poleTargetLocalOffset = Vector3.Zero();\r\n\r\n /**\r\n * Gets or sets the pole angle\r\n */\r\n public poleAngle = 0;\r\n\r\n /**\r\n * Gets or sets the TransformNode associated with the controller\r\n * Name kept as mesh for back compatibility\r\n */\r\n public mesh: TransformNode;\r\n\r\n /**\r\n * The amount to slerp (spherical linear interpolation) to the target. Set this to a value between 0 and 1 (a value of 1 disables slerp)\r\n */\r\n public slerpAmount = 1;\r\n\r\n private _bone1Quat = Quaternion.Identity();\r\n private _bone1Mat = Matrix.Identity();\r\n private _bone2Ang = Math.PI;\r\n\r\n private _bone1: Bone;\r\n private _bone2: Bone;\r\n private _bone1Length: number;\r\n private _bone2Length: number;\r\n private _maxAngle = Math.PI;\r\n private _maxReach: number;\r\n\r\n private _rightHandedSystem = false;\r\n\r\n private _bendAxis = Vector3.Right();\r\n private _slerping = false;\r\n\r\n private _adjustRoll = 0;\r\n\r\n private _notEnoughInformation = false;\r\n\r\n /**\r\n * Gets or sets maximum allowed angle\r\n */\r\n public get maxAngle(): number {\r\n return this._maxAngle;\r\n }\r\n\r\n public set maxAngle(value: number) {\r\n this._setMaxAngle(value);\r\n }\r\n\r\n /**\r\n * Creates a new BoneIKController\r\n * @param mesh defines the TransformNode to control\r\n * @param bone defines the bone to control. The bone needs to have a parent bone. It also needs to have a length greater than 0 or a children we can use to infer its length.\r\n * @param options defines options to set up the controller\r\n * @param options.targetMesh\r\n * @param options.poleTargetMesh\r\n * @param options.poleTargetBone\r\n * @param options.poleTargetLocalOffset\r\n * @param options.poleAngle\r\n * @param options.bendAxis\r\n * @param options.maxAngle\r\n * @param options.slerpAmount\r\n */\r\n constructor(\r\n mesh: TransformNode,\r\n bone: Bone,\r\n options?: {\r\n targetMesh?: TransformNode;\r\n poleTargetMesh?: TransformNode;\r\n poleTargetBone?: Bone;\r\n poleTargetLocalOffset?: Vector3;\r\n poleAngle?: number;\r\n bendAxis?: Vector3;\r\n maxAngle?: number;\r\n slerpAmount?: number;\r\n }\r\n ) {\r\n this._bone2 = bone;\r\n const bone1 = bone.getParent();\r\n\r\n if (!bone1) {\r\n this._notEnoughInformation = true;\r\n Logger.Error(\"BoneIKController: bone must have a parent for IK to work.\");\r\n return;\r\n }\r\n this._bone1 = bone1;\r\n\r\n if (this._bone2.children.length === 0 && !this._bone2.length) {\r\n this._notEnoughInformation = true;\r\n Logger.Error(\"BoneIKController: bone must not be a leaf or it should have a length for IK to work.\");\r\n return;\r\n }\r\n\r\n this.mesh = mesh;\r\n\r\n const bonePos = bone.getPosition();\r\n\r\n if (bone.getAbsoluteMatrix().determinant() > 0) {\r\n this._rightHandedSystem = true;\r\n this._bendAxis.x = 0;\r\n this._bendAxis.y = 0;\r\n this._bendAxis.z = -1;\r\n\r\n if (bonePos.x > bonePos.y && bonePos.x > bonePos.z) {\r\n this._adjustRoll = Math.PI * 0.5;\r\n this._bendAxis.z = 1;\r\n }\r\n }\r\n\r\n if (this._bone1.length && this._bone2.length) {\r\n const boneScale1 = this._bone1.getScale();\r\n const boneScale2 = this._bone2.getScale();\r\n\r\n this._bone1Length = this._bone1.length * boneScale1.y * this.mesh.scaling.y;\r\n this._bone2Length = this._bone2.length * boneScale2.y * this.mesh.scaling.y;\r\n } else if (this._bone2.children[0]) {\r\n mesh.computeWorldMatrix(true);\r\n\r\n const pos1 = this._bone2.children[0].getAbsolutePosition(mesh);\r\n const pos2 = this._bone2.getAbsolutePosition(mesh);\r\n const pos3 = this._bone1.getAbsolutePosition(mesh);\r\n\r\n this._bone2Length = Vector3.Distance(pos1, pos2);\r\n this._bone1Length = Vector3.Distance(pos2, pos3);\r\n } else {\r\n mesh.computeWorldMatrix(true);\r\n\r\n const boneScale2 = this._bone2.getScale();\r\n this._bone2Length = this._bone2.length * boneScale2.y * this.mesh.scaling.y;\r\n\r\n const pos2 = this._bone2.getAbsolutePosition(mesh);\r\n const pos3 = this._bone1.getAbsolutePosition(mesh);\r\n\r\n this._bone1Length = Vector3.Distance(pos2, pos3);\r\n }\r\n\r\n this._bone1.getRotationMatrixToRef(Space.WORLD, mesh, this._bone1Mat);\r\n this.maxAngle = Math.PI;\r\n\r\n if (options) {\r\n if (options.targetMesh) {\r\n this.targetMesh = options.targetMesh;\r\n this.targetMesh.computeWorldMatrix(true);\r\n }\r\n\r\n if (options.poleTargetMesh) {\r\n this.poleTargetMesh = options.poleTargetMesh;\r\n this.poleTargetMesh.computeWorldMatrix(true);\r\n } else if (options.poleTargetBone) {\r\n this.poleTargetBone = options.poleTargetBone;\r\n } else if (this._bone1.getParent()) {\r\n this.poleTargetBone = this._bone1.getParent();\r\n }\r\n\r\n if (options.poleTargetLocalOffset) {\r\n this.poleTargetLocalOffset.copyFrom(options.poleTargetLocalOffset);\r\n }\r\n\r\n if (options.poleAngle) {\r\n this.poleAngle = options.poleAngle;\r\n }\r\n\r\n if (options.bendAxis) {\r\n this._bendAxis.copyFrom(options.bendAxis);\r\n }\r\n\r\n if (options.maxAngle) {\r\n this.maxAngle = options.maxAngle;\r\n }\r\n\r\n if (options.slerpAmount) {\r\n this.slerpAmount = options.slerpAmount;\r\n }\r\n }\r\n }\r\n\r\n private _setMaxAngle(ang: number): void {\r\n if (ang < 0) {\r\n ang = 0;\r\n }\r\n\r\n if (ang > Math.PI || ang == undefined) {\r\n ang = Math.PI;\r\n }\r\n\r\n this._maxAngle = ang;\r\n\r\n const a = this._bone1Length;\r\n const b = this._bone2Length;\r\n\r\n this._maxReach = Math.sqrt(a * a + b * b - 2 * a * b * Math.cos(ang));\r\n }\r\n\r\n /**\r\n * Force the controller to update the bones\r\n */\r\n public update(): void {\r\n if (this._notEnoughInformation) {\r\n return;\r\n }\r\n\r\n const target = this.targetPosition;\r\n const poleTarget = this.poleTargetPosition;\r\n\r\n const mat1 = BoneIKController._TmpMats[0];\r\n const mat2 = BoneIKController._TmpMats[1];\r\n\r\n if (this.targetMesh) {\r\n target.copyFrom(this.targetMesh.getAbsolutePosition());\r\n }\r\n\r\n if (this.poleTargetBone) {\r\n this.poleTargetBone.getAbsolutePositionFromLocalToRef(this.poleTargetLocalOffset, this.mesh, poleTarget);\r\n } else if (this.poleTargetMesh) {\r\n Vector3.TransformCoordinatesToRef(this.poleTargetLocalOffset, this.poleTargetMesh.getWorldMatrix(), poleTarget);\r\n }\r\n\r\n const bonePos = BoneIKController._TmpVecs[0];\r\n const zaxis = BoneIKController._TmpVecs[1];\r\n const xaxis = BoneIKController._TmpVecs[2];\r\n const yaxis = BoneIKController._TmpVecs[3];\r\n const upAxis = BoneIKController._TmpVecs[4];\r\n\r\n const tmpQuat = BoneIKController._TmpQuat;\r\n\r\n this._bone1.getAbsolutePositionToRef(this.mesh, bonePos);\r\n\r\n poleTarget.subtractToRef(bonePos, upAxis);\r\n\r\n if (upAxis.x == 0 && upAxis.y == 0 && upAxis.z == 0) {\r\n upAxis.y = 1;\r\n } else {\r\n upAxis.normalize();\r\n }\r\n\r\n target.subtractToRef(bonePos, yaxis);\r\n yaxis.normalize();\r\n\r\n Vector3.CrossToRef(yaxis, upAxis, zaxis);\r\n zaxis.normalize();\r\n\r\n Vector3.CrossToRef(yaxis, zaxis, xaxis);\r\n xaxis.normalize();\r\n\r\n Matrix.FromXYZAxesToRef(xaxis, yaxis, zaxis, mat1);\r\n\r\n const a = this._bone1Length;\r\n const b = this._bone2Length;\r\n\r\n let c = Vector3.Distance(bonePos, target);\r\n\r\n if (this._maxReach > 0) {\r\n c = Math.min(this._maxReach, c);\r\n }\r\n\r\n let acosa = (b * b + c * c - a * a) / (2 * b * c);\r\n let acosb = (c * c + a * a - b * b) / (2 * c * a);\r\n\r\n if (acosa > 1) {\r\n acosa = 1;\r\n }\r\n\r\n if (acosb > 1) {\r\n acosb = 1;\r\n }\r\n\r\n if (acosa < -1) {\r\n acosa = -1;\r\n }\r\n\r\n if (acosb < -1) {\r\n acosb = -1;\r\n }\r\n\r\n const angA = Math.acos(acosa);\r\n const angB = Math.acos(acosb);\r\n\r\n let angC = -angA - angB;\r\n\r\n if (this._rightHandedSystem) {\r\n Matrix.RotationYawPitchRollToRef(0, 0, this._adjustRoll, mat2);\r\n mat2.multiplyToRef(mat1, mat1);\r\n\r\n Matrix.RotationAxisToRef(this._bendAxis, angB, mat2);\r\n mat2.multiplyToRef(mat1, mat1);\r\n } else {\r\n const _tmpVec = BoneIKController._TmpVecs[5];\r\n\r\n _tmpVec.copyFrom(this._bendAxis);\r\n _tmpVec.x *= -1;\r\n\r\n Matrix.RotationAxisToRef(_tmpVec, -angB, mat2);\r\n mat2.multiplyToRef(mat1, mat1);\r\n }\r\n\r\n if (this.poleAngle) {\r\n Matrix.RotationAxisToRef(yaxis, this.poleAngle, mat2);\r\n mat1.multiplyToRef(mat2, mat1);\r\n }\r\n\r\n if (this._bone1) {\r\n if (this.slerpAmount < 1) {\r\n if (!this._slerping) {\r\n Quaternion.FromRotationMatrixToRef(this._bone1Mat, this._bone1Quat);\r\n }\r\n Quaternion.FromRotationMatrixToRef(mat1, tmpQuat);\r\n Quaternion.SlerpToRef(this._bone1Quat, tmpQuat, this.slerpAmount, this._bone1Quat);\r\n angC = this._bone2Ang * (1.0 - this.slerpAmount) + angC * this.slerpAmount;\r\n\r\n this._bone1.setRotationQuaternion(this._bone1Quat, Space.WORLD, this.mesh);\r\n this._slerping = true;\r\n } else {\r\n this._bone1.setRotationMatrix(mat1, Space.WORLD, this.mesh);\r\n this._bone1Mat.copyFrom(mat1);\r\n this._slerping = false;\r\n }\r\n this._updateLinkedTransformRotation(this._bone1);\r\n }\r\n\r\n this._bone2.setAxisAngle(this._bendAxis, angC, Space.LOCAL);\r\n this._updateLinkedTransformRotation(this._bone2);\r\n this._bone2Ang = angC;\r\n }\r\n\r\n private _updateLinkedTransformRotation(bone: Bone): void {\r\n if (bone._linkedTransformNode) {\r\n if (!bone._linkedTransformNode.rotationQuaternion) {\r\n bone._linkedTransformNode.rotationQuaternion = new Quaternion();\r\n }\r\n bone.getRotationQuaternionToRef(Space.LOCAL, null, bone._linkedTransformNode.rotationQuaternion);\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"boneIKController.js","sourceRoot":"","sources":["../../../../dev/core/src/Bones/boneIKController.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Bone } from \"./bone\";\r\nimport { Vector3, Quaternion, Matrix } from \"../Maths/math.vector\";\r\nimport type { TransformNode } from \"../Meshes/transformNode\";\r\nimport type { Nullable } from \"../types\";\r\nimport { Space } from \"../Maths/math.axis\";\r\nimport { Logger } from \"../Misc/logger\";\r\n\r\n/**\r\n * Class used to apply inverse kinematics to bones\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/bonesSkeletons#boneikcontroller\r\n */\r\nexport class BoneIKController {\r\n private static _TmpVecs: Vector3[] = [Vector3.Zero(), Vector3.Zero(), Vector3.Zero(), Vector3.Zero(), Vector3.Zero(), Vector3.Zero()];\r\n private static _TmpQuat = Quaternion.Identity();\r\n private static _TmpMats: Matrix[] = [Matrix.Identity(), Matrix.Identity()];\r\n\r\n /**\r\n * Gets or sets the target TransformNode\r\n * Name kept as mesh for back compatibility\r\n */\r\n public targetMesh: TransformNode;\r\n\r\n /** Gets or sets the mesh used as pole */\r\n public poleTargetMesh: TransformNode;\r\n\r\n /**\r\n * Gets or sets the bone used as pole\r\n */\r\n public poleTargetBone: Nullable<Bone>;\r\n\r\n /**\r\n * Gets or sets the target position\r\n */\r\n public targetPosition = Vector3.Zero();\r\n\r\n /**\r\n * Gets or sets the pole target position\r\n */\r\n public poleTargetPosition = Vector3.Zero();\r\n\r\n /**\r\n * Gets or sets the pole target local offset\r\n */\r\n public poleTargetLocalOffset = Vector3.Zero();\r\n\r\n /**\r\n * Gets or sets the pole angle\r\n */\r\n public poleAngle = 0;\r\n\r\n /**\r\n * Gets or sets the TransformNode associated with the controller\r\n * Name kept as mesh for back compatibility\r\n */\r\n public mesh: TransformNode;\r\n\r\n /**\r\n * The amount to slerp (spherical linear interpolation) to the target. Set this to a value between 0 and 1 (a value of 1 disables slerp)\r\n */\r\n public slerpAmount = 1;\r\n\r\n private _bone1Quat = Quaternion.Identity();\r\n private _bone1Mat = Matrix.Identity();\r\n private _bone2Ang = Math.PI;\r\n\r\n private _bone1: Bone;\r\n private _bone2: Bone;\r\n private _bone1Length: number;\r\n private _bone2Length: number;\r\n private _maxAngle = Math.PI;\r\n private _maxReach: number;\r\n\r\n private _rightHandedSystem = false;\r\n\r\n private _bendAxis = Vector3.Right();\r\n private _slerping = false;\r\n\r\n private _adjustRoll = 0;\r\n\r\n private _notEnoughInformation = false;\r\n\r\n /**\r\n * Gets or sets maximum allowed angle\r\n */\r\n public get maxAngle(): number {\r\n return this._maxAngle;\r\n }\r\n\r\n public set maxAngle(value: number) {\r\n this._setMaxAngle(value);\r\n }\r\n\r\n /**\r\n * Creates a new BoneIKController\r\n * @param mesh defines the TransformNode to control\r\n * @param bone defines the bone to control. The bone needs to have a parent bone. It also needs to have a length greater than 0 or a children we can use to infer its length.\r\n * @param options defines options to set up the controller\r\n * @param options.targetMesh\r\n * @param options.poleTargetMesh\r\n * @param options.poleTargetBone\r\n * @param options.poleTargetLocalOffset\r\n * @param options.poleAngle\r\n * @param options.bendAxis\r\n * @param options.maxAngle\r\n * @param options.slerpAmount\r\n */\r\n constructor(\r\n mesh: TransformNode,\r\n bone: Bone,\r\n options?: {\r\n targetMesh?: TransformNode;\r\n poleTargetMesh?: TransformNode;\r\n poleTargetBone?: Bone;\r\n poleTargetLocalOffset?: Vector3;\r\n poleAngle?: number;\r\n bendAxis?: Vector3;\r\n maxAngle?: number;\r\n slerpAmount?: number;\r\n }\r\n ) {\r\n this._bone2 = bone;\r\n const bone1 = bone.getParent();\r\n\r\n if (!bone1) {\r\n this._notEnoughInformation = true;\r\n Logger.Error(\"BoneIKController: bone must have a parent for IK to work.\");\r\n return;\r\n }\r\n this._bone1 = bone1;\r\n\r\n if (this._bone2.children.length === 0 && !this._bone2.length) {\r\n this._notEnoughInformation = true;\r\n Logger.Error(\"BoneIKController: bone must not be a leaf or it should have a length for IK to work.\");\r\n return;\r\n }\r\n\r\n this.mesh = mesh;\r\n\r\n bone.getSkeleton().computeAbsoluteMatrices();\r\n\r\n const bonePos = bone.getPosition();\r\n\r\n if (bone.getAbsoluteMatrix().determinant() > 0) {\r\n this._rightHandedSystem = true;\r\n this._bendAxis.x = 0;\r\n this._bendAxis.y = 0;\r\n this._bendAxis.z = -1;\r\n\r\n if (bonePos.x > bonePos.y && bonePos.x > bonePos.z) {\r\n this._adjustRoll = Math.PI * 0.5;\r\n this._bendAxis.z = 1;\r\n }\r\n }\r\n\r\n if (this._bone1.length && this._bone2.length) {\r\n const boneScale1 = this._bone1.getScale();\r\n const boneScale2 = this._bone2.getScale();\r\n\r\n this._bone1Length = this._bone1.length * boneScale1.y * this.mesh.scaling.y;\r\n this._bone2Length = this._bone2.length * boneScale2.y * this.mesh.scaling.y;\r\n } else if (this._bone2.children[0]) {\r\n mesh.computeWorldMatrix(true);\r\n\r\n const pos1 = this._bone2.children[0].getAbsolutePosition(mesh);\r\n const pos2 = this._bone2.getAbsolutePosition(mesh);\r\n const pos3 = this._bone1.getAbsolutePosition(mesh);\r\n\r\n this._bone2Length = Vector3.Distance(pos1, pos2);\r\n this._bone1Length = Vector3.Distance(pos2, pos3);\r\n } else {\r\n mesh.computeWorldMatrix(true);\r\n\r\n const boneScale2 = this._bone2.getScale();\r\n this._bone2Length = this._bone2.length * boneScale2.y * this.mesh.scaling.y;\r\n\r\n const pos2 = this._bone2.getAbsolutePosition(mesh);\r\n const pos3 = this._bone1.getAbsolutePosition(mesh);\r\n\r\n this._bone1Length = Vector3.Distance(pos2, pos3);\r\n }\r\n\r\n this._bone1.getRotationMatrixToRef(Space.WORLD, mesh, this._bone1Mat);\r\n this.maxAngle = Math.PI;\r\n\r\n if (options) {\r\n if (options.targetMesh) {\r\n this.targetMesh = options.targetMesh;\r\n this.targetMesh.computeWorldMatrix(true);\r\n }\r\n\r\n if (options.poleTargetMesh) {\r\n this.poleTargetMesh = options.poleTargetMesh;\r\n this.poleTargetMesh.computeWorldMatrix(true);\r\n } else if (options.poleTargetBone) {\r\n this.poleTargetBone = options.poleTargetBone;\r\n } else if (this._bone1.getParent()) {\r\n this.poleTargetBone = this._bone1.getParent();\r\n }\r\n\r\n if (options.poleTargetLocalOffset) {\r\n this.poleTargetLocalOffset.copyFrom(options.poleTargetLocalOffset);\r\n }\r\n\r\n if (options.poleAngle) {\r\n this.poleAngle = options.poleAngle;\r\n }\r\n\r\n if (options.bendAxis) {\r\n this._bendAxis.copyFrom(options.bendAxis);\r\n }\r\n\r\n if (options.maxAngle) {\r\n this.maxAngle = options.maxAngle;\r\n }\r\n\r\n if (options.slerpAmount) {\r\n this.slerpAmount = options.slerpAmount;\r\n }\r\n }\r\n }\r\n\r\n private _setMaxAngle(ang: number): void {\r\n if (ang < 0) {\r\n ang = 0;\r\n }\r\n\r\n if (ang > Math.PI || ang == undefined) {\r\n ang = Math.PI;\r\n }\r\n\r\n this._maxAngle = ang;\r\n\r\n const a = this._bone1Length;\r\n const b = this._bone2Length;\r\n\r\n this._maxReach = Math.sqrt(a * a + b * b - 2 * a * b * Math.cos(ang));\r\n }\r\n\r\n /**\r\n * Force the controller to update the bones\r\n */\r\n public update(): void {\r\n if (this._notEnoughInformation) {\r\n return;\r\n }\r\n\r\n const target = this.targetPosition;\r\n const poleTarget = this.poleTargetPosition;\r\n\r\n const mat1 = BoneIKController._TmpMats[0];\r\n const mat2 = BoneIKController._TmpMats[1];\r\n\r\n if (this.targetMesh) {\r\n target.copyFrom(this.targetMesh.getAbsolutePosition());\r\n }\r\n\r\n if (this.poleTargetBone) {\r\n this.poleTargetBone.getAbsolutePositionFromLocalToRef(this.poleTargetLocalOffset, this.mesh, poleTarget);\r\n } else if (this.poleTargetMesh) {\r\n Vector3.TransformCoordinatesToRef(this.poleTargetLocalOffset, this.poleTargetMesh.getWorldMatrix(), poleTarget);\r\n }\r\n\r\n const bonePos = BoneIKController._TmpVecs[0];\r\n const zaxis = BoneIKController._TmpVecs[1];\r\n const xaxis = BoneIKController._TmpVecs[2];\r\n const yaxis = BoneIKController._TmpVecs[3];\r\n const upAxis = BoneIKController._TmpVecs[4];\r\n\r\n const tmpQuat = BoneIKController._TmpQuat;\r\n\r\n this._bone1.getAbsolutePositionToRef(this.mesh, bonePos);\r\n\r\n poleTarget.subtractToRef(bonePos, upAxis);\r\n\r\n if (upAxis.x == 0 && upAxis.y == 0 && upAxis.z == 0) {\r\n upAxis.y = 1;\r\n } else {\r\n upAxis.normalize();\r\n }\r\n\r\n target.subtractToRef(bonePos, yaxis);\r\n yaxis.normalize();\r\n\r\n Vector3.CrossToRef(yaxis, upAxis, zaxis);\r\n zaxis.normalize();\r\n\r\n Vector3.CrossToRef(yaxis, zaxis, xaxis);\r\n xaxis.normalize();\r\n\r\n Matrix.FromXYZAxesToRef(xaxis, yaxis, zaxis, mat1);\r\n\r\n const a = this._bone1Length;\r\n const b = this._bone2Length;\r\n\r\n let c = Vector3.Distance(bonePos, target);\r\n\r\n if (this._maxReach > 0) {\r\n c = Math.min(this._maxReach, c);\r\n }\r\n\r\n let acosa = (b * b + c * c - a * a) / (2 * b * c);\r\n let acosb = (c * c + a * a - b * b) / (2 * c * a);\r\n\r\n if (acosa > 1) {\r\n acosa = 1;\r\n }\r\n\r\n if (acosb > 1) {\r\n acosb = 1;\r\n }\r\n\r\n if (acosa < -1) {\r\n acosa = -1;\r\n }\r\n\r\n if (acosb < -1) {\r\n acosb = -1;\r\n }\r\n\r\n const angA = Math.acos(acosa);\r\n const angB = Math.acos(acosb);\r\n\r\n let angC = -angA - angB;\r\n\r\n if (this._rightHandedSystem) {\r\n Matrix.RotationYawPitchRollToRef(0, 0, this._adjustRoll, mat2);\r\n mat2.multiplyToRef(mat1, mat1);\r\n\r\n Matrix.RotationAxisToRef(this._bendAxis, angB, mat2);\r\n mat2.multiplyToRef(mat1, mat1);\r\n } else {\r\n const _tmpVec = BoneIKController._TmpVecs[5];\r\n\r\n _tmpVec.copyFrom(this._bendAxis);\r\n _tmpVec.x *= -1;\r\n\r\n Matrix.RotationAxisToRef(_tmpVec, -angB, mat2);\r\n mat2.multiplyToRef(mat1, mat1);\r\n }\r\n\r\n if (this.poleAngle) {\r\n Matrix.RotationAxisToRef(yaxis, this.poleAngle, mat2);\r\n mat1.multiplyToRef(mat2, mat1);\r\n }\r\n\r\n if (this._bone1) {\r\n if (this.slerpAmount < 1) {\r\n if (!this._slerping) {\r\n Quaternion.FromRotationMatrixToRef(this._bone1Mat, this._bone1Quat);\r\n }\r\n Quaternion.FromRotationMatrixToRef(mat1, tmpQuat);\r\n Quaternion.SlerpToRef(this._bone1Quat, tmpQuat, this.slerpAmount, this._bone1Quat);\r\n angC = this._bone2Ang * (1.0 - this.slerpAmount) + angC * this.slerpAmount;\r\n\r\n this._bone1.setRotationQuaternion(this._bone1Quat, Space.WORLD, this.mesh);\r\n this._slerping = true;\r\n } else {\r\n this._bone1.setRotationMatrix(mat1, Space.WORLD, this.mesh);\r\n this._bone1Mat.copyFrom(mat1);\r\n this._slerping = false;\r\n }\r\n this._updateLinkedTransformRotation(this._bone1);\r\n }\r\n\r\n this._bone2.setAxisAngle(this._bendAxis, angC, Space.LOCAL);\r\n this._updateLinkedTransformRotation(this._bone2);\r\n this._bone2Ang = angC;\r\n }\r\n\r\n private _updateLinkedTransformRotation(bone: Bone): void {\r\n if (bone._linkedTransformNode) {\r\n if (!bone._linkedTransformNode.rotationQuaternion) {\r\n bone._linkedTransformNode.rotationQuaternion = new Quaternion();\r\n }\r\n bone.getRotationQuaternionToRef(Space.LOCAL, null, bone._linkedTransformNode.rotationQuaternion);\r\n }\r\n }\r\n}\r\n"]}
@@ -1,3 +1,4 @@
1
+ import type { Nullable } from "../types";
1
2
  import type { Scene } from "../scene";
2
3
  /**
3
4
  * Enum defining the type of properties that can be edited in the property pages in the node editor
@@ -40,7 +41,7 @@ export interface IEditablePropertyOption {
40
41
  /** the onPreviewCommandActivated observer of the preview manager should be triggered */
41
42
  activatePreviewCommand?: boolean;
42
43
  /** a callback to trigger */
43
- callback?: (scene: Scene, block: any) => boolean | undefined | void;
44
+ callback?: (scene: Nullable<Scene>, block: any) => boolean | undefined | void;
44
45
  /** a callback to validate the property. Returns true if the property is ok, else false. If false, the rebuild/update/callback events won't be called */
45
46
  onValidation?: (block: any, propertyName: string) => boolean;
46
47
  };
@@ -1 +1 @@
1
- {"version":3,"file":"nodeDecorator.js","sourceRoot":"","sources":["../../../../dev/core/src/Decorators/nodeDecorator.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,CAAN,IAAY,sBAWX;AAXD,WAAY,sBAAsB;IAC9B,4BAA4B;IAC5B,yEAAO,CAAA;IACP,0BAA0B;IAC1B,qEAAK,CAAA;IACL,wBAAwB;IACxB,iEAAG,CAAA;IACH,4BAA4B;IAC5B,yEAAO,CAAA;IACP,mCAAmC;IACnC,mEAAI,CAAA;AACR,CAAC,EAXW,sBAAsB,KAAtB,sBAAsB,QAWjC;AAqDD;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CAClC,WAAmB,EACnB,eAAuC,sBAAsB,CAAC,OAAO,EACrE,YAAoB,YAAY,EAChC,OAAiC;IAEjC,OAAO,CAAC,MAAW,EAAE,WAAmB,EAAE,EAAE;QACxC,IAAI,SAAS,GAAqC,MAAM,CAAC,UAAU,CAAC;QACpE,IAAI,CAAC,SAAS,EAAE;YACZ,SAAS,GAAG,EAAE,CAAC;YACf,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC;SACjC;QACD,SAAS,CAAC,IAAI,CAAC;YACX,YAAY,EAAE,WAAW;YACzB,WAAW,EAAE,WAAW;YACxB,IAAI,EAAE,YAAY;YAClB,SAAS,EAAE,SAAS;YACpB,OAAO,EAAE,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,EAAE;SACzB,CAAC,CAAC;IACP,CAAC,CAAC;AACN,CAAC","sourcesContent":["import type { Scene } from \"../scene\";\r\n\r\n/**\r\n * Enum defining the type of properties that can be edited in the property pages in the node editor\r\n */\r\nexport enum PropertyTypeForEdition {\r\n /** property is a boolean */\r\n Boolean,\r\n /** property is a float */\r\n Float,\r\n /** property is a int */\r\n Int,\r\n /** property is a Vector2 */\r\n Vector2,\r\n /** property is a list of values */\r\n List,\r\n}\r\n\r\n/**\r\n * Interface that defines an option in a variable of type list\r\n */\r\nexport interface IEditablePropertyListOption {\r\n /** label of the option */\r\n label: string;\r\n /** value of the option */\r\n value: number;\r\n}\r\n\r\n/**\r\n * Interface that defines the options available for an editable property\r\n */\r\nexport interface IEditablePropertyOption {\r\n /** min value */\r\n min?: number;\r\n /** max value */\r\n max?: number;\r\n /** notifiers: indicates which actions to take when the property is changed */\r\n notifiers?: {\r\n /** the entity should be rebuilt */\r\n rebuild?: boolean;\r\n /** the preview should be updated */\r\n update?: boolean;\r\n /** the onPreviewCommandActivated observer of the preview manager should be triggered */\r\n activatePreviewCommand?: boolean;\r\n /** a callback to trigger */\r\n callback?: (scene: Scene, block: any) => boolean | undefined | void;\r\n /** a callback to validate the property. Returns true if the property is ok, else false. If false, the rebuild/update/callback events won't be called */\r\n onValidation?: (block: any, propertyName: string) => boolean;\r\n };\r\n /** list of the options for a variable of type list */\r\n options?: IEditablePropertyListOption[];\r\n}\r\n\r\n/**\r\n * Interface that describes an editable property\r\n */\r\nexport interface IPropertyDescriptionForEdition {\r\n /** name of the property */\r\n propertyName: string;\r\n /** display name of the property */\r\n displayName: string;\r\n /** type of the property */\r\n type: PropertyTypeForEdition;\r\n /** group of the property - all properties with the same group value will be displayed in a specific section */\r\n groupName: string;\r\n /** options for the property */\r\n options: IEditablePropertyOption;\r\n}\r\n\r\n/**\r\n * Decorator that flags a property in a node block as being editable\r\n * @param displayName\r\n * @param propertyType\r\n * @param groupName\r\n * @param options\r\n */\r\nexport function editableInPropertyPage(\r\n displayName: string,\r\n propertyType: PropertyTypeForEdition = PropertyTypeForEdition.Boolean,\r\n groupName: string = \"PROPERTIES\",\r\n options?: IEditablePropertyOption\r\n) {\r\n return (target: any, propertyKey: string) => {\r\n let propStore: IPropertyDescriptionForEdition[] = target._propStore;\r\n if (!propStore) {\r\n propStore = [];\r\n target._propStore = propStore;\r\n }\r\n propStore.push({\r\n propertyName: propertyKey,\r\n displayName: displayName,\r\n type: propertyType,\r\n groupName: groupName,\r\n options: options ?? {},\r\n });\r\n };\r\n}\r\n"]}
1
+ {"version":3,"file":"nodeDecorator.js","sourceRoot":"","sources":["../../../../dev/core/src/Decorators/nodeDecorator.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,CAAN,IAAY,sBAWX;AAXD,WAAY,sBAAsB;IAC9B,4BAA4B;IAC5B,yEAAO,CAAA;IACP,0BAA0B;IAC1B,qEAAK,CAAA;IACL,wBAAwB;IACxB,iEAAG,CAAA;IACH,4BAA4B;IAC5B,yEAAO,CAAA;IACP,mCAAmC;IACnC,mEAAI,CAAA;AACR,CAAC,EAXW,sBAAsB,KAAtB,sBAAsB,QAWjC;AAqDD;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CAClC,WAAmB,EACnB,eAAuC,sBAAsB,CAAC,OAAO,EACrE,YAAoB,YAAY,EAChC,OAAiC;IAEjC,OAAO,CAAC,MAAW,EAAE,WAAmB,EAAE,EAAE;QACxC,IAAI,SAAS,GAAqC,MAAM,CAAC,UAAU,CAAC;QACpE,IAAI,CAAC,SAAS,EAAE;YACZ,SAAS,GAAG,EAAE,CAAC;YACf,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC;SACjC;QACD,SAAS,CAAC,IAAI,CAAC;YACX,YAAY,EAAE,WAAW;YACzB,WAAW,EAAE,WAAW;YACxB,IAAI,EAAE,YAAY;YAClB,SAAS,EAAE,SAAS;YACpB,OAAO,EAAE,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,EAAE;SACzB,CAAC,CAAC;IACP,CAAC,CAAC;AACN,CAAC","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport type { Scene } from \"../scene\";\r\n\r\n/**\r\n * Enum defining the type of properties that can be edited in the property pages in the node editor\r\n */\r\nexport enum PropertyTypeForEdition {\r\n /** property is a boolean */\r\n Boolean,\r\n /** property is a float */\r\n Float,\r\n /** property is a int */\r\n Int,\r\n /** property is a Vector2 */\r\n Vector2,\r\n /** property is a list of values */\r\n List,\r\n}\r\n\r\n/**\r\n * Interface that defines an option in a variable of type list\r\n */\r\nexport interface IEditablePropertyListOption {\r\n /** label of the option */\r\n label: string;\r\n /** value of the option */\r\n value: number;\r\n}\r\n\r\n/**\r\n * Interface that defines the options available for an editable property\r\n */\r\nexport interface IEditablePropertyOption {\r\n /** min value */\r\n min?: number;\r\n /** max value */\r\n max?: number;\r\n /** notifiers: indicates which actions to take when the property is changed */\r\n notifiers?: {\r\n /** the entity should be rebuilt */\r\n rebuild?: boolean;\r\n /** the preview should be updated */\r\n update?: boolean;\r\n /** the onPreviewCommandActivated observer of the preview manager should be triggered */\r\n activatePreviewCommand?: boolean;\r\n /** a callback to trigger */\r\n callback?: (scene: Nullable<Scene>, block: any) => boolean | undefined | void;\r\n /** a callback to validate the property. Returns true if the property is ok, else false. If false, the rebuild/update/callback events won't be called */\r\n onValidation?: (block: any, propertyName: string) => boolean;\r\n };\r\n /** list of the options for a variable of type list */\r\n options?: IEditablePropertyListOption[];\r\n}\r\n\r\n/**\r\n * Interface that describes an editable property\r\n */\r\nexport interface IPropertyDescriptionForEdition {\r\n /** name of the property */\r\n propertyName: string;\r\n /** display name of the property */\r\n displayName: string;\r\n /** type of the property */\r\n type: PropertyTypeForEdition;\r\n /** group of the property - all properties with the same group value will be displayed in a specific section */\r\n groupName: string;\r\n /** options for the property */\r\n options: IEditablePropertyOption;\r\n}\r\n\r\n/**\r\n * Decorator that flags a property in a node block as being editable\r\n * @param displayName\r\n * @param propertyType\r\n * @param groupName\r\n * @param options\r\n */\r\nexport function editableInPropertyPage(\r\n displayName: string,\r\n propertyType: PropertyTypeForEdition = PropertyTypeForEdition.Boolean,\r\n groupName: string = \"PROPERTIES\",\r\n options?: IEditablePropertyOption\r\n) {\r\n return (target: any, propertyKey: string) => {\r\n let propStore: IPropertyDescriptionForEdition[] = target._propStore;\r\n if (!propStore) {\r\n propStore = [];\r\n target._propStore = propStore;\r\n }\r\n propStore.push({\r\n propertyName: propertyKey,\r\n displayName: displayName,\r\n type: propertyType,\r\n groupName: groupName,\r\n options: options ?? {},\r\n });\r\n };\r\n}\r\n"]}
@@ -34,13 +34,13 @@ export class ThinEngine {
34
34
  */
35
35
  // Not mixed with Version for tooling purpose.
36
36
  static get NpmPackage() {
37
- return "babylonjs@6.15.0";
37
+ return "babylonjs@6.16.1";
38
38
  }
39
39
  /**
40
40
  * Returns the current version of the framework
41
41
  */
42
42
  static get Version() {
43
- return "6.15.0";
43
+ return "6.16.1";
44
44
  }
45
45
  /**
46
46
  * Returns a string describing the current engine