@directivegames/genesys.js 3.1.24

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 (1501) hide show
  1. package/README.md +123 -0
  2. package/assets/animation-profiles/mixamo.skeleton-profile.json +63 -0
  3. package/assets/animation-profiles/rigify.skeleton-profile.json +61 -0
  4. package/assets/character/SKM_SB_MediumHuman.glb +0 -0
  5. package/assets/character/config/AnimationStateMachineComponent.md +107 -0
  6. package/assets/character/config/mannequin-anim.json +53 -0
  7. package/assets/character/mannequin.glb +0 -0
  8. package/assets/character/mannequinG.glb +0 -0
  9. package/assets/default.genesys-scene +194 -0
  10. package/assets/models/PickupActors/SM_Pickup_Health.glb +0 -0
  11. package/assets/models/PickupActors/SM_Pickup_Station.glb +0 -0
  12. package/assets/models/SM_Capsule.glb +0 -0
  13. package/assets/models/SM_ChamferCube.glb +0 -0
  14. package/assets/models/SM_Cone.glb +0 -0
  15. package/assets/models/SM_Cube.glb +0 -0
  16. package/assets/models/SM_Cylinder.glb +0 -0
  17. package/assets/models/SM_Plane.glb +0 -0
  18. package/assets/models/SM_Pyramid.glb +0 -0
  19. package/assets/models/SM_Sphere.glb +0 -0
  20. package/assets/models/SM_Torus.glb +0 -0
  21. package/assets/models/SM_Wedge.glb +0 -0
  22. package/assets/models/Weapons/SM_ShotGun_01.glb +0 -0
  23. package/assets/models/demo/Characters/Knightdude.glb +0 -0
  24. package/assets/models/demo/Characters/Spacedude.glb +0 -0
  25. package/assets/models/demo/LowPoly/SM_Bush01.glb +0 -0
  26. package/assets/models/demo/LowPoly/SM_Bush02.glb +0 -0
  27. package/assets/models/demo/LowPoly/SM_Flower01.glb +0 -0
  28. package/assets/models/demo/LowPoly/SM_Flower02.glb +0 -0
  29. package/assets/models/demo/LowPoly/SM_Flower03.glb +0 -0
  30. package/assets/models/demo/LowPoly/SM_GeneratedLandscape.glb +0 -0
  31. package/assets/models/demo/LowPoly/SM_Grass01.glb +0 -0
  32. package/assets/models/demo/LowPoly/SM_Grass02.glb +0 -0
  33. package/assets/models/demo/LowPoly/SM_Grass03.glb +0 -0
  34. package/assets/models/demo/LowPoly/SM_Mushroom01.glb +0 -0
  35. package/assets/models/demo/LowPoly/SM_Mushroom02.glb +0 -0
  36. package/assets/models/demo/LowPoly/SM_MushroomCluster01.glb +0 -0
  37. package/assets/models/demo/LowPoly/SM_MushroomCluster02.glb +0 -0
  38. package/assets/models/demo/LowPoly/SM_Rock01.glb +0 -0
  39. package/assets/models/demo/LowPoly/SM_Rock02.glb +0 -0
  40. package/assets/models/demo/LowPoly/SM_Rock03.glb +0 -0
  41. package/assets/models/demo/LowPoly/SM_Rock04.glb +0 -0
  42. package/assets/models/demo/LowPoly/SM_Tree01.glb +0 -0
  43. package/assets/models/demo/LowPoly/SM_Tree02.glb +0 -0
  44. package/assets/models/demo/LowPoly/SM_Tree03.glb +0 -0
  45. package/assets/models/demo/LowPoly/SM_Tree04.glb +0 -0
  46. package/assets/models/demo/LowPoly/SM_TreeStump.glb +0 -0
  47. package/assets/models/demo/LowPoly/SM_TreeTrunk.glb +0 -0
  48. package/assets/models/demo/LowPoly/low_poly_ship_wreck.glb +0 -0
  49. package/assets/models/demo/SandboxAsset/Blocks/SM_SB_Block.glb +0 -0
  50. package/assets/models/demo/SandboxAsset/Blocks/SM_SB_Block_Dirt.glb +0 -0
  51. package/assets/models/demo/SandboxAsset/Blocks/SM_SB_Block_Grass02.glb +0 -0
  52. package/assets/models/demo/SandboxAsset/Blocks/SM_SB_Block_Grass02Patch.glb +0 -0
  53. package/assets/models/demo/SandboxAsset/Blocks/SM_SB_Block_Gravel.glb +0 -0
  54. package/assets/models/demo/SandboxAsset/Blocks/SM_SB_Block_Lava.glb +0 -0
  55. package/assets/models/demo/SandboxAsset/Blocks/SM_SB_Block_LavaStone.glb +0 -0
  56. package/assets/models/demo/SandboxAsset/Blocks/SM_SB_Block_Sand.glb +0 -0
  57. package/assets/models/demo/SandboxAsset/Blocks/SM_SB_Block_Stone.glb +0 -0
  58. package/assets/models/demo/SandboxAsset/Blocks/SM_SB_Block_StoneA.glb +0 -0
  59. package/assets/models/demo/SandboxAsset/Blocks/SM_SB_Block_StoneC.glb +0 -0
  60. package/assets/models/demo/SandboxAsset/Blocks/SM_SB_Block_Wall.glb +0 -0
  61. package/assets/models/demo/SandboxAsset/Blocks/SM_SB_Block_Water.glb +0 -0
  62. package/assets/models/demo/SandboxAsset/Characters/SKM_Arachnids_Large_Spider.glb +0 -0
  63. package/assets/models/demo/SandboxAsset/Characters/SKM_SB_Adventurer_F01.glb +0 -0
  64. package/assets/models/demo/SandboxAsset/Characters/SKM_SB_Adventurer_M01.glb +0 -0
  65. package/assets/models/demo/SandboxAsset/Characters/SKM_SB_Aviator_F01.glb +0 -0
  66. package/assets/models/demo/SandboxAsset/Characters/SKM_SB_Aviator_M01.glb +0 -0
  67. package/assets/models/demo/SandboxAsset/Characters/SKM_SB_Aztec_F01.glb +0 -0
  68. package/assets/models/demo/SandboxAsset/Characters/SKM_SB_Aztec_M01.glb +0 -0
  69. package/assets/models/demo/SandboxAsset/Characters/SKM_SB_MediumHuman.glb +0 -0
  70. package/assets/models/demo/SandboxAsset/Characters/SKM_SB_Shaman.glb +0 -0
  71. package/assets/models/demo/SandboxAsset/Clouds/SM_SB_Cloud_01.glb +0 -0
  72. package/assets/models/demo/SandboxAsset/Clouds/SM_SB_Cloud_02.glb +0 -0
  73. package/assets/models/demo/SandboxAsset/Clouds/SM_SB_Cloud_03.glb +0 -0
  74. package/assets/models/demo/SandboxAsset/Clouds/SM_SB_Cloud_04.glb +0 -0
  75. package/assets/models/demo/SandboxAsset/Clouds/SM_SB_Env_Cloud_01.glb +0 -0
  76. package/assets/models/demo/SandboxAsset/Clouds/SM_SB_Env_Cloud_02.glb +0 -0
  77. package/assets/models/demo/SandboxAsset/Clouds/SM_SB_Env_Cloud_03.glb +0 -0
  78. package/assets/models/demo/SandboxAsset/Clouds/SM_SB_Env_Cloud_04.glb +0 -0
  79. package/assets/models/demo/SandboxAsset/Clouds/SM_SB_Env_Cloud_05.glb +0 -0
  80. package/assets/models/demo/SandboxAsset/Clouds/SM_SB_Env_Cloud_06.glb +0 -0
  81. package/assets/models/demo/SandboxAsset/Clouds/SM_SB_Env_Cloud_07.glb +0 -0
  82. package/assets/models/demo/SandboxAsset/Clouds/SM_SB_SmallCloud01.glb +0 -0
  83. package/assets/models/demo/SandboxAsset/Clouds/SM_SB_SmallCloud_02.glb +0 -0
  84. package/assets/models/demo/SandboxAsset/Decorations/SM_SB_AztecStatue.glb +0 -0
  85. package/assets/models/demo/SandboxAsset/Decorations/SM_SB_Claypot_01.glb +0 -0
  86. package/assets/models/demo/SandboxAsset/Decorations/SM_SB_Claypot_02.glb +0 -0
  87. package/assets/models/demo/SandboxAsset/Decorations/SM_SB_Claypot_03.glb +0 -0
  88. package/assets/models/demo/SandboxAsset/Decorations/SM_SB_Claypot_Broken_01.glb +0 -0
  89. package/assets/models/demo/SandboxAsset/Decorations/SM_SB_Claypot_Broken_02.glb +0 -0
  90. package/assets/models/demo/SandboxAsset/Decorations/SM_SB_Crystal_Calendar_01.glb +0 -0
  91. package/assets/models/demo/SandboxAsset/Decorations/SM_SB_Crystal_Calendar_02.glb +0 -0
  92. package/assets/models/demo/SandboxAsset/Decorations/SM_SB_Crystal_Skull.glb +0 -0
  93. package/assets/models/demo/SandboxAsset/Decorations/SM_SB_Goldpile_01.glb +0 -0
  94. package/assets/models/demo/SandboxAsset/Decorations/SM_SB_Goldpile_02.glb +0 -0
  95. package/assets/models/demo/SandboxAsset/Decorations/SM_SB_Rubble_Skeleton_01.glb +0 -0
  96. package/assets/models/demo/SandboxAsset/Decorations/SM_SB_TreasureChest.glb +0 -0
  97. package/assets/models/demo/SandboxAsset/Decorations/SM_SB_TreasureChestSmall.glb +0 -0
  98. package/assets/models/demo/SandboxAsset/Decorations/SM_SB_Wall_Deco_01.glb +0 -0
  99. package/assets/models/demo/SandboxAsset/Dungeon/SM_SB_AngledWall.glb +0 -0
  100. package/assets/models/demo/SandboxAsset/Dungeon/SM_SB_Arch.glb +0 -0
  101. package/assets/models/demo/SandboxAsset/Dungeon/SM_SB_Beams.glb +0 -0
  102. package/assets/models/demo/SandboxAsset/Dungeon/SM_SB_Beams02.glb +0 -0
  103. package/assets/models/demo/SandboxAsset/Dungeon/SM_SB_Corner.glb +0 -0
  104. package/assets/models/demo/SandboxAsset/Dungeon/SM_SB_CornerB.glb +0 -0
  105. package/assets/models/demo/SandboxAsset/Dungeon/SM_SB_Floor.glb +0 -0
  106. package/assets/models/demo/SandboxAsset/Dungeon/SM_SB_Floor2.glb +0 -0
  107. package/assets/models/demo/SandboxAsset/Dungeon/SM_SB_Floor3.glb +0 -0
  108. package/assets/models/demo/SandboxAsset/Dungeon/SM_SB_GrowingTree.glb +0 -0
  109. package/assets/models/demo/SandboxAsset/Dungeon/SM_SB_HalfFloor.glb +0 -0
  110. package/assets/models/demo/SandboxAsset/Dungeon/SM_SB_IronBucket.glb +0 -0
  111. package/assets/models/demo/SandboxAsset/Dungeon/SM_SB_Pillar.glb +0 -0
  112. package/assets/models/demo/SandboxAsset/Dungeon/SM_SB_Railing.glb +0 -0
  113. package/assets/models/demo/SandboxAsset/Dungeon/SM_SB_RoofWindow.glb +0 -0
  114. package/assets/models/demo/SandboxAsset/Dungeon/SM_SB_Stairs01.glb +0 -0
  115. package/assets/models/demo/SandboxAsset/Dungeon/SM_SB_Statue.glb +0 -0
  116. package/assets/models/demo/SandboxAsset/Dungeon/SM_SB_Wall.glb +0 -0
  117. package/assets/models/demo/SandboxAsset/Dungeon/SM_SB_Wall02.glb +0 -0
  118. package/assets/models/demo/SandboxAsset/Dungeon/SM_SB_Wall03.glb +0 -0
  119. package/assets/models/demo/SandboxAsset/Dungeon/SM_SB_Wall03B.glb +0 -0
  120. package/assets/models/demo/SandboxAsset/Dungeon/SM_SB_Wall04.glb +0 -0
  121. package/assets/models/demo/SandboxAsset/Dungeon/SM_SB_WallB.glb +0 -0
  122. package/assets/models/demo/SandboxAsset/Dungeon/SM_SB_WallTrim.glb +0 -0
  123. package/assets/models/demo/SandboxAsset/Floors/SM_SB_Floor_01.glb +0 -0
  124. package/assets/models/demo/SandboxAsset/Floors/SM_SB_Floor_02.glb +0 -0
  125. package/assets/models/demo/SandboxAsset/Flowers/SM_SB_Flower01_ColorA.glb +0 -0
  126. package/assets/models/demo/SandboxAsset/Flowers/SM_SB_Flower01_ColorB.glb +0 -0
  127. package/assets/models/demo/SandboxAsset/Flowers/SM_SB_Flower02_ColorA.glb +0 -0
  128. package/assets/models/demo/SandboxAsset/Flowers/SM_SB_Flower02_ColorB.glb +0 -0
  129. package/assets/models/demo/SandboxAsset/Flowers/SM_SB_Flower03_ColorA.glb +0 -0
  130. package/assets/models/demo/SandboxAsset/Flowers/SM_SB_Flower03_ColorB.glb +0 -0
  131. package/assets/models/demo/SandboxAsset/Foliage/SM_SB_Beach_Grass.glb +0 -0
  132. package/assets/models/demo/SandboxAsset/Foliage/SM_SB_Birgaradier_Tree.glb +0 -0
  133. package/assets/models/demo/SandboxAsset/Foliage/SM_SB_Cactus_Long.glb +0 -0
  134. package/assets/models/demo/SandboxAsset/Foliage/SM_SB_ElephantEar01.glb +0 -0
  135. package/assets/models/demo/SandboxAsset/Foliage/SM_SB_Fern01.glb +0 -0
  136. package/assets/models/demo/SandboxAsset/Foliage/SM_SB_GrassPatch.glb +0 -0
  137. package/assets/models/demo/SandboxAsset/Foliage/SM_SB_Growing_Plant.glb +0 -0
  138. package/assets/models/demo/SandboxAsset/Foliage/SM_SB_Leaf_bush01.glb +0 -0
  139. package/assets/models/demo/SandboxAsset/Foliage/SM_SB_Middle_Moss.glb +0 -0
  140. package/assets/models/demo/SandboxAsset/Foliage/SM_SB_Oracle_Tree.glb +0 -0
  141. package/assets/models/demo/SandboxAsset/Foliage/SM_SB_Plant01.glb +0 -0
  142. package/assets/models/demo/SandboxAsset/Foliage/SM_SB_Tree01.glb +0 -0
  143. package/assets/models/demo/SandboxAsset/Foliage/SM_SB_plant.glb +0 -0
  144. package/assets/models/demo/SandboxAsset/GameItems/SM_SB_Arrow_large_01.glb +0 -0
  145. package/assets/models/demo/SandboxAsset/GameItems/SM_SB_Arrow_large_02.glb +0 -0
  146. package/assets/models/demo/SandboxAsset/GameItems/SM_SB_HangingBridgeEnd_01.glb +0 -0
  147. package/assets/models/demo/SandboxAsset/GameItems/SM_SB_HangingBridgeEnd_02.glb +0 -0
  148. package/assets/models/demo/SandboxAsset/GameItems/SM_SB_HangingBridgeMiddle.glb +0 -0
  149. package/assets/models/demo/SandboxAsset/GameItems/SM_SB_MovingPlatform_01.glb +0 -0
  150. package/assets/models/demo/SandboxAsset/GameItems/SM_SB_MovingWall.glb +0 -0
  151. package/assets/models/demo/SandboxAsset/GameItems/SM_SB_ObsidianTrap.glb +0 -0
  152. package/assets/models/demo/SandboxAsset/GameItems/SM_SB_Scull_Arrowshooter01.glb +0 -0
  153. package/assets/models/demo/SandboxAsset/GameItems/SM_SB_Scull_Arrowshooter02.glb +0 -0
  154. package/assets/models/demo/SandboxAsset/GameItems/SM_SB_Snakepit.glb +0 -0
  155. package/assets/models/demo/SandboxAsset/Rocks/SM_SB_Rock01.glb +0 -0
  156. package/assets/models/demo/SandboxAsset/Rocks/SM_SB_Rock02.glb +0 -0
  157. package/assets/models/demo/SandboxAsset/Slides/SM_SB_Slide_Corner_L.glb +0 -0
  158. package/assets/models/demo/SandboxAsset/Slides/SM_SB_Slide_Corner_R.glb +0 -0
  159. package/assets/models/demo/SandboxAsset/Slides/SM_SB_Slide_Edge.glb +0 -0
  160. package/assets/models/demo/SandboxAsset/Slides/SM_SB_Slide_End01.glb +0 -0
  161. package/assets/models/demo/SandboxAsset/Slides/SM_SB_Slide_Module.glb +0 -0
  162. package/assets/models/demo/SandboxAsset/Trees/SM_SB_CaribbeanPine_01.glb +0 -0
  163. package/assets/models/demo/SandboxAsset/Trees/SM_SB_CaribbeanPine_02.glb +0 -0
  164. package/assets/models/demo/SandboxAsset/Trees/SM_SB_CoconutTree01.glb +0 -0
  165. package/assets/models/demo/SandboxAsset/Trees/SM_SB_CoconutTree02.glb +0 -0
  166. package/assets/models/demo/SandboxAsset/Trees/SM_SB_KapokTree_01.glb +0 -0
  167. package/assets/models/demo/SandboxAsset/Trees/SM_SB_KapokTree_02.glb +0 -0
  168. package/assets/models/demo/SandboxAsset/Trees/SM_SB_QueenPalm_01.glb +0 -0
  169. package/assets/models/demo/SandboxAsset/Trees/SM_SB_QueenPalm_02.glb +0 -0
  170. package/assets/models/demo/SandboxAsset/Trees/SM_SB_TreeTrunk.glb +0 -0
  171. package/assets/models/demo/SandboxAsset/Trims/SM_SB_TrimA.glb +0 -0
  172. package/assets/models/demo/SandboxAsset/Trims/SM_SB_TrimB.glb +0 -0
  173. package/assets/models/demo/SandboxAsset/Trims/SM_SB_TrimC.glb +0 -0
  174. package/assets/models/demo/SandboxAsset/Trims/SM_SB_TrimD.glb +0 -0
  175. package/assets/models/demo/SandboxAsset/Trims/SM_SB_TrimE.glb +0 -0
  176. package/assets/models/demo/SandboxAsset/Trims/SM_SB_TrimF.glb +0 -0
  177. package/assets/models/demo/SandboxAsset/Trims/SM_SB_TrimG.glb +0 -0
  178. package/assets/models/demo/SandboxAsset/Trims/SM_SB_TrimH.glb +0 -0
  179. package/assets/models/demo/SandboxAsset/Trims/SM_SB_TrimI.glb +0 -0
  180. package/assets/models/demo/SandboxAsset/Trims/SM_SB_TrimJ.glb +0 -0
  181. package/assets/models/demo/SandboxAsset/Walls/SM_SB_Aztec_Wall_01.glb +0 -0
  182. package/assets/models/demo/SandboxAsset/Walls/SM_SB_Aztec_Wall_02.glb +0 -0
  183. package/assets/models/demo/SandboxAsset/Walls/SM_SB_Brick01.glb +0 -0
  184. package/assets/models/demo/SandboxAsset/Walls/SM_SB_BrickBlock01.glb +0 -0
  185. package/assets/models/demo/SandboxAsset/Walls/SM_SB_BrickBlock02.glb +0 -0
  186. package/assets/models/demo/SandboxAsset/Walls/SM_SB_Vineswall01.glb +0 -0
  187. package/assets/models/demo/SandboxAsset/Walls/SM_SB_WallDecoA.glb +0 -0
  188. package/assets/models/demo/SandboxAsset/Walls/SM_SB_Wall_L_01B_128x96.glb +0 -0
  189. package/assets/models/demo/SandboxAsset/Walls/SM_SB_Wall_L_01_128x96.glb +0 -0
  190. package/assets/models/demo/SandboxAsset/Walls/SM_SB_Wall_L_02B_128x96.glb +0 -0
  191. package/assets/models/demo/SandboxAsset/Walls/SM_SB_Wall_L_02C_128x96.glb +0 -0
  192. package/assets/models/demo/SandboxAsset/Walls/SM_SB_Wall_L_02D_128x96.glb +0 -0
  193. package/assets/models/demo/SandboxAsset/Walls/SM_SB_Wall_L_02_128x96.glb +0 -0
  194. package/assets/models/demo/SandboxAsset/Walls/SM_SB_Wall_L_03B_128x96.glb +0 -0
  195. package/assets/models/demo/SandboxAsset/Walls/SM_SB_Wall_L_03_128x96.glb +0 -0
  196. package/assets/prefabs/actors/demo_health_pickup.prefab.json +114 -0
  197. package/assets/prefabs/actors/demo_health_pickup_spawner.prefab.json +102 -0
  198. package/assets/prefabs/actors/test.prefab.json +87 -0
  199. package/assets/shaders/M_Anisotropy_Brushed.material.json +89 -0
  200. package/assets/shaders/M_Anisotropy_Radial.material.json +55 -0
  201. package/assets/shaders/M_Chrome.material.json +18 -0
  202. package/assets/shaders/M_Emissive_Blue.material.json +26 -0
  203. package/assets/shaders/M_Glass_Frosted.material.json +24 -0
  204. package/assets/shaders/M_Glass_ThinFilm.material.json +23 -0
  205. package/assets/shaders/M_Glossy_Grey.material.json +20 -0
  206. package/assets/shaders/M_Matte_White.material.json +20 -0
  207. package/assets/shaders/M_Metal_Anisotropic_Gold.material.json +31 -0
  208. package/assets/shaders/M_Metal_Anisotropic_Silver.material.json +31 -0
  209. package/assets/shaders/M_Metal_Brushed.material.json +61 -0
  210. package/assets/shaders/M_Paint_Clearcoat.material.json +28 -0
  211. package/assets/shaders/M_Stone_Mossy.material.json +153 -0
  212. package/assets/shaders/M_Stone_Mossy_Snow.material.json +151 -0
  213. package/assets/shaders/M_Toon_Anime.material.json +49 -0
  214. package/assets/shaders/M_Toon_Anime_5Step.material.json +45 -0
  215. package/assets/shaders/M_Toon_Cel.material.json +49 -0
  216. package/assets/shaders/M_Transmission.material.json +42 -0
  217. package/assets/shaders/M_Velvet_Blue.material.json +33 -0
  218. package/assets/shaders/M_Velvet_Purple.material.json +30 -0
  219. package/assets/shaders/M_Velvet_Red.material.json +33 -0
  220. package/assets/shaders/M_Wax_SSSLite.material.json +55 -0
  221. package/assets/shaders/matcap/M_Matcap_Blue.material.json +27 -0
  222. package/assets/shaders/matcap/M_Matcap_Rainbow.material.json +26 -0
  223. package/assets/shaders/matcap/M_Matcap_White.material.json +28 -0
  224. package/assets/sounds/birds.mp3 +0 -0
  225. package/assets/sounds/explosion.mp3 +0 -0
  226. package/assets/sounds/game-gun-short.mp3 +0 -0
  227. package/assets/sounds/laser.mp3 +0 -0
  228. package/assets/sounds/pickup.mp3 +0 -0
  229. package/assets/sounds/tuba.mp3 +0 -0
  230. package/assets/textures/Checkerboard.png +0 -0
  231. package/assets/textures/Grid_10x10.png +0 -0
  232. package/assets/textures/T_AnisotropyMap_Radial.png +0 -0
  233. package/assets/textures/T_Anisotropy_Roughness.png +0 -0
  234. package/assets/textures/T_Gradient.png +0 -0
  235. package/assets/textures/T_Grid_01.png +0 -0
  236. package/assets/textures/T_Grid_01.texture.json +7 -0
  237. package/assets/textures/T_Metal_Brushed_Normal.png +0 -0
  238. package/assets/textures/T_Normal.png +0 -0
  239. package/assets/textures/T_Stone_Mossy_AmbientOcclusion.jpg +0 -0
  240. package/assets/textures/T_Stone_Mossy_BaseColor.jpg +0 -0
  241. package/assets/textures/T_Stone_Mossy_Normal.jpg +0 -0
  242. package/assets/textures/T_Stone_Mossy_Roughness.jpg +0 -0
  243. package/assets/textures/T_Stone_Mossy_Snow_AmbientOcclusion.jpg +0 -0
  244. package/assets/textures/T_Stone_Mossy_Snow_BaseColor.jpg +0 -0
  245. package/assets/textures/T_Stone_Mossy_Snow_Normal.jpg +0 -0
  246. package/assets/textures/T_Stone_Mossy_Snow_Roughness.jpg +0 -0
  247. package/assets/textures/T_Toon_Anime_4Step.png +0 -0
  248. package/assets/textures/T_Toon_Anime_5Step.png +0 -0
  249. package/assets/textures/T_Toon_Cel_2Step.png +0 -0
  250. package/assets/textures/T_Wax_Thickness.png +0 -0
  251. package/assets/textures/matcaps/T_Matcap_Rainbow.png.png +0 -0
  252. package/assets/textures/matcaps/beige.png +0 -0
  253. package/assets/textures/matcaps/black.png +0 -0
  254. package/assets/textures/matcaps/blue.png +0 -0
  255. package/assets/textures/matcaps/brown.png +0 -0
  256. package/assets/textures/matcaps/emeraldGreen.png +0 -0
  257. package/assets/textures/matcaps/gold.png +0 -0
  258. package/assets/textures/matcaps/gray.png +0 -0
  259. package/assets/textures/matcaps/green.png +0 -0
  260. package/assets/textures/matcaps/metal.png +0 -0
  261. package/assets/textures/matcaps/orange.png +0 -0
  262. package/assets/textures/matcaps/purple.png +0 -0
  263. package/assets/textures/matcaps/red.png +0 -0
  264. package/assets/textures/matcaps/white.png +0 -0
  265. package/assets/textures/matcaps/yellow.png +0 -0
  266. package/assets/textures/skybox/citrus_orchard_road_puresky_2k.hdr +0 -0
  267. package/assets/textures/skybox/venice_sunset_4k.hdr +0 -0
  268. package/assets/ui/styles/ammo-counter.css +58 -0
  269. package/assets/ui/styles/compass.css +54 -0
  270. package/assets/ui/styles/controls-help.css +21 -0
  271. package/assets/ui/styles/crosshair.css +51 -0
  272. package/assets/ui/styles/inventory-bar.css +112 -0
  273. package/assets/ui/styles/inventory-grid.css +257 -0
  274. package/assets/ui/styles/main-menu.css +59 -0
  275. package/assets/ui/styles/minimap.css +12 -0
  276. package/assets/ui/styles/number-display.css +18 -0
  277. package/assets/ui/styles/progress-bar.css +199 -0
  278. package/assets/ui/styles/reload-indicator.css +76 -0
  279. package/assets/ui/templates/ammo-counter.html +7 -0
  280. package/assets/ui/templates/compass.html +6 -0
  281. package/assets/ui/templates/controls-help.html +9 -0
  282. package/assets/ui/templates/crosshair.html +1 -0
  283. package/assets/ui/templates/inventory-bar.html +38 -0
  284. package/assets/ui/templates/inventory-grid.html +9 -0
  285. package/assets/ui/templates/main-menu.html +10 -0
  286. package/assets/ui/templates/minimap.html +3 -0
  287. package/assets/ui/templates/number-display.html +3 -0
  288. package/assets/ui/templates/progress-bar.html +7 -0
  289. package/assets/ui/templates/reload-indicator.html +13 -0
  290. package/dist/games/animation-demo.d.ts +21 -0
  291. package/dist/games/animation-demo.js +398 -0
  292. package/dist/games/animation-retarget-demo.d.ts +44 -0
  293. package/dist/games/animation-retarget-demo.js +574 -0
  294. package/dist/games/behavior-tree-demo.d.ts +100 -0
  295. package/dist/games/behavior-tree-demo.js +1656 -0
  296. package/dist/games/character_animation.d.ts +15 -0
  297. package/dist/games/character_animation.js +170 -0
  298. package/dist/games/collision-demo.d.ts +4 -0
  299. package/dist/games/collision-demo.js +134 -0
  300. package/dist/games/deprecated/advanced-grid-demo.d.ts +18 -0
  301. package/dist/games/deprecated/advanced-grid-demo.js +305 -0
  302. package/dist/games/deprecated/airplane-demo.d.ts +10 -0
  303. package/dist/games/deprecated/airplane-demo.js +136 -0
  304. package/dist/games/deprecated/character-controller.d.ts +6 -0
  305. package/dist/games/deprecated/character-controller.js +144 -0
  306. package/dist/games/deprecated/chase-game.d.ts +17 -0
  307. package/dist/games/deprecated/chase-game.js +269 -0
  308. package/dist/games/deprecated/collision-config.d.ts +7 -0
  309. package/dist/games/deprecated/collision-config.js +295 -0
  310. package/dist/games/deprecated/door-demo.d.ts +30 -0
  311. package/dist/games/deprecated/door-demo.js +562 -0
  312. package/dist/games/deprecated/fps-demo.d.ts +9 -0
  313. package/dist/games/deprecated/fps-demo.js +119 -0
  314. package/dist/games/deprecated/fps-shotgun-demo.d.ts +19 -0
  315. package/dist/games/deprecated/fps-shotgun-demo.js +221 -0
  316. package/dist/games/deprecated/index.d.ts +25 -0
  317. package/dist/games/deprecated/index.js +26 -0
  318. package/dist/games/deprecated/lightmapping-demo.d.ts +135 -0
  319. package/dist/games/deprecated/lightmapping-demo.js +1344 -0
  320. package/dist/games/deprecated/lights-demo.d.ts +93 -0
  321. package/dist/games/deprecated/lights-demo.js +815 -0
  322. package/dist/games/deprecated/matcap-demo.d.ts +54 -0
  323. package/dist/games/deprecated/matcap-demo.js +788 -0
  324. package/dist/games/deprecated/material-demo-2.d.ts +14 -0
  325. package/dist/games/deprecated/material-demo-2.js +521 -0
  326. package/dist/games/deprecated/material-demo.d.ts +8 -0
  327. package/dist/games/deprecated/material-demo.js +177 -0
  328. package/dist/games/deprecated/memory-leak-test.d.ts +6 -0
  329. package/dist/games/deprecated/memory-leak-test.js +20 -0
  330. package/dist/games/deprecated/model-stress-test.d.ts +10 -0
  331. package/dist/games/deprecated/model-stress-test.js +116 -0
  332. package/dist/games/deprecated/multiplayer-demo.d.ts +13 -0
  333. package/dist/games/deprecated/multiplayer-demo.js +377 -0
  334. package/dist/games/deprecated/physics-demo.d.ts +10 -0
  335. package/dist/games/deprecated/physics-demo.js +200 -0
  336. package/dist/games/deprecated/shadow-demo.d.ts +25 -0
  337. package/dist/games/deprecated/shadow-demo.js +402 -0
  338. package/dist/games/deprecated/shooting-demo.d.ts +19 -0
  339. package/dist/games/deprecated/shooting-demo.js +338 -0
  340. package/dist/games/deprecated/skybox-demo.d.ts +35 -0
  341. package/dist/games/deprecated/skybox-demo.js +323 -0
  342. package/dist/games/deprecated/sound-demo.d.ts +11 -0
  343. package/dist/games/deprecated/sound-demo.js +125 -0
  344. package/dist/games/deprecated/timer-demo.d.ts +11 -0
  345. package/dist/games/deprecated/timer-demo.js +150 -0
  346. package/dist/games/deprecated/voxel-demo.d.ts +5 -0
  347. package/dist/games/deprecated/voxel-demo.js +41 -0
  348. package/dist/games/deprecated/world-commands.d.ts +8 -0
  349. package/dist/games/deprecated/world-commands.js +168 -0
  350. package/dist/games/deprecated/world-loading.d.ts +6 -0
  351. package/dist/games/deprecated/world-loading.js +86 -0
  352. package/dist/games/examples/fps-advanced/const.d.ts +171 -0
  353. package/dist/games/examples/fps-advanced/const.js +116 -0
  354. package/dist/games/examples/fps-advanced/enemies.d.ts +21 -0
  355. package/dist/games/examples/fps-advanced/enemies.js +182 -0
  356. package/dist/games/examples/fps-advanced/game-mode.d.ts +53 -0
  357. package/dist/games/examples/fps-advanced/game-mode.js +353 -0
  358. package/dist/games/examples/fps-advanced/game.d.ts +9 -0
  359. package/dist/games/examples/fps-advanced/game.js +58 -0
  360. package/dist/games/examples/fps-advanced/pickups.d.ts +36 -0
  361. package/dist/games/examples/fps-advanced/pickups.js +225 -0
  362. package/dist/games/examples/fps-advanced/player.d.ts +12 -0
  363. package/dist/games/examples/fps-advanced/player.js +110 -0
  364. package/dist/games/examples/fps-advanced/ui/endgame-ui.d.ts +21 -0
  365. package/dist/games/examples/fps-advanced/ui/endgame-ui.js +291 -0
  366. package/dist/games/examples/fps-advanced/ui/game-hud.d.ts +17 -0
  367. package/dist/games/examples/fps-advanced/ui/game-hud.js +225 -0
  368. package/dist/games/examples/fps-advanced/ui/menu-ui.d.ts +13 -0
  369. package/dist/games/examples/fps-advanced/ui/menu-ui.js +224 -0
  370. package/dist/games/examples/fps-advanced/ui/weapon-hud.d.ts +27 -0
  371. package/dist/games/examples/fps-advanced/ui/weapon-hud.js +259 -0
  372. package/dist/games/examples/fps-advanced/weapons.d.ts +14 -0
  373. package/dist/games/examples/fps-advanced/weapons.js +173 -0
  374. package/dist/games/examples/index.d.ts +5 -0
  375. package/dist/games/examples/index.js +6 -0
  376. package/dist/games/examples/plugin-demo/game.d.ts +7 -0
  377. package/dist/games/examples/plugin-demo/game.js +168 -0
  378. package/dist/games/examples/plugin-demo/plugins/dynamic-lighting.d.ts +8 -0
  379. package/dist/games/examples/plugin-demo/plugins/dynamic-lighting.js +156 -0
  380. package/dist/games/examples/plugin-demo/plugins/instanced-forest.d.ts +7 -0
  381. package/dist/games/examples/plugin-demo/plugins/instanced-forest.js +194 -0
  382. package/dist/games/examples/plugin-demo/plugins/particle-fountain.d.ts +7 -0
  383. package/dist/games/examples/plugin-demo/plugins/particle-fountain.js +64 -0
  384. package/dist/games/examples/plugin-demo/plugins/physics-playground.d.ts +7 -0
  385. package/dist/games/examples/plugin-demo/plugins/physics-playground.js +185 -0
  386. package/dist/games/examples/plugin-demo/plugins/robot-follower.d.ts +7 -0
  387. package/dist/games/examples/plugin-demo/plugins/robot-follower.js +347 -0
  388. package/dist/games/examples/plugin-demo/plugins/scatter-models.d.ts +7 -0
  389. package/dist/games/examples/plugin-demo/plugins/scatter-models.js +70 -0
  390. package/dist/games/examples/plugin-demo/plugins/simple-cube.d.ts +7 -0
  391. package/dist/games/examples/plugin-demo/plugins/simple-cube.js +44 -0
  392. package/dist/games/examples/plugin-demo/plugins/tic-tac-toe.d.ts +8 -0
  393. package/dist/games/examples/plugin-demo/plugins/tic-tac-toe.js +526 -0
  394. package/dist/games/examples/plugin-demo/plugins/wobbling-sphere.d.ts +7 -0
  395. package/dist/games/examples/plugin-demo/plugins/wobbling-sphere.js +63 -0
  396. package/dist/games/examples/side-scroller-advanced/const.d.ts +97 -0
  397. package/dist/games/examples/side-scroller-advanced/const.js +82 -0
  398. package/dist/games/examples/side-scroller-advanced/game-mode.d.ts +54 -0
  399. package/dist/games/examples/side-scroller-advanced/game-mode.js +351 -0
  400. package/dist/games/examples/side-scroller-advanced/game.d.ts +9 -0
  401. package/dist/games/examples/side-scroller-advanced/game.js +70 -0
  402. package/dist/games/examples/side-scroller-advanced/level-generator.d.ts +68 -0
  403. package/dist/games/examples/side-scroller-advanced/level-generator.js +366 -0
  404. package/dist/games/examples/side-scroller-advanced/pickups.d.ts +18 -0
  405. package/dist/games/examples/side-scroller-advanced/pickups.js +147 -0
  406. package/dist/games/examples/side-scroller-advanced/player.d.ts +5 -0
  407. package/dist/games/examples/side-scroller-advanced/player.js +104 -0
  408. package/dist/games/examples/side-scroller-advanced/ui/endgame-ui.d.ts +16 -0
  409. package/dist/games/examples/side-scroller-advanced/ui/endgame-ui.js +290 -0
  410. package/dist/games/examples/side-scroller-advanced/ui/game-hud.d.ts +21 -0
  411. package/dist/games/examples/side-scroller-advanced/ui/game-hud.js +265 -0
  412. package/dist/games/examples/side-scroller-advanced/ui/menu-ui.d.ts +13 -0
  413. package/dist/games/examples/side-scroller-advanced/ui/menu-ui.js +222 -0
  414. package/dist/games/examples/vehicle/base-vehicle.d.ts +30 -0
  415. package/dist/games/examples/vehicle/base-vehicle.js +155 -0
  416. package/dist/games/examples/vehicle/game.d.ts +11 -0
  417. package/dist/games/examples/vehicle/game.js +140 -0
  418. package/dist/games/examples/vehicle/mesh-vehicle.d.ts +19 -0
  419. package/dist/games/examples/vehicle/mesh-vehicle.js +194 -0
  420. package/dist/games/examples/vehicle/player.d.ts +9 -0
  421. package/dist/games/examples/vehicle/player.js +87 -0
  422. package/dist/games/examples/vehicle/primitive-vehicle.d.ts +21 -0
  423. package/dist/games/examples/vehicle/primitive-vehicle.js +269 -0
  424. package/dist/games/examples/vr-game/VRAttachableCube.d.ts +8 -0
  425. package/dist/games/examples/vr-game/VRAttachableCube.js +41 -0
  426. package/dist/games/examples/vr-game/VRInteractableCylinder.d.ts +10 -0
  427. package/dist/games/examples/vr-game/VRInteractableCylinder.js +76 -0
  428. package/dist/games/examples/vr-game/VRPressableButton.d.ts +24 -0
  429. package/dist/games/examples/vr-game/VRPressableButton.js +135 -0
  430. package/dist/games/examples/vr-game/VRProjectileActor.d.ts +19 -0
  431. package/dist/games/examples/vr-game/VRProjectileActor.js +75 -0
  432. package/dist/games/examples/vr-game/VRRifleActor.d.ts +16 -0
  433. package/dist/games/examples/vr-game/VRRifleActor.js +142 -0
  434. package/dist/games/examples/vr-game/game.d.ts +9 -0
  435. package/dist/games/examples/vr-game/game.js +56 -0
  436. package/dist/games/examples/vr-game/index.d.ts +5 -0
  437. package/dist/games/examples/vr-game/index.js +9 -0
  438. package/dist/games/examples/vr-game/scene.d.ts +5 -0
  439. package/dist/games/examples/vr-game/scene.js +83 -0
  440. package/dist/games/hand-tracking-demo.d.ts +10 -0
  441. package/dist/games/hand-tracking-demo.js +65 -0
  442. package/dist/games/index.d.ts +21 -0
  443. package/dist/games/index.js +22 -0
  444. package/dist/games/instanced-mesh-demo.d.ts +45 -0
  445. package/dist/games/instanced-mesh-demo.js +416 -0
  446. package/dist/games/manifold-demo.d.ts +6 -0
  447. package/dist/games/manifold-demo.js +44 -0
  448. package/dist/games/navigation-demo.d.ts +30 -0
  449. package/dist/games/navigation-demo.js +336 -0
  450. package/dist/games/navmesh-primitives-demo.d.ts +167 -0
  451. package/dist/games/navmesh-primitives-demo.js +1105 -0
  452. package/dist/games/performance-test-demo.d.ts +13 -0
  453. package/dist/games/performance-test-demo.js +214 -0
  454. package/dist/games/postprocess-demo.d.ts +46 -0
  455. package/dist/games/postprocess-demo.js +829 -0
  456. package/dist/games/ragdoll-demo-simple.d.ts +34 -0
  457. package/dist/games/ragdoll-demo-simple.js +152 -0
  458. package/dist/games/ragdoll-demo.d.ts +30 -0
  459. package/dist/games/ragdoll-demo.js +258 -0
  460. package/dist/games/swipe-tap-demo.d.ts +24 -0
  461. package/dist/games/swipe-tap-demo.js +238 -0
  462. package/dist/games/tween-demo.d.ts +22 -0
  463. package/dist/games/tween-demo.js +122 -0
  464. package/dist/games/ui-demo.d.ts +75 -0
  465. package/dist/games/ui-demo.js +1054 -0
  466. package/dist/games/vfx-demo.d.ts +48 -0
  467. package/dist/games/vfx-demo.js +821 -0
  468. package/dist/games/vfx-wawa-demo.d.ts +7 -0
  469. package/dist/games/vfx-wawa-demo.js +471 -0
  470. package/dist/games/vr-ui-demo-minimal.d.ts +15 -0
  471. package/dist/games/vr-ui-demo-minimal.js +141 -0
  472. package/dist/games/vr-ui-demo.d.ts +32 -0
  473. package/dist/games/vr-ui-demo.js +871 -0
  474. package/dist/genesys.min.mjs +7035 -0
  475. package/dist/launcher.d.ts +1 -0
  476. package/dist/launcher.js +778 -0
  477. package/dist/scripts/build-browser-bundle.d.ts +5 -0
  478. package/dist/scripts/build-browser-bundle.js +69 -0
  479. package/dist/scripts/check-asset-path.d.ts +1 -0
  480. package/dist/scripts/check-asset-path.js +146 -0
  481. package/dist/scripts/dump-templates.d.ts +1 -0
  482. package/dist/scripts/dump-templates.js +16 -0
  483. package/dist/scripts/generate-dependencies.d.ts +1 -0
  484. package/dist/scripts/generate-dependencies.js +110 -0
  485. package/dist/scripts/generate-prefabs.d.ts +1 -0
  486. package/dist/scripts/generate-prefabs.js +106 -0
  487. package/dist/scripts/load-save-world.d.ts +2 -0
  488. package/dist/scripts/load-save-world.js +35 -0
  489. package/dist/scripts/loc.d.ts +1 -0
  490. package/dist/scripts/loc.js +80 -0
  491. package/dist/scripts/optimize-glb-wrapper.d.ts +1 -0
  492. package/dist/scripts/optimize-glb-wrapper.js +26 -0
  493. package/dist/scripts/optimize-glb.d.ts +41 -0
  494. package/dist/scripts/optimize-glb.js +296 -0
  495. package/dist/scripts/session-server.d.ts +117 -0
  496. package/dist/scripts/session-server.js +782 -0
  497. package/dist/scripts/test-world-loading.d.ts +14 -0
  498. package/dist/scripts/test-world-loading.js +19 -0
  499. package/dist/src/actors/Actor.d.ts +510 -0
  500. package/dist/src/actors/Actor.js +1180 -0
  501. package/dist/src/actors/GLTFMeshActor.d.ts +34 -0
  502. package/dist/src/actors/GLTFMeshActor.js +102 -0
  503. package/dist/src/actors/GlobalParticleManager.d.ts +154 -0
  504. package/dist/src/actors/GlobalParticleManager.js +365 -0
  505. package/dist/src/actors/Pawn.d.ts +191 -0
  506. package/dist/src/actors/Pawn.js +384 -0
  507. package/dist/src/actors/PlayerController.d.ts +177 -0
  508. package/dist/src/actors/PlayerController.js +763 -0
  509. package/dist/src/actors/PlayerStart.d.ts +8 -0
  510. package/dist/src/actors/PlayerStart.js +48 -0
  511. package/dist/src/actors/Projectile.d.ts +50 -0
  512. package/dist/src/actors/Projectile.js +157 -0
  513. package/dist/src/actors/RagdollTestActor.d.ts +31 -0
  514. package/dist/src/actors/RagdollTestActor.js +153 -0
  515. package/dist/src/actors/ThirdPersonCharacterPawn.d.ts +27 -0
  516. package/dist/src/actors/ThirdPersonCharacterPawn.js +149 -0
  517. package/dist/src/actors/index.d.ts +20 -0
  518. package/dist/src/actors/index.js +21 -0
  519. package/dist/src/animation/AnimationClipCache.d.ts +41 -0
  520. package/dist/src/animation/AnimationClipCache.js +97 -0
  521. package/dist/src/animation/AnimationRetargeting.d.ts +100 -0
  522. package/dist/src/animation/AnimationRetargeting.js +455 -0
  523. package/dist/src/animation/SkeletonProfile.d.ts +112 -0
  524. package/dist/src/animation/SkeletonProfile.js +84 -0
  525. package/dist/src/animation/index.d.ts +14 -0
  526. package/dist/src/animation/index.js +15 -0
  527. package/dist/src/animation/retargeting.d.ts +142 -0
  528. package/dist/src/animation/retargeting.js +834 -0
  529. package/dist/src/components/CharacterStatsComponent.d.ts +89 -0
  530. package/dist/src/components/CharacterStatsComponent.js +207 -0
  531. package/dist/src/components/CollisionShapeComponent.d.ts +102 -0
  532. package/dist/src/components/CollisionShapeComponent.js +232 -0
  533. package/dist/src/components/Component.d.ts +82 -0
  534. package/dist/src/components/Component.js +2 -0
  535. package/dist/src/components/FollowComponent.d.ts +67 -0
  536. package/dist/src/components/FollowComponent.js +128 -0
  537. package/dist/src/components/PrimitiveComponent.d.ts +183 -0
  538. package/dist/src/components/PrimitiveComponent.js +368 -0
  539. package/dist/src/components/ResetPositionComponent.d.ts +52 -0
  540. package/dist/src/components/ResetPositionComponent.js +161 -0
  541. package/dist/src/components/SceneComponent.d.ts +225 -0
  542. package/dist/src/components/SceneComponent.js +621 -0
  543. package/dist/src/components/audio/SoundComponent.d.ts +109 -0
  544. package/dist/src/components/audio/SoundComponent.js +353 -0
  545. package/dist/src/components/audio/index.d.ts +11 -0
  546. package/dist/src/components/audio/index.js +12 -0
  547. package/dist/src/components/csg/CSGCombiner.d.ts +87 -0
  548. package/dist/src/components/csg/CSGCombiner.js +240 -0
  549. package/dist/src/components/csg/CSGShapes.d.ts +173 -0
  550. package/dist/src/components/csg/CSGShapes.js +326 -0
  551. package/dist/src/components/csg/index.d.ts +12 -0
  552. package/dist/src/components/csg/index.js +13 -0
  553. package/dist/src/components/gameplay/BaseWeaponComponent.d.ts +175 -0
  554. package/dist/src/components/gameplay/BaseWeaponComponent.js +496 -0
  555. package/dist/src/components/gameplay/DoorComponent.d.ts +236 -0
  556. package/dist/src/components/gameplay/DoorComponent.js +928 -0
  557. package/dist/src/components/gameplay/Equipment.d.ts +22 -0
  558. package/dist/src/components/gameplay/Equipment.js +9 -0
  559. package/dist/src/components/gameplay/GenericEquipment.d.ts +37 -0
  560. package/dist/src/components/gameplay/GenericEquipment.js +90 -0
  561. package/dist/src/components/gameplay/InstantHitWeaponComponent.d.ts +96 -0
  562. package/dist/src/components/gameplay/InstantHitWeaponComponent.js +194 -0
  563. package/dist/src/components/gameplay/PickupComponent.d.ts +130 -0
  564. package/dist/src/components/gameplay/PickupComponent.js +429 -0
  565. package/dist/src/components/gameplay/ProjectileWeaponComponent.d.ts +49 -0
  566. package/dist/src/components/gameplay/ProjectileWeaponComponent.js +93 -0
  567. package/dist/src/components/gameplay/ShotgunComponent.d.ts +18 -0
  568. package/dist/src/components/gameplay/ShotgunComponent.js +216 -0
  569. package/dist/src/components/gameplay/SwitchComponent.d.ts +152 -0
  570. package/dist/src/components/gameplay/SwitchComponent.js +481 -0
  571. package/dist/src/components/gameplay/TriggerZoneComponent.d.ts +157 -0
  572. package/dist/src/components/gameplay/TriggerZoneComponent.js +312 -0
  573. package/dist/src/components/gameplay/index.d.ts +20 -0
  574. package/dist/src/components/gameplay/index.js +21 -0
  575. package/dist/src/components/index.d.ts +16 -0
  576. package/dist/src/components/index.js +18 -0
  577. package/dist/src/components/lights/AmbientLightComponent.d.ts +37 -0
  578. package/dist/src/components/lights/AmbientLightComponent.js +68 -0
  579. package/dist/src/components/lights/DirectionalLightComponent.d.ts +77 -0
  580. package/dist/src/components/lights/DirectionalLightComponent.js +146 -0
  581. package/dist/src/components/lights/HemisphereLightComponent.d.ts +67 -0
  582. package/dist/src/components/lights/HemisphereLightComponent.js +121 -0
  583. package/dist/src/components/lights/LightComponent.d.ts +145 -0
  584. package/dist/src/components/lights/LightComponent.js +315 -0
  585. package/dist/src/components/lights/PointLightComponent.d.ts +61 -0
  586. package/dist/src/components/lights/PointLightComponent.js +103 -0
  587. package/dist/src/components/lights/RectAreaLightComponent.d.ts +78 -0
  588. package/dist/src/components/lights/RectAreaLightComponent.js +135 -0
  589. package/dist/src/components/lights/SpotLightComponent.d.ts +100 -0
  590. package/dist/src/components/lights/SpotLightComponent.js +167 -0
  591. package/dist/src/components/lights/index.d.ts +17 -0
  592. package/dist/src/components/lights/index.js +18 -0
  593. package/dist/src/components/movement/AerialMovementComponent.d.ts +93 -0
  594. package/dist/src/components/movement/AerialMovementComponent.js +339 -0
  595. package/dist/src/components/movement/AirplaneMovementComponent.d.ts +59 -0
  596. package/dist/src/components/movement/AirplaneMovementComponent.js +215 -0
  597. package/dist/src/components/movement/BasePawnMovementComponent.d.ts +132 -0
  598. package/dist/src/components/movement/BasePawnMovementComponent.js +264 -0
  599. package/dist/src/components/movement/CharacterMovementComponent.d.ts +175 -0
  600. package/dist/src/components/movement/CharacterMovementComponent.js +448 -0
  601. package/dist/src/components/movement/DirectionalCharacterMovementComponent.d.ts +17 -0
  602. package/dist/src/components/movement/DirectionalCharacterMovementComponent.js +82 -0
  603. package/dist/src/components/movement/NpcMovementComponent.d.ts +232 -0
  604. package/dist/src/components/movement/NpcMovementComponent.js +890 -0
  605. package/dist/src/components/movement/PathMovementComponent.d.ts +54 -0
  606. package/dist/src/components/movement/PathMovementComponent.js +211 -0
  607. package/dist/src/components/movement/TopDownMovementComponent.d.ts +25 -0
  608. package/dist/src/components/movement/TopDownMovementComponent.js +79 -0
  609. package/dist/src/components/movement/TweenMovementComponent.d.ts +59 -0
  610. package/dist/src/components/movement/TweenMovementComponent.js +362 -0
  611. package/dist/src/components/movement/VehicleMovementComponent.d.ts +98 -0
  612. package/dist/src/components/movement/VehicleMovementComponent.js +402 -0
  613. package/dist/src/components/movement/index.d.ts +19 -0
  614. package/dist/src/components/movement/index.js +20 -0
  615. package/dist/src/components/physics/RagdollComponent.d.ts +118 -0
  616. package/dist/src/components/physics/RagdollComponent.js +671 -0
  617. package/dist/src/components/visual/AnimationComponent.d.ts +29 -0
  618. package/dist/src/components/visual/AnimationComponent.js +234 -0
  619. package/dist/src/components/visual/AnimationStateMachineComponent.d.ts +235 -0
  620. package/dist/src/components/visual/AnimationStateMachineComponent.js +1048 -0
  621. package/dist/src/components/visual/BaseInstancedMeshComponent.d.ts +253 -0
  622. package/dist/src/components/visual/BaseInstancedMeshComponent.js +763 -0
  623. package/dist/src/components/visual/BillboardComponent.d.ts +26 -0
  624. package/dist/src/components/visual/BillboardComponent.js +143 -0
  625. package/dist/src/components/visual/EditorOnlyMeshComponent.d.ts +17 -0
  626. package/dist/src/components/visual/EditorOnlyMeshComponent.js +53 -0
  627. package/dist/src/components/visual/FogComponent.d.ts +32 -0
  628. package/dist/src/components/visual/FogComponent.js +131 -0
  629. package/dist/src/components/visual/GLTFMeshComponent.d.ts +138 -0
  630. package/dist/src/components/visual/GLTFMeshComponent.js +411 -0
  631. package/dist/src/components/visual/InstancedGltfMeshComponent.d.ts +75 -0
  632. package/dist/src/components/visual/InstancedGltfMeshComponent.js +217 -0
  633. package/dist/src/components/visual/InstancedMeshComponent.d.ts +57 -0
  634. package/dist/src/components/visual/InstancedMeshComponent.js +114 -0
  635. package/dist/src/components/visual/MeshComponent.d.ts +71 -0
  636. package/dist/src/components/visual/MeshComponent.js +208 -0
  637. package/dist/src/components/visual/ParticleEmitterComponent.d.ts +145 -0
  638. package/dist/src/components/visual/ParticleEmitterComponent.js +569 -0
  639. package/dist/src/components/visual/SkyboxComponent.d.ts +135 -0
  640. package/dist/src/components/visual/SkyboxComponent.js +342 -0
  641. package/dist/src/components/visual/TerrainMeshComponent.d.ts +119 -0
  642. package/dist/src/components/visual/TerrainMeshComponent.js +309 -0
  643. package/dist/src/components/visual/UI3DComponent.d.ts +60 -0
  644. package/dist/src/components/visual/UI3DComponent.js +248 -0
  645. package/dist/src/components/visual/index.d.ts +23 -0
  646. package/dist/src/components/visual/index.js +24 -0
  647. package/dist/src/components/voxel/MagicaVoxelLoader.d.ts +18 -0
  648. package/dist/src/components/voxel/MagicaVoxelLoader.js +151 -0
  649. package/dist/src/components/voxel/VoxelMeshComponent.d.ts +66 -0
  650. package/dist/src/components/voxel/VoxelMeshComponent.js +246 -0
  651. package/dist/src/components/voxel/index.d.ts +2 -0
  652. package/dist/src/components/voxel/index.js +3 -0
  653. package/dist/src/const.d.ts +61 -0
  654. package/dist/src/const.js +62 -0
  655. package/dist/src/csg/CSGUtils.d.ts +118 -0
  656. package/dist/src/csg/CSGUtils.js +805 -0
  657. package/dist/src/csg/ManifoldWrapper.d.ts +172 -0
  658. package/dist/src/csg/ManifoldWrapper.js +629 -0
  659. package/dist/src/csg/index.d.ts +13 -0
  660. package/dist/src/csg/index.js +14 -0
  661. package/dist/src/dependencies.d.ts +125 -0
  662. package/dist/src/dependencies.js +72 -0
  663. package/dist/src/game/GameBuilder.d.ts +104 -0
  664. package/dist/src/game/GameBuilder.js +263 -0
  665. package/dist/src/game/GameLoop.d.ts +204 -0
  666. package/dist/src/game/GameLoop.js +545 -0
  667. package/dist/src/game/GameMode.d.ts +58 -0
  668. package/dist/src/game/GameMode.js +131 -0
  669. package/dist/src/game/Playable.d.ts +38 -0
  670. package/dist/src/game/Playable.js +83 -0
  671. package/dist/src/game/World.d.ts +512 -0
  672. package/dist/src/game/World.js +1467 -0
  673. package/dist/src/game/index.d.ts +18 -0
  674. package/dist/src/game/index.js +19 -0
  675. package/dist/src/index.d.ts +39 -0
  676. package/dist/src/index.js +40 -0
  677. package/dist/src/materials.d.ts +49 -0
  678. package/dist/src/materials.js +177 -0
  679. package/dist/src/multiplayer/MovementPrediction.d.ts +28 -0
  680. package/dist/src/multiplayer/MovementPrediction.js +204 -0
  681. package/dist/src/multiplayer/NetWorld.d.ts +125 -0
  682. package/dist/src/multiplayer/NetWorld.js +960 -0
  683. package/dist/src/multiplayer/implementations/MemorySession.d.ts +18 -0
  684. package/dist/src/multiplayer/implementations/MemorySession.js +112 -0
  685. package/dist/src/multiplayer/implementations/WebSocketSession.d.ts +134 -0
  686. package/dist/src/multiplayer/implementations/WebSocketSession.js +439 -0
  687. package/dist/src/multiplayer/implementations/index.d.ts +14 -0
  688. package/dist/src/multiplayer/implementations/index.js +15 -0
  689. package/dist/src/multiplayer/index.d.ts +16 -0
  690. package/dist/src/multiplayer/index.js +17 -0
  691. package/dist/src/multiplayer/interface.d.ts +134 -0
  692. package/dist/src/multiplayer/interface.js +87 -0
  693. package/dist/src/navigation/NavigationServer.d.ts +134 -0
  694. package/dist/src/navigation/NavigationServer.js +47 -0
  695. package/dist/src/navigation/RecastNavigationServer.d.ts +82 -0
  696. package/dist/src/navigation/RecastNavigationServer.js +325 -0
  697. package/dist/src/navigation/index.d.ts +16 -0
  698. package/dist/src/navigation/index.js +17 -0
  699. package/dist/src/npc/behavior-tree/BehaviorNode.d.ts +95 -0
  700. package/dist/src/npc/behavior-tree/BehaviorNode.js +177 -0
  701. package/dist/src/npc/behavior-tree/BehaviorTreeComponent.d.ts +104 -0
  702. package/dist/src/npc/behavior-tree/BehaviorTreeComponent.js +341 -0
  703. package/dist/src/npc/behavior-tree/behaviors/BehaviorAction.d.ts +52 -0
  704. package/dist/src/npc/behavior-tree/behaviors/BehaviorAction.js +70 -0
  705. package/dist/src/npc/behavior-tree/behaviors/ConditionEvaluator.d.ts +73 -0
  706. package/dist/src/npc/behavior-tree/behaviors/ConditionEvaluator.js +116 -0
  707. package/dist/src/npc/behavior-tree/behaviors/actions/aerial/AerialMoveToTargetAction.d.ts +33 -0
  708. package/dist/src/npc/behavior-tree/behaviors/actions/aerial/AerialMoveToTargetAction.js +138 -0
  709. package/dist/src/npc/behavior-tree/behaviors/actions/aerial/AerialSearchAction.d.ts +42 -0
  710. package/dist/src/npc/behavior-tree/behaviors/actions/aerial/AerialSearchAction.js +170 -0
  711. package/dist/src/npc/behavior-tree/behaviors/actions/aerial/AerialTrackTargetAction.d.ts +27 -0
  712. package/dist/src/npc/behavior-tree/behaviors/actions/aerial/AerialTrackTargetAction.js +86 -0
  713. package/dist/src/npc/behavior-tree/behaviors/actions/aerial/AerialWanderAction.d.ts +50 -0
  714. package/dist/src/npc/behavior-tree/behaviors/actions/aerial/AerialWanderAction.js +189 -0
  715. package/dist/src/npc/behavior-tree/behaviors/actions/aerial/index.d.ts +4 -0
  716. package/dist/src/npc/behavior-tree/behaviors/actions/aerial/index.js +6 -0
  717. package/dist/src/npc/behavior-tree/behaviors/actions/combat/MeleeAttackAction.d.ts +37 -0
  718. package/dist/src/npc/behavior-tree/behaviors/actions/combat/MeleeAttackAction.js +172 -0
  719. package/dist/src/npc/behavior-tree/behaviors/actions/combat/ShootAction.d.ts +35 -0
  720. package/dist/src/npc/behavior-tree/behaviors/actions/combat/ShootAction.js +173 -0
  721. package/dist/src/npc/behavior-tree/behaviors/actions/combat/index.d.ts +2 -0
  722. package/dist/src/npc/behavior-tree/behaviors/actions/combat/index.js +4 -0
  723. package/dist/src/npc/behavior-tree/behaviors/actions/ground/FleeFromTargetAction.d.ts +34 -0
  724. package/dist/src/npc/behavior-tree/behaviors/actions/ground/FleeFromTargetAction.js +148 -0
  725. package/dist/src/npc/behavior-tree/behaviors/actions/ground/FollowActorAction.d.ts +30 -0
  726. package/dist/src/npc/behavior-tree/behaviors/actions/ground/FollowActorAction.js +129 -0
  727. package/dist/src/npc/behavior-tree/behaviors/actions/ground/MoveToPositionAction.d.ts +27 -0
  728. package/dist/src/npc/behavior-tree/behaviors/actions/ground/MoveToPositionAction.js +115 -0
  729. package/dist/src/npc/behavior-tree/behaviors/actions/ground/SetNextWaypointAction.d.ts +28 -0
  730. package/dist/src/npc/behavior-tree/behaviors/actions/ground/SetNextWaypointAction.js +120 -0
  731. package/dist/src/npc/behavior-tree/behaviors/actions/ground/WanderAction.d.ts +35 -0
  732. package/dist/src/npc/behavior-tree/behaviors/actions/ground/WanderAction.js +172 -0
  733. package/dist/src/npc/behavior-tree/behaviors/actions/ground/index.d.ts +5 -0
  734. package/dist/src/npc/behavior-tree/behaviors/actions/ground/index.js +7 -0
  735. package/dist/src/npc/behavior-tree/behaviors/actions/index.d.ts +4 -0
  736. package/dist/src/npc/behavior-tree/behaviors/actions/index.js +10 -0
  737. package/dist/src/npc/behavior-tree/behaviors/actions/utility/CalculateTacticalPositionAction.d.ts +32 -0
  738. package/dist/src/npc/behavior-tree/behaviors/actions/utility/CalculateTacticalPositionAction.js +123 -0
  739. package/dist/src/npc/behavior-tree/behaviors/actions/utility/LookAtTargetAction.d.ts +43 -0
  740. package/dist/src/npc/behavior-tree/behaviors/actions/utility/LookAtTargetAction.js +140 -0
  741. package/dist/src/npc/behavior-tree/behaviors/actions/utility/WaitAction.d.ts +24 -0
  742. package/dist/src/npc/behavior-tree/behaviors/actions/utility/WaitAction.js +85 -0
  743. package/dist/src/npc/behavior-tree/behaviors/actions/utility/index.d.ts +3 -0
  744. package/dist/src/npc/behavior-tree/behaviors/actions/utility/index.js +5 -0
  745. package/dist/src/npc/behavior-tree/behaviors/conditions/BlackboardValueCondition.d.ts +40 -0
  746. package/dist/src/npc/behavior-tree/behaviors/conditions/BlackboardValueCondition.js +133 -0
  747. package/dist/src/npc/behavior-tree/behaviors/conditions/CanSeeTargetCondition.d.ts +29 -0
  748. package/dist/src/npc/behavior-tree/behaviors/conditions/CanSeeTargetCondition.js +167 -0
  749. package/dist/src/npc/behavior-tree/behaviors/conditions/HasLastKnownPositionCondition.d.ts +19 -0
  750. package/dist/src/npc/behavior-tree/behaviors/conditions/HasLastKnownPositionCondition.js +67 -0
  751. package/dist/src/npc/behavior-tree/behaviors/conditions/HpAbovePercentCondition.d.ts +25 -0
  752. package/dist/src/npc/behavior-tree/behaviors/conditions/HpAbovePercentCondition.js +94 -0
  753. package/dist/src/npc/behavior-tree/behaviors/conditions/IsPlayerNearCondition.d.ts +15 -0
  754. package/dist/src/npc/behavior-tree/behaviors/conditions/IsPlayerNearCondition.js +51 -0
  755. package/dist/src/npc/behavior-tree/behaviors/conditions/TargetBelowHpPercentCondition.d.ts +19 -0
  756. package/dist/src/npc/behavior-tree/behaviors/conditions/TargetBelowHpPercentCondition.js +66 -0
  757. package/dist/src/npc/behavior-tree/behaviors/conditions/TargetInConeCondition.d.ts +26 -0
  758. package/dist/src/npc/behavior-tree/behaviors/conditions/TargetInConeCondition.js +111 -0
  759. package/dist/src/npc/behavior-tree/behaviors/conditions/TimeLimitCondition.d.ts +24 -0
  760. package/dist/src/npc/behavior-tree/behaviors/conditions/TimeLimitCondition.js +81 -0
  761. package/dist/src/npc/behavior-tree/behaviors/conditions/index.d.ts +8 -0
  762. package/dist/src/npc/behavior-tree/behaviors/conditions/index.js +15 -0
  763. package/dist/src/npc/behavior-tree/behaviors/index.d.ts +4 -0
  764. package/dist/src/npc/behavior-tree/behaviors/index.js +8 -0
  765. package/dist/src/npc/behavior-tree/blackboard/Blackboard.d.ts +50 -0
  766. package/dist/src/npc/behavior-tree/blackboard/Blackboard.js +121 -0
  767. package/dist/src/npc/behavior-tree/blackboard/BlackboardKey.d.ts +35 -0
  768. package/dist/src/npc/behavior-tree/blackboard/BlackboardKey.js +66 -0
  769. package/dist/src/npc/behavior-tree/blackboard/index.d.ts +2 -0
  770. package/dist/src/npc/behavior-tree/blackboard/index.js +3 -0
  771. package/dist/src/npc/behavior-tree/index.d.ts +9 -0
  772. package/dist/src/npc/behavior-tree/index.js +19 -0
  773. package/dist/src/npc/behavior-tree/loader/BehaviorTreeLoader.d.ts +91 -0
  774. package/dist/src/npc/behavior-tree/loader/BehaviorTreeLoader.js +240 -0
  775. package/dist/src/npc/behavior-tree/nodes/CompositeNode.d.ts +46 -0
  776. package/dist/src/npc/behavior-tree/nodes/CompositeNode.js +93 -0
  777. package/dist/src/npc/behavior-tree/nodes/LeafNode.d.ts +8 -0
  778. package/dist/src/npc/behavior-tree/nodes/LeafNode.js +11 -0
  779. package/dist/src/npc/behavior-tree/nodes/composite/SelectorNode.d.ts +15 -0
  780. package/dist/src/npc/behavior-tree/nodes/composite/SelectorNode.js +61 -0
  781. package/dist/src/npc/behavior-tree/nodes/composite/SequenceNode.d.ts +15 -0
  782. package/dist/src/npc/behavior-tree/nodes/composite/SequenceNode.js +61 -0
  783. package/dist/src/physics/BasePhysicsEngine.d.ts +389 -0
  784. package/dist/src/physics/BasePhysicsEngine.js +1227 -0
  785. package/dist/src/physics/IPhysicsVehicle.d.ts +150 -0
  786. package/dist/src/physics/IPhysicsVehicle.js +2 -0
  787. package/dist/src/physics/PhysicsEngine.d.ts +425 -0
  788. package/dist/src/physics/PhysicsEngine.js +69 -0
  789. package/dist/src/physics/PhysicsTypes.d.ts +91 -0
  790. package/dist/src/physics/PhysicsTypes.js +24 -0
  791. package/dist/src/physics/implementations/RapierDebugRender.d.ts +24 -0
  792. package/dist/src/physics/implementations/RapierDebugRender.js +66 -0
  793. package/dist/src/physics/implementations/RapierPhysics.d.ts +122 -0
  794. package/dist/src/physics/implementations/RapierPhysics.js +1191 -0
  795. package/dist/src/physics/implementations/RapierVehicle.d.ts +31 -0
  796. package/dist/src/physics/implementations/RapierVehicle.js +236 -0
  797. package/dist/src/physics/index.d.ts +16 -0
  798. package/dist/src/physics/index.js +17 -0
  799. package/dist/src/render/EdgeOutlineEffect.d.ts +40 -0
  800. package/dist/src/render/EdgeOutlineEffect.js +389 -0
  801. package/dist/src/render/PostProcessManager.d.ts +274 -0
  802. package/dist/src/render/PostProcessManager.js +932 -0
  803. package/dist/src/render/Renderer.d.ts +84 -0
  804. package/dist/src/render/Renderer.js +306 -0
  805. package/dist/src/render/Texture.d.ts +51 -0
  806. package/dist/src/render/Texture.js +144 -0
  807. package/dist/src/render/index.d.ts +20 -0
  808. package/dist/src/render/index.js +21 -0
  809. package/dist/src/render/lightmapping/LightmapAtlas.d.ts +52 -0
  810. package/dist/src/render/lightmapping/LightmapAtlas.js +201 -0
  811. package/dist/src/render/lightmapping/LightmapBaker.d.ts +99 -0
  812. package/dist/src/render/lightmapping/LightmapBaker.js +239 -0
  813. package/dist/src/render/lightmapping/LightmapManager.d.ts +148 -0
  814. package/dist/src/render/lightmapping/LightmapManager.js +630 -0
  815. package/dist/src/render/lightmapping/LightmapMaterial.d.ts +26 -0
  816. package/dist/src/render/lightmapping/LightmapMaterial.js +242 -0
  817. package/dist/src/render/lightmapping/LightmapSerialization.d.ts +379 -0
  818. package/dist/src/render/lightmapping/LightmapSerialization.js +244 -0
  819. package/dist/src/render/lightmapping/LightmapSerializer.d.ts +94 -0
  820. package/dist/src/render/lightmapping/LightmapSerializer.js +223 -0
  821. package/dist/src/render/lightmapping/MultiLightmapperMaterial.d.ts +41 -0
  822. package/dist/src/render/lightmapping/MultiLightmapperMaterial.js +424 -0
  823. package/dist/src/render/lightmapping/index.d.ts +9 -0
  824. package/dist/src/render/lightmapping/index.js +6 -0
  825. package/dist/src/render/postprocessing/EffectPassWrapper.d.ts +17 -0
  826. package/dist/src/render/postprocessing/EffectPassWrapper.js +47 -0
  827. package/dist/src/render/postprocessing/ObjectOutlineEffect.d.ts +49 -0
  828. package/dist/src/render/postprocessing/ObjectOutlineEffect.js +364 -0
  829. package/dist/src/render/postprocessing/index.d.ts +2 -0
  830. package/dist/src/render/postprocessing/index.js +3 -0
  831. package/dist/src/runtime/GameRuntime.d.ts +25 -0
  832. package/dist/src/runtime/GameRuntime.js +131 -0
  833. package/dist/src/runtime/InjectedDependencies.d.ts +13 -0
  834. package/dist/src/runtime/InjectedDependencies.js +63 -0
  835. package/dist/src/runtime/Utils.d.ts +16 -0
  836. package/dist/src/runtime/Utils.js +113 -0
  837. package/dist/src/runtime/index.d.ts +4 -0
  838. package/dist/src/runtime/index.js +5 -0
  839. package/dist/src/runtime/materials/MatcapShaderMaterial.d.ts +23 -0
  840. package/dist/src/runtime/materials/MatcapShaderMaterial.js +235 -0
  841. package/dist/src/runtime/materials/index.d.ts +1 -0
  842. package/dist/src/runtime/materials/index.js +2 -0
  843. package/dist/src/scripting/Plugin.d.ts +64 -0
  844. package/dist/src/scripting/Plugin.js +2 -0
  845. package/dist/src/scripting/PluginManager.d.ts +40 -0
  846. package/dist/src/scripting/PluginManager.js +111 -0
  847. package/dist/src/scripting/index.d.ts +1 -0
  848. package/dist/src/scripting/index.js +2 -0
  849. package/dist/src/storage/defaultStorageProvider.d.ts +15 -0
  850. package/dist/src/storage/defaultStorageProvider.js +73 -0
  851. package/dist/src/storage/index.d.ts +16 -0
  852. package/dist/src/storage/index.js +17 -0
  853. package/dist/src/storage/projectContext.d.ts +80 -0
  854. package/dist/src/storage/projectContext.js +164 -0
  855. package/dist/src/storage/storageProvider.d.ts +148 -0
  856. package/dist/src/storage/storageProvider.js +181 -0
  857. package/dist/src/systems/ClassRegistry.d.ts +98 -0
  858. package/dist/src/systems/ClassRegistry.js +478 -0
  859. package/dist/src/systems/ConsoleManager.d.ts +66 -0
  860. package/dist/src/systems/ConsoleManager.js +465 -0
  861. package/dist/src/systems/ConsoleVariableHandler.d.ts +17 -0
  862. package/dist/src/systems/ConsoleVariableHandler.js +120 -0
  863. package/dist/src/systems/ConsoleVariableManager.d.ts +128 -0
  864. package/dist/src/systems/ConsoleVariableManager.js +295 -0
  865. package/dist/src/systems/InputManager.d.ts +511 -0
  866. package/dist/src/systems/InputManager.js +1025 -0
  867. package/dist/src/systems/ObjectNamingSystem.d.ts +9 -0
  868. package/dist/src/systems/ObjectNamingSystem.js +34 -0
  869. package/dist/src/systems/Stats.d.ts +36 -0
  870. package/dist/src/systems/Stats.js +193 -0
  871. package/dist/src/systems/TimerSystem.d.ts +180 -0
  872. package/dist/src/systems/TimerSystem.js +292 -0
  873. package/dist/src/systems/TweenManager.d.ts +57 -0
  874. package/dist/src/systems/TweenManager.js +107 -0
  875. package/dist/src/systems/WorldSerialization.d.ts +216 -0
  876. package/dist/src/systems/WorldSerialization.js +1082 -0
  877. package/dist/src/systems/collision/CollisionConfig.d.ts +56 -0
  878. package/dist/src/systems/collision/CollisionConfig.js +249 -0
  879. package/dist/src/systems/collision/CollisionTypes.d.ts +138 -0
  880. package/dist/src/systems/collision/CollisionTypes.js +204 -0
  881. package/dist/src/systems/collision/index.d.ts +15 -0
  882. package/dist/src/systems/collision/index.js +16 -0
  883. package/dist/src/systems/index.d.ts +23 -0
  884. package/dist/src/systems/index.js +24 -0
  885. package/dist/src/templates/MyActor.d.ts +9 -0
  886. package/dist/src/templates/MyActor.js +25 -0
  887. package/dist/src/templates/MySceneComponent.d.ts +9 -0
  888. package/dist/src/templates/MySceneComponent.js +25 -0
  889. package/dist/src/ui/LoadingScreen.d.ts +15 -0
  890. package/dist/src/ui/LoadingScreen.js +103 -0
  891. package/dist/src/ui/UIElement.d.ts +74 -0
  892. package/dist/src/ui/UIElement.js +202 -0
  893. package/dist/src/ui/UILayout.d.ts +126 -0
  894. package/dist/src/ui/UILayout.js +244 -0
  895. package/dist/src/ui/UIManager.d.ts +44 -0
  896. package/dist/src/ui/UIManager.js +148 -0
  897. package/dist/src/ui/UIResource.d.ts +6 -0
  898. package/dist/src/ui/UIResource.js +24 -0
  899. package/dist/src/ui/components/AmmoCounter.d.ts +28 -0
  900. package/dist/src/ui/components/AmmoCounter.js +125 -0
  901. package/dist/src/ui/components/BaseUIComponent.d.ts +128 -0
  902. package/dist/src/ui/components/BaseUIComponent.js +342 -0
  903. package/dist/src/ui/components/Compass.d.ts +28 -0
  904. package/dist/src/ui/components/Compass.js +125 -0
  905. package/dist/src/ui/components/ControlsPanel.d.ts +37 -0
  906. package/dist/src/ui/components/ControlsPanel.js +47 -0
  907. package/dist/src/ui/components/Crosshair.d.ts +20 -0
  908. package/dist/src/ui/components/Crosshair.js +67 -0
  909. package/dist/src/ui/components/InventoryBar.d.ts +103 -0
  910. package/dist/src/ui/components/InventoryBar.js +177 -0
  911. package/dist/src/ui/components/InventoryGrid.d.ts +139 -0
  912. package/dist/src/ui/components/InventoryGrid.js +407 -0
  913. package/dist/src/ui/components/Minimap.d.ts +39 -0
  914. package/dist/src/ui/components/Minimap.js +156 -0
  915. package/dist/src/ui/components/NumberDisplay.d.ts +51 -0
  916. package/dist/src/ui/components/NumberDisplay.js +164 -0
  917. package/dist/src/ui/components/ProgressBar.d.ts +115 -0
  918. package/dist/src/ui/components/ProgressBar.js +347 -0
  919. package/dist/src/ui/components/ReloadIndicator.d.ts +29 -0
  920. package/dist/src/ui/components/ReloadIndicator.js +147 -0
  921. package/dist/src/ui/components/index.d.ts +11 -0
  922. package/dist/src/ui/components/index.js +13 -0
  923. package/dist/src/ui/index.d.ts +21 -0
  924. package/dist/src/ui/index.js +22 -0
  925. package/dist/src/ui/ui-loader.d.ts +49 -0
  926. package/dist/src/ui/ui-loader.js +83 -0
  927. package/dist/src/utils/Color.d.ts +48 -0
  928. package/dist/src/utils/Color.js +121 -0
  929. package/dist/src/utils/Delegate.d.ts +72 -0
  930. package/dist/src/utils/Delegate.js +102 -0
  931. package/dist/src/utils/DescriptionHelpers.d.ts +47 -0
  932. package/dist/src/utils/DescriptionHelpers.js +65 -0
  933. package/dist/src/utils/EditorClassMeta.d.ts +99 -0
  934. package/dist/src/utils/EditorClassMeta.js +2 -0
  935. package/dist/src/utils/GlobalAudioManager.d.ts +141 -0
  936. package/dist/src/utils/GlobalAudioManager.js +312 -0
  937. package/dist/src/utils/IAsyncLoadable.d.ts +94 -0
  938. package/dist/src/utils/IAsyncLoadable.js +52 -0
  939. package/dist/src/utils/MaterialHelpers.d.ts +67 -0
  940. package/dist/src/utils/MaterialHelpers.js +278 -0
  941. package/dist/src/utils/MathHelpers.d.ts +65 -0
  942. package/dist/src/utils/MathHelpers.js +60 -0
  943. package/dist/src/utils/NodeJs.d.ts +1 -0
  944. package/dist/src/utils/NodeJs.js +81 -0
  945. package/dist/src/utils/Perlin.d.ts +39 -0
  946. package/dist/src/utils/Perlin.js +380 -0
  947. package/dist/src/utils/ResourceManager.d.ts +183 -0
  948. package/dist/src/utils/ResourceManager.js +703 -0
  949. package/dist/src/utils/SceneGraphUtils.d.ts +26 -0
  950. package/dist/src/utils/SceneGraphUtils.js +139 -0
  951. package/dist/src/utils/Spawn.d.ts +27 -0
  952. package/dist/src/utils/Spawn.js +73 -0
  953. package/dist/src/utils/ThreeJsExtensions.d.ts +298 -0
  954. package/dist/src/utils/ThreeJsExtensions.js +817 -0
  955. package/dist/src/utils/TweenExtensions.d.ts +8 -0
  956. package/dist/src/utils/TweenExtensions.js +103 -0
  957. package/dist/src/utils/UserCodeEngine.d.ts +70 -0
  958. package/dist/src/utils/UserCodeEngine.js +235 -0
  959. package/dist/src/utils/Utils.d.ts +65 -0
  960. package/dist/src/utils/Utils.js +296 -0
  961. package/dist/src/utils/VRButtonUtils.d.ts +21 -0
  962. package/dist/src/utils/VRButtonUtils.js +88 -0
  963. package/dist/src/utils/browser-polyfills/module.d.ts +20 -0
  964. package/dist/src/utils/browser-polyfills/module.js +31 -0
  965. package/dist/src/utils/browser-polyfills/path.d.ts +69 -0
  966. package/dist/src/utils/browser-polyfills/path.js +188 -0
  967. package/dist/src/utils/index.d.ts +29 -0
  968. package/dist/src/utils/index.js +30 -0
  969. package/dist/src/utils/serialization/cdo.d.ts +6 -0
  970. package/dist/src/utils/serialization/cdo.js +74 -0
  971. package/dist/src/utils/serialization/clsAlias.d.ts +15 -0
  972. package/dist/src/utils/serialization/clsAlias.js +96 -0
  973. package/dist/src/utils/serialization/decorator.d.ts +132 -0
  974. package/dist/src/utils/serialization/decorator.js +66 -0
  975. package/dist/src/utils/serialization/index.d.ts +7 -0
  976. package/dist/src/utils/serialization/index.js +8 -0
  977. package/dist/src/utils/serialization/prefab.d.ts +9 -0
  978. package/dist/src/utils/serialization/prefab.js +55 -0
  979. package/dist/src/utils/serialization/prefabManager.d.ts +17 -0
  980. package/dist/src/utils/serialization/prefabManager.js +84 -0
  981. package/dist/src/utils/serialization/serializable.d.ts +23 -0
  982. package/dist/src/utils/serialization/serializable.js +2 -0
  983. package/dist/src/utils/serialization/serializer.d.ts +126 -0
  984. package/dist/src/utils/serialization/serializer.js +1032 -0
  985. package/dist/src/utils/serialization/specialization.d.ts +1 -0
  986. package/dist/src/utils/serialization/specialization.js +194 -0
  987. package/dist/src/utils/serialization/specializationUtils.d.ts +27 -0
  988. package/dist/src/utils/serialization/specializationUtils.js +137 -0
  989. package/dist/src/vfx/VFXComponent.d.ts +65 -0
  990. package/dist/src/vfx/VFXComponent.js +202 -0
  991. package/dist/src/vfx/index.d.ts +11 -0
  992. package/dist/src/vfx/index.js +11 -0
  993. package/dist/src/vfx/types.d.ts +146 -0
  994. package/dist/src/vfx/types.js +146 -0
  995. package/dist/src/world-commands/common.d.ts +23 -0
  996. package/dist/src/world-commands/common.js +2 -0
  997. package/dist/src/world-commands/generate-code.d.ts +3 -0
  998. package/dist/src/world-commands/generate-code.js +90 -0
  999. package/dist/src/world-commands/index.d.ts +19 -0
  1000. package/dist/src/world-commands/index.js +20 -0
  1001. package/dist/src/world-commands/place-gltf.d.ts +25 -0
  1002. package/dist/src/world-commands/place-gltf.js +39 -0
  1003. package/dist/src/world-commands/place-prefab.d.ts +25 -0
  1004. package/dist/src/world-commands/place-prefab.js +40 -0
  1005. package/dist/src/world-commands/place-primitive.d.ts +39 -0
  1006. package/dist/src/world-commands/place-primitive.js +100 -0
  1007. package/dist/src/world-commands/remove-actors.d.ts +23 -0
  1008. package/dist/src/world-commands/remove-actors.js +9 -0
  1009. package/dist/src/xr/VRActor.d.ts +46 -0
  1010. package/dist/src/xr/VRActor.js +56 -0
  1011. package/dist/src/xr/VRControllerHandler.d.ts +25 -0
  1012. package/dist/src/xr/VRControllerHandler.js +74 -0
  1013. package/dist/src/xr/VRControllerManager.d.ts +194 -0
  1014. package/dist/src/xr/VRControllerManager.js +539 -0
  1015. package/dist/src/xr/VRDeviceHandler.d.ts +47 -0
  1016. package/dist/src/xr/VRDeviceHandler.js +61 -0
  1017. package/dist/src/xr/VRHandHandler.d.ts +23 -0
  1018. package/dist/src/xr/VRHandHandler.js +161 -0
  1019. package/dist/src/xr/VRInputDevice.d.ts +100 -0
  1020. package/dist/src/xr/VRInputDevice.js +367 -0
  1021. package/dist/src/xr/VRPawn.d.ts +198 -0
  1022. package/dist/src/xr/VRPawn.js +771 -0
  1023. package/dist/src/xr/actor-components/CanvasUIComponent.d.ts +61 -0
  1024. package/dist/src/xr/actor-components/CanvasUIComponent.js +418 -0
  1025. package/dist/src/xr/actor-components/VRBaseComponent.d.ts +15 -0
  1026. package/dist/src/xr/actor-components/VRBaseComponent.js +24 -0
  1027. package/dist/src/xr/actor-components/VRGrabbableComponent.d.ts +31 -0
  1028. package/dist/src/xr/actor-components/VRGrabbableComponent.js +81 -0
  1029. package/dist/src/xr/actor-components/VRInteractableComponent.d.ts +19 -0
  1030. package/dist/src/xr/actor-components/VRInteractableComponent.js +50 -0
  1031. package/dist/src/xr/index.d.ts +17 -0
  1032. package/dist/src/xr/index.js +18 -0
  1033. package/dist/src/xr/pawn-components/VRGrabComponent.d.ts +36 -0
  1034. package/dist/src/xr/pawn-components/VRGrabComponent.js +445 -0
  1035. package/dist/src/xr/pawn-components/VRInteractComponent.d.ts +20 -0
  1036. package/dist/src/xr/pawn-components/VRInteractComponent.js +81 -0
  1037. package/dist/src/xr/pawn-components/VRSnapTurnComponent.d.ts +25 -0
  1038. package/dist/src/xr/pawn-components/VRSnapTurnComponent.js +114 -0
  1039. package/dist/src/xr/pawn-components/VRTeleportComponent.d.ts +42 -0
  1040. package/dist/src/xr/pawn-components/VRTeleportComponent.js +318 -0
  1041. package/dist/src/xr/ui/CanvasColorPicker.d.ts +33 -0
  1042. package/dist/src/xr/ui/CanvasColorPicker.js +188 -0
  1043. package/dist/src/xr/ui/CanvasKeyboard.d.ts +21 -0
  1044. package/dist/src/xr/ui/CanvasKeyboard.js +281 -0
  1045. package/dist/src/xr/ui/CanvasSlider.d.ts +21 -0
  1046. package/dist/src/xr/ui/CanvasSlider.js +112 -0
  1047. package/dist/src/xr/ui/CanvasUI.d.ts +129 -0
  1048. package/dist/src/xr/ui/CanvasUI.js +876 -0
  1049. package/dist/src/xr/ui/index.d.ts +8 -0
  1050. package/dist/src/xr/ui/index.js +9 -0
  1051. package/dist/test/absolute-transform.test.d.ts +1 -0
  1052. package/dist/test/absolute-transform.test.js +796 -0
  1053. package/dist/test/asset-path.test.d.ts +1 -0
  1054. package/dist/test/asset-path.test.js +339 -0
  1055. package/dist/test/component.test.d.ts +1 -0
  1056. package/dist/test/component.test.js +24 -0
  1057. package/dist/test/construction.test.d.ts +1 -0
  1058. package/dist/test/construction.test.js +26 -0
  1059. package/dist/test/default-options-validation.test.d.ts +1 -0
  1060. package/dist/test/default-options-validation.test.js +186 -0
  1061. package/dist/test/metadata.test.d.ts +1 -0
  1062. package/dist/test/metadata.test.js +82 -0
  1063. package/dist/test/nodeStorage.d.ts +19 -0
  1064. package/dist/test/nodeStorage.js +85 -0
  1065. package/dist/test/postprocess-manager.test.d.ts +1 -0
  1066. package/dist/test/postprocess-manager.test.js +77 -0
  1067. package/dist/test/prefab.test.d.ts +1 -0
  1068. package/dist/test/prefab.test.js +903 -0
  1069. package/dist/test/scene-component.test.d.ts +1 -0
  1070. package/dist/test/scene-component.test.js +13 -0
  1071. package/dist/test/scene-graph.test.d.ts +1 -0
  1072. package/dist/test/scene-graph.test.js +163 -0
  1073. package/dist/test/serialization-v1.test.d.ts +15 -0
  1074. package/dist/test/serialization-v1.test.js +1057 -0
  1075. package/dist/test/serialization.test.d.ts +1 -0
  1076. package/dist/test/serialization.test.js +425 -0
  1077. package/dist/test/spawn.test.d.ts +1 -0
  1078. package/dist/test/spawn.test.js +137 -0
  1079. package/dist/test/utils.d.ts +27 -0
  1080. package/dist/test/utils.js +115 -0
  1081. package/docs/agent-instructions.md +49 -0
  1082. package/docs/deprecated/8-guide-user-interface-2.md +600 -0
  1083. package/docs/deprecated/Agents.md +117 -0
  1084. package/docs/deprecated/TELEGRAM_MINIAPP_SUPPORT_PLAN.md +283 -0
  1085. package/docs/deprecated/summary-2.md +101 -0
  1086. package/docs/engine-summary.md +104 -0
  1087. package/docs/guides/0-world-and-gameloop.md +331 -0
  1088. package/docs/guides/1-actors-and-components.md +955 -0
  1089. package/docs/guides/10-camera-system.md +778 -0
  1090. package/docs/guides/11-equipment-and-weapons.md +850 -0
  1091. package/docs/guides/12-threejs-extensions.md +528 -0
  1092. package/docs/guides/13-visual-effects-and-particles.md +530 -0
  1093. package/docs/guides/14-sound-system.md +436 -0
  1094. package/docs/guides/15-global-audio-manager.md +367 -0
  1095. package/docs/guides/15-navigation-and-pathfinding.md +818 -0
  1096. package/docs/guides/16-ragdoll-physics.md +479 -0
  1097. package/docs/guides/17-asset-referencing.md +248 -0
  1098. package/docs/guides/18-lightmapping-system.md +984 -0
  1099. package/docs/guides/19-webxr-virtual-reality.md +367 -0
  1100. package/docs/guides/2-player-inputs-and-controls.md +737 -0
  1101. package/docs/guides/3-physics-and-collisions.md +248 -0
  1102. package/docs/guides/4-visuals-and-rendering.md +946 -0
  1103. package/docs/guides/5-animation.md +310 -0
  1104. package/docs/guides/6-ai-and-behavior-trees.md +1316 -0
  1105. package/docs/guides/7-building-levels.md +211 -0
  1106. package/docs/guides/8-user-interface.md +291 -0
  1107. package/docs/guides/9-multiplayer.md +181 -0
  1108. package/docs/high-level-class-hierarchy.md +218 -0
  1109. package/eslint-rules/constructor-type-consistency.js +251 -0
  1110. package/eslint-rules/default-getter-return-type.js +42 -0
  1111. package/eslint-rules/engine-class-name-consistency.js +62 -0
  1112. package/eslint-rules/no-async-override-mismatch.js +100 -0
  1113. package/eslint-rules/no-default-class-fields.js +66 -0
  1114. package/eslint-rules/no-override-methods.js +158 -0
  1115. package/games/animation-demo.ts +367 -0
  1116. package/games/animation-retarget-demo.ts +553 -0
  1117. package/games/behavior-tree-demo.ts +1774 -0
  1118. package/games/character_animation.ts +194 -0
  1119. package/games/collision-demo.ts +139 -0
  1120. package/games/deprecated/advanced-grid-demo.ts +336 -0
  1121. package/games/deprecated/airplane-demo.ts +156 -0
  1122. package/games/deprecated/character-controller.ts +161 -0
  1123. package/games/deprecated/chase-game.ts +310 -0
  1124. package/games/deprecated/collision-config.ts +317 -0
  1125. package/games/deprecated/door-demo.ts +641 -0
  1126. package/games/deprecated/fps-demo.ts +128 -0
  1127. package/games/deprecated/fps-shotgun-demo.ts +227 -0
  1128. package/games/deprecated/index.ts +25 -0
  1129. package/games/deprecated/lightmapping-demo.ts +1515 -0
  1130. package/games/deprecated/lights-demo.ts +957 -0
  1131. package/games/deprecated/matcap-demo.ts +823 -0
  1132. package/games/deprecated/material-demo-2.ts +582 -0
  1133. package/games/deprecated/material-demo.ts +204 -0
  1134. package/games/deprecated/memory-leak-test.ts +23 -0
  1135. package/games/deprecated/model-stress-test.ts +150 -0
  1136. package/games/deprecated/multiplayer-demo.ts +392 -0
  1137. package/games/deprecated/physics-demo.ts +199 -0
  1138. package/games/deprecated/shadow-demo.ts +435 -0
  1139. package/games/deprecated/shooting-demo.ts +352 -0
  1140. package/games/deprecated/skybox-demo.ts +341 -0
  1141. package/games/deprecated/sound-demo.ts +117 -0
  1142. package/games/deprecated/timer-demo.ts +178 -0
  1143. package/games/deprecated/voxel-demo.ts +50 -0
  1144. package/games/deprecated/world-commands.ts +184 -0
  1145. package/games/deprecated/world-loading.ts +90 -0
  1146. package/games/examples/fps-advanced/const.ts +122 -0
  1147. package/games/examples/fps-advanced/enemies.ts +174 -0
  1148. package/games/examples/fps-advanced/game-mode.ts +347 -0
  1149. package/games/examples/fps-advanced/game.ts +74 -0
  1150. package/games/examples/fps-advanced/pickups.ts +225 -0
  1151. package/games/examples/fps-advanced/player.ts +101 -0
  1152. package/games/examples/fps-advanced/ui/endgame-ui.ts +277 -0
  1153. package/games/examples/fps-advanced/ui/game-hud.ts +211 -0
  1154. package/games/examples/fps-advanced/ui/menu-ui.ts +217 -0
  1155. package/games/examples/fps-advanced/ui/weapon-hud.ts +254 -0
  1156. package/games/examples/fps-advanced/weapons.ts +209 -0
  1157. package/games/examples/index.ts +5 -0
  1158. package/games/examples/plugin-demo/game.ts +175 -0
  1159. package/games/examples/plugin-demo/plugins/dynamic-lighting.ts +146 -0
  1160. package/games/examples/plugin-demo/plugins/instanced-forest.ts +186 -0
  1161. package/games/examples/plugin-demo/plugins/particle-fountain.ts +63 -0
  1162. package/games/examples/plugin-demo/plugins/physics-playground.ts +189 -0
  1163. package/games/examples/plugin-demo/plugins/robot-follower.ts +306 -0
  1164. package/games/examples/plugin-demo/plugins/scatter-models.ts +74 -0
  1165. package/games/examples/plugin-demo/plugins/simple-cube.ts +44 -0
  1166. package/games/examples/plugin-demo/plugins/tic-tac-toe.ts +522 -0
  1167. package/games/examples/plugin-demo/plugins/wobbling-sphere.ts +66 -0
  1168. package/games/examples/side-scroller-advanced/const.ts +88 -0
  1169. package/games/examples/side-scroller-advanced/game-mode.ts +350 -0
  1170. package/games/examples/side-scroller-advanced/game.ts +80 -0
  1171. package/games/examples/side-scroller-advanced/level-generator.ts +384 -0
  1172. package/games/examples/side-scroller-advanced/pickups.ts +132 -0
  1173. package/games/examples/side-scroller-advanced/player.ts +105 -0
  1174. package/games/examples/side-scroller-advanced/ui/endgame-ui.ts +278 -0
  1175. package/games/examples/side-scroller-advanced/ui/game-hud.ts +238 -0
  1176. package/games/examples/side-scroller-advanced/ui/menu-ui.ts +215 -0
  1177. package/games/examples/vehicle/base-vehicle.ts +159 -0
  1178. package/games/examples/vehicle/game.ts +154 -0
  1179. package/games/examples/vehicle/mesh-vehicle.ts +191 -0
  1180. package/games/examples/vehicle/player.ts +86 -0
  1181. package/games/examples/vehicle/primitive-vehicle.ts +266 -0
  1182. package/games/examples/vr-game/VRAttachableCube.ts +39 -0
  1183. package/games/examples/vr-game/VRInteractableCylinder.ts +83 -0
  1184. package/games/examples/vr-game/VRPressableButton.ts +113 -0
  1185. package/games/examples/vr-game/VRProjectileActor.ts +69 -0
  1186. package/games/examples/vr-game/VRRifleActor.ts +138 -0
  1187. package/games/examples/vr-game/game.ts +69 -0
  1188. package/games/examples/vr-game/index.ts +9 -0
  1189. package/games/examples/vr-game/scene.ts +99 -0
  1190. package/games/hand-tracking-demo.ts +71 -0
  1191. package/games/index.ts +21 -0
  1192. package/games/instanced-mesh-demo.ts +429 -0
  1193. package/games/manifold-demo.ts +52 -0
  1194. package/games/navigation-demo.ts +351 -0
  1195. package/games/navmesh-primitives-demo.ts +1252 -0
  1196. package/games/performance-test-demo.ts +237 -0
  1197. package/games/postprocess-demo.ts +867 -0
  1198. package/games/ragdoll-demo-simple.ts +163 -0
  1199. package/games/ragdoll-demo.ts +272 -0
  1200. package/games/swipe-tap-demo.ts +228 -0
  1201. package/games/tween-demo.ts +125 -0
  1202. package/games/ui-demo.ts +1058 -0
  1203. package/games/vfx-demo.ts +922 -0
  1204. package/games/vfx-wawa-demo.ts +540 -0
  1205. package/games/vr-ui-demo-minimal.ts +156 -0
  1206. package/games/vr-ui-demo.ts +972 -0
  1207. package/package.json +104 -0
  1208. package/scripts/build-browser-bundle.ts +75 -0
  1209. package/scripts/check-asset-path.ts +166 -0
  1210. package/scripts/dump-templates.ts +21 -0
  1211. package/scripts/generate-dependencies.ts +145 -0
  1212. package/scripts/generate-prefabs.ts +120 -0
  1213. package/scripts/load-save-world.ts +44 -0
  1214. package/scripts/loc.ts +112 -0
  1215. package/scripts/optimize-glb-wrapper.ts +28 -0
  1216. package/scripts/optimize-glb.ts +352 -0
  1217. package/scripts/session-server.ts +861 -0
  1218. package/scripts/test-world-loading.ts +23 -0
  1219. package/src/actors/Actor.ts +1183 -0
  1220. package/src/actors/GLTFMeshActor.ts +107 -0
  1221. package/src/actors/GlobalParticleManager.ts +460 -0
  1222. package/src/actors/Pawn.ts +370 -0
  1223. package/src/actors/PlayerController.ts +646 -0
  1224. package/src/actors/PlayerStart.ts +47 -0
  1225. package/src/actors/Projectile.ts +179 -0
  1226. package/src/actors/RagdollTestActor.ts +153 -0
  1227. package/src/actors/ThirdPersonCharacterPawn.ts +139 -0
  1228. package/src/actors/index.ts +21 -0
  1229. package/src/animation/AnimationClipCache.ts +86 -0
  1230. package/src/animation/AnimationRetargeting.ts +566 -0
  1231. package/src/animation/SkeletonProfile.ts +137 -0
  1232. package/src/animation/index.ts +14 -0
  1233. package/src/animation/retargeting.ts +866 -0
  1234. package/src/components/CharacterStatsComponent.ts +199 -0
  1235. package/src/components/CollisionShapeComponent.ts +256 -0
  1236. package/src/components/Component.ts +111 -0
  1237. package/src/components/FollowComponent.ts +149 -0
  1238. package/src/components/PrimitiveComponent.ts +368 -0
  1239. package/src/components/ResetPositionComponent.ts +175 -0
  1240. package/src/components/SceneComponent.ts +628 -0
  1241. package/src/components/audio/SoundComponent.ts +385 -0
  1242. package/src/components/audio/index.ts +11 -0
  1243. package/src/components/csg/CSGCombiner.ts +268 -0
  1244. package/src/components/csg/CSGShapes.ts +344 -0
  1245. package/src/components/csg/index.ts +12 -0
  1246. package/src/components/gameplay/BaseWeaponComponent.ts +597 -0
  1247. package/src/components/gameplay/DoorComponent.ts +930 -0
  1248. package/src/components/gameplay/Equipment.ts +30 -0
  1249. package/src/components/gameplay/GenericEquipment.ts +96 -0
  1250. package/src/components/gameplay/InstantHitWeaponComponent.ts +248 -0
  1251. package/src/components/gameplay/PickupComponent.ts +473 -0
  1252. package/src/components/gameplay/ProjectileWeaponComponent.ts +114 -0
  1253. package/src/components/gameplay/ShotgunComponent.ts +220 -0
  1254. package/src/components/gameplay/SwitchComponent.ts +466 -0
  1255. package/src/components/gameplay/TriggerZoneComponent.ts +346 -0
  1256. package/src/components/gameplay/index.ts +20 -0
  1257. package/src/components/index.ts +19 -0
  1258. package/src/components/lights/AmbientLightComponent.ts +72 -0
  1259. package/src/components/lights/DirectionalLightComponent.ts +163 -0
  1260. package/src/components/lights/HemisphereLightComponent.ts +132 -0
  1261. package/src/components/lights/LightComponent.ts +351 -0
  1262. package/src/components/lights/PointLightComponent.ts +115 -0
  1263. package/src/components/lights/RectAreaLightComponent.ts +151 -0
  1264. package/src/components/lights/SpotLightComponent.ts +193 -0
  1265. package/src/components/lights/index.ts +17 -0
  1266. package/src/components/movement/AerialMovementComponent.ts +348 -0
  1267. package/src/components/movement/AirplaneMovementComponent.ts +236 -0
  1268. package/src/components/movement/BasePawnMovementComponent.ts +297 -0
  1269. package/src/components/movement/CharacterMovementComponent.ts +446 -0
  1270. package/src/components/movement/DirectionalCharacterMovementComponent.ts +79 -0
  1271. package/src/components/movement/NpcMovementComponent.ts +930 -0
  1272. package/src/components/movement/PathMovementComponent.ts +190 -0
  1273. package/src/components/movement/TopDownMovementComponent.ts +88 -0
  1274. package/src/components/movement/TweenMovementComponent.ts +386 -0
  1275. package/src/components/movement/VehicleMovementComponent.ts +469 -0
  1276. package/src/components/movement/index.ts +19 -0
  1277. package/src/components/physics/RagdollComponent.ts +730 -0
  1278. package/src/components/visual/AnimationComponent.ts +208 -0
  1279. package/src/components/visual/AnimationStateMachineComponent.ts +1079 -0
  1280. package/src/components/visual/BaseInstancedMeshComponent.ts +904 -0
  1281. package/src/components/visual/BillboardComponent.ts +127 -0
  1282. package/src/components/visual/EditorOnlyMeshComponent.ts +54 -0
  1283. package/src/components/visual/FogComponent.ts +131 -0
  1284. package/src/components/visual/GLTFMeshComponent.ts +444 -0
  1285. package/src/components/visual/InstancedGltfMeshComponent.ts +215 -0
  1286. package/src/components/visual/InstancedMeshComponent.ts +118 -0
  1287. package/src/components/visual/MeshComponent.ts +224 -0
  1288. package/src/components/visual/ParticleEmitterComponent.ts +628 -0
  1289. package/src/components/visual/SkyboxComponent.ts +381 -0
  1290. package/src/components/visual/TerrainMeshComponent.ts +346 -0
  1291. package/src/components/visual/UI3DComponent.ts +264 -0
  1292. package/src/components/visual/index.ts +23 -0
  1293. package/src/components/voxel/MagicaVoxelLoader.ts +184 -0
  1294. package/src/components/voxel/VoxelMeshComponent.ts +274 -0
  1295. package/src/components/voxel/index.ts +3 -0
  1296. package/src/const.ts +68 -0
  1297. package/src/csg/CSGUtils.ts +771 -0
  1298. package/src/csg/ManifoldWrapper.ts +704 -0
  1299. package/src/csg/index.ts +13 -0
  1300. package/src/dependencies.ts +76 -0
  1301. package/src/game/GameBuilder.ts +280 -0
  1302. package/src/game/GameLoop.ts +614 -0
  1303. package/src/game/GameMode.ts +127 -0
  1304. package/src/game/Playable.ts +84 -0
  1305. package/src/game/World.ts +1430 -0
  1306. package/src/game/index.ts +18 -0
  1307. package/src/global.d.ts +11 -0
  1308. package/src/index.ts +39 -0
  1309. package/src/materials.ts +181 -0
  1310. package/src/multiplayer/MovementPrediction.ts +202 -0
  1311. package/src/multiplayer/NetWorld.ts +920 -0
  1312. package/src/multiplayer/README.md +349 -0
  1313. package/src/multiplayer/implementations/MemorySession.ts +112 -0
  1314. package/src/multiplayer/implementations/WebSocketSession.ts +468 -0
  1315. package/src/multiplayer/implementations/index.ts +14 -0
  1316. package/src/multiplayer/index.ts +16 -0
  1317. package/src/multiplayer/interface.ts +174 -0
  1318. package/src/navigation/NavigationServer.ts +170 -0
  1319. package/src/navigation/RecastNavigationServer.ts +370 -0
  1320. package/src/navigation/index.ts +17 -0
  1321. package/src/npc/behavior-tree/BehaviorNode.ts +191 -0
  1322. package/src/npc/behavior-tree/BehaviorTreeComponent.ts +351 -0
  1323. package/src/npc/behavior-tree/behaviors/BehaviorAction.ts +97 -0
  1324. package/src/npc/behavior-tree/behaviors/ConditionEvaluator.ts +128 -0
  1325. package/src/npc/behavior-tree/behaviors/actions/aerial/AerialMoveToTargetAction.ts +128 -0
  1326. package/src/npc/behavior-tree/behaviors/actions/aerial/AerialSearchAction.ts +159 -0
  1327. package/src/npc/behavior-tree/behaviors/actions/aerial/AerialTrackTargetAction.ts +76 -0
  1328. package/src/npc/behavior-tree/behaviors/actions/aerial/AerialWanderAction.ts +160 -0
  1329. package/src/npc/behavior-tree/behaviors/actions/aerial/index.ts +5 -0
  1330. package/src/npc/behavior-tree/behaviors/actions/combat/MeleeAttackAction.ts +151 -0
  1331. package/src/npc/behavior-tree/behaviors/actions/combat/ShootAction.ts +158 -0
  1332. package/src/npc/behavior-tree/behaviors/actions/combat/index.ts +3 -0
  1333. package/src/npc/behavior-tree/behaviors/actions/ground/FleeFromTargetAction.ts +157 -0
  1334. package/src/npc/behavior-tree/behaviors/actions/ground/FollowActorAction.ts +131 -0
  1335. package/src/npc/behavior-tree/behaviors/actions/ground/MoveToPositionAction.ts +99 -0
  1336. package/src/npc/behavior-tree/behaviors/actions/ground/SetNextWaypointAction.ts +114 -0
  1337. package/src/npc/behavior-tree/behaviors/actions/ground/WanderAction.ts +146 -0
  1338. package/src/npc/behavior-tree/behaviors/actions/ground/index.ts +6 -0
  1339. package/src/npc/behavior-tree/behaviors/actions/index.ts +13 -0
  1340. package/src/npc/behavior-tree/behaviors/actions/utility/CalculateTacticalPositionAction.ts +117 -0
  1341. package/src/npc/behavior-tree/behaviors/actions/utility/LookAtTargetAction.ts +136 -0
  1342. package/src/npc/behavior-tree/behaviors/actions/utility/WaitAction.ts +70 -0
  1343. package/src/npc/behavior-tree/behaviors/actions/utility/index.ts +4 -0
  1344. package/src/npc/behavior-tree/behaviors/conditions/BlackboardValueCondition.ts +144 -0
  1345. package/src/npc/behavior-tree/behaviors/conditions/CanSeeTargetCondition.ts +171 -0
  1346. package/src/npc/behavior-tree/behaviors/conditions/HasLastKnownPositionCondition.ts +63 -0
  1347. package/src/npc/behavior-tree/behaviors/conditions/HpAbovePercentCondition.ts +83 -0
  1348. package/src/npc/behavior-tree/behaviors/conditions/IsPlayerNearCondition.ts +49 -0
  1349. package/src/npc/behavior-tree/behaviors/conditions/TargetBelowHpPercentCondition.ts +61 -0
  1350. package/src/npc/behavior-tree/behaviors/conditions/TargetInConeCondition.ts +106 -0
  1351. package/src/npc/behavior-tree/behaviors/conditions/TimeLimitCondition.ts +65 -0
  1352. package/src/npc/behavior-tree/behaviors/conditions/index.ts +19 -0
  1353. package/src/npc/behavior-tree/behaviors/index.ts +9 -0
  1354. package/src/npc/behavior-tree/blackboard/Blackboard.ts +127 -0
  1355. package/src/npc/behavior-tree/blackboard/BlackboardKey.ts +59 -0
  1356. package/src/npc/behavior-tree/blackboard/index.ts +2 -0
  1357. package/src/npc/behavior-tree/index.ts +27 -0
  1358. package/src/npc/behavior-tree/loader/BehaviorTreeLoader.ts +296 -0
  1359. package/src/npc/behavior-tree/nodes/CompositeNode.ts +100 -0
  1360. package/src/npc/behavior-tree/nodes/LeafNode.ts +11 -0
  1361. package/src/npc/behavior-tree/nodes/composite/SelectorNode.ts +56 -0
  1362. package/src/npc/behavior-tree/nodes/composite/SequenceNode.ts +56 -0
  1363. package/src/physics/BasePhysicsEngine.ts +1486 -0
  1364. package/src/physics/IPhysicsVehicle.ts +162 -0
  1365. package/src/physics/PhysicsEngine.ts +517 -0
  1366. package/src/physics/PhysicsTypes.ts +116 -0
  1367. package/src/physics/implementations/RapierDebugRender.ts +55 -0
  1368. package/src/physics/implementations/RapierPhysics.ts +1419 -0
  1369. package/src/physics/implementations/RapierVehicle.ts +267 -0
  1370. package/src/physics/index.ts +16 -0
  1371. package/src/render/EdgeOutlineEffect.ts +365 -0
  1372. package/src/render/PostProcessManager.ts +1025 -0
  1373. package/src/render/Renderer.ts +310 -0
  1374. package/src/render/Texture.ts +140 -0
  1375. package/src/render/index.ts +22 -0
  1376. package/src/render/lightmapping/LightmapAtlas.ts +248 -0
  1377. package/src/render/lightmapping/LightmapBaker.ts +333 -0
  1378. package/src/render/lightmapping/LightmapManager.ts +752 -0
  1379. package/src/render/lightmapping/LightmapMaterial.ts +283 -0
  1380. package/src/render/lightmapping/LightmapSerialization.ts +336 -0
  1381. package/src/render/lightmapping/LightmapSerializer.ts +309 -0
  1382. package/src/render/lightmapping/MultiLightmapperMaterial.ts +484 -0
  1383. package/src/render/lightmapping/index.ts +18 -0
  1384. package/src/render/postprocessing/EffectPassWrapper.ts +47 -0
  1385. package/src/render/postprocessing/ObjectOutlineEffect.ts +356 -0
  1386. package/src/render/postprocessing/index.ts +2 -0
  1387. package/src/runtime/GameRuntime.ts +153 -0
  1388. package/src/runtime/InjectedDependencies.ts +70 -0
  1389. package/src/runtime/Utils.ts +146 -0
  1390. package/src/runtime/index.ts +4 -0
  1391. package/src/runtime/materials/MatcapShaderMaterial.ts +242 -0
  1392. package/src/runtime/materials/index.ts +1 -0
  1393. package/src/scripting/Plugin.ts +67 -0
  1394. package/src/scripting/PluginManager.ts +99 -0
  1395. package/src/scripting/index.ts +1 -0
  1396. package/src/storage/defaultStorageProvider.ts +95 -0
  1397. package/src/storage/index.ts +16 -0
  1398. package/src/storage/projectContext.ts +176 -0
  1399. package/src/storage/storageProvider.ts +271 -0
  1400. package/src/systems/ClassRegistry.ts +484 -0
  1401. package/src/systems/ConsoleManager.ts +484 -0
  1402. package/src/systems/ConsoleVariableHandler.ts +105 -0
  1403. package/src/systems/ConsoleVariableManager.ts +288 -0
  1404. package/src/systems/InputManager.ts +1255 -0
  1405. package/src/systems/ObjectNamingSystem.ts +30 -0
  1406. package/src/systems/Stats.ts +178 -0
  1407. package/src/systems/TimerSystem.ts +353 -0
  1408. package/src/systems/TweenManager.ts +107 -0
  1409. package/src/systems/WorldSerialization.ts +1211 -0
  1410. package/src/systems/collision/CollisionConfig.ts +281 -0
  1411. package/src/systems/collision/CollisionTypes.ts +185 -0
  1412. package/src/systems/collision/index.ts +15 -0
  1413. package/src/systems/index.ts +23 -0
  1414. package/src/templates/MyActor.ts +29 -0
  1415. package/src/templates/MySceneComponent.ts +29 -0
  1416. package/src/templates/README.md +1 -0
  1417. package/src/types/rapier-es.d.ts +16 -0
  1418. package/src/types/stats.js.d.ts +22 -0
  1419. package/src/ui/LoadingScreen.ts +110 -0
  1420. package/src/ui/UIElement.ts +224 -0
  1421. package/src/ui/UILayout.ts +269 -0
  1422. package/src/ui/UIManager.ts +161 -0
  1423. package/src/ui/UIResource.ts +20 -0
  1424. package/src/ui/components/AmmoCounter.ts +126 -0
  1425. package/src/ui/components/BaseUIComponent.md +296 -0
  1426. package/src/ui/components/BaseUIComponent.ts +390 -0
  1427. package/src/ui/components/Compass.ts +144 -0
  1428. package/src/ui/components/ControlsPanel.ts +62 -0
  1429. package/src/ui/components/Crosshair.ts +76 -0
  1430. package/src/ui/components/InventoryBar.ts +224 -0
  1431. package/src/ui/components/InventoryGrid.ts +471 -0
  1432. package/src/ui/components/Minimap.ts +181 -0
  1433. package/src/ui/components/NumberDisplay.ts +198 -0
  1434. package/src/ui/components/ProgressBar.ts +403 -0
  1435. package/src/ui/components/ReloadIndicator.ts +159 -0
  1436. package/src/ui/components/index.ts +12 -0
  1437. package/src/ui/index.ts +21 -0
  1438. package/src/ui/ui-loader.ts +87 -0
  1439. package/src/utils/Color.ts +51 -0
  1440. package/src/utils/Delegate.ts +112 -0
  1441. package/src/utils/DescriptionHelpers.ts +93 -0
  1442. package/src/utils/EditorClassMeta.ts +91 -0
  1443. package/src/utils/GlobalAudioManager.ts +370 -0
  1444. package/src/utils/IAsyncLoadable.ts +122 -0
  1445. package/src/utils/MaterialHelpers.ts +321 -0
  1446. package/src/utils/MathHelpers.ts +79 -0
  1447. package/src/utils/NodeJs.ts +79 -0
  1448. package/src/utils/Perlin.ts +346 -0
  1449. package/src/utils/ResourceManager.ts +716 -0
  1450. package/src/utils/SceneGraphUtils.ts +173 -0
  1451. package/src/utils/Spawn.ts +93 -0
  1452. package/src/utils/ThreeJsExtensions.ts +1200 -0
  1453. package/src/utils/TweenExtensions.ts +124 -0
  1454. package/src/utils/UserCodeEngine.ts +243 -0
  1455. package/src/utils/Utils.ts +328 -0
  1456. package/src/utils/VRButtonUtils.ts +125 -0
  1457. package/src/utils/browser-polyfills/module.ts +36 -0
  1458. package/src/utils/browser-polyfills/path.ts +232 -0
  1459. package/src/utils/index.ts +29 -0
  1460. package/src/utils/serialization/cdo.ts +87 -0
  1461. package/src/utils/serialization/clsAlias.ts +92 -0
  1462. package/src/utils/serialization/decorator.ts +176 -0
  1463. package/src/utils/serialization/index.ts +7 -0
  1464. package/src/utils/serialization/prefab.ts +78 -0
  1465. package/src/utils/serialization/prefabManager.ts +88 -0
  1466. package/src/utils/serialization/serializable.ts +28 -0
  1467. package/src/utils/serialization/serializer.ts +1111 -0
  1468. package/src/utils/serialization/specialization.ts +224 -0
  1469. package/src/utils/serialization/specializationUtils.ts +185 -0
  1470. package/src/vfx/VFXComponent.ts +206 -0
  1471. package/src/vfx/index.ts +17 -0
  1472. package/src/vfx/types.ts +287 -0
  1473. package/src/vfx/wawa-vfx-reference.md +399 -0
  1474. package/src/world-commands/common.ts +25 -0
  1475. package/src/world-commands/generate-code.ts +99 -0
  1476. package/src/world-commands/index.ts +19 -0
  1477. package/src/world-commands/place-gltf.ts +63 -0
  1478. package/src/world-commands/place-prefab.ts +62 -0
  1479. package/src/world-commands/place-primitive.ts +128 -0
  1480. package/src/world-commands/remove-actors.ts +32 -0
  1481. package/src/xr/VRActor.ts +71 -0
  1482. package/src/xr/VRControllerHandler.ts +87 -0
  1483. package/src/xr/VRControllerManager.ts +559 -0
  1484. package/src/xr/VRDeviceHandler.ts +77 -0
  1485. package/src/xr/VRHandHandler.ts +166 -0
  1486. package/src/xr/VRInputDevice.ts +374 -0
  1487. package/src/xr/VRPawn.ts +815 -0
  1488. package/src/xr/actor-components/CanvasUIComponent.ts +425 -0
  1489. package/src/xr/actor-components/VRBaseComponent.ts +26 -0
  1490. package/src/xr/actor-components/VRGrabbableComponent.ts +73 -0
  1491. package/src/xr/actor-components/VRInteractableComponent.ts +43 -0
  1492. package/src/xr/index.ts +17 -0
  1493. package/src/xr/pawn-components/VRGrabComponent.ts +435 -0
  1494. package/src/xr/pawn-components/VRInteractComponent.ts +77 -0
  1495. package/src/xr/pawn-components/VRSnapTurnComponent.ts +103 -0
  1496. package/src/xr/pawn-components/VRTeleportComponent.ts +284 -0
  1497. package/src/xr/ui/CanvasColorPicker.ts +172 -0
  1498. package/src/xr/ui/CanvasKeyboard.ts +283 -0
  1499. package/src/xr/ui/CanvasSlider.ts +83 -0
  1500. package/src/xr/ui/CanvasUI.ts +879 -0
  1501. package/src/xr/ui/index.ts +9 -0
@@ -0,0 +1,1486 @@
1
+ /**
2
+ * BasePhysicsEngine supplies reusable logic for multiple physics backends.
3
+ *
4
+ * This class manages the collection of physics bodies associated with scene
5
+ * components and dispatches collision events back into Genesys. It defines a
6
+ * number of abstract `do*` methods which concrete engines implement to hook
7
+ * into their specific library. The engine also handles mesh simplification,
8
+ * terrain height field generation and character controller creation so derived
9
+ * classes only deal with low level data conversions.
10
+ *
11
+ * Recommended usage (for humans and AI assistants):
12
+ * - Extend this class when adding support for a new physics library to inherit
13
+ * consistent scene integration and body lifecycle handling.
14
+ * - Call `create` with `PhysicsOptions` to initialize and then `tick` each
15
+ * frame to step the simulation.
16
+ * - Override methods like `doCreateBoxBody` or `doSetVectorParam` to translate
17
+ * requests into library-specific calls.
18
+ * - Use `addComponent` to automatically determine body types from component
19
+ * geometry or collision shapes.
20
+ */
21
+
22
+ import * as THREE from 'three';
23
+
24
+ import { CollisionShapeComponent, CollisionShapeType } from '../components/CollisionShapeComponent.js';
25
+ import { PrimitiveComponent } from '../components/PrimitiveComponent.js';
26
+ import { GLTFMeshComponent } from '../components/visual/GLTFMeshComponent.js';
27
+ import { InstancedGltfMeshComponent } from '../components/visual/InstancedGltfMeshComponent.js';
28
+ import { InstancedMeshComponent } from '../components/visual/InstancedMeshComponent.js';
29
+ import { MeshComponent } from '../components/visual/MeshComponent.js';
30
+ import { TerrainMeshComponent } from '../components/visual/TerrainMeshComponent.js';
31
+ import { CollisionConfig } from '../systems/collision/CollisionConfig.js';
32
+ import { CollisionMode } from '../systems/collision/CollisionTypes.js';
33
+ import { ConsoleCommand } from '../systems/ConsoleManager.js';
34
+ import { ensure } from '../utils/Utils.js';
35
+
36
+
37
+ import { CollisionEventType } from './PhysicsEngine.js';
38
+ import { CollisionMeshType, PhysicsMotionType } from './PhysicsTypes.js';
39
+
40
+ import type { IPhysicsVehicle } from './IPhysicsVehicle.js';
41
+ import type { PhysicsBodyDesc } from './PhysicsEngine.js';
42
+ import type {
43
+ CharacterControllerOptions,
44
+ CollisionEvent,
45
+ HitTestOptions,
46
+ HitTestResult,
47
+ IPhysicsEngine,
48
+ PhysicsOptions,
49
+ PhysicsScalarParam,
50
+ PhysicsVectorParam,
51
+ PrimitiveComponentPhysicsState,
52
+ RawCollisionEvent,
53
+ VectorArray
54
+ } from './PhysicsEngine.js';
55
+ import type { ComponentPhysicsOptions, VoxelCollisionDesc } from './PhysicsTypes.js';
56
+ import type { BasePawnMovementComponent } from '../components/movement/BasePawnMovementComponent.js';
57
+ import type { SceneComponent } from '../components/SceneComponent.js';
58
+
59
+
60
+ export type BaseDesc = {
61
+ motionType: PhysicsMotionType,
62
+ options: ComponentPhysicsOptions,
63
+ worldPos: THREE.Vector3,
64
+ worldQuat: THREE.Quaternion,
65
+ mass: number,
66
+ }
67
+
68
+ export type BoxBodyDesc = BaseDesc & {
69
+ size: THREE.Vector3,
70
+ }
71
+
72
+ export type MeshBodyDesc = BaseDesc & {
73
+ meshes: THREE.Mesh[],
74
+ }
75
+
76
+ export type VoxelBodyDesc = BaseDesc & {
77
+ voxelSize: THREE.Vector3,
78
+ offset?: THREE.Vector3,
79
+ voxels: Float32Array | Int32Array
80
+ }
81
+
82
+ export type SphereBodyDesc = BaseDesc & {
83
+ center: THREE.Vector3,
84
+ radius: number,
85
+ }
86
+
87
+ export type CylinderBodyDesc = BaseDesc & {
88
+ height: number,
89
+ radius: number,
90
+ }
91
+
92
+ export type CapsuleBodyDesc = BaseDesc & {
93
+ height: number,
94
+ radius: number,
95
+ }
96
+
97
+ export type ConeBodyDesc = BaseDesc & {
98
+ height: number,
99
+ radius: number,
100
+ }
101
+
102
+ export type HeightFieldBodyDesc = BaseDesc & {
103
+ width: number,
104
+ depth: number,
105
+ widthPixels: number,
106
+ depthPixels: number,
107
+ heights: Float32Array,
108
+ }
109
+
110
+ export enum JointType {
111
+ Spherical = 'spherical',
112
+ Fixed = 'fixed',
113
+ Revolute = 'revolute',
114
+ Prismatic = 'prismatic'
115
+ }
116
+
117
+ export interface JointDesc {
118
+ type: JointType;
119
+ componentA: PrimitiveComponent;
120
+ componentB: PrimitiveComponent;
121
+ anchorA: THREE.Vector3;
122
+ anchorB: THREE.Vector3;
123
+ axis?: THREE.Vector3; // For revolute/prismatic joints
124
+ }
125
+
126
+ export abstract class BasePhysicsEngine<TRecord, TCharacterControllerRecord, TJointRecord = any> implements IPhysicsEngine {
127
+ protected initialized: boolean = false;
128
+ protected bodies: Map<PrimitiveComponent, TRecord[]> = new Map();
129
+ protected characterControllers: Map<BasePawnMovementComponent, TCharacterControllerRecord> = new Map();
130
+ protected joints: Map<string, TJointRecord> = new Map(); // Using string ID as key
131
+ protected directBodies: Map<string, TRecord> = new Map(); // Direct physics bodies by handle
132
+ protected options: PhysicsOptions | null = null;
133
+ private nextJointId: number = 0;
134
+ private nextBodyId: number = 0;
135
+
136
+ // Reference to the game world that owns this physics engine
137
+ protected gameWorld: any;
138
+
139
+ protected physicMeshesCache: Map<number, THREE.Mesh[]> = new Map();
140
+
141
+ constructor(gameWorld?: any) {
142
+ this.gameWorld = gameWorld;
143
+ if (gameWorld) {
144
+ gameWorld?.consoleManager.addCommandHandler(this);
145
+ }
146
+ }
147
+
148
+ public performHitTest(options: HitTestOptions): HitTestResult[] {
149
+ return []; // Override in derived class
150
+ }
151
+
152
+ @ConsoleCommand('debugphysics', 'Enable/disable physics debug visualization (usage: debugphysics <true | false>)')
153
+ private debugPhysics(enable: string = ''): string {
154
+ // Use truthy value to enable debug visualization
155
+ if (enable === 'true' || enable === '1') {
156
+ this.setDebugRendererEnabled(true);
157
+ } else {
158
+ this.setDebugRendererEnabled(false);
159
+ }
160
+ return 'Debug physics ' + (this.isDebugRendererEnabled() ? 'enabled' : 'disabled');
161
+ }
162
+
163
+
164
+ /**
165
+ * Initializes the physics engine with the specified options
166
+ * @param options Physics engine configuration options
167
+ * @returns Promise that resolves to true if initialization was successful
168
+ */
169
+ public async create(options: PhysicsOptions): Promise<boolean> {
170
+ if (!ensure(!this.initialized)) {
171
+ return false;
172
+ }
173
+ this.initialized = await this.doCreate(options);
174
+ this.options = options;
175
+ return this.initialized;
176
+ }
177
+
178
+ /**
179
+ * Get the physics engine options
180
+ * @returns Physics engine options
181
+ */
182
+ public getOptions(): PhysicsOptions | null {
183
+ return this.options;
184
+ }
185
+
186
+ /**
187
+ * Destroys the physics engine and cleans up resources
188
+ */
189
+ public destroy(): void {
190
+ if (!this.initialized) {
191
+ return;
192
+ }
193
+
194
+ // Clean up all joints before destroying the physics world
195
+ for (const [jointId, jointRecord] of this.joints) {
196
+ this.doRemoveJoint(jointRecord);
197
+ }
198
+ this.joints.clear();
199
+
200
+ // Clean up all direct physics bodies
201
+ for (const [handle, record] of this.directBodies) {
202
+ this.doRemoveDirectBody(record);
203
+ }
204
+ this.directBodies.clear();
205
+
206
+ if (this.doDestroy()) {
207
+ this.initialized = false;
208
+ }
209
+
210
+ if (this.gameWorld) {
211
+ this.gameWorld?.consoleManager.removeCommandHandler(this);
212
+ }
213
+ }
214
+
215
+ /**
216
+ * Updates the physics simulation by one time step
217
+ * @param deltaTime Time elapsed since last tick in seconds
218
+ */
219
+ public tick(deltaTime: number): void {
220
+ if (!this.initialized) {
221
+ return;
222
+ }
223
+
224
+ // update component transform to the physics just before ticking
225
+ for (const component of this.bodies.keys()) {
226
+ component.syncToPhysics(this);
227
+ }
228
+
229
+ this.doTick(deltaTime);
230
+ this.processCollisionEvents();
231
+ }
232
+
233
+ private cloneMesh(originalMesh: THREE.Mesh): THREE.Mesh {
234
+ const clonedMesh = new THREE.Mesh(
235
+ originalMesh.geometry.clone(),
236
+ originalMesh.material
237
+ );
238
+ return clonedMesh;
239
+ }
240
+
241
+ /**
242
+ * Processes a GLTF model to extract physics meshes with proper scaling and transforms
243
+ * @param model The GLTF scene model
244
+ * @returns Array of processed physics meshes. The meshes are always meshes at Identity, i.e. sitting at origin, no rotation, no scale
245
+ */
246
+ private processGLTFModelForPhysics(model: THREE.Object3D): THREE.Mesh[] {
247
+ // Collect all physics meshes
248
+ const physicsMeshes: THREE.Mesh[] = [];
249
+
250
+ // we're now using the model template, so that means it is sitting at Identity, and we don't need to do any transforms to it.
251
+ // of course, while this saves the copy, we are expecting they NEVER get modified
252
+ model.traverse((object) => {
253
+ if (object instanceof THREE.Mesh) {
254
+ physicsMeshes.push(object);
255
+ }
256
+ });
257
+
258
+ return physicsMeshes;
259
+
260
+ // // alternative way is to clone all meshes, and apply the local to root transform to each mesh
261
+ // const worldToRootMatrix = model.matrixWorld.clone().invert();
262
+
263
+ // // Process all meshes in the cloned model
264
+ // model.traverse((object) => {
265
+ // if (object instanceof THREE.Mesh) {
266
+ // const physicsMesh = this.cloneMesh(object);
267
+
268
+ // physicsMesh.matrixAutoUpdate = false;
269
+ // // object local to world -> object local to root -> physics mesh is placed at Identity, so an extra `premultiply(Identity);` is omitted
270
+ // const matrix = object.matrixWorld.clone().premultiply(worldToRootMatrix);
271
+ // physicsMesh.matrix.copy(matrix);
272
+ // physicsMesh.updateMatrixWorld(true);
273
+
274
+ // physicsMeshes.push(physicsMesh);
275
+ // }
276
+ // });
277
+
278
+ // // caching in this.physicMeshesCache
279
+
280
+ // return physicsMeshes;
281
+ }
282
+
283
+ /**
284
+ * Processes a model to extract physics mesh with proper scaling and transforms
285
+ * @param model The scene model
286
+ * @param worldScale The world scale to apply
287
+ * @returns Array of processed physics meshes. The meshes are always meshes at Identity, i.e. sitting at origin, no rotation, no scale
288
+ */
289
+ private processModelForPhysics(mesh: THREE.Mesh): THREE.Mesh {
290
+ const cacheKey = mesh.id;
291
+ if (this.physicMeshesCache.has(cacheKey)) {
292
+ return this.physicMeshesCache.get(cacheKey)![0];
293
+ }
294
+
295
+ const physicsMesh = this.cloneMesh(mesh);
296
+ physicsMesh.matrixAutoUpdate = false;
297
+ physicsMesh.matrix.copy(new THREE.Matrix4());
298
+ physicsMesh.updateMatrixWorld(true);
299
+
300
+ // cache it so we have the same physicsMesh always, which is good for cache of collider desc
301
+ this.physicMeshesCache.set(cacheKey, [physicsMesh]);
302
+
303
+ return physicsMesh;
304
+ }
305
+
306
+ /**
307
+ * Adds a scene component to the physics simulation
308
+ * @param component The scene component to add
309
+ * @returns The motion type assigned to the component, or null if addition failed
310
+ */
311
+ public addComponent(component: PrimitiveComponent): PhysicsMotionType | null {
312
+ if (!ensure(this.initialized)) {
313
+ return null;
314
+ }
315
+
316
+ if (!ensure(!this.bodies.has(component))) {
317
+ return null;
318
+ }
319
+
320
+ const physicsOptions = component.getPhysicsOptions();
321
+
322
+ const collisionConfig = CollisionConfig.getInstance();
323
+ const collisionProfile = collisionConfig.profiles.find(profile => profile.name === physicsOptions?.collisionProfile);
324
+ if (collisionProfile?.mode === CollisionMode.NoCollision) {
325
+ return null;
326
+ }
327
+
328
+ // FIXME: deprecate? Or should it be a combination of enabled and collisionProfile?
329
+ if (!physicsOptions?.enabled) {
330
+ return null;
331
+ }
332
+
333
+ let motionType: PhysicsMotionType | null = null;
334
+ const worldPos = new THREE.Vector3();
335
+ const worldQuat = new THREE.Quaternion();
336
+ const worldScale = new THREE.Vector3();
337
+ component.getWorldPosition(worldPos);
338
+ component.getWorldQuaternion(worldQuat);
339
+ component.getWorldScale(worldScale);
340
+
341
+ let records: TRecord[] = [];
342
+ let record: TRecord | null = null;
343
+ if (component instanceof(MeshComponent)) {
344
+ [record, motionType] = this.createMeshComponentRecord(component, physicsOptions, worldPos, worldQuat, worldScale);
345
+ } else if (component instanceof(CollisionShapeComponent)) {
346
+ [record, motionType] = this.createCollisionShapeRecord(component, physicsOptions, worldPos, worldQuat, worldScale);
347
+ } else if (component instanceof(TerrainMeshComponent)) {
348
+ [record, motionType] = this.createTerrainMeshRecord(component, physicsOptions, worldPos, worldQuat, worldScale);
349
+ } else if (component instanceof(GLTFMeshComponent)) {
350
+ [record, motionType] = this.createGLTFMeshRecord(component, physicsOptions, worldPos, worldQuat, worldScale);
351
+ }
352
+
353
+ if (record) {
354
+ records.push(record);
355
+ }
356
+
357
+ if (component instanceof(InstancedGltfMeshComponent)) {
358
+ [records, motionType] = this.createInstancedGltfMeshRecord(component, physicsOptions, worldPos, worldQuat);
359
+ } else if (component instanceof(InstancedMeshComponent)) {
360
+ [records, motionType] = this.createInstancedMeshRecord(component, physicsOptions, worldPos, worldQuat, worldScale);
361
+ }
362
+
363
+ if (records.length > 0) {
364
+ this.bodies.set(component, records);
365
+ }
366
+ return motionType;
367
+ }
368
+
369
+ /**
370
+ * Creates a physics record for a MeshComponent
371
+ * @param component The mesh component
372
+ * @param physicsOptions The physics options
373
+ * @param worldPos The world position
374
+ * @param worldQuat The world quaternion
375
+ * @param worldScale The world scale
376
+ * @returns [record, motionType] tuple
377
+ */
378
+ protected createMeshComponentRecord(
379
+ component: MeshComponent,
380
+ physicsOptions: ComponentPhysicsOptions | undefined,
381
+ worldPos: THREE.Vector3,
382
+ worldQuat: THREE.Quaternion,
383
+ worldScale: THREE.Vector3,
384
+ ): [TRecord | null, PhysicsMotionType | null] {
385
+ const mesh = component.getMesh();
386
+ if (!mesh) {
387
+ return [null, null];
388
+ }
389
+
390
+ const [records, motionType] = this.createMeshRecord(mesh, physicsOptions, [{worldPos, worldQuat, worldScale}], component);
391
+ return [records.length > 0 ? records[0] : null, motionType];
392
+ }
393
+
394
+ /**
395
+ *
396
+ * @param mesh
397
+ * @param physicsOptions
398
+ * @param worldTransforms Array of world position, rotation, scale for each instance,
399
+ * NOTE: for voxels, it creates the voxels collision using the collisionData.voxels per transform.
400
+ * so be aware, most likely you only need to pass the component's transform
401
+ * @param context Optional context object for logging
402
+ * @returns
403
+ */
404
+ private createMeshRecord(
405
+ mesh: THREE.Mesh,
406
+ physicsOptions: ComponentPhysicsOptions | undefined,
407
+ worldTransforms: {worldPos: THREE.Vector3, worldQuat: THREE.Quaternion, worldScale: THREE.Vector3}[],
408
+ context?: any
409
+ ): [(TRecord | null)[], PhysicsMotionType | null] {
410
+ const records: (TRecord | null)[] = [];
411
+ const motionType = physicsOptions?.motionType ?? PhysicsMotionType.Dynamic;
412
+
413
+ const geometry = mesh.geometry;
414
+ if (geometry instanceof(THREE.SphereGeometry) || geometry instanceof(THREE.DodecahedronGeometry) || geometry instanceof(THREE.IcosahedronGeometry)) {
415
+ // sphere
416
+ geometry.computeBoundingSphere();
417
+ for (const {worldPos, worldQuat, worldScale} of worldTransforms) {
418
+ // Apply world scale to radius
419
+ const scaleFactor = Math.max(worldScale.x, worldScale.y, worldScale.z);
420
+ const scaledRadius = geometry.boundingSphere!.radius * scaleFactor;
421
+ const record = this.doCreateSphereBody({
422
+ motionType,
423
+ options: physicsOptions!,
424
+ worldPos,
425
+ worldQuat,
426
+ mass: this.calculateSphereMass(scaledRadius, physicsOptions?.density),
427
+ center: geometry.boundingSphere!.center,
428
+ radius: scaledRadius,
429
+ });
430
+ records.push(record);
431
+ }
432
+ } else if (geometry instanceof(THREE.CapsuleGeometry)) {
433
+ const capsuleParams = (geometry as THREE.CapsuleGeometry).parameters;
434
+ for (const {worldPos, worldQuat, worldScale} of worldTransforms) {
435
+ // Apply world scale
436
+ const height = capsuleParams.height * worldScale.y;
437
+ const radius = capsuleParams.radius * Math.max(worldScale.x, worldScale.z);
438
+ const record = this.doCreateCapsuleBody({
439
+ motionType,
440
+ options: physicsOptions!,
441
+ worldPos,
442
+ worldQuat,
443
+ mass: this.calculateCapsuleMass(height, radius, physicsOptions?.density),
444
+ height,
445
+ radius,
446
+ });
447
+ records.push(record);
448
+ }
449
+ } else if (geometry instanceof(THREE.ConeGeometry)) {
450
+ const coneParams = (geometry as THREE.ConeGeometry).parameters;
451
+ for (const {worldPos, worldQuat, worldScale} of worldTransforms) {
452
+ // Apply world scale
453
+ const height = coneParams.height * worldScale.y;
454
+ const radius = coneParams.radius * Math.max(worldScale.x, worldScale.z);
455
+ const record = this.doCreateConeBody({
456
+ motionType,
457
+ options: physicsOptions!,
458
+ worldPos,
459
+ worldQuat,
460
+ mass: this.calculateConeMass(height, radius, physicsOptions?.density),
461
+ height,
462
+ radius,
463
+ });
464
+ records.push(record);
465
+ }
466
+ } else if (geometry instanceof(THREE.CylinderGeometry)) {
467
+ const cylinderParams = (geometry as THREE.CylinderGeometry).parameters;
468
+ for (const {worldPos, worldQuat, worldScale} of worldTransforms) {
469
+ // Apply world scale
470
+ const height = cylinderParams.height * worldScale.y;
471
+ const radius = (cylinderParams.radiusTop + cylinderParams.radiusBottom) / 2 * Math.max(worldScale.x, worldScale.z);
472
+ const record = this.doCreateCylinderBody({
473
+ motionType,
474
+ options: physicsOptions!,
475
+ worldPos,
476
+ worldQuat,
477
+ mass: this.calculateCylinderMass(height, radius, physicsOptions?.density),
478
+ height,
479
+ radius,
480
+ });
481
+ records.push(record);
482
+ }
483
+ } else if (physicsOptions?.collisionMeshType) {
484
+ // Use mesh collider for arbitrary geometry when collisionMeshType is specified
485
+ console.log('Using mesh collider for', context, 'with type', physicsOptions.collisionMeshType);
486
+
487
+ const isVoxelsCollision = physicsOptions.collisionMeshType === CollisionMeshType.Voxels;
488
+ if (isVoxelsCollision) {
489
+ const voxelsCollisionDesc: VoxelCollisionDesc | undefined = physicsOptions.collisionData?.voxels;
490
+ if (!voxelsCollisionDesc) {
491
+ console.log('No voxel collision data provided, using default single voxel at origin. Either provide collisionData.voxels in constructor, or use `overridePhysicsOptions`/`replacePhysicsOptions` to set it later.');
492
+ }
493
+
494
+ if (worldTransforms.length > 1) {
495
+ console.warn('Multiple transforms provided for voxel mesh collision, each transform will create a full voxel body based on `collisionData.voxels`.');
496
+ }
497
+
498
+ for (const {worldPos, worldQuat, worldScale} of worldTransforms) {
499
+ const voxelSize = voxelsCollisionDesc?.voxelSize ?? new THREE.Vector3(1, 1, 1);
500
+ const voxels: Float32Array | Int32Array = voxelsCollisionDesc?.coordinates ?? new Int32Array([0, 0, 0]);
501
+ const voxelCount = voxels.length / 3;
502
+ const mass = this.calculateBoxMass(voxelSize, physicsOptions?.density) * voxelCount;
503
+ const record = this.doCreateVoxelBody({
504
+ motionType,
505
+ options: physicsOptions!,
506
+ worldPos,
507
+ worldQuat,
508
+ mass,
509
+ voxels,
510
+ voxelSize,
511
+ offset: voxelsCollisionDesc?.offset,
512
+ });
513
+ records.push(record);
514
+ }
515
+ }
516
+ else {
517
+ // Non-Voxel, build the collision from the mesh geometry
518
+ const physicsMesh = this.processModelForPhysics(mesh);
519
+ const transforms = worldTransforms.map(t => ({position: t.worldPos, rotation: t.worldQuat, scale: t.worldScale}));
520
+
521
+ // Now create the physics body at the component's world position/rotation
522
+ records.push(...this.doCreateMeshBodiesWithTransformOverrides({
523
+ motionType,
524
+ options: physicsOptions!,
525
+ worldPos: new THREE.Vector3(), // transforms will provide the position/rotation overrides
526
+ worldQuat: new THREE.Quaternion(), // same as above
527
+ mass: this.calculateMeshMass(physicsMesh.geometry, physicsOptions?.density),
528
+ meshes: [physicsMesh],
529
+ }, transforms));
530
+ }
531
+ } else {
532
+ // box
533
+ for (const {worldPos, worldQuat, worldScale} of worldTransforms) {
534
+ const size = new THREE.Vector3();
535
+ mesh.geometry.computeBoundingBox();
536
+ mesh.geometry.boundingBox!.getSize(size);
537
+ // Apply world scale to size
538
+ size.multiply(worldScale);
539
+ const record = this.doCreateBoxBody({
540
+ motionType,
541
+ options: physicsOptions!,
542
+ worldPos,
543
+ worldQuat,
544
+ mass: this.calculateBoxMass(size, physicsOptions?.density),
545
+ size,
546
+ });
547
+ records.push(record);
548
+ }
549
+ }
550
+
551
+ return [records, motionType];
552
+ }
553
+
554
+ /**
555
+ * Creates a physics record for a CollisionShapeComponent
556
+ * @param component The collision shape component
557
+ * @param physicsOptions The physics options
558
+ * @param worldPos The world position
559
+ * @param worldQuat The world quaternion
560
+ * @param worldScale The world scale
561
+ * @returns [record, motionType] tuple
562
+ */
563
+ protected createCollisionShapeRecord(
564
+ component: CollisionShapeComponent,
565
+ physicsOptions: ComponentPhysicsOptions | undefined,
566
+ worldPos: THREE.Vector3,
567
+ worldQuat: THREE.Quaternion,
568
+ worldScale: THREE.Vector3
569
+ ): [TRecord | null, PhysicsMotionType | null] {
570
+ const motionType = physicsOptions?.motionType ?? PhysicsMotionType.Dynamic;
571
+ const shapeType = component.getShapeType();
572
+ let record: TRecord | null;
573
+
574
+ if (shapeType === CollisionShapeType.Sphere) {
575
+ // For sphere, use the maximum scale component as radius
576
+ // CollisionShapeComponent creates unit-sized shapes that are scaled by the transform
577
+ const radius = Math.max(worldScale.x, worldScale.y, worldScale.z);
578
+ record = this.doCreateSphereBody({
579
+ motionType,
580
+ options: physicsOptions!,
581
+ worldPos,
582
+ worldQuat,
583
+ mass: this.calculateSphereMass(radius, physicsOptions?.density),
584
+ center: new THREE.Vector3(0, 0, 0),
585
+ radius: radius,
586
+ });
587
+ } else {
588
+ // Cube or default
589
+ // CollisionShapeComponent creates unit-sized shapes (1x1x1) that are scaled by the transform
590
+ // So the final size is simply the world scale
591
+ const size = worldScale.clone();
592
+
593
+ record = this.doCreateBoxBody({
594
+ motionType,
595
+ options: physicsOptions!,
596
+ worldPos,
597
+ worldQuat,
598
+ mass: this.calculateBoxMass(size, physicsOptions?.density),
599
+ size,
600
+ });
601
+ }
602
+
603
+ return [record, motionType];
604
+ }
605
+
606
+ /**
607
+ * Creates a physics record for a TerrainMeshComponent
608
+ * @param component The terrain mesh component
609
+ * @param physicsOptions The physics options
610
+ * @param worldPos The world position
611
+ * @param worldQuat The world quaternion
612
+ * @param worldScale The world scale
613
+ * @returns [record, motionType] tuple
614
+ */
615
+ protected createTerrainMeshRecord(
616
+ component: TerrainMeshComponent,
617
+ physicsOptions: ComponentPhysicsOptions | undefined,
618
+ worldPos: THREE.Vector3,
619
+ worldQuat: THREE.Quaternion,
620
+ worldScale: THREE.Vector3
621
+ ): [TRecord | null, PhysicsMotionType | null] {
622
+ const heightMap = component.getHeightMap();
623
+ // Apply world scale to terrain dimensions
624
+ const width = component.options.width * worldScale.x;
625
+ const depth = component.options.depth * worldScale.z;
626
+ const widthPixels = component.options.widthSegments + 1;
627
+ const depthPixels = component.options.depthSegments + 1;
628
+ const numPixels = widthPixels * depthPixels;
629
+
630
+ if (!ensure(heightMap)) {
631
+ return [null, null];
632
+ } else if (!ensure(heightMap!.length === numPixels)) {
633
+ return [null, null];
634
+ }
635
+
636
+ // Scale the height values
637
+ const scaledHeightMap = new Float32Array(heightMap!.length);
638
+ for (let i = 0; i < heightMap!.length; i++) {
639
+ scaledHeightMap[i] = heightMap![i] * worldScale.y;
640
+ }
641
+
642
+ const motionType = PhysicsMotionType.Static;
643
+ const record = this.doCreateHeightFieldBody({
644
+ motionType,
645
+ options: physicsOptions!,
646
+ worldPos,
647
+ worldQuat,
648
+ mass: 0,
649
+ width,
650
+ depth,
651
+ widthPixels,
652
+ depthPixels,
653
+ heights: scaledHeightMap,
654
+ });
655
+
656
+ return [record, motionType];
657
+ }
658
+
659
+ /**
660
+ * Creates a physics record for a GLTFMeshComponent
661
+ * @param component The GLTF mesh component
662
+ * @param physicsOptions The physics options
663
+ * @param worldPos The world position
664
+ * @param worldQuat The world quaternion
665
+ * @param worldScale The world scale
666
+ * @returns [record, motionType] tuple
667
+ */
668
+ protected createGLTFMeshRecord(
669
+ component: GLTFMeshComponent,
670
+ physicsOptions: ComponentPhysicsOptions,
671
+ worldPos: THREE.Vector3,
672
+ worldQuat: THREE.Quaternion,
673
+ worldScale: THREE.Vector3,
674
+ ): [TRecord | null, PhysicsMotionType | null] {
675
+ // Only proceed if the model is loaded
676
+ if (!component.isModelLoaded()) {
677
+ return [null, null];
678
+ }
679
+
680
+ const motionType = physicsOptions?.motionType ?? PhysicsMotionType.Dynamic;
681
+
682
+ const model = component.getModelTemplate(); // use model template as that's the copy living in resource manager and making it easy for cache
683
+ let record: TRecord | null = null;
684
+ const isVoxelsCollision = physicsOptions?.collisionMeshType === CollisionMeshType.Voxels;
685
+ if (isVoxelsCollision) {
686
+ const voxelsCollisionDesc: VoxelCollisionDesc | undefined = physicsOptions.collisionData?.voxels;
687
+ if (!voxelsCollisionDesc) {
688
+ console.log('No voxel collision data provided, using default single voxel at origin. Either provide collisionData.voxels in constructor, or use `overridePhysicsOptions`/`replacePhysicsOptions` to set it later.');
689
+ }
690
+ const voxelSize = voxelsCollisionDesc?.voxelSize ?? new THREE.Vector3(1, 1, 1);
691
+ const voxels: Float32Array | Int32Array = voxelsCollisionDesc?.coordinates ?? new Int32Array([0, 0, 0]);
692
+ const voxelCount = voxels.length / 3;
693
+ const mass = this.calculateBoxMass(voxelSize, physicsOptions?.density) * voxelCount;
694
+ record = this.doCreateVoxelBody({
695
+ motionType,
696
+ options: physicsOptions!,
697
+ worldPos,
698
+ worldQuat,
699
+ mass,
700
+ voxels,
701
+ voxelSize,
702
+ offset: voxelsCollisionDesc?.offset,
703
+ });
704
+ }
705
+ else {
706
+ // Collect all meshes from the model and create a single combined physics body
707
+ if (model) {
708
+ // don't bother finding physics meshes for voxel collision, as it comes from the physicsOptions.collisionData provided by user
709
+ const physicsMeshes = this.processGLTFModelForPhysics(model);
710
+
711
+ // Create a single physics body for all meshes combined
712
+ if (physicsMeshes.length > 0) {
713
+ record = this.doCreateMeshBody({
714
+ motionType: motionType!,
715
+ options: physicsOptions!,
716
+ worldPos,
717
+ worldQuat,
718
+ mass: physicsMeshes.reduce((sum, mesh) => sum + this.calculateMeshMass(mesh.geometry, physicsOptions?.density), 0),
719
+ meshes: physicsMeshes,
720
+ }, worldScale);
721
+
722
+ if (record) {
723
+ // should contain only one record as there is only one worldPos and worldQuat
724
+ console.log('Created combined physics body for GLTF model with', physicsMeshes.length, 'meshes');
725
+ }
726
+ }
727
+ }
728
+ }
729
+
730
+ return [record, motionType];
731
+ }
732
+
733
+ /**
734
+ *
735
+ * @param component The instanced mesh component
736
+ * @param physicsOptions The physics options
737
+ * @param worldPos The world position
738
+ * @param worldQuat The world quaternion
739
+ * @param worldScale The world scale
740
+ * @returns
741
+ */
742
+ protected createInstancedMeshRecord(
743
+ component: InstancedMeshComponent,
744
+ physicsOptions: ComponentPhysicsOptions | undefined,
745
+ worldPos: THREE.Vector3,
746
+ worldQuat: THREE.Quaternion,
747
+ worldScale: THREE.Vector3
748
+ ): [TRecord[], PhysicsMotionType | null] {
749
+ let records: TRecord[] = [];
750
+ const motionType = physicsOptions?.motionType ?? PhysicsMotionType.Dynamic;
751
+ const transforms = component.getInstancesTransforms(true);
752
+ const isVoxelsCollision = physicsOptions?.collisionMeshType === CollisionMeshType.Voxels;
753
+ const mesh = component.getInstancedMesh();
754
+ if (!mesh) {
755
+ return [[], null];
756
+ }
757
+
758
+ const instanceCount = component.getInstanceCount();
759
+ if (!instanceCount || instanceCount === 0) {
760
+ return [[], null];
761
+ }
762
+
763
+ const worldTransforms = isVoxelsCollision ? [{worldPos, worldQuat, worldScale}] :
764
+ transforms.map(transform => ({
765
+ worldPos: transform.position ?? new THREE.Vector3(),
766
+ worldQuat: transform.rotation ? new THREE.Quaternion().setFromEuler(transform.rotation) : new THREE.Quaternion(),
767
+ worldScale: transform.scale ?? new THREE.Vector3(1, 1, 1)
768
+ }));
769
+
770
+ const [createdRecords, ] = this.createMeshRecord(mesh, physicsOptions, worldTransforms, component);
771
+ records = createdRecords.filter(r => r !== null) as TRecord[];
772
+
773
+ return [records, motionType];
774
+ }
775
+
776
+ /**
777
+ * Creates physics records for an InstancedGltfMeshComponent
778
+ * @param component The instanced GLTF mesh component
779
+ * @param physicsOptions The physics options
780
+ * @param worldScale The world scale
781
+ * @returns [records, motionType] tuple
782
+ */
783
+ protected createInstancedGltfMeshRecord(
784
+ component: InstancedGltfMeshComponent,
785
+ physicsOptions: ComponentPhysicsOptions | undefined,
786
+ worldPos: THREE.Vector3,
787
+ worldQuat: THREE.Quaternion
788
+ ): [TRecord[], PhysicsMotionType | null] {
789
+ // Only proceed if the model is loaded (check if we have instanced meshes)
790
+ if (component.isLoading()) {
791
+ return [[], null];
792
+ }
793
+
794
+ const instancedMeshes = component.getInstancedMeshes();
795
+ if (!instancedMeshes || instancedMeshes.length === 0) {
796
+ return [[], null];
797
+ }
798
+
799
+ // Get the number of instances
800
+ const instanceCount = component.getInstanceCount();
801
+
802
+ if (!instanceCount || instanceCount === 0) {
803
+ return [[], null];
804
+ }
805
+
806
+ let records: TRecord[] = [];
807
+ const motionType = physicsOptions?.motionType ?? PhysicsMotionType.Dynamic;
808
+ const isVoxelsCollision = physicsOptions?.collisionMeshType === CollisionMeshType.Voxels;
809
+ if (isVoxelsCollision) {
810
+ const voxelsCollisionDesc: VoxelCollisionDesc | undefined = physicsOptions.collisionData?.voxels;
811
+ if (!voxelsCollisionDesc) {
812
+ console.log('No voxel collision data provided, using default single voxel at origin. Either provide collisionData.voxels in constructor, or use `overridePhysicsOptions`/`replacePhysicsOptions` to set it later.');
813
+ }
814
+ const voxelSize = voxelsCollisionDesc?.voxelSize ?? new THREE.Vector3(1, 1, 1);
815
+ const voxels: Float32Array | Int32Array = voxelsCollisionDesc?.coordinates ?? new Int32Array([0, 0, 0]);
816
+ const voxelCount = voxels.length / 3;
817
+ const mass = this.calculateBoxMass(voxelSize, physicsOptions?.density) * voxelCount;
818
+ const record = this.doCreateVoxelBody({
819
+ motionType,
820
+ options: physicsOptions!,
821
+ worldPos,
822
+ worldQuat,
823
+ mass,
824
+ voxels,
825
+ voxelSize,
826
+ offset: voxelsCollisionDesc?.offset,
827
+ });
828
+ if (record) {
829
+ records = [record];
830
+ }
831
+ }
832
+ else {
833
+ const model = component.getModelTemplate();
834
+ if (model) {
835
+ // Process the GLTF model to create physics meshes (same as regular GLTF)
836
+ const physicsMeshes = this.processGLTFModelForPhysics(model);
837
+
838
+ // Create physics bodies for the instances
839
+ if (physicsMeshes.length > 0) {
840
+ const transforms = component.getInstancesTransforms(true);
841
+ const paramTransforms = transforms.map(transform => ({
842
+ position: transform.position ?? new THREE.Vector3(),
843
+ rotation: transform.rotation ? new THREE.Quaternion().setFromEuler(transform.rotation) : new THREE.Quaternion(),
844
+ scale: transform.scale ?? new THREE.Vector3(1, 1, 1)
845
+ }));
846
+
847
+ records = this.doCreateMeshBodiesWithTransformOverrides({
848
+ motionType: motionType!,
849
+ options: physicsOptions!,
850
+ worldPos: paramTransforms[0].position,
851
+ worldQuat: paramTransforms[0].rotation,
852
+ // sum of all physicsMeshes
853
+ mass: physicsMeshes.reduce((sum, mesh) => sum + this.calculateMeshMass(mesh.geometry, physicsOptions?.density), 0),
854
+ meshes: physicsMeshes,
855
+ }, paramTransforms);
856
+ }
857
+ }
858
+ }
859
+
860
+ return [records, motionType];
861
+ }
862
+
863
+ /**
864
+ * Removes a scene component from the physics simulation
865
+ * @param component The scene component to remove
866
+ */
867
+ public removeComponent(component: PrimitiveComponent): void {
868
+ if (!ensure(this.initialized)) {
869
+ return;
870
+ }
871
+
872
+ const records = this.bodies.get(component);
873
+ if (!records) {
874
+ return;
875
+ }
876
+
877
+ records.forEach((record) => {
878
+ this.doRemoveComponent(record);
879
+ });
880
+ this.bodies.delete(component);
881
+ }
882
+
883
+ /**
884
+ * Updates the transform (position/rotation) of a physics body
885
+ * @param component The primitive component whose transform should be updated
886
+ */
887
+ public updateTransform(component: PrimitiveComponent): void {
888
+ if (!ensure(this.initialized)) {
889
+ return;
890
+ }
891
+
892
+ const records = this.bodies.get(component);
893
+ if (!records) {
894
+ return;
895
+ }
896
+
897
+ records.forEach((record) => {
898
+ this.doUpdateTransform(component, record);
899
+ });
900
+ }
901
+
902
+ /**
903
+ * Gets a scalar physics parameter value for a component
904
+ * @param component The scene component to query
905
+ * @param param The scalar parameter to get
906
+ * @returns The parameter value or null if not found
907
+ */
908
+ public getScalarParam(component: PrimitiveComponent, param: PhysicsScalarParam): number | null {
909
+ if (!ensure(this.initialized)) {
910
+ return null;
911
+ }
912
+
913
+ const records = this.bodies.get(component);
914
+ if (!records || records.length === 0) {
915
+ return null;
916
+ }
917
+
918
+ return this.doGetScalarParam(records[0], param);
919
+ }
920
+
921
+ /**
922
+ * Sets a scalar physics parameter value for a component
923
+ * @param component The scene component to modify
924
+ * @param param The scalar parameter to set
925
+ * @param value The new parameter value
926
+ * @returns True if the parameter was set successfully
927
+ */
928
+ public setScalarParam(component: PrimitiveComponent, param: PhysicsScalarParam, value: number): boolean {
929
+ if (!ensure(this.initialized)) {
930
+ return false;
931
+ }
932
+
933
+ const records = this.bodies.get(component);
934
+ if (!records) {
935
+ return false;
936
+ }
937
+
938
+ return this.doSetScalarParam(records, param, value);
939
+ }
940
+
941
+ /**
942
+ * Gets a vector physics parameter value for a component
943
+ * @param component The scene component to query
944
+ * @param param The vector parameter to get
945
+ * @returns The parameter value array or null if not found
946
+ */
947
+ public getVectorParam(component: PrimitiveComponent, param: PhysicsVectorParam): VectorArray | null {
948
+ if (!ensure(this.initialized)) {
949
+ return null;
950
+ }
951
+
952
+ const records = this.bodies.get(component);
953
+ if (!records || records.length === 0) {
954
+ return null;
955
+ }
956
+
957
+ return this.doGetVectorParam(records[0], param);
958
+ }
959
+
960
+ /**
961
+ * Sets a vector physics parameter value for a component
962
+ * @param component The scene component to modify
963
+ * @param param The vector parameter to set
964
+ * @param value The new parameter value array
965
+ * @returns True if the parameter was set successfully
966
+ */
967
+ public setVectorParam(component: PrimitiveComponent, param: PhysicsVectorParam, value: VectorArray): boolean {
968
+ if (!ensure(this.initialized)) {
969
+ return false;
970
+ }
971
+
972
+ const records = this.bodies.get(component);
973
+ if (!records || records.length === 0) {
974
+ return false;
975
+ }
976
+ return records.reduce((acc, record) => acc && this.doSetVectorParam(record, param, value), true);
977
+ }
978
+
979
+ /**
980
+ * Clears a vector physics parameter value for a component
981
+ * @param component The scene component to modify
982
+ * @param param The vector parameter to clear
983
+ * @returns True if the parameter was cleared successfully
984
+ */
985
+ public clearVectorParam(component: PrimitiveComponent, param: PhysicsVectorParam): boolean {
986
+ if (!ensure(this.initialized)) {
987
+ return false;
988
+ }
989
+
990
+ const records = this.bodies.get(component);
991
+ if (!records || records.length === 0) {
992
+ return false;
993
+ }
994
+ return records.reduce((acc, record) => acc && this.doClearVectorParam(record, param), true);
995
+ }
996
+
997
+ /**
998
+ * Create a character controller for a scene component
999
+ * @param movementComponent Component to create controller for
1000
+ * @param options Character controller options
1001
+ * @returns True if the character controller was created successfully, false otherwise
1002
+ */
1003
+ public createCharacterController(movementComponent: BasePawnMovementComponent, options: CharacterControllerOptions): boolean {
1004
+ if (!ensure(this.initialized)) {
1005
+ return false;
1006
+ }
1007
+
1008
+ if (!ensure(!this.characterControllers.has(movementComponent))) {
1009
+ return false;
1010
+ }
1011
+
1012
+ const record = this.doCreateCharacterController(options);
1013
+ if (!record) {
1014
+ return false;
1015
+ }
1016
+ this.characterControllers.set(movementComponent, record);
1017
+ return true;
1018
+ }
1019
+
1020
+ /**
1021
+ * Remove a character controller for a scene component
1022
+ * @param movementComponent Component to remove controller for
1023
+ */
1024
+ public removeCharacterController(movementComponent: BasePawnMovementComponent): void {
1025
+ if (!ensure(this.initialized)) {
1026
+ return;
1027
+ }
1028
+
1029
+ const record = this.characterControllers.get(movementComponent);
1030
+ if (!record) {
1031
+ return;
1032
+ }
1033
+
1034
+ if (this.doRemoveCharacterController(record)) {
1035
+ this.characterControllers.delete(movementComponent);
1036
+ }
1037
+ }
1038
+
1039
+ /**
1040
+ * Compute character movement for a scene component
1041
+ * @param movementComponent Component to compute movement for
1042
+ * @param componentToMove Component to move
1043
+ * @param movement Movement vector [x, y, z]
1044
+ */
1045
+ public computeCharacterMovement(movementComponent: BasePawnMovementComponent, componentToMove: PrimitiveComponent, movement: VectorArray, ignoreCollision: boolean): { isGrounded: boolean } {
1046
+ if (!ensure(this.initialized)) {
1047
+ return { isGrounded: false };
1048
+ }
1049
+
1050
+ const record = this.characterControllers.get(movementComponent);
1051
+ if (!record) {
1052
+ return { isGrounded: false };
1053
+ }
1054
+
1055
+ const recordsToMove = this.bodies.get(componentToMove);
1056
+ if (!recordsToMove || recordsToMove.length === 0) {
1057
+ return { isGrounded: false };
1058
+ }
1059
+
1060
+ // only handle recordsToMove[0] for now
1061
+ return this.doComputeCharacterMovement(record, recordsToMove[0], movement, ignoreCollision);
1062
+ }
1063
+
1064
+ /**
1065
+ * Configure collision filtering between two components
1066
+ * @param componentA First component
1067
+ * @param componentB Second component
1068
+ * @param ignore Whether componentA should ignore collisions with componentB
1069
+ */
1070
+ public setComponentCollisionIgnore(componentA: PrimitiveComponent, componentB: PrimitiveComponent, ignore: boolean): boolean {
1071
+ if (!ensure(this.initialized)) {
1072
+ return false;
1073
+ }
1074
+
1075
+ const recordsA = this.bodies.get(componentA);
1076
+ const recordsB = this.bodies.get(componentB);
1077
+
1078
+ if (!recordsA || !recordsB) {
1079
+ return false;
1080
+ }
1081
+
1082
+ let result = true;
1083
+ for (const recordA of recordsA) {
1084
+ for (const recordB of recordsB) {
1085
+ result = result && this.doSetComponentCollisionIgnore(recordA, recordB, ignore);
1086
+ }
1087
+ }
1088
+
1089
+ return result;
1090
+ }
1091
+
1092
+ /**
1093
+ * Creates a joint between two physics bodies
1094
+ * @param desc Joint description containing type, components, and connection points
1095
+ * @returns Joint ID if successful, null if failed
1096
+ */
1097
+ public createJoint(desc: JointDesc): string | null {
1098
+ if (!ensure(this.initialized)) {
1099
+ return null;
1100
+ }
1101
+
1102
+ const recordsA = this.bodies.get(desc.componentA);
1103
+ const recordsB = this.bodies.get(desc.componentB);
1104
+
1105
+ if (!recordsA || !recordsB) {
1106
+ console.error('Cannot create joint: one or both components not found in physics engine');
1107
+ return null;
1108
+ }
1109
+
1110
+ if (recordsA.length !== 1 || recordsB.length !== 1) {
1111
+ console.error('Cannot create joint: one or both components have multiple or none body count');
1112
+ return null;
1113
+ }
1114
+
1115
+ const jointRecord = this.doCreateJoint(desc, recordsA[0], recordsB[0]);
1116
+ if (!jointRecord) {
1117
+ return null;
1118
+ }
1119
+
1120
+ const jointId = `joint_${this.nextJointId++}`;
1121
+ this.joints.set(jointId, jointRecord);
1122
+ return jointId;
1123
+ }
1124
+
1125
+ /**
1126
+ * Removes a joint from the physics simulation
1127
+ * @param jointId The joint ID returned from createJoint
1128
+ * @returns True if the joint was successfully removed
1129
+ */
1130
+ public removeJoint(jointId: string): boolean {
1131
+ if (!ensure(this.initialized)) {
1132
+ return false;
1133
+ }
1134
+
1135
+ const jointRecord = this.joints.get(jointId);
1136
+ if (!jointRecord) {
1137
+ return false;
1138
+ }
1139
+
1140
+ if (this.doRemoveJoint(jointRecord)) {
1141
+ this.joints.delete(jointId);
1142
+ return true;
1143
+ }
1144
+ return false;
1145
+ }
1146
+
1147
+ /**
1148
+ * Gets all active joint IDs
1149
+ * @returns Array of joint IDs
1150
+ */
1151
+ public getActiveJoints(): string[] {
1152
+ return Array.from(this.joints.keys());
1153
+ }
1154
+
1155
+ /**
1156
+ * Creates a joint directly from physics body records (for special cases like ragdoll)
1157
+ * @param type Joint type
1158
+ * @param recordA First physics body record
1159
+ * @param recordB Second physics body record
1160
+ * @param anchorA Anchor point on first body
1161
+ * @param anchorB Anchor point on second body
1162
+ * @param axis Optional axis for revolute/prismatic joints
1163
+ * @returns Joint ID if successful, null if failed
1164
+ */
1165
+ public createJointFromRecords(
1166
+ type: JointType,
1167
+ recordA: TRecord,
1168
+ recordB: TRecord,
1169
+ anchorA: THREE.Vector3,
1170
+ anchorB: THREE.Vector3,
1171
+ axis?: THREE.Vector3
1172
+ ): string | null {
1173
+ if (!ensure(this.initialized)) {
1174
+ return null;
1175
+ }
1176
+
1177
+ const jointRecord = this.doCreateJointFromRecords(type, recordA, recordB, anchorA, anchorB, axis);
1178
+ if (!jointRecord) {
1179
+ return null;
1180
+ }
1181
+
1182
+ const jointId = `joint_${this.nextJointId++}`;
1183
+ this.joints.set(jointId, jointRecord);
1184
+ return jointId;
1185
+ }
1186
+
1187
+ // Direct physics body management methods (for special cases like ragdolls)
1188
+
1189
+ public createPhysicsBody(desc: PhysicsBodyDesc): string | null {
1190
+ if (!ensure(this.initialized)) {
1191
+ return null;
1192
+ }
1193
+
1194
+ const record = this.doCreateDirectBody(desc);
1195
+ if (!record) {
1196
+ return null;
1197
+ }
1198
+
1199
+ const handle = `body_${this.nextBodyId++}`;
1200
+ this.directBodies.set(handle, record);
1201
+ return handle;
1202
+ }
1203
+
1204
+ public removePhysicsBody(handle: string): boolean {
1205
+ if (!ensure(this.initialized)) {
1206
+ return false;
1207
+ }
1208
+
1209
+ const record = this.directBodies.get(handle);
1210
+ if (!record) {
1211
+ return false;
1212
+ }
1213
+
1214
+ const success = this.doRemoveDirectBody(record);
1215
+ if (success) {
1216
+ this.directBodies.delete(handle);
1217
+ }
1218
+ return success;
1219
+ }
1220
+
1221
+ public isValidPhysicsBody(handle: string): boolean {
1222
+ return this.directBodies.has(handle);
1223
+ }
1224
+
1225
+ public getPhysicsBodyPosition(handle: string): THREE.Vector3 | null {
1226
+ const record = this.directBodies.get(handle);
1227
+ if (!record) {
1228
+ return null;
1229
+ }
1230
+ return this.doGetBodyPosition(record);
1231
+ }
1232
+
1233
+ public getPhysicsBodyRotation(handle: string): THREE.Quaternion | null {
1234
+ const record = this.directBodies.get(handle);
1235
+ if (!record) {
1236
+ return null;
1237
+ }
1238
+ return this.doGetBodyRotation(record);
1239
+ }
1240
+
1241
+ public setPhysicsBodyPosition(handle: string, position: THREE.Vector3): boolean {
1242
+ const record = this.directBodies.get(handle);
1243
+ if (!record) {
1244
+ return false;
1245
+ }
1246
+ return this.doSetBodyPosition(record, position);
1247
+ }
1248
+
1249
+ public setPhysicsBodyRotation(handle: string, rotation: THREE.Quaternion): boolean {
1250
+ const record = this.directBodies.get(handle);
1251
+ if (!record) {
1252
+ return false;
1253
+ }
1254
+ return this.doSetBodyRotation(record, rotation);
1255
+ }
1256
+
1257
+ public applyImpulseToPhysicsBody(handle: string, impulse: THREE.Vector3, worldSpace: boolean = true): boolean {
1258
+ const record = this.directBodies.get(handle);
1259
+ if (!record) {
1260
+ return false;
1261
+ }
1262
+ return this.doApplyBodyImpulse(record, impulse, worldSpace);
1263
+ }
1264
+
1265
+ public setPhysicsBodyEnabled(handle: string, enabled: boolean): boolean {
1266
+ const record = this.directBodies.get(handle);
1267
+ if (!record) {
1268
+ return false;
1269
+ }
1270
+ return this.doSetBodyEnabled(record, enabled);
1271
+ }
1272
+
1273
+ public createJointFromBodies(
1274
+ type: JointType,
1275
+ bodyA: string,
1276
+ bodyB: string,
1277
+ anchorA: THREE.Vector3,
1278
+ anchorB: THREE.Vector3,
1279
+ axis?: THREE.Vector3
1280
+ ): string | null {
1281
+ if (!ensure(this.initialized)) {
1282
+ return null;
1283
+ }
1284
+
1285
+ const recordA = this.directBodies.get(bodyA);
1286
+ const recordB = this.directBodies.get(bodyB);
1287
+
1288
+ if (!recordA || !recordB) {
1289
+ return null;
1290
+ }
1291
+
1292
+ const jointRecord = this.doCreateJointFromRecords(type, recordA, recordB, anchorA, anchorB, axis);
1293
+ if (!jointRecord) {
1294
+ return null;
1295
+ }
1296
+
1297
+ const jointId = `joint_${this.nextJointId++}`;
1298
+ this.joints.set(jointId, jointRecord);
1299
+ return jointId;
1300
+ }
1301
+
1302
+ //====================================================================================================
1303
+
1304
+ protected calculateBoxMass(size: THREE.Vector3, density: number | undefined): number {
1305
+ const volume = size.x * size.y * size.z;
1306
+ return volume * (density ?? 1);
1307
+ }
1308
+
1309
+ protected calculateSphereMass(radius: number, density: number | undefined): number {
1310
+ const volume = (4 / 3) * Math.PI * radius * radius * radius;
1311
+ return volume * (density ?? 1);
1312
+ }
1313
+
1314
+ protected calculateCylinderMass(height: number, radius: number, density: number | undefined): number {
1315
+ const volume = Math.PI * radius * radius * height;
1316
+ return volume * (density ?? 1);
1317
+ }
1318
+
1319
+ protected calculateCapsuleMass(height: number, radius: number, density: number | undefined): number {
1320
+ // Capsule is a cylinder with two hemisphere caps
1321
+ const cylinderVolume = Math.PI * radius * radius * height;
1322
+ const hemisphereVolume = (2/3) * Math.PI * radius * radius * radius;
1323
+ const volume = cylinderVolume + 2 * hemisphereVolume;
1324
+ return volume * (density ?? 1);
1325
+ }
1326
+
1327
+ protected calculateConeMass(height: number, radius: number, density: number | undefined): number {
1328
+ const volume = (1 / 3) * Math.PI * radius * radius * height;
1329
+ return volume * (density ?? 1);
1330
+ }
1331
+
1332
+ protected calculateMeshMass(geometry: THREE.BufferGeometry, density: number | undefined): number {
1333
+ // Approximate mass based on bounding box volume
1334
+ geometry.computeBoundingBox();
1335
+ const bbox = geometry.boundingBox;
1336
+ if (!bbox) {
1337
+ return 1; // default mass
1338
+ }
1339
+ const size = new THREE.Vector3();
1340
+ bbox.getSize(size);
1341
+ const volume = size.x * size.y * size.z;
1342
+ return volume * (density ?? 1);
1343
+ }
1344
+
1345
+
1346
+ protected abstract doCreate(options: PhysicsOptions): Promise<boolean>;
1347
+ protected abstract doDestroy(): boolean;
1348
+ protected abstract doTick(deltaTime: number): void;
1349
+ protected abstract doRemoveComponent(record: TRecord): boolean;
1350
+ protected abstract doUpdateTransform(component: SceneComponent, record: TRecord): void;
1351
+ protected abstract doGetScalarParam(record: TRecord, param: PhysicsScalarParam): number | null;
1352
+ protected abstract doSetScalarParam(records: TRecord[], param: PhysicsScalarParam, value: number): boolean;
1353
+ protected abstract doGetVectorParam(record: TRecord, param: PhysicsVectorParam): VectorArray | null;
1354
+ protected abstract doSetVectorParam(record: TRecord, param: PhysicsVectorParam, value: VectorArray): boolean;
1355
+ protected abstract doClearVectorParam(record: TRecord, param: PhysicsVectorParam): boolean;
1356
+ protected abstract doCreateBoxBody(desc: BoxBodyDesc): TRecord | null;
1357
+ protected abstract doCreateMeshBody(desc: MeshBodyDesc, scale: THREE.Vector3): TRecord | null;
1358
+ protected abstract doCreateMeshBodiesWithTransformOverrides(desc: MeshBodyDesc, transforms: {position?: THREE.Vector3, rotation?: THREE.Quaternion, scale?: THREE.Vector3}[]): TRecord[];
1359
+ protected abstract doCreateVoxelBody(desc: VoxelBodyDesc): TRecord | null;
1360
+ protected abstract doCreateSphereBody(desc: SphereBodyDesc): TRecord | null;
1361
+ protected abstract doCreateCylinderBody(desc: CylinderBodyDesc): TRecord | null;
1362
+ protected abstract doCreateCapsuleBody(desc: CapsuleBodyDesc): TRecord | null;
1363
+ protected abstract doCreateConeBody(desc: ConeBodyDesc): TRecord | null;
1364
+ protected abstract doCreateHeightFieldBody(desc: HeightFieldBodyDesc): TRecord | null;
1365
+ protected doCreateCharacterController(options: CharacterControllerOptions): TCharacterControllerRecord | null {
1366
+ throw new Error('Not implemented');
1367
+ }
1368
+ protected doRemoveCharacterController(record: TCharacterControllerRecord): boolean {
1369
+ throw new Error('Not implemented');
1370
+ }
1371
+ protected doComputeCharacterMovement(record: TCharacterControllerRecord, recordToMove: TRecord, movement: VectorArray, ignoreCollision: boolean): { isGrounded: boolean } {
1372
+ throw new Error('Not implemented');
1373
+ }
1374
+ protected doSetComponentCollisionIgnore(recordA: TRecord, recordB: TRecord, ignore: boolean): boolean {
1375
+ throw new Error('Not implemented');
1376
+ }
1377
+ protected abstract doCreateJoint(desc: JointDesc, recordA: TRecord, recordB: TRecord): TJointRecord | null;
1378
+ protected abstract doRemoveJoint(jointRecord: TJointRecord): boolean;
1379
+ protected abstract doCreateJointFromRecords(
1380
+ type: JointType,
1381
+ recordA: TRecord,
1382
+ recordB: TRecord,
1383
+ anchorA: THREE.Vector3,
1384
+ anchorB: THREE.Vector3,
1385
+ axis?: THREE.Vector3
1386
+ ): TJointRecord | null;
1387
+
1388
+ // Abstract methods for direct physics body management
1389
+ protected abstract doCreateDirectBody(desc: PhysicsBodyDesc): TRecord | null;
1390
+ protected abstract doRemoveDirectBody(record: TRecord): boolean;
1391
+ protected abstract doGetBodyPosition(record: TRecord): THREE.Vector3 | null;
1392
+ protected abstract doGetBodyRotation(record: TRecord): THREE.Quaternion | null;
1393
+ protected abstract doSetBodyPosition(record: TRecord, position: THREE.Vector3): boolean;
1394
+ protected abstract doSetBodyRotation(record: TRecord, rotation: THREE.Quaternion): boolean;
1395
+ protected abstract doApplyBodyImpulse(record: TRecord, impulse: THREE.Vector3, worldSpace: boolean): boolean;
1396
+ protected abstract doSetBodyEnabled(record: TRecord, enabled: boolean): boolean;
1397
+ public abstract getComponentState(component: PrimitiveComponent): PrimitiveComponentPhysicsState | null;
1398
+ public abstract getCollisionEvents(): RawCollisionEvent[];
1399
+ public abstract clearCollisionEvents(): void;
1400
+ public abstract setDebugRendererEnabled(enabled: boolean): boolean;
1401
+ public abstract isDebugRendererEnabled(): boolean;
1402
+
1403
+ /**
1404
+ * Process any pending collision events in the physics system
1405
+ * This is called internally by the tick method
1406
+ */
1407
+ protected processCollisionEvents(): void {
1408
+ const events = this.getCollisionEvents();
1409
+ for (const event of events) {
1410
+ this.handleCollisionEvent(event);
1411
+ }
1412
+ // Clear the collision events after processing them
1413
+ this.clearCollisionEvents();
1414
+ }
1415
+
1416
+ /**
1417
+ * Handles a single collision event by notifying the involved components
1418
+ * @param event Collision event information
1419
+ */
1420
+ protected handleCollisionEvent(event: RawCollisionEvent): void {
1421
+ const componentA = event.componentA;
1422
+ const componentB = event.componentB;
1423
+
1424
+ const eventA: CollisionEvent = {
1425
+ thisComponent: componentA,
1426
+ otherComponent: componentB,
1427
+ thisPoint: event.pointA,
1428
+ thisNormal: event.normalA,
1429
+ otherPoint: event.pointB,
1430
+ otherNormal: event.normalB,
1431
+ relativeVelocity: event.relativeVelocity,
1432
+ };
1433
+
1434
+ const eventB: CollisionEvent = {
1435
+ thisComponent: componentB,
1436
+ otherComponent: componentA,
1437
+ thisPoint: event.pointB,
1438
+ thisNormal: event.normalB,
1439
+ otherPoint: event.pointA,
1440
+ otherNormal: event.normalA,
1441
+ relativeVelocity: event.relativeVelocity,
1442
+ };
1443
+
1444
+ if (componentA && componentB) {
1445
+ const actorA = componentA.getActor();
1446
+ const actorB = componentB.getActor();
1447
+
1448
+ if(event.eventType === CollisionEventType.Started) {
1449
+ if (event.isTriggerEvent) {
1450
+ // Component events
1451
+ componentA.onOverlapWith.invoke(componentA, componentB, eventA);
1452
+ componentB.onOverlapWith.invoke(componentB, componentA, eventB);
1453
+ // Actor events
1454
+ if (actorA && actorB) actorA.onOverlapWith.invoke(actorA, componentA, actorB, componentB, eventA);
1455
+ if (actorB && actorA) actorB.onOverlapWith.invoke(actorB, componentB, actorA, componentA, eventB);
1456
+ } else {
1457
+ // Component events
1458
+ componentA.onCollideWith.invoke(componentA, componentB, eventA);
1459
+ componentB.onCollideWith.invoke(componentB, componentA, eventB);
1460
+ // Actor events
1461
+ if (actorA && actorB) actorA.onCollideWith.invoke(actorA, componentA, actorB, componentB, eventA);
1462
+ if (actorB && actorA) actorB.onCollideWith.invoke(actorB, componentB, actorA, componentA, eventB);
1463
+ }
1464
+ } else {
1465
+ if (event.isTriggerEvent) {
1466
+ // Component events
1467
+ componentA.onStopOverlappingWith.invoke(componentA, componentB, eventA);
1468
+ componentB.onStopOverlappingWith.invoke(componentB, componentA, eventB);
1469
+ // Actor events
1470
+ if (actorA && actorB) actorA.onStopOverlappingWith.invoke(actorA, componentA, actorB, componentB, eventA);
1471
+ if (actorB && actorA) actorB.onStopOverlappingWith.invoke(actorB, componentB, actorA, componentA, eventB);
1472
+ } else {
1473
+ // Component events
1474
+ componentA.onStopCollidingWith.invoke(componentA, componentB, eventA);
1475
+ componentB.onStopCollidingWith.invoke(componentB, componentA, eventB);
1476
+ // Actor events
1477
+ if (actorA && actorB) actorA.onStopCollidingWith.invoke(actorA, componentA, actorB, componentB, eventA);
1478
+ if (actorB && actorA) actorB.onStopCollidingWith.invoke(actorB, componentB, actorA, componentA, eventB);
1479
+ }
1480
+ }
1481
+ }
1482
+ }
1483
+
1484
+ // Vehicle controller methods - default implementations that throw errors
1485
+ public abstract createVehicle(movementComponent: BasePawnMovementComponent, chassisComponent: PrimitiveComponent): IPhysicsVehicle | null;
1486
+ }