@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,1191 @@
1
+ /**
2
+ * RapierPhysicsEngine powers Genesys physics using the Rapier library.
3
+ *
4
+ * This implementation extends `BasePhysicsEngine` and converts scene components
5
+ * into Rapier rigid bodies and colliders. A single `Rapier.World` instance is
6
+ * maintained along with an event queue to capture collision events which are
7
+ * then mapped back to components. The engine supports mesh-based colliders,
8
+ * terrain height fields and character controllers, and it can optionally draw
9
+ * debug lines using `RapierDebugRenderer`.
10
+ *
11
+ * Recommended usage (for humans and AI assistants):
12
+ * - Instantiate via `createPhysicsEngine` with `PhysicsEngine.Rapier`.
13
+ * - Call `addComponent` only after a component's mesh or collision shape is
14
+ * initialized so colliders are created correctly.
15
+ * - Enable the debug renderer during development with
16
+ * `setDebugRendererEnabled(true)` to visualize physics bodies.
17
+ * - Prefer simplified or convex meshes when possible to keep performance high.
18
+ */
19
+ import * as RAPIER from '@dimforge/rapier3d-compat';
20
+ import * as THREE from 'three';
21
+ import { CollisionMeshType, PhysicsMotionType } from '../../physics/PhysicsTypes.js';
22
+ import { CollisionConfig, getCollisionChannelBit, resolveChannelName } from '../../systems/collision/CollisionConfig.js';
23
+ import { CollisionMode, CollisionResponse, DefaultCollisionProfile } from '../../systems/collision/CollisionTypes.js';
24
+ import { ensure } from '../../utils/Utils.js';
25
+ import { BasePhysicsEngine } from '../BasePhysicsEngine.js';
26
+ import { JointType } from '../BasePhysicsEngine.js';
27
+ import { PhysicsScalarParam, PhysicsVectorParam } from '../PhysicsEngine.js';
28
+ import { CollisionEventType } from '../PhysicsEngine.js';
29
+ import { RapierDebugRenderer } from './RapierDebugRender.js';
30
+ import { RapierVehicle } from './RapierVehicle.js';
31
+ export class RapierPhysicsEngine extends BasePhysicsEngine {
32
+ constructor(gameWorld) {
33
+ super(gameWorld);
34
+ Object.defineProperty(this, "pendingCollisions", {
35
+ enumerable: true,
36
+ configurable: true,
37
+ writable: true,
38
+ value: []
39
+ });
40
+ Object.defineProperty(this, "world", {
41
+ enumerable: true,
42
+ configurable: true,
43
+ writable: true,
44
+ value: null
45
+ });
46
+ Object.defineProperty(this, "eventQueue", {
47
+ enumerable: true,
48
+ configurable: true,
49
+ writable: true,
50
+ value: null
51
+ });
52
+ // Map from collider to component for fast lookup during collision processing
53
+ Object.defineProperty(this, "colliderToComponent", {
54
+ enumerable: true,
55
+ configurable: true,
56
+ writable: true,
57
+ value: new Map()
58
+ });
59
+ // Set of ignored collider pairs (stored as "handle1,handle2" strings)
60
+ Object.defineProperty(this, "ignoredColliderPairs", {
61
+ enumerable: true,
62
+ configurable: true,
63
+ writable: true,
64
+ value: new Set()
65
+ });
66
+ // Debug renderer
67
+ Object.defineProperty(this, "debugRenderer", {
68
+ enumerable: true,
69
+ configurable: true,
70
+ writable: true,
71
+ value: null
72
+ });
73
+ // Vehicle controllers
74
+ Object.defineProperty(this, "vehicles", {
75
+ enumerable: true,
76
+ configurable: true,
77
+ writable: true,
78
+ value: new Map()
79
+ });
80
+ // cache for collider desc without scale, mapping from a list of meshes and the collision mesh type
81
+ Object.defineProperty(this, "cachedColliderDescTemplates", {
82
+ enumerable: true,
83
+ configurable: true,
84
+ writable: true,
85
+ value: new Map()
86
+ });
87
+ Object.defineProperty(this, "cachedCharacterControllerCollisions", {
88
+ enumerable: true,
89
+ configurable: true,
90
+ writable: true,
91
+ value: new Map()
92
+ });
93
+ }
94
+ async doCreate(options) {
95
+ await RAPIER.init();
96
+ this.world = new RAPIER.World(this.makeVector(options.gravity.toArray()));
97
+ this.eventQueue = new RAPIER.EventQueue(true);
98
+ // Initialize debug renderer if we have a scene to render to
99
+ if (this.gameWorld && this.gameWorld.scene) {
100
+ this.debugRenderer = new RapierDebugRenderer(this.gameWorld.scene, this.world);
101
+ this.debugRenderer.enabled = options.debugVisualization ?? false;
102
+ }
103
+ return true;
104
+ }
105
+ doDestroy() {
106
+ this.cachedCharacterControllerCollisions.clear();
107
+ this.pendingCollisions = [];
108
+ const world = this.world;
109
+ // Clean up vehicles
110
+ this.vehicles.forEach((vehicle, _) => {
111
+ vehicle.destroy();
112
+ });
113
+ this.vehicles.clear();
114
+ // Remove all physics bodies and colliders first
115
+ this.bodies.forEach((records, _) => {
116
+ records.forEach(([body, collider]) => {
117
+ world.removeRigidBody(body);
118
+ world.removeCollider(collider, false);
119
+ });
120
+ });
121
+ this.bodies.clear();
122
+ // Clean up character controllers
123
+ this.characterControllers.forEach((controller, _) => {
124
+ world.removeCharacterController(controller);
125
+ });
126
+ this.characterControllers.clear();
127
+ // Clean up joints
128
+ this.joints.forEach((joint, _) => {
129
+ world.removeImpulseJoint(joint, true);
130
+ });
131
+ this.joints.clear();
132
+ // Free the WASM world object
133
+ world.free();
134
+ this.world = null;
135
+ if (this.eventQueue) {
136
+ this.eventQueue.free();
137
+ this.eventQueue = null;
138
+ }
139
+ // Clean up debug renderer
140
+ if (this.debugRenderer) {
141
+ this.debugRenderer.dispose();
142
+ this.debugRenderer = null;
143
+ }
144
+ this.colliderToComponent.clear();
145
+ this.ignoredColliderPairs.clear();
146
+ return true;
147
+ }
148
+ doTick(deltaTime) {
149
+ this.world.step(this.eventQueue);
150
+ for (const vehicle of this.vehicles.values()) {
151
+ vehicle.tick(deltaTime);
152
+ }
153
+ // Process collision events from Rapier
154
+ this.eventQueue.drainCollisionEvents((handle1, handle2, started) => {
155
+ this.handleRapierCollision(handle1, handle2, started);
156
+ });
157
+ const objectPosition = new THREE.Vector3();
158
+ const objectQuat = new THREE.Quaternion();
159
+ // Update all object positions based on physics
160
+ this.bodies.forEach((records, object) => {
161
+ records.forEach(([body, _]) => {
162
+ const motionType = object.getMotionType();
163
+ if (motionType === PhysicsMotionType.Static) {
164
+ // static objects cannot be moved by the physics engine
165
+ // so there's no need to sync its transform back to the scene component
166
+ return;
167
+ }
168
+ const position = body.translation();
169
+ const rotation = body.rotation();
170
+ objectPosition.x = position.x;
171
+ objectPosition.y = position.y;
172
+ objectPosition.z = position.z;
173
+ objectQuat.x = rotation.x;
174
+ objectQuat.y = rotation.y;
175
+ objectQuat.z = rotation.z;
176
+ objectQuat.w = rotation.w;
177
+ object.syncFromPhysics(objectPosition, objectQuat);
178
+ });
179
+ });
180
+ // Update debug renderer if available
181
+ if (this.debugRenderer) {
182
+ this.debugRenderer.update();
183
+ }
184
+ }
185
+ handleRapierCollision(handle1, handle2, started) {
186
+ // Check if this collision pair should be ignored
187
+ const pairKey1 = `${handle1},${handle2}`;
188
+ const pairKey2 = `${handle2},${handle1}`;
189
+ if (this.ignoredColliderPairs.has(pairKey1) || this.ignoredColliderPairs.has(pairKey2)) {
190
+ return; // Ignore this collision
191
+ }
192
+ const collider1 = this.world.getCollider(handle1);
193
+ const collider2 = this.world.getCollider(handle2);
194
+ if (!collider1 || !collider2)
195
+ return;
196
+ const componentA = this.colliderToComponent.get(handle1);
197
+ const componentB = this.colliderToComponent.get(handle2);
198
+ if (!componentA || !componentB)
199
+ return;
200
+ const contact = collider1.contactCollider(collider2, 0.1);
201
+ let contactPointA = null;
202
+ let contactNormalA = null;
203
+ let contactPointB = null;
204
+ let contactNormalB = null;
205
+ if (contact) {
206
+ contactPointA = new THREE.Vector3(contact.point1.x, contact.point1.y, contact.point1.z);
207
+ contactNormalA = new THREE.Vector3(contact.normal1.x, contact.normal1.y, contact.normal1.z);
208
+ contactPointB = new THREE.Vector3(contact.point2.x, contact.point2.y, contact.point2.z);
209
+ contactNormalB = new THREE.Vector3(contact.normal2.x, contact.normal2.y, contact.normal2.z);
210
+ }
211
+ // Calculate relative velocity at the contact point
212
+ const bodyA = collider1.parent();
213
+ const bodyB = collider2.parent();
214
+ let relativeVelocity = null;
215
+ if (bodyA && bodyB) {
216
+ const velA = bodyA.linvel();
217
+ const velB = bodyB.linvel();
218
+ // Calculate squared length manually
219
+ const dx = velB.x - velA.x;
220
+ const dy = velB.y - velA.y;
221
+ const dz = velB.z - velA.z;
222
+ relativeVelocity = Math.sqrt(dx * dx + dy * dy + dz * dz);
223
+ }
224
+ // Create collision info
225
+ const collision = {
226
+ componentA,
227
+ componentB,
228
+ pointA: contactPointA,
229
+ normalA: contactNormalA,
230
+ pointB: contactPointB,
231
+ normalB: contactNormalB,
232
+ relativeVelocity,
233
+ isTriggerEvent: collider1.isSensor() || collider2.isSensor(),
234
+ eventType: started ? CollisionEventType.Started : CollisionEventType.Ended,
235
+ };
236
+ this.pendingCollisions.push(collision);
237
+ }
238
+ doCreateBoxBody(desc) {
239
+ const colliderDesc = RAPIER.ColliderDesc.cuboid(desc.size.x / 2, desc.size.y / 2, desc.size.z / 2);
240
+ const record = this.createBody(colliderDesc, desc);
241
+ return record;
242
+ }
243
+ populateVerticesAndIndices(meshes, populateIndices = true) {
244
+ let totalVertexCount = 0;
245
+ let totalIndexCount = 0;
246
+ const validMeshes = [];
247
+ for (const mesh of meshes) {
248
+ const geometry = mesh.geometry;
249
+ if (!geometry.isBufferGeometry) {
250
+ console.error('Geometry is not a BufferGeometry');
251
+ continue;
252
+ }
253
+ const positionAttribute = geometry.getAttribute('position');
254
+ if (!positionAttribute) {
255
+ console.error('Geometry has no position attribute');
256
+ continue;
257
+ }
258
+ totalVertexCount += positionAttribute.count;
259
+ const indexAttribute = geometry.getIndex();
260
+ if (indexAttribute) {
261
+ totalIndexCount += indexAttribute.count;
262
+ }
263
+ validMeshes.push(mesh);
264
+ }
265
+ const vertices = new Float32Array(totalVertexCount * 3);
266
+ const indices = new Uint32Array(populateIndices ? totalIndexCount : 0);
267
+ let vertexOffset = 0;
268
+ let indexOffset = 0;
269
+ for (const mesh of validMeshes) {
270
+ const geometry = mesh.geometry;
271
+ if (indices !== null) {
272
+ const indexAttribute = geometry.getIndex();
273
+ if (indexAttribute) {
274
+ for (let i = 0; i < indexAttribute.count; i++) {
275
+ indices[indexOffset + i] = indexAttribute.getX(i) + vertexOffset;
276
+ }
277
+ indexOffset += indexAttribute.count;
278
+ }
279
+ }
280
+ const matrix = mesh.matrixWorld;
281
+ const positionAttribute = geometry.getAttribute('position');
282
+ for (let i = 0; i < positionAttribute.count; i++) {
283
+ // Must apply the mesh's matrix as there can be a transform from the mesh inside gltf
284
+ const vertex = new THREE.Vector3(positionAttribute.getX(i), positionAttribute.getY(i), positionAttribute.getZ(i));
285
+ vertex.applyMatrix4(matrix);
286
+ vertices[(vertexOffset + i) * 3] = vertex.x;
287
+ vertices[(vertexOffset + i) * 3 + 1] = vertex.y;
288
+ vertices[(vertexOffset + i) * 3 + 2] = vertex.z;
289
+ }
290
+ vertexOffset += positionAttribute.count;
291
+ }
292
+ return { vertices, indices };
293
+ }
294
+ calcBoundingPrimitive(meshes, calcBoundingFunc, getBoundingFunc, primitiveType) {
295
+ const combined = new primitiveType();
296
+ for (const mesh of meshes) {
297
+ const geometry = mesh.geometry;
298
+ {
299
+ const bounding = getBoundingFunc(geometry);
300
+ if (!bounding) {
301
+ calcBoundingFunc(geometry);
302
+ }
303
+ }
304
+ const bounding = getBoundingFunc(geometry).clone();
305
+ // The bounding (box/sphere/etc...) is calculated from the geometry with no transforms
306
+ // its parent node in glb can carry extra transforms, so we need to take that into account
307
+ bounding.applyMatrix4(mesh.matrixWorld);
308
+ combined.union(bounding);
309
+ }
310
+ return combined;
311
+ }
312
+ makeMeshColliderDescTemplate(meshes, collisionMeshType = CollisionMeshType.ConvexHull) {
313
+ if (!meshes || meshes.length === 0) {
314
+ console.error('No meshes provided to create mesh body');
315
+ return null;
316
+ }
317
+ const cacheKey = meshes.map(m => m.id).sort().join(',') + '|' + collisionMeshType;
318
+ if (this.cachedColliderDescTemplates.has(cacheKey)) {
319
+ return this.cachedColliderDescTemplates.get(cacheKey);
320
+ }
321
+ let colliderDesc = null;
322
+ // Use the combined data for collider creation
323
+ try {
324
+ // Determine which type of collider to create based on collisionMeshType
325
+ switch (collisionMeshType) {
326
+ case CollisionMeshType.Trimesh:
327
+ {
328
+ const { vertices, indices } = this.populateVerticesAndIndices(meshes, true);
329
+ console.log('Create Trimesh collider with', vertices.length, 'vertices', indices.length, 'indices');
330
+ colliderDesc = RAPIER.ColliderDesc.trimesh(vertices, indices);
331
+ break;
332
+ }
333
+ case CollisionMeshType.ConvexHull:
334
+ {
335
+ const { vertices } = this.populateVerticesAndIndices(meshes, false);
336
+ console.log('Create ConvexHull collider with', vertices.length, 'vertices');
337
+ colliderDesc = RAPIER.ColliderDesc.convexHull(vertices);
338
+ break;
339
+ }
340
+ case CollisionMeshType.BoundingBox:
341
+ {
342
+ const boundingBox = this.calcBoundingPrimitive(meshes, (geometry) => geometry.computeBoundingBox(), (geometry) => geometry.boundingBox, THREE.Box3);
343
+ const halfExtents = new THREE.Vector3();
344
+ boundingBox.getSize(halfExtents);
345
+ halfExtents.multiplyScalar(0.5);
346
+ // Create box collider using the combined bounding box dimensions
347
+ console.log('Created box collider with half dimensions', halfExtents.x, halfExtents.y, halfExtents.z, 'from', meshes.length, 'meshes');
348
+ colliderDesc = RAPIER.ColliderDesc.cuboid(halfExtents.x, halfExtents.y, halfExtents.z);
349
+ const offset = boundingBox.getCenter(new THREE.Vector3());
350
+ colliderDesc.setTranslation(offset.x, offset.y, offset.z);
351
+ break;
352
+ }
353
+ case CollisionMeshType.BoundingSphere:
354
+ {
355
+ const combinedBoundingSphere = this.calcBoundingPrimitive(meshes, (geometry) => geometry.computeBoundingSphere(), (geometry) => geometry.boundingSphere, THREE.Sphere);
356
+ const radius = combinedBoundingSphere.radius;
357
+ console.log('Created sphere collider with radius', radius, 'from', meshes.length, 'meshes');
358
+ colliderDesc = RAPIER.ColliderDesc.ball(radius);
359
+ const offset = combinedBoundingSphere.center;
360
+ colliderDesc.setTranslation(offset.x, offset.y, offset.z);
361
+ break;
362
+ }
363
+ case CollisionMeshType.Voxels:
364
+ {
365
+ // until we support generating voxels from meshes, we expect the user to provide voxel coords and process that in doCreateVoxelBody
366
+ console.error('Voxel type collision mesh should be handled by doCreateVoxelBody');
367
+ break;
368
+ }
369
+ default:
370
+ console.error('Invalid collision mesh type:', collisionMeshType);
371
+ break;
372
+ }
373
+ }
374
+ catch (error) {
375
+ console.error('Error creating mesh collider:', error);
376
+ }
377
+ this.cachedColliderDescTemplates.set(cacheKey, colliderDesc);
378
+ return colliderDesc;
379
+ }
380
+ scaleMeshColliderDesc(colliderDesc, scale) {
381
+ // don't bother for (1, 1, 1) scale
382
+ if (scale.x === 1 && scale.y === 1 && scale.z === 1)
383
+ return colliderDesc;
384
+ if (!colliderDesc)
385
+ return null;
386
+ switch (colliderDesc.shape.type) {
387
+ case RAPIER.ShapeType.Cuboid: {
388
+ const halfExtents = colliderDesc.shape.halfExtents;
389
+ const scaledDesc = RAPIER.ColliderDesc.cuboid(halfExtents.x * scale.x, halfExtents.y * scale.y, halfExtents.z * scale.z);
390
+ const translation = colliderDesc.translation;
391
+ scaledDesc.setTranslation(translation.x * scale.x, translation.y * scale.y, translation.z * scale.z);
392
+ return scaledDesc;
393
+ }
394
+ case RAPIER.ShapeType.Ball: {
395
+ const radius = colliderDesc.shape.radius;
396
+ const scaledDesc = RAPIER.ColliderDesc.ball(radius * Math.max(scale.x, scale.y, scale.z));
397
+ const translation = colliderDesc.translation;
398
+ scaledDesc.setTranslation(translation.x * scale.x, translation.y * scale.y, translation.z * scale.z);
399
+ return scaledDesc;
400
+ }
401
+ case RAPIER.ShapeType.TriMesh: {
402
+ const vertices = colliderDesc.shape.vertices.map((v, i) => v * (i % 3 === 0 ? scale.x : (i % 3 === 1 ? scale.y : scale.z)));
403
+ const indices = colliderDesc.shape.indices;
404
+ return RAPIER.ColliderDesc.trimesh(vertices, indices);
405
+ }
406
+ case RAPIER.ShapeType.ConvexPolyhedron: {
407
+ const vertices = colliderDesc.shape.vertices.map((v, i) => v * (i % 3 === 0 ? scale.x : (i % 3 === 1 ? scale.y : scale.z)));
408
+ return RAPIER.ColliderDesc.convexHull(vertices);
409
+ }
410
+ }
411
+ console.error(`Unknown collision type: ${colliderDesc.shape.type}`);
412
+ return colliderDesc;
413
+ }
414
+ /**
415
+ * Creates a mesh-based collider using either trimesh, convexMesh, or convexHull
416
+ * based on the mesh geometry and collisionMeshType option
417
+ */
418
+ doCreateMeshBody(desc, worldScale) {
419
+ const colliderDesc = this.scaleMeshColliderDesc(this.makeMeshColliderDescTemplate(desc.meshes, desc.options.collisionMeshType), worldScale);
420
+ if (!colliderDesc) {
421
+ return null;
422
+ }
423
+ return this.createBody(colliderDesc, desc);
424
+ }
425
+ doCreateMeshBodiesWithTransformOverrides(desc, transforms) {
426
+ const templateColliderDesc = this.makeMeshColliderDescTemplate(desc.meshes, desc.options.collisionMeshType);
427
+ if (!templateColliderDesc) {
428
+ return [];
429
+ }
430
+ const baseDesc = {
431
+ motionType: desc.motionType,
432
+ options: desc.options,
433
+ worldPos: desc.worldPos,
434
+ worldQuat: desc.worldQuat,
435
+ mass: desc.mass,
436
+ };
437
+ const cachedColliderDesc = {};
438
+ const records = [];
439
+ for (const transform of transforms) {
440
+ const scale = transform.scale ?? new THREE.Vector3(1, 1, 1);
441
+ const scaleKey = String(scale.toArray());
442
+ cachedColliderDesc[scaleKey] ??= this.scaleMeshColliderDesc(templateColliderDesc, scale);
443
+ const colliderDesc = cachedColliderDesc[scaleKey];
444
+ if (colliderDesc) {
445
+ // overwrite the position and rotation
446
+ baseDesc.worldPos = transform.position ?? new THREE.Vector3(0, 0, 0);
447
+ baseDesc.worldQuat = transform.rotation ?? new THREE.Quaternion(0, 0, 0, 1);
448
+ const record = this.createBody(colliderDesc, baseDesc);
449
+ if (record) {
450
+ records.push(record);
451
+ }
452
+ }
453
+ }
454
+ return records;
455
+ }
456
+ doCreateVoxelBody(desc) {
457
+ const voxelSize = desc.voxelSize;
458
+ const voxels = desc.voxels;
459
+ const colliderDesc = RAPIER.ColliderDesc.voxels(voxels, new RAPIER.Vector3(voxelSize.x, voxelSize.y, voxelSize.z));
460
+ const offset = desc.offset;
461
+ if (offset) {
462
+ colliderDesc.setTranslation(offset.x, offset.y, offset.z);
463
+ }
464
+ return this.createBody(colliderDesc, desc);
465
+ }
466
+ doCreateSphereBody(desc) {
467
+ const colliderDesc = RAPIER.ColliderDesc.ball(desc.radius);
468
+ return this.createBody(colliderDesc, desc);
469
+ }
470
+ doCreateCylinderBody(desc) {
471
+ const colliderDesc = RAPIER.ColliderDesc.cylinder(desc.height / 2, desc.radius);
472
+ return this.createBody(colliderDesc, desc);
473
+ }
474
+ doCreateConeBody(desc) {
475
+ const colliderDesc = RAPIER.ColliderDesc.cone(desc.height / 2, desc.radius);
476
+ return this.createBody(colliderDesc, desc);
477
+ }
478
+ doCreateCapsuleBody(desc) {
479
+ const colliderDesc = RAPIER.ColliderDesc.capsule(desc.height / 2, desc.radius);
480
+ return this.createBody(colliderDesc, desc);
481
+ }
482
+ doCreateHeightFieldBody(desc) {
483
+ // Transform heightmap data to match RAPIER's format
484
+ const transformedHeightMap = new Float32Array(desc.heights.length);
485
+ for (var z = 0; z < desc.depthPixels; z++) {
486
+ for (var x = 0; x < desc.widthPixels; x++) {
487
+ const readIndex = z * desc.widthPixels + x;
488
+ const writeIndex = x * desc.depthPixels + z;
489
+ transformedHeightMap[writeIndex] = desc.heights[readIndex];
490
+ }
491
+ }
492
+ const terrainScale = this.makeVector([
493
+ desc.width,
494
+ 1,
495
+ desc.depth
496
+ ]);
497
+ const colliderDesc = RAPIER.ColliderDesc.heightfield(desc.widthPixels - 1, desc.depthPixels - 1, transformedHeightMap, terrainScale);
498
+ return this.createBody(colliderDesc, desc);
499
+ }
500
+ doRemoveComponent(record) {
501
+ const world = this.world;
502
+ const collider = record[1];
503
+ this.colliderToComponent.delete(collider.handle);
504
+ world.removeRigidBody(record[0]);
505
+ world.removeCollider(collider, false);
506
+ return true;
507
+ }
508
+ doUpdateTransform(component, record) {
509
+ const body = record[0];
510
+ const motionType = record[2];
511
+ const worldPosition = new THREE.Vector3();
512
+ const worldQuat = new THREE.Quaternion();
513
+ component.getWorldPosition(worldPosition);
514
+ component.getWorldQuaternion(worldQuat);
515
+ const flags = component.getPhysicsTransformUpdateFlags();
516
+ const newRotation = this.makeRotation(worldQuat.toArray());
517
+ const newPosition = this.makeVector(worldPosition.toArray());
518
+ switch (motionType) {
519
+ case PhysicsMotionType.Static:
520
+ if (flags.sendPosition) {
521
+ body.setTranslation(newPosition, true);
522
+ }
523
+ if (flags.sendRotation) {
524
+ body.setRotation(newRotation, true);
525
+ }
526
+ break;
527
+ case PhysicsMotionType.Dynamic:
528
+ if (flags.sendPosition) {
529
+ body.setTranslation(newPosition, true);
530
+ }
531
+ if (flags.sendRotation) {
532
+ body.setRotation(newRotation, true);
533
+ }
534
+ break;
535
+ case PhysicsMotionType.KinematicPositionBased:
536
+ if (flags.sendPosition) {
537
+ body.setNextKinematicTranslation(newPosition);
538
+ }
539
+ if (flags.sendRotation) {
540
+ body.setNextKinematicRotation(newRotation);
541
+ }
542
+ break;
543
+ case PhysicsMotionType.KinematicVelocityBased:
544
+ const userData = (body.userData ?? {});
545
+ const linearVelocity = userData[PhysicsVectorParam.LinearVelocity];
546
+ const angularVelocity = userData[PhysicsVectorParam.AngularVelocity];
547
+ if (flags.sendPosition && !linearVelocity) {
548
+ const currentPosition = body.translation();
549
+ const timestep = this.world.timestep;
550
+ const velocity = {
551
+ x: (newPosition.x - currentPosition.x) / timestep,
552
+ y: (newPosition.y - currentPosition.y) / timestep,
553
+ z: (newPosition.z - currentPosition.z) / timestep,
554
+ };
555
+ body.setLinvel(velocity, true);
556
+ }
557
+ if (flags.sendRotation && !angularVelocity) {
558
+ const currentRotation = body.rotation();
559
+ const timestep = this.world.timestep;
560
+ // Calculate quaternion difference: q_diff = newRotation * currentRotation^-1
561
+ const qx = newRotation.w * currentRotation.x - newRotation.x * currentRotation.w - newRotation.y * currentRotation.z + newRotation.z * currentRotation.y;
562
+ const qy = newRotation.w * currentRotation.y + newRotation.x * currentRotation.z - newRotation.y * currentRotation.w - newRotation.z * currentRotation.x;
563
+ const qz = newRotation.w * currentRotation.z - newRotation.x * currentRotation.y + newRotation.y * currentRotation.x - newRotation.z * currentRotation.w;
564
+ const qw = newRotation.w * currentRotation.w + newRotation.x * currentRotation.x + newRotation.y * currentRotation.y + newRotation.z * currentRotation.z;
565
+ // Convert quaternion to axis-angle, then to angular velocity
566
+ const sinHalfAngle = Math.sqrt(qx * qx + qy * qy + qz * qz);
567
+ const angle = 2 * Math.atan2(sinHalfAngle, qw);
568
+ const scale = sinHalfAngle > 1e-6 ? angle / sinHalfAngle / timestep : 2 / timestep;
569
+ const velocity = {
570
+ x: qx * scale,
571
+ y: qy * scale,
572
+ z: qz * scale,
573
+ };
574
+ body.setAngvel(velocity, true);
575
+ }
576
+ break;
577
+ }
578
+ }
579
+ doGetScalarParam(record, param) {
580
+ const body = record[0];
581
+ switch (param) {
582
+ case PhysicsScalarParam.LinearDamping:
583
+ return body.linearDamping();
584
+ case PhysicsScalarParam.AngularDamping:
585
+ return body.angularDamping();
586
+ case PhysicsScalarParam.GravityScale:
587
+ return body.gravityScale();
588
+ default:
589
+ ensure(false);
590
+ }
591
+ return null;
592
+ }
593
+ doSetScalarParam(records, param, value) {
594
+ const doTask = (record) => {
595
+ const body = record[0];
596
+ switch (param) {
597
+ case PhysicsScalarParam.LinearDamping:
598
+ body.setLinearDamping(value);
599
+ return true;
600
+ case PhysicsScalarParam.AngularDamping:
601
+ body.setAngularDamping(value);
602
+ return true;
603
+ case PhysicsScalarParam.GravityScale:
604
+ body.setGravityScale(value, true);
605
+ return true;
606
+ default:
607
+ ensure(false);
608
+ }
609
+ return false;
610
+ };
611
+ let result = true;
612
+ for (const record of records) {
613
+ result &&= doTask(record);
614
+ }
615
+ return result;
616
+ }
617
+ doGetVectorParam(record, param) {
618
+ const body = record[0];
619
+ let ret = null;
620
+ switch (param) {
621
+ case PhysicsVectorParam.LinearVelocity:
622
+ ret = body.linvel();
623
+ break;
624
+ case PhysicsVectorParam.AngularVelocity:
625
+ ret = body.angvel();
626
+ break;
627
+ default:
628
+ ensure(false);
629
+ }
630
+ return ret ? [ret.x, ret.y, ret.z] : null;
631
+ }
632
+ doSetVectorParam(record, param, value) {
633
+ const body = record[0];
634
+ body.userData ??= {};
635
+ body.userData[param] = value;
636
+ switch (param) {
637
+ case PhysicsVectorParam.LinearVelocity:
638
+ body.setLinvel(this.makeVector(value), true);
639
+ return true;
640
+ case PhysicsVectorParam.AngularVelocity:
641
+ body.setAngvel(this.makeVector(value), true);
642
+ return true;
643
+ default:
644
+ ensure(false);
645
+ }
646
+ return false;
647
+ }
648
+ doClearVectorParam(record, param) {
649
+ const body = record[0];
650
+ body.userData ??= {};
651
+ body.userData[param] = undefined;
652
+ return true;
653
+ }
654
+ doCreateCharacterController(options) {
655
+ const world = this.world;
656
+ const controller = world.createCharacterController(options.offset);
657
+ controller.setUp({ x: 0.0, y: 1.0, z: 0.0 });
658
+ if (options.applyImpulsesToDynamicBodies !== undefined) {
659
+ controller.setApplyImpulsesToDynamicBodies(options.applyImpulsesToDynamicBodies);
660
+ }
661
+ if (options.characterMass !== undefined) {
662
+ controller.setCharacterMass(options.characterMass);
663
+ }
664
+ if (options.slideEnabled !== undefined) {
665
+ controller.setSlideEnabled(options.slideEnabled);
666
+ }
667
+ if (options.maxSlopeClimbAngle !== undefined) {
668
+ controller.setMaxSlopeClimbAngle(options.maxSlopeClimbAngle);
669
+ }
670
+ if (options.minSlopeSlideAngle !== undefined) {
671
+ controller.setMinSlopeSlideAngle(options.minSlopeSlideAngle);
672
+ }
673
+ if (options.snapToGroundDistance !== undefined) {
674
+ controller.enableSnapToGround(options.snapToGroundDistance);
675
+ }
676
+ if (options.autoStepConfig !== undefined) {
677
+ controller.enableAutostep(options.autoStepConfig.maxHeight, options.autoStepConfig.minWidth, options.autoStepConfig.includeDynamicBodies);
678
+ }
679
+ return controller;
680
+ }
681
+ doRemoveCharacterController(record) {
682
+ const world = this.world;
683
+ world.removeCharacterController(record);
684
+ return true;
685
+ }
686
+ doComputeCharacterMovement(record, recordToMove, movement, ignoreCollision) {
687
+ // See https://rapier.rs/docs/user_guides/javascript/character_controller
688
+ const controller = record;
689
+ const body = recordToMove[0];
690
+ const collider = recordToMove[1];
691
+ const motionType = recordToMove[2];
692
+ controller.computeColliderMovement(collider, this.makeVector(movement), RAPIER.QueryFilterFlags.EXCLUDE_SENSORS, collider.collisionGroups(), ignoreCollision ? (collider) => { return false; } : undefined);
693
+ const actualMovement = controller.computedMovement();
694
+ const bodyPosition = body.translation();
695
+ bodyPosition.x += actualMovement.x;
696
+ bodyPosition.y += actualMovement.y;
697
+ bodyPosition.z += actualMovement.z;
698
+ switch (motionType) {
699
+ case PhysicsMotionType.Dynamic:
700
+ body.setTranslation(bodyPosition, true);
701
+ break;
702
+ case PhysicsMotionType.KinematicPositionBased:
703
+ body.setNextKinematicTranslation(bodyPosition);
704
+ break;
705
+ case PhysicsMotionType.KinematicVelocityBased:
706
+ const timestep = this.world.timestep;
707
+ const velocity = { x: actualMovement.x / timestep, y: actualMovement.y / timestep, z: actualMovement.z / timestep };
708
+ body.setLinvel(velocity, true);
709
+ break;
710
+ }
711
+ // Get grounded state from controller
712
+ let isGrounded = controller.computedGrounded();
713
+ // Workaround for voxel colliders: if controller says not grounded but we had downward movement
714
+ // and the actual movement was much less than requested (indicating collision), consider grounded
715
+ if (!isGrounded && movement[1] < 0) {
716
+ // We intended to move down, check if we were blocked
717
+ const intendedVertical = movement[1];
718
+ const actualVertical = actualMovement.y;
719
+ // If actual movement is significantly less than intended (more than 90% blocked), we hit ground
720
+ if (Math.abs(actualVertical) < Math.abs(intendedVertical) * 0.1) {
721
+ isGrounded = true;
722
+ }
723
+ }
724
+ const handleA = collider.handle;
725
+ const numCollisions = controller.numComputedCollisions();
726
+ const previousCollidedHandles = this.cachedCharacterControllerCollisions.get(handleA) ?? [];
727
+ const newCollidedHandles = [];
728
+ for (let index = 0; index < numCollisions; index++) {
729
+ const collision = controller.computedCollision(index);
730
+ if (collision && collision.collider) {
731
+ const handleB = collision.collider.handle;
732
+ newCollidedHandles.push(handleB);
733
+ if (!previousCollidedHandles.includes(handleB)) {
734
+ this.handleRapierCollision(handleA, handleB, true);
735
+ }
736
+ }
737
+ }
738
+ for (const handleB of previousCollidedHandles) {
739
+ if (!newCollidedHandles.includes(handleB)) {
740
+ this.handleRapierCollision(handleA, handleB, false);
741
+ }
742
+ }
743
+ this.cachedCharacterControllerCollisions.set(handleA, newCollidedHandles);
744
+ return { isGrounded };
745
+ }
746
+ getComponentState(component) {
747
+ const records = this.bodies.get(component);
748
+ if (!records || records.length === 0) {
749
+ return null;
750
+ }
751
+ const record = records[0];
752
+ return {
753
+ isTrigger: record[1].isSensor(),
754
+ motionType: record[2],
755
+ };
756
+ }
757
+ //====================================================================================================
758
+ getCollisionEvents() {
759
+ return this.pendingCollisions;
760
+ }
761
+ clearCollisionEvents() {
762
+ this.pendingCollisions = [];
763
+ }
764
+ /**
765
+ * Toggles the physics debug renderer visibility
766
+ * @param enabled Whether the debug renderer should be visible
767
+ * @returns Whether the debug renderer is now enabled
768
+ */
769
+ setDebugRendererEnabled(enabled) {
770
+ if (this.debugRenderer) {
771
+ this.debugRenderer.enabled = enabled;
772
+ return true;
773
+ }
774
+ return false;
775
+ }
776
+ /**
777
+ * Checks if the physics debug renderer is enabled
778
+ * @returns Whether the debug renderer is currently enabled, or false if not available
779
+ */
780
+ isDebugRendererEnabled() {
781
+ return this.debugRenderer?.enabled ?? false;
782
+ }
783
+ createBody(colliderDesc, desc) {
784
+ const world = this.world;
785
+ const collisionProfileName = desc.options.collisionProfile ?? DefaultCollisionProfile.Default;
786
+ const collisionConfig = CollisionConfig.getInstance();
787
+ const collisionProfile = collisionConfig.profiles.find(p => p.name === collisionProfileName);
788
+ const isSensor = collisionProfile?.mode === CollisionMode.QueryOnly;
789
+ // FIXME: Find out what of this should be configured based on the profile instead
790
+ const rigidBodyDesc = this.createRigidBodyDesc(desc.motionType);
791
+ rigidBodyDesc.mass = desc.mass;
792
+ rigidBodyDesc.setCcdEnabled(!!desc.options.enableCCD);
793
+ const generateCollisionEvents = !!desc.options.generateCollisionEvents || isSensor;
794
+ colliderDesc.setActiveEvents(generateCollisionEvents ? RAPIER.ActiveEvents.COLLISION_EVENTS : RAPIER.ActiveEvents.NONE);
795
+ if (generateCollisionEvents) {
796
+ colliderDesc.setActiveCollisionTypes(RAPIER.ActiveCollisionTypes.ALL);
797
+ }
798
+ const createCollider = (pos, rot) => {
799
+ const rigidBody = world.createRigidBody(rigidBodyDesc);
800
+ rigidBody.setTranslation(this.makeVector(pos.toArray()), true);
801
+ rigidBody.setRotation(this.makeRotation(rot.toArray()), true);
802
+ const collider = world.createCollider(colliderDesc, rigidBody);
803
+ collider.setSensor(isSensor);
804
+ rigidBody.setGravityScale(desc.options.gravityScale ?? 1, true);
805
+ if (collisionProfile) {
806
+ collider.setCollisionGroups(this.getCollisionGroups(collisionProfile));
807
+ }
808
+ return { rigidBody, collider };
809
+ };
810
+ const { rigidBody, collider } = createCollider(desc.worldPos, desc.worldQuat);
811
+ return [rigidBody, collider, desc.motionType];
812
+ }
813
+ getCollisionGroups(collisionProfile) {
814
+ // top 16 bits indicate what channel this object occupies, for now that's always a single channel
815
+ // bottom 16 bits indicate what channels it can interact with
816
+ let groups = getCollisionChannelBit(collisionProfile.objectChannel) << 16;
817
+ collisionProfile.responses.forEach(r => {
818
+ // need to set the collision group even for overlapping interaction, otherwise collision event will NOT be generated
819
+ if (r.response !== CollisionResponse.Ignore) {
820
+ const channelEnum = typeof r.channel === 'string' ? resolveChannelName(r.channel) : r.channel;
821
+ if (channelEnum !== undefined) {
822
+ groups |= getCollisionChannelBit(channelEnum);
823
+ }
824
+ }
825
+ });
826
+ return groups;
827
+ }
828
+ createRigidBodyDesc(motionType) {
829
+ switch (motionType) {
830
+ case PhysicsMotionType.Static:
831
+ return RAPIER.RigidBodyDesc.fixed();
832
+ case PhysicsMotionType.KinematicVelocityBased:
833
+ return RAPIER.RigidBodyDesc.kinematicVelocityBased();
834
+ case PhysicsMotionType.KinematicPositionBased:
835
+ return RAPIER.RigidBodyDesc.kinematicPositionBased();
836
+ case PhysicsMotionType.Dynamic:
837
+ return RAPIER.RigidBodyDesc.dynamic();
838
+ }
839
+ }
840
+ makeVector(v) {
841
+ return {
842
+ x: v[0],
843
+ y: v[1],
844
+ z: v[2],
845
+ };
846
+ }
847
+ makeRotation(r) {
848
+ return {
849
+ x: r[0],
850
+ y: r[1],
851
+ z: r[2],
852
+ w: r[3],
853
+ };
854
+ }
855
+ // Override addComponent to handle collider mapping
856
+ addComponent(component) {
857
+ const motionType = super.addComponent(component);
858
+ const records = this.bodies.get(component);
859
+ if (records) {
860
+ records.forEach((record) => {
861
+ const collider = record[1];
862
+ this.colliderToComponent.set(collider.handle, component);
863
+ });
864
+ }
865
+ return motionType;
866
+ }
867
+ doSetComponentCollisionIgnore(recordA, recordB, ignore) {
868
+ const colliderA = recordA[1];
869
+ const colliderB = recordB[1];
870
+ const pairKey = `${colliderA.handle},${colliderB.handle}`;
871
+ if (ignore) {
872
+ this.ignoredColliderPairs.add(pairKey);
873
+ }
874
+ else {
875
+ this.ignoredColliderPairs.delete(pairKey);
876
+ }
877
+ return true;
878
+ }
879
+ doCreateJoint(desc, recordA, recordB) {
880
+ const world = this.world;
881
+ const bodyA = recordA[0];
882
+ const bodyB = recordB[0];
883
+ try {
884
+ let jointData;
885
+ switch (desc.type) {
886
+ case JointType.Spherical:
887
+ jointData = RAPIER.JointData.spherical({ x: desc.anchorA.x, y: desc.anchorA.y, z: desc.anchorA.z }, { x: desc.anchorB.x, y: desc.anchorB.y, z: desc.anchorB.z });
888
+ break;
889
+ case JointType.Fixed:
890
+ jointData = RAPIER.JointData.fixed({ x: desc.anchorA.x, y: desc.anchorA.y, z: desc.anchorA.z }, { x: 0, y: 0, z: 0, w: 1 }, // Identity quaternion for now
891
+ { x: desc.anchorB.x, y: desc.anchorB.y, z: desc.anchorB.z }, { x: 0, y: 0, z: 0, w: 1 } // Identity quaternion for now
892
+ );
893
+ break;
894
+ case JointType.Revolute:
895
+ if (!desc.axis) {
896
+ console.error('Revolute joint requires an axis');
897
+ return null;
898
+ }
899
+ jointData = RAPIER.JointData.revolute({ x: desc.anchorA.x, y: desc.anchorA.y, z: desc.anchorA.z }, { x: desc.anchorB.x, y: desc.anchorB.y, z: desc.anchorB.z }, { x: desc.axis.x, y: desc.axis.y, z: desc.axis.z });
900
+ break;
901
+ case JointType.Prismatic:
902
+ if (!desc.axis) {
903
+ console.error('Prismatic joint requires an axis');
904
+ return null;
905
+ }
906
+ jointData = RAPIER.JointData.prismatic({ x: desc.anchorA.x, y: desc.anchorA.y, z: desc.anchorA.z }, { x: desc.anchorB.x, y: desc.anchorB.y, z: desc.anchorB.z }, { x: desc.axis.x, y: desc.axis.y, z: desc.axis.z });
907
+ break;
908
+ default:
909
+ console.error('Unsupported joint type:', desc.type);
910
+ return null;
911
+ }
912
+ const joint = world.createImpulseJoint(jointData, bodyA, bodyB, true);
913
+ return joint;
914
+ }
915
+ catch (error) {
916
+ console.error('Failed to create joint:', error);
917
+ return null;
918
+ }
919
+ }
920
+ doRemoveJoint(jointRecord) {
921
+ const world = this.world;
922
+ try {
923
+ world.removeImpulseJoint(jointRecord, true);
924
+ return true;
925
+ }
926
+ catch (error) {
927
+ console.error('Failed to remove joint:', error);
928
+ return false;
929
+ }
930
+ }
931
+ doCreateJointFromRecords(type, recordA, recordB, anchorA, anchorB, axis) {
932
+ const world = this.world;
933
+ const bodyA = recordA[0];
934
+ const bodyB = recordB[0];
935
+ try {
936
+ let jointData;
937
+ switch (type) {
938
+ case JointType.Spherical:
939
+ jointData = RAPIER.JointData.spherical({ x: anchorA.x, y: anchorA.y, z: anchorA.z }, { x: anchorB.x, y: anchorB.y, z: anchorB.z });
940
+ break;
941
+ case JointType.Fixed:
942
+ jointData = RAPIER.JointData.fixed({ x: anchorA.x, y: anchorA.y, z: anchorA.z }, { x: 0, y: 0, z: 0, w: 1 }, // Identity quaternion for now
943
+ { x: anchorB.x, y: anchorB.y, z: anchorB.z }, { x: 0, y: 0, z: 0, w: 1 } // Identity quaternion for now
944
+ );
945
+ break;
946
+ case JointType.Revolute:
947
+ if (!axis) {
948
+ console.error('Revolute joint requires an axis');
949
+ return null;
950
+ }
951
+ jointData = RAPIER.JointData.revolute({ x: anchorA.x, y: anchorA.y, z: anchorA.z }, { x: anchorB.x, y: anchorB.y, z: anchorB.z }, { x: axis.x, y: axis.y, z: axis.z });
952
+ break;
953
+ case JointType.Prismatic:
954
+ if (!axis) {
955
+ console.error('Prismatic joint requires an axis');
956
+ return null;
957
+ }
958
+ jointData = RAPIER.JointData.prismatic({ x: anchorA.x, y: anchorA.y, z: anchorA.z }, { x: anchorB.x, y: anchorB.y, z: anchorB.z }, { x: axis.x, y: axis.y, z: axis.z });
959
+ break;
960
+ default:
961
+ console.error('Unsupported joint type:', type);
962
+ return null;
963
+ }
964
+ const joint = world.createImpulseJoint(jointData, bodyA, bodyB, true);
965
+ return joint;
966
+ }
967
+ catch (error) {
968
+ console.error('Failed to create joint from records:', error);
969
+ return null;
970
+ }
971
+ }
972
+ // Direct physics body management implementations
973
+ doCreateDirectBody(desc) {
974
+ const world = this.world;
975
+ try {
976
+ // Create collider based on shape type
977
+ let colliderDesc;
978
+ switch (desc.shape.type) {
979
+ case 'box':
980
+ const size = desc.shape.size;
981
+ colliderDesc = RAPIER.ColliderDesc.cuboid(size.x / 2, size.y / 2, size.z / 2);
982
+ break;
983
+ case 'sphere':
984
+ colliderDesc = RAPIER.ColliderDesc.ball(desc.shape.radius);
985
+ break;
986
+ case 'cylinder':
987
+ colliderDesc = RAPIER.ColliderDesc.cylinder(desc.shape.height / 2, desc.shape.radius);
988
+ break;
989
+ case 'capsule':
990
+ colliderDesc = RAPIER.ColliderDesc.capsule(desc.shape.height / 2, desc.shape.radius);
991
+ break;
992
+ default:
993
+ console.error(`Unsupported shape type: ${desc.shape.type}`);
994
+ return null;
995
+ }
996
+ // Create rigid body
997
+ let rigidBodyDesc;
998
+ switch (desc.motionType) {
999
+ case PhysicsMotionType.Static:
1000
+ rigidBodyDesc = RAPIER.RigidBodyDesc.fixed();
1001
+ break;
1002
+ case PhysicsMotionType.KinematicPositionBased:
1003
+ rigidBodyDesc = RAPIER.RigidBodyDesc.kinematicPositionBased();
1004
+ break;
1005
+ case PhysicsMotionType.KinematicVelocityBased:
1006
+ rigidBodyDesc = RAPIER.RigidBodyDesc.kinematicVelocityBased();
1007
+ break;
1008
+ case PhysicsMotionType.Dynamic:
1009
+ default:
1010
+ rigidBodyDesc = RAPIER.RigidBodyDesc.dynamic();
1011
+ break;
1012
+ }
1013
+ rigidBodyDesc
1014
+ .setTranslation(desc.position.x, desc.position.y, desc.position.z)
1015
+ .setRotation({ x: desc.rotation.x, y: desc.rotation.y, z: desc.rotation.z, w: desc.rotation.w });
1016
+ const rigidBody = world.createRigidBody(rigidBodyDesc);
1017
+ const collider = world.createCollider(colliderDesc, rigidBody);
1018
+ // Set mass for dynamic bodies
1019
+ if (desc.motionType === PhysicsMotionType.Dynamic && desc.mass > 0) {
1020
+ collider.setMass(desc.mass);
1021
+ }
1022
+ // Set enabled state
1023
+ if (desc.enabled !== undefined) {
1024
+ rigidBody.setEnabled(desc.enabled);
1025
+ }
1026
+ return [rigidBody, collider, desc.motionType];
1027
+ }
1028
+ catch (error) {
1029
+ console.error('Failed to create direct physics body:', error);
1030
+ return null;
1031
+ }
1032
+ }
1033
+ doRemoveDirectBody(record) {
1034
+ const world = this.world;
1035
+ const [rigidBody, collider] = record;
1036
+ try {
1037
+ world.removeRigidBody(rigidBody);
1038
+ world.removeCollider(collider, false);
1039
+ return true;
1040
+ }
1041
+ catch (error) {
1042
+ console.error('Failed to remove direct physics body:', error);
1043
+ return false;
1044
+ }
1045
+ }
1046
+ doGetBodyPosition(record) {
1047
+ const [rigidBody] = record;
1048
+ try {
1049
+ const translation = rigidBody.translation();
1050
+ return new THREE.Vector3(translation.x, translation.y, translation.z);
1051
+ }
1052
+ catch (error) {
1053
+ console.error('Failed to get body position:', error);
1054
+ return null;
1055
+ }
1056
+ }
1057
+ doGetBodyRotation(record) {
1058
+ const [rigidBody] = record;
1059
+ try {
1060
+ const rotation = rigidBody.rotation();
1061
+ return new THREE.Quaternion(rotation.x, rotation.y, rotation.z, rotation.w);
1062
+ }
1063
+ catch (error) {
1064
+ console.error('Failed to get body rotation:', error);
1065
+ return null;
1066
+ }
1067
+ }
1068
+ doSetBodyPosition(record, position) {
1069
+ const [rigidBody] = record;
1070
+ try {
1071
+ rigidBody.setTranslation({ x: position.x, y: position.y, z: position.z }, true);
1072
+ return true;
1073
+ }
1074
+ catch (error) {
1075
+ console.error('Failed to set body position:', error);
1076
+ return false;
1077
+ }
1078
+ }
1079
+ doSetBodyRotation(record, rotation) {
1080
+ const [rigidBody] = record;
1081
+ try {
1082
+ rigidBody.setRotation({ x: rotation.x, y: rotation.y, z: rotation.z, w: rotation.w }, true);
1083
+ return true;
1084
+ }
1085
+ catch (error) {
1086
+ console.error('Failed to set body rotation:', error);
1087
+ return false;
1088
+ }
1089
+ }
1090
+ doApplyBodyImpulse(record, impulse, worldSpace) {
1091
+ const [rigidBody] = record;
1092
+ try {
1093
+ rigidBody.applyImpulse({ x: impulse.x, y: impulse.y, z: impulse.z }, worldSpace);
1094
+ return true;
1095
+ }
1096
+ catch (error) {
1097
+ console.error('Failed to apply body impulse:', error);
1098
+ return false;
1099
+ }
1100
+ }
1101
+ doSetBodyEnabled(record, enabled) {
1102
+ const [rigidBody] = record;
1103
+ try {
1104
+ rigidBody.setEnabled(enabled);
1105
+ return true;
1106
+ }
1107
+ catch (error) {
1108
+ console.error('Failed to set body enabled state:', error);
1109
+ return false;
1110
+ }
1111
+ }
1112
+ buildHitTestResult(origin, direction, intersection) {
1113
+ const hitComponent = this.colliderToComponent.get(intersection.collider.handle) ?? null;
1114
+ return {
1115
+ origin: origin,
1116
+ direction: direction,
1117
+ hitLocation: origin.clone().add(direction.clone().multiplyScalar(intersection.timeOfImpact)),
1118
+ hitNormal: new THREE.Vector3(intersection.normal.x, intersection.normal.y, intersection.normal.z),
1119
+ hitComponent: hitComponent,
1120
+ hitActor: hitComponent?.getActor() ?? null,
1121
+ };
1122
+ }
1123
+ performHitTest(options) {
1124
+ const world = this.world;
1125
+ const ray = new RAPIER.Ray({ x: options.origin.x, y: options.origin.y, z: options.origin.z }, { x: options.direction.x, y: options.direction.y, z: options.direction.z });
1126
+ const groups = options.collisionProfile ? this.getCollisionGroups(options.collisionProfile) : undefined;
1127
+ const filterPredicate = (collider) => {
1128
+ if (options.ignoredActors || options.ignoredComponents) {
1129
+ const component = this.colliderToComponent.get(collider.handle);
1130
+ if (!component) {
1131
+ return false;
1132
+ }
1133
+ if (options.ignoredActors && options.ignoredActors.includes(component.getActor())) {
1134
+ return false;
1135
+ }
1136
+ if (options.ignoredComponents && options.ignoredComponents.includes(component)) {
1137
+ return false;
1138
+ }
1139
+ }
1140
+ return true;
1141
+ };
1142
+ const results = [];
1143
+ if (options.stopOnFirstHit) {
1144
+ const intersection = world.castRayAndGetNormal(ray, options.maxDistance, true, RAPIER.QueryFilterFlags.EXCLUDE_SENSORS, groups, undefined, undefined, filterPredicate);
1145
+ if (intersection) {
1146
+ results.push(this.buildHitTestResult(options.origin, options.direction, intersection));
1147
+ }
1148
+ }
1149
+ else {
1150
+ world.intersectionsWithRay(ray, options.maxDistance, true, (intersect) => {
1151
+ results.push(this.buildHitTestResult(options.origin, options.direction, intersect));
1152
+ return true;
1153
+ }, RAPIER.QueryFilterFlags.EXCLUDE_SENSORS, groups, undefined, undefined, filterPredicate);
1154
+ }
1155
+ return results;
1156
+ }
1157
+ // Vehicle controller implementation
1158
+ createVehicle(movementComponent, chassisComponent) {
1159
+ if (!this.world)
1160
+ return null;
1161
+ // Get the chassis physics record
1162
+ const chassisRecords = this.bodies.get(chassisComponent);
1163
+ if (!chassisRecords || chassisRecords.length !== 1) {
1164
+ console.error('VehicleController: Chassis component not found in physics simulation');
1165
+ return null;
1166
+ }
1167
+ if (this.vehicles.has(movementComponent)) {
1168
+ console.error('VehicleController: Vehicle controller already exists for component:', movementComponent.getPathName());
1169
+ return null;
1170
+ }
1171
+ try {
1172
+ // Create the vehicle controller using Rapier's DynamicRayCastVehicleController
1173
+ const chassisRecord = chassisRecords[0];
1174
+ const chassisBody = chassisRecord[0];
1175
+ // Create and return the physics vehicle interface
1176
+ const vehicle = new RapierVehicle({
1177
+ world: this.world,
1178
+ chassis: chassisBody,
1179
+ });
1180
+ // Store the record for cleanup purposes
1181
+ this.vehicles.set(movementComponent, vehicle);
1182
+ console.log('VehicleController: Created vehicle controller for component:', movementComponent.getPathName());
1183
+ return vehicle;
1184
+ }
1185
+ catch (error) {
1186
+ console.error('VehicleController: Failed to create vehicle controller:', error);
1187
+ return null;
1188
+ }
1189
+ }
1190
+ }
1191
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmFwaWVyUGh5c2ljcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9waHlzaWNzL2ltcGxlbWVudGF0aW9ucy9SYXBpZXJQaHlzaWNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUVILE9BQU8sS0FBSyxNQUFNLE1BQU0sMkJBQTJCLENBQUM7QUFDcEQsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFFL0IsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDckYsT0FBTyxFQUFFLGVBQWUsRUFBRSxzQkFBc0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3pILE9BQU8sRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUN0SCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzdFLE9BQU8sRUFBRSxrQkFBa0IsRUFBMEIsTUFBTSxxQkFBcUIsQ0FBQztBQUVqRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFtQ25ELE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxpQkFBb0U7SUF5QjNHLFlBQVksU0FBZTtRQUN6QixLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUF4Qlg7Ozs7bUJBQXlDLEVBQUU7V0FBQztRQUU1Qzs7OzttQkFBNkIsSUFBSTtXQUFDO1FB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