@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,1211 @@
1
+ /**
2
+ * WorldSerialization converts game objects to and from plain JSON structures.
3
+ *
4
+ * Detailed explanation:
5
+ * - Provides `WorldSerializationContext` which handles constructor mapping, default values and external references.
6
+ * - Defines schemas for actors, components and full worlds so exports can be validated before saving.
7
+ * - Includes helpers to construct objects from serialized data, wiring up scene hierarchies automatically.
8
+ *
9
+ * Recommended usage (for humans and AI assistants):
10
+ * - Use `exportObject` or the static load helpers when persisting or loading scenes and prefabs.
11
+ * - Register additional constructors with `ClassRegistry` before loading to ensure custom classes instantiate correctly.
12
+ * - Avoid serializing transient runtime data like DOM elements or temporary THREE objects.
13
+ */
14
+ import * as THREE from 'three';
15
+ import { z } from 'zod';
16
+
17
+ import { SceneComponent } from '../components/SceneComponent.js';
18
+ import { SerializationVersion } from '../const.js';
19
+ import { MaterialUtils } from '../materials.js';
20
+ import { AssetPath } from '../storage/storageProvider.js';
21
+ import { resourceManager } from '../utils/ResourceManager.js';
22
+ import { loadPrefabTemplateInstance } from '../utils/serialization/prefab.js';
23
+ import { Dumper, DumperFlags, Loader, LoaderFlags } from '../utils/serialization/serializer.js';
24
+ import { deepDiff, deepMerge, deepRemoveEmptyObjects, replace_uuids, shortUUID } from '../utils/Utils.js';
25
+
26
+ import { ClassRegistry } from './ClassRegistry.js';
27
+
28
+ import type { Actor } from '../actors/Actor.js';
29
+ import type { World } from '../game/World.js';
30
+ import type { SerializedData } from '../utils/serialization/serializer.js';
31
+
32
+
33
+ const serializationVersionKey = '$version';
34
+ const externalRefKey: string = '@external';
35
+ const internalRefKey: string = '@ref';
36
+
37
+ const objectSchema = z.object({
38
+ // optional for an internal ref object
39
+ class: z.string().optional(),
40
+ uuid: z.string().optional(),
41
+ prefabName: z.string().optional(),
42
+ parentPrefabName: z.string().optional(),
43
+ [serializationVersionKey]: z.nativeEnum(SerializationVersion).optional(),
44
+ ctor: z.union([
45
+ z.record(z.any()),
46
+ z.array(z.any())
47
+ ]).optional(),
48
+ properties: z.record(z.string(), z.any()).optional(),
49
+ }).strict();
50
+
51
+ const componentSchema = objectSchema.extend({
52
+ }).strict();
53
+
54
+ const sceneComponentSchema: z.ZodType<any> = z.lazy(() =>
55
+ componentSchema.extend({
56
+ children: z.array(sceneComponentSchema).optional(),
57
+ }).strict()
58
+ );
59
+
60
+ const actorSchema = objectSchema.extend({
61
+ }).strict();
62
+
63
+ const sceneResourcesSchema = z.object({
64
+ lightmap: z.object({
65
+ metadataPath: z.string(),
66
+ texturePath: z.string(),
67
+ }).optional(),
68
+ navMesh: z.object({
69
+ path: z.string(),
70
+ }).optional(),
71
+ }).strict();
72
+
73
+ const worldSchema = objectSchema.extend({
74
+ actors: z.array(actorSchema).optional(),
75
+ prefabs: z.record(z.string(), actorSchema).optional(),
76
+ resources: sceneResourcesSchema.optional(),
77
+ }).strict();
78
+
79
+ type Handler<T> = (obj: T, includeDefaults: boolean) => any;
80
+
81
+ /**
82
+ * The serialized object format.
83
+ */
84
+ export interface SerializedObject {
85
+ class?: string,
86
+ uuid?: string,
87
+ prefabName?: string,
88
+ parentPrefabName?: string,
89
+ ctor?: Record<string, any> | any[],
90
+ properties?: Record<string, any>,
91
+ }
92
+
93
+ /**
94
+ * The serialized scene component format.
95
+ */
96
+ export interface SerializedSceneComponent extends SerializedObject {
97
+ children?: SerializedSceneComponent[],
98
+ }
99
+
100
+ /**
101
+ * The serialized actor format.
102
+ */
103
+ export interface SerializedActor extends SerializedObject {
104
+ }
105
+
106
+ /**
107
+ * Scene resources configuration.
108
+ */
109
+ export interface SceneResources {
110
+ lightmap?: {
111
+ metadataPath: string;
112
+ texturePath: string;
113
+ };
114
+ navMesh?: {
115
+ path: string;
116
+ };
117
+ }
118
+
119
+ /**
120
+ * The serialized world format.
121
+ */
122
+ export interface SerializedWorld extends SerializedObject {
123
+ actors?: SerializedActor[],
124
+ prefabs?: Record<string, SerializedActor>,
125
+ resources?: SceneResources,
126
+ }
127
+
128
+ export function isLegacyData(data: any) {
129
+ // no data, considered new, because we can load prefab without having to provide prefab data
130
+ if (data === undefined) return false;
131
+
132
+ const version = data?.[serializationVersionKey];
133
+ if (version !== undefined) {
134
+ // version clearly says it's legacy or new
135
+ return version < SerializationVersion.V1;
136
+ }
137
+
138
+ // now we are in a state where we have a bunch of data, but without $version field
139
+ return true;
140
+ }
141
+
142
+ /**
143
+ * An object that can be serialized.
144
+ */
145
+ export interface ISerializable {
146
+ export(context: WorldSerializationContext, includeDefaults: boolean): SerializedObject;
147
+ }
148
+
149
+ export class WorldSerializationContext {
150
+ // Debug flag to enable call stack tracking for exports
151
+ public static DEBUG_EXPORT_STACK = false;
152
+
153
+ // Flag to enable precision normalization for numbers (reduces file size)
154
+ public static ENABLE_PRECISION_NORMALIZATION = true;
155
+
156
+ // Flag to enable compact format for Vector3/Euler with type tags (further reduces file size)
157
+ public static ENABLE_COMPACT_VECTORS = true;
158
+
159
+ private static constructorHandlersRegistered: boolean = false;
160
+ private static constructorHandlers: Map<object, Handler<any>> = new Map();
161
+ private static classDefaultObjects: Map<object, any> = new Map();
162
+
163
+ private exportedObjects: Map<string, any> = new Map();
164
+ // Map that stores the call stacks for each exported object (when debug is enabled)
165
+ private exportCallStacks: Map<string, string> = new Map();
166
+
167
+ private static externalObjects: Map<string, any> = new Map();
168
+
169
+ // Loading context state
170
+ private constructedObjects = new WeakSet();
171
+ private loadedObjectsByUUID = new Map<string, any>();
172
+ private loadedPrefabData = new Map<string, any>();
173
+ private currentPrefabRegistry: Record<string, SerializedActor> = {};
174
+ private isEditor: boolean = false;
175
+
176
+ public static get ExternalObjects(): Map<string, any> {
177
+ if (!this.externalObjects.size) {
178
+ this.externalObjects.set('DefaultTexture', MaterialUtils.DefaultTexture);
179
+ this.externalObjects.set('DefaultMaterial', MaterialUtils.DefaultMaterial);
180
+ this.externalObjects.set('MeshWorldSpaceNormalMaterial', MaterialUtils.MeshWorldSpaceNormalMaterial);
181
+
182
+ for (const [k, v] of this.externalObjects) {
183
+ v.export = (context: WorldSerializationContext, includeDefaults: boolean) => ({
184
+ [externalRefKey]: k,
185
+ });
186
+ v.isExternal = true;
187
+ }
188
+ }
189
+ return this.externalObjects;
190
+ }
191
+
192
+ /**
193
+ * Exports an object to a serializable format.
194
+ * @param object - The object to export
195
+ * @param asPrefab - Whether it's exported as a prefab or regular storage
196
+ * @param inlineToPrefab - Whether to inline to the actor's prefab itself, as against to creating a new prefab that is dependent on the actor's prefab
197
+ * @returns The serialized object
198
+ */
199
+ public exportObject(object: any, asPrefab: boolean, inlineToPrefab: boolean = false): any {
200
+ const flags = (
201
+ DumperFlags.None
202
+ | (asPrefab ? DumperFlags.AsPrefab : 0)
203
+ | (inlineToPrefab ? DumperFlags.Inline : 0)
204
+ );
205
+ const dumper = new Dumper({flags});
206
+ const data = dumper.dump(object);
207
+ return data;
208
+ }
209
+
210
+ private static addConstructorHandler<T>(type: new (...args: any[]) => T, handler: Handler<T>) {
211
+ this.constructorHandlers.set(type.prototype, handler);
212
+ }
213
+
214
+ private static getDefaultObject(obj: any): any {
215
+ type Constructor<T> = new () => T;
216
+ const ctor = obj.constructor as Constructor<any>;
217
+ if (!this.classDefaultObjects.has(ctor)) {
218
+ try {
219
+ this.classDefaultObjects.set(ctor, new ctor());
220
+ } catch (error) {
221
+ // If we can't create a default object (e.g., due to arrays with null/undefined),
222
+ // store null to indicate this class doesn't support default comparison
223
+ this.classDefaultObjects.set(ctor, null);
224
+ }
225
+ }
226
+ return this.classDefaultObjects.get(ctor);
227
+ }
228
+
229
+ private removeDefaultProperties(obj: any, properties: Record<string, any>): Record<string, any> {
230
+ let defaultObject = WorldSerializationContext.getDefaultObject(obj);
231
+ // If the object is a component and its actor is a prefab, compare against the prefab defaults instead of class defaults
232
+ if (obj instanceof SceneComponent) {
233
+ const actor = obj.getActor();
234
+ const prefabName = actor?.getPrefabName();
235
+ const prefabInheritanceChain = actor?.getPrefabInheritanceChain();
236
+ if (prefabName && prefabInheritanceChain) {
237
+ try {
238
+ // Use the stored inheritance chain to load the prefab template actor
239
+ const prefabTemplateActor = WorldSerializer.loadPrefabTemplateActor(prefabName, prefabInheritanceChain);
240
+ const actorComponents = actor?.getComponents() ?? [];
241
+ const prefabComponents = prefabTemplateActor?.getComponents() ?? [];
242
+ const componentIndex = actorComponents.indexOf(obj);
243
+ if (componentIndex >= 0 && componentIndex < prefabComponents.length) {
244
+ defaultObject = prefabComponents[componentIndex];
245
+ }
246
+ } catch (error) {
247
+ // If we can't load the prefab template actor, fall back to class defaults
248
+ console.warn(`⚠️ Could not load prefab template actor for comparison: ${error}. Using class defaults.`);
249
+ }
250
+ }
251
+ }
252
+
253
+ if (defaultObject === null) {
254
+ return properties;
255
+ }
256
+
257
+ return WorldSerializationContext.removeDefaultPropertiesCommon(obj, properties, defaultObject);
258
+ }
259
+
260
+ private static removeDefaultPropertiesStatic(obj: any, properties: Record<string, any>): Record<string, any> {
261
+ const defaultObject = WorldSerializationContext.getDefaultObject(obj);
262
+ return WorldSerializationContext.removeDefaultPropertiesCommon(obj, properties, defaultObject);
263
+ }
264
+
265
+ private static removeDefaultPropertiesCommon(obj: any, properties: Record<string, any>, defaultObject: any): Record<string, any> {
266
+
267
+ for (const [k, instanceValue] of Object.entries(properties)) {
268
+ const defaultValue = (defaultObject as any)[k];
269
+ if (instanceValue && instanceValue.equals && instanceValue.equals(defaultValue)) {
270
+ delete properties[k];
271
+ continue;
272
+ }
273
+ if (instanceValue === defaultValue) {
274
+ delete properties[k];
275
+ continue;
276
+ }
277
+ if (typeof instanceValue === 'object' && instanceValue && Object.keys(instanceValue).length === 0) {
278
+ delete properties[k];
279
+ continue;
280
+ }
281
+ }
282
+ return properties;
283
+ }
284
+
285
+ private static getDebugName(obj: any): string {
286
+ if (obj.getPathName) {
287
+ return obj.getPathName();
288
+ }
289
+ if (obj.name) {
290
+ return obj.name;
291
+ }
292
+ if (obj.class) {
293
+ return obj.class;
294
+ }
295
+ const className = ClassRegistry.getClassName(obj);
296
+ if (className) {
297
+ return className;
298
+ }
299
+ if (obj.constructor) {
300
+ return obj.constructor.name;
301
+ }
302
+ return obj.toString();
303
+ }
304
+
305
+ /**
306
+ * Normalizes a number to reduce precision artifacts and file size.
307
+ * - Rounds near-zero values to 0
308
+ * - Rounds near-integer values to integers
309
+ * - Limits decimal precision to 6 places
310
+ */
311
+ private static normalizeNumber(n: number): number {
312
+ if (!this.ENABLE_PRECISION_NORMALIZATION) {
313
+ return n;
314
+ }
315
+
316
+ // Handle near-zero values
317
+ if (Math.abs(n) < 1e-10) {
318
+ return 0;
319
+ }
320
+
321
+ // Check if close to an integer
322
+ const rounded = Math.round(n);
323
+ if (Math.abs(n - rounded) < 1e-10) {
324
+ return rounded;
325
+ }
326
+
327
+ // Limit precision to 6 decimal places
328
+ return Math.round(n * 1000000) / 1000000;
329
+ }
330
+
331
+ /**
332
+ * Normalizes an array of numbers for more compact serialization.
333
+ */
334
+ private static normalizeNumberArray(arr: number[]): number[] {
335
+ if (!this.ENABLE_PRECISION_NORMALIZATION) {
336
+ return arr;
337
+ }
338
+ return arr.map(n => this.normalizeNumber(n));
339
+ }
340
+
341
+ private static registerConstructorHandlers() {
342
+ if (this.constructorHandlersRegistered) {
343
+ return;
344
+ }
345
+
346
+ function getObjectParameters(obj: any, fields: string[], includeDefaults: boolean): any {
347
+ const result: any = {};
348
+ for (const field of fields) {
349
+ const value = obj[field];
350
+ if (value === undefined || value === null) {
351
+ continue;
352
+ }
353
+ if (value instanceof THREE.Texture) {
354
+ // continue;
355
+ }
356
+ result[field] = value;
357
+ }
358
+ if (!includeDefaults) {
359
+ // For static context, we can't access instance prefab data, so use class defaults only
360
+ return WorldSerializationContext.removeDefaultPropertiesStatic(obj, result);
361
+ }
362
+ return result;
363
+ }
364
+
365
+ // core classes
366
+ this.addConstructorHandler(THREE.Vector2, (obj, includeDefaults) => {
367
+ return this.normalizeNumberArray([obj.x, obj.y]);
368
+ });
369
+ this.addConstructorHandler(THREE.Vector3, (obj, includeDefaults) => {
370
+ return this.normalizeNumberArray([obj.x, obj.y, obj.z]);
371
+ });
372
+ this.addConstructorHandler(THREE.Vector4, (obj, includeDefaults) => {
373
+ return this.normalizeNumberArray([obj.x, obj.y, obj.z, obj.w]);
374
+ });
375
+ this.addConstructorHandler(THREE.Color, (obj, includeDefaults) => {
376
+ return this.normalizeNumberArray([obj.r, obj.g, obj.b]);
377
+ });
378
+ this.addConstructorHandler(THREE.Euler, (obj, includeDefaults) => {
379
+ return this.normalizeNumberArray([obj.x, obj.y, obj.z]);
380
+ });
381
+ this.addConstructorHandler(THREE.Quaternion, (obj, includeDefaults) => {
382
+ return this.normalizeNumberArray([obj.x, obj.y, obj.z, obj.w]);
383
+ });
384
+ this.addConstructorHandler(THREE.Matrix2, (obj, includeDefaults) => { return obj.elements; });
385
+ this.addConstructorHandler(THREE.Matrix3, (obj, includeDefaults) => { return obj.elements; });
386
+ this.addConstructorHandler(THREE.Matrix4, (obj, includeDefaults) => { return obj.elements; });
387
+ this.addConstructorHandler(THREE.Box2, (obj, includeDefaults) => { return [obj.min, obj.max]; });
388
+ this.addConstructorHandler(THREE.Box3, (obj, includeDefaults) => { return [obj.min, obj.max]; });
389
+ this.addConstructorHandler(THREE.Sphere, (obj, includeDefaults) => { return [obj.center, obj.radius]; });
390
+ this.addConstructorHandler(THREE.Plane, (obj, includeDefaults) => { return [obj.normal, obj.constant]; });
391
+
392
+ // geometry classes
393
+ this.addConstructorHandler(THREE.BoxGeometry, (obj, includeDefaults) => { return [obj.parameters.width, obj.parameters.height, obj.parameters.depth]; });
394
+ this.addConstructorHandler(THREE.SphereGeometry, (obj, includeDefaults) => { return [obj.parameters.radius, obj.parameters.widthSegments, obj.parameters.heightSegments]; });
395
+ this.addConstructorHandler(THREE.CylinderGeometry, (obj) => { return [obj.parameters.radiusTop, obj.parameters.radiusBottom, obj.parameters.height, obj.parameters.radialSegments, obj.parameters.heightSegments, obj.parameters.openEnded]; });
396
+ this.addConstructorHandler(THREE.PlaneGeometry, (obj, includeDefaults) => { return [obj.parameters.width, obj.parameters.height]; });
397
+ this.addConstructorHandler(THREE.CapsuleGeometry, (obj, includeDefaults) => { return [obj.parameters.radius, obj.parameters.height, obj.parameters.capSegments, obj.parameters.radialSegments]; });
398
+ this.addConstructorHandler(THREE.ConeGeometry, (obj, includeDefaults) => { return [obj.parameters.radius, obj.parameters.height, obj.parameters.radialSegments, obj.parameters.heightSegments]; });
399
+ this.addConstructorHandler(THREE.CircleGeometry, (obj, includeDefaults) => { return [obj.parameters.radius, obj.parameters.segments, obj.parameters.thetaStart, obj.parameters.thetaLength]; });
400
+ this.addConstructorHandler(THREE.TorusGeometry, (obj, includeDefaults) => { return [obj.parameters.radius, obj.parameters.tube, obj.parameters.radialSegments, obj.parameters.tubularSegments]; });
401
+ this.addConstructorHandler(THREE.TorusKnotGeometry, (obj, includeDefaults) => { return [obj.parameters.radius, obj.parameters.tube, obj.parameters.radialSegments, obj.parameters.tubularSegments, obj.parameters.radialSegments, obj.parameters.tubularSegments]; });
402
+ this.addConstructorHandler(THREE.TubeGeometry, (obj, includeDefaults) => { return [obj.parameters.path, obj.parameters.tubularSegments, obj.parameters.radius, obj.parameters.radialSegments, obj.parameters.closed]; });
403
+ this.addConstructorHandler(THREE.DodecahedronGeometry, (obj, includeDefaults) => { return [obj.parameters.radius, obj.parameters.detail]; });
404
+ this.addConstructorHandler(THREE.EdgesGeometry, (obj, includeDefaults) => { return [obj.parameters.geometry, obj.parameters.thresholdAngle]; });
405
+ this.addConstructorHandler(THREE.ExtrudeGeometry, (obj, includeDefaults) => { return [obj.parameters.shapes, obj.parameters.options]; });
406
+ this.addConstructorHandler(THREE.IcosahedronGeometry, (obj, includeDefaults) => { return [obj.parameters.radius, obj.parameters.detail]; });
407
+ this.addConstructorHandler(THREE.LatheGeometry, (obj, includeDefaults) => { return [obj.parameters.points, obj.parameters.segments, obj.parameters.phiStart, obj.parameters.phiLength]; });
408
+ this.addConstructorHandler(THREE.OctahedronGeometry, (obj, includeDefaults) => { return [obj.parameters.radius, obj.parameters.detail]; });
409
+ this.addConstructorHandler(THREE.PolyhedronGeometry, (obj, includeDefaults) => { return [obj.parameters.vertices, obj.parameters.indices, obj.parameters.radius, obj.parameters.detail]; });
410
+ this.addConstructorHandler(THREE.RingGeometry, (obj, includeDefaults) => { return [obj.parameters.innerRadius, obj.parameters.outerRadius, obj.parameters.thetaSegments, obj.parameters.phiSegments]; });
411
+ this.addConstructorHandler(THREE.ShapeGeometry, (obj, includeDefaults) => { return [obj.parameters.shapes, obj.parameters.curveSegments]; });
412
+ this.addConstructorHandler(THREE.TetrahedronGeometry, (obj, includeDefaults) => { return [obj.parameters.radius, obj.parameters.detail]; });
413
+ this.addConstructorHandler(THREE.WireframeGeometry, (obj, includeDefaults) => { return [obj.parameters.geometry]; });
414
+
415
+ // lights
416
+ this.addConstructorHandler(THREE.AmbientLight, (obj, includeDefaults) => { return [obj.color, obj.intensity]; });
417
+ this.addConstructorHandler(THREE.DirectionalLight, (obj, includeDefaults) => { return [obj.color, obj.intensity]; });
418
+ this.addConstructorHandler(THREE.HemisphereLight, (obj, includeDefaults) => { return [obj.color, obj.intensity]; });
419
+ this.addConstructorHandler(THREE.PointLight, (obj, includeDefaults) => { return [obj.color, obj.intensity, obj.distance, obj.decay]; });
420
+ this.addConstructorHandler(THREE.LightProbe, (obj, includeDefaults) => { return [obj.sh, obj.intensity]; });
421
+ this.addConstructorHandler(THREE.RectAreaLight, (obj, includeDefaults) => { return [obj.color, obj.intensity, obj.width, obj.height]; });
422
+ this.addConstructorHandler(THREE.SpotLight, (obj, includeDefaults) => { return [obj.color, obj.intensity, obj.distance, obj.angle, obj.penumbra, obj.decay]; });
423
+
424
+ // fog
425
+ this.addConstructorHandler(THREE.Fog, (obj, includeDefaults) => { return [obj.color, obj.near, obj.far]; });
426
+ this.addConstructorHandler(THREE.FogExp2, (obj, includeDefaults) => { return [obj.color, obj.density]; });
427
+
428
+ // material classes
429
+ // see MaterialParameters
430
+ const MaterialParametersFields: string[] = [
431
+ 'alphaHash', 'alphaTest', 'alphaToCoverage', 'blendAlpha', 'blendColor',
432
+ 'blendDst', 'blendDstAlpha', 'blendEquation', 'blendEquationAlpha',
433
+ 'blending', 'blendSrc', 'blendSrcAlpha', 'clipIntersection', 'clippingPlanes',
434
+ 'clipShadows', 'colorWrite', 'defines', 'depthFunc', 'depthTest',
435
+ 'depthWrite', 'name', 'opacity', 'polygonOffset', 'polygonOffsetFactor',
436
+ 'polygonOffsetUnits', 'precision', 'premultipliedAlpha', 'forceSinglePass',
437
+ 'allowOverride', 'dithering', 'side', 'shadowSide', 'toneMapped',
438
+ 'transparent', 'vertexColors', 'visible', 'format', 'stencilWrite',
439
+ 'stencilFunc', 'stencilRef', 'stencilWriteMask', 'stencilFuncMask',
440
+ 'stencilFail', 'stencilZFail', 'stencilZPass', 'userData'
441
+ ];
442
+
443
+ const MeshStandardMaterialParametersFields: string[] = [
444
+ ...MaterialParametersFields,
445
+ 'color', 'roughness', 'metalness', 'map', 'lightMap', 'lightMapIntensity', 'aoMap', 'aoMapIntensity',
446
+ 'emissive', 'emissiveIntensity', 'emissiveMap', 'bumpMap', 'bumpScale', 'normalMap',
447
+ 'normalMapType', 'normalScale', 'displacementMap', 'displacementScale', 'displacementBias',
448
+ 'roughnessMap', 'metalnessMap', 'alphaMap', 'envMap', 'envMapRotation', 'envMapIntensity',
449
+ 'wireframe', 'wireframeLinewidth', 'fog', 'flatShading'
450
+ ];
451
+
452
+ const LineBasicMaterialParametersFields: string[] = [
453
+ ...MaterialParametersFields,
454
+ 'color', 'fog', 'linewidth', 'linecap', 'linejoin'
455
+ ];
456
+
457
+ const LineDashedMaterialParametersFields: string[] = [
458
+ ...LineBasicMaterialParametersFields,
459
+ 'scale', 'dashSize', 'gapSize'
460
+ ];
461
+
462
+ const MeshBasicMaterialParametersFields: string[] = [
463
+ ...MaterialParametersFields,
464
+ 'color', 'opacity', 'map', 'lightMap', 'lightMapIntensity', 'aoMap', 'aoMapIntensity',
465
+ 'specularMap', 'alphaMap', 'fog', 'envMap', 'envMapRotation', 'combine', 'reflectivity', 'refractionRatio',
466
+ 'wireframe', 'wireframeLinewidth', 'wireframeLinecap', 'wireframeLinejoin'
467
+ ];
468
+
469
+ const MeshDepthMaterialParametersFields: string[] = [
470
+ ...MaterialParametersFields,
471
+ 'map', 'alphaMap', 'depthPacking', 'displacementMap', 'displacementScale', 'displacementBias',
472
+ 'wireframe', 'wireframeLinewidth'
473
+ ];
474
+
475
+ const MeshDistanceMaterialParametersFields: string[] = [
476
+ ...MaterialParametersFields,
477
+ 'map', 'alphaMap', 'displacementMap', 'displacementScale', 'displacementBias',
478
+ 'farDistance', 'nearDistance', 'referencePosition'
479
+ ];
480
+
481
+ const MeshLambertMaterialParametersFields: string[] = [
482
+ ...MaterialParametersFields,
483
+ 'bumpMap', 'bumpScale', 'color', 'displacementMap', 'displacementScale', 'displacementBias',
484
+ 'emissive', 'emissiveIntensity', 'emissiveMap', 'flatShading', 'map', 'lightMap', 'lightMapIntensity',
485
+ 'normalMap', 'normalScale', 'aoMap', 'aoMapIntensity', 'specularMap', 'alphaMap', 'envMap',
486
+ 'envMapRotation', 'combine', 'reflectivity', 'refractionRatio', 'wireframe', 'wireframeLinewidth',
487
+ 'wireframeLinecap', 'wireframeLinejoin', 'fog'
488
+ ];
489
+
490
+ const MeshMatcapMaterialParametersFields: string[] = [
491
+ ...MaterialParametersFields,
492
+ 'color', 'matcap', 'map', 'bumpMap', 'bumpScale', 'normalMap', 'normalMapType', 'normalScale',
493
+ 'displacementMap', 'displacementScale', 'displacementBias', 'alphaMap', 'fog', 'flatShading'
494
+ ];
495
+
496
+ const MeshNormalMaterialParametersFields: string[] = [
497
+ ...MaterialParametersFields,
498
+ 'bumpMap', 'bumpScale', 'normalMap', 'normalMapType', 'normalScale', 'displacementMap',
499
+ 'displacementScale', 'displacementBias', 'wireframe', 'wireframeLinewidth', 'flatShading'
500
+ ];
501
+
502
+ const MeshPhongMaterialParametersFields: string[] = [
503
+ ...MaterialParametersFields,
504
+ 'color', 'specular', 'shininess', 'opacity', 'map', 'lightMap', 'lightMapIntensity', 'aoMap', 'aoMapIntensity',
505
+ 'emissive', 'emissiveIntensity', 'emissiveMap', 'bumpMap', 'bumpScale', 'normalMap', 'normalMapType', 'normalScale',
506
+ 'displacementMap', 'displacementScale', 'displacementBias', 'specularMap', 'alphaMap', 'envMap', 'envMapRotation',
507
+ 'combine', 'reflectivity', 'refractionRatio', 'wireframe', 'wireframeLinewidth', 'wireframeLinecap', 'wireframeLinejoin',
508
+ 'fog', 'flatShading'
509
+ ];
510
+
511
+ const MeshPhysicalMaterialParametersFields: string[] = [
512
+ ...MeshStandardMaterialParametersFields,
513
+ 'anisotropyRotation', 'anisotropyMap', 'clearcoatMap', 'clearcoatRoughness', 'clearcoatRoughnessMap',
514
+ 'clearcoatNormalScale', 'clearcoatNormalMap', 'ior', 'reflectivity', 'iridescenceMap', 'iridescenceIOR',
515
+ 'iridescenceThicknessRange', 'iridescenceThicknessMap', 'sheenColor', 'sheenColorMap', 'sheenRoughness',
516
+ 'sheenRoughnessMap', 'transmissionMap', 'thickness', 'thicknessMap', 'attenuationDistance',
517
+ 'attenuationColor', 'specularIntensity', 'specularIntensityMap', 'specularColor', 'specularColorMap',
518
+ 'anisotropy', 'clearcoat', 'iridescence', 'dispersion', 'sheen', 'transmission'
519
+ ];
520
+
521
+ const MeshToonMaterialParametersFields: string[] = [
522
+ ...MaterialParametersFields,
523
+ 'color', 'opacity', 'gradientMap', 'map', 'lightMap', 'lightMapIntensity', 'aoMap', 'aoMapIntensity',
524
+ 'emissive', 'emissiveIntensity', 'emissiveMap', 'bumpMap', 'bumpScale', 'normalMap', 'normalMapType', 'normalScale',
525
+ 'displacementMap', 'displacementScale', 'displacementBias', 'alphaMap', 'wireframe', 'wireframeLinewidth',
526
+ 'wireframeLinecap', 'wireframeLinejoin', 'fog'
527
+ ];
528
+
529
+ const ShaderMaterialParametersFields: string[] = [
530
+ ...MaterialParametersFields,
531
+ 'uniforms', 'uniformsGroups', 'vertexShader', 'fragmentShader', 'linewidth', 'wireframe', 'wireframeLinewidth',
532
+ 'lights', 'clipping', 'fog', 'extensions', 'glslVersion'
533
+ ];
534
+
535
+ const ShadowMaterialParametersFields: string[] = [
536
+ ...MaterialParametersFields,
537
+ 'color', 'fog'
538
+ ];
539
+
540
+ const PointsMaterialParametersFields: string[] = [
541
+ ...MaterialParametersFields,
542
+ 'color', 'map', 'alphaMap', 'size', 'sizeAttenuation', 'fog'
543
+ ];
544
+
545
+ const SpriteMaterialParametersFields: string[] = [
546
+ ...MaterialParametersFields,
547
+ 'color', 'map', 'alphaMap', 'rotation', 'sizeAttenuation', 'fog'
548
+ ];
549
+
550
+ this.addConstructorHandler(THREE.MeshStandardMaterial, (obj, includeDefaults) => { return getObjectParameters(obj, MeshStandardMaterialParametersFields, includeDefaults); });
551
+ this.addConstructorHandler(THREE.LineBasicMaterial, (obj, includeDefaults) => { return getObjectParameters(obj, LineBasicMaterialParametersFields, includeDefaults); });
552
+ this.addConstructorHandler(THREE.LineDashedMaterial, (obj, includeDefaults) => { return getObjectParameters(obj, LineDashedMaterialParametersFields, includeDefaults); });
553
+ this.addConstructorHandler(THREE.MeshBasicMaterial, (obj, includeDefaults) => { return getObjectParameters(obj, MeshBasicMaterialParametersFields, includeDefaults); });
554
+ this.addConstructorHandler(THREE.MeshDepthMaterial, (obj, includeDefaults) => { return getObjectParameters(obj, MeshDepthMaterialParametersFields, includeDefaults); });
555
+ this.addConstructorHandler(THREE.MeshDistanceMaterial, (obj, includeDefaults) => { return getObjectParameters(obj, MeshDistanceMaterialParametersFields, includeDefaults); });
556
+ this.addConstructorHandler(THREE.MeshLambertMaterial, (obj, includeDefaults) => { return getObjectParameters(obj, MeshLambertMaterialParametersFields, includeDefaults); });
557
+ this.addConstructorHandler(THREE.MeshMatcapMaterial, (obj, includeDefaults) => { return getObjectParameters(obj, MeshMatcapMaterialParametersFields, includeDefaults); });
558
+ this.addConstructorHandler(THREE.MeshNormalMaterial, (obj, includeDefaults) => { return getObjectParameters(obj, MeshNormalMaterialParametersFields, includeDefaults); });
559
+ this.addConstructorHandler(THREE.MeshPhongMaterial, (obj, includeDefaults) => { return getObjectParameters(obj, MeshPhongMaterialParametersFields, includeDefaults); });
560
+ this.addConstructorHandler(THREE.MeshPhysicalMaterial, (obj, includeDefaults) => { return getObjectParameters(obj, MeshPhysicalMaterialParametersFields, includeDefaults); });
561
+ this.addConstructorHandler(THREE.MeshToonMaterial, (obj, includeDefaults) => { return getObjectParameters(obj, MeshToonMaterialParametersFields, includeDefaults); });
562
+ this.addConstructorHandler(THREE.RawShaderMaterial, (obj, includeDefaults) => { return getObjectParameters(obj, ShaderMaterialParametersFields, includeDefaults); });
563
+ this.addConstructorHandler(THREE.ShaderMaterial, (obj, includeDefaults) => { return getObjectParameters(obj, ShaderMaterialParametersFields, includeDefaults); });
564
+ this.addConstructorHandler(THREE.ShadowMaterial, (obj, includeDefaults) => { return getObjectParameters(obj, ShadowMaterialParametersFields, includeDefaults); });
565
+ this.addConstructorHandler(THREE.PointsMaterial, (obj, includeDefaults) => { return getObjectParameters(obj, PointsMaterialParametersFields, includeDefaults); });
566
+ this.addConstructorHandler(THREE.SpriteMaterial, (obj, includeDefaults) => { return getObjectParameters(obj, SpriteMaterialParametersFields, includeDefaults); });
567
+
568
+ this.constructorHandlersRegistered = true;
569
+ }
570
+
571
+ // Loading methods
572
+ /**
573
+ * Sets whether the context is in editor mode
574
+ */
575
+ public setEditorMode(isEditor: boolean): void {
576
+ this.isEditor = isEditor;
577
+ }
578
+
579
+ /**
580
+ * Loads an actor from serialized data.
581
+ * @param actorData - The serialized actor data
582
+ * @param prefabs - A map of prefab names to their serialized data
583
+ * @returns The loaded actor
584
+ */
585
+ public async loadActor(data: Record<string, any>, prefabs: Record<string, SerializedActor> = {}): Promise<Actor | null> {
586
+ if (!isLegacyData(data)) {
587
+ const loader = new Loader({flags: this.isEditor ? LoaderFlags.None : LoaderFlags.WithoutEditor});
588
+ return loader.load(data as SerializedData) as Actor;
589
+ }
590
+
591
+ // support legacy data
592
+ const actorData = data as SerializedActor;
593
+ this.currentPrefabRegistry = prefabs;
594
+ const instanceData = WorldSerializer.parseActorData(actorData);
595
+ const prefabData = await this.resolvePrefab(instanceData, prefabs);
596
+ const actor = await this.buildActor(instanceData, prefabData);
597
+ if (actor && instanceData.prefabName) {
598
+ console.warn('⚠️ Instantiating from legacy prefab. Please resave the prefab asset!');
599
+ }
600
+ return actor;
601
+ }
602
+
603
+ /**
604
+ * Loads an actor from serialized data, synchronous version.
605
+ * @param actorData - The serialized actor data
606
+ * @param prefabs - A map of prefab names to their serialized data
607
+ * @returns The loaded actor
608
+ */
609
+ public loadActorSync(data: Record<string, any>, prefabs: Record<string, SerializedActor> = {}): Actor | null {
610
+ if (!isLegacyData(data)) {
611
+ const loader = new Loader({flags: this.isEditor ? LoaderFlags.None : LoaderFlags.WithoutEditor});
612
+ return loader.load(data as SerializedData) as Actor;
613
+ }
614
+
615
+ // support legacy data
616
+ const actorData = data as SerializedActor;
617
+ this.currentPrefabRegistry = prefabs;
618
+ const instanceData = WorldSerializer.parseActorData(actorData);
619
+ const prefabData = this.resolvePrefabSync(instanceData, prefabs);
620
+ const actor = this.buildActorSync(instanceData, prefabData);
621
+ if (actor && instanceData.prefabName) {
622
+ console.warn('⚠️ Instantiating from legacy prefab. Please resave the prefab asset!');
623
+ }
624
+ return actor;
625
+ }
626
+
627
+ /**
628
+ * Loads world data into an existing world instance.
629
+ * @param world - The target world to load data into
630
+ * @param data - The raw world data to load
631
+ */
632
+ public async loadWorld(world: World, data: Record<string, any>): Promise<void> {
633
+ if (!isLegacyData(data)) {
634
+ // New format, use Loader
635
+ const loader = new Loader();
636
+ await loader.loadToInstanceAsync(data as SerializedData, world);
637
+ return;
638
+ }
639
+
640
+ const worldData = data as SerializedWorld;
641
+ const parsedData = WorldSerializer.parseWorldData(worldData);
642
+ const actors = [];
643
+ if (parsedData.uuid) {
644
+ (world as any).uuid = parsedData.uuid;
645
+ }
646
+
647
+ if (this.isEditor && parsedData.properties?.editorData) {
648
+ try {
649
+ world.editorData = structuredClone(parsedData.properties.editorData);
650
+ } catch (error) {
651
+ console.error('❌ Failed to load world editor data:', error);
652
+ }
653
+ }
654
+
655
+ // Load post-processing configuration
656
+ if (parsedData.properties?.postProcessConfiguration) {
657
+ try {
658
+ world.setPostProcessConfiguration(parsedData.properties.postProcessConfiguration);
659
+ } catch (error) {
660
+ console.error('❌ Failed to load post-processing configuration:', error);
661
+ }
662
+ }
663
+
664
+ // Load scene resource references
665
+ if (parsedData.resources) {
666
+ world.sceneResources = parsedData.resources;
667
+ }
668
+
669
+ if (parsedData.actors) {
670
+ for (const actorData of parsedData.actors) {
671
+ try {
672
+ const actor = await this.loadActor(actorData, parsedData.prefabs);
673
+ if (actor) {
674
+ actors.push(actor);
675
+ }
676
+ }
677
+ catch (error) {
678
+ console.error(`Failed to load actor: ${actorData.uuid}, class: ${actorData.class}. Error: ${error}`, error instanceof Error ? error.stack : undefined);
679
+ }
680
+ }
681
+ }
682
+ // add all the actors in the end to make sure the loading is atomic
683
+ world.addActors(...actors);
684
+ }
685
+
686
+ /**
687
+ * Imports an object from serialized data.
688
+ * @param objectData - The serialized object data
689
+ * @returns The imported object
690
+ */
691
+ public importObject(data: Record<string, any>): any {
692
+ if (!isLegacyData(data)) {
693
+ const loader = new Loader({flags: this.isEditor ? LoaderFlags.None : LoaderFlags.WithoutEditor});
694
+ return loader.load(data as SerializedData);
695
+ }
696
+
697
+ const objectData = data as SerializedObject;
698
+ return this.construct(objectData);
699
+ }
700
+
701
+ private getPrefabName(instanceData: SerializedActor): string | null {
702
+ if (instanceData.prefabName) {
703
+ return instanceData.prefabName;
704
+ }
705
+ const ctor = instanceData.ctor as Record<string, any>;
706
+ if (ctor?.prefabName) {
707
+ return ctor.prefabName;
708
+ }
709
+ return null;
710
+ }
711
+
712
+ /**
713
+ * Gets the parent prefab name from actor data
714
+ */
715
+ private getParentPrefabName(actorData: SerializedActor): string | null {
716
+ return actorData.parentPrefabName ?? null;
717
+ }
718
+
719
+ /**
720
+ * Resolves the complete prefab inheritance chain, detecting circular dependencies
721
+ * @param prefabName - The starting prefab name
722
+ * @param prefabs - Available prefab data
723
+ * @param visited - Set of visited prefab names to detect cycles
724
+ * @returns Array of prefab data in inheritance order (base → derived)
725
+ */
726
+ private async resolvePrefabInheritanceChain(
727
+ prefabName: string,
728
+ prefabs: Record<string, SerializedActor>,
729
+ visited: Set<string> = new Set()
730
+ ): Promise<SerializedActor[]> {
731
+ if (visited.has(prefabName)) {
732
+ throw new Error(`🔄 Circular prefab dependency detected: ${Array.from(visited).join(' → ')} → ${prefabName}`);
733
+ }
734
+
735
+ visited.add(prefabName);
736
+
737
+ // Load the current prefab data
738
+ let prefabData: SerializedActor | undefined = prefabs[prefabName];
739
+ prefabData ??= this.loadedPrefabData.get(prefabName);
740
+ prefabData ??= await resourceManager.loadJsonObject(AssetPath.fromString(prefabName));
741
+
742
+ if (!prefabData) {
743
+ throw new Error(`❌ Prefab ${prefabName} not found`);
744
+ }
745
+
746
+ this.loadedPrefabData.set(prefabName, prefabData);
747
+
748
+ // Check if this prefab has a parent
749
+ const parentPrefabName = this.getParentPrefabName(prefabData);
750
+ if (parentPrefabName) {
751
+ // Recursively resolve parent chain
752
+ const parentChain = await this.resolvePrefabInheritanceChain(parentPrefabName, prefabs, new Set(visited));
753
+ visited.delete(prefabName);
754
+ return [...parentChain, prefabData];
755
+ } else {
756
+ visited.delete(prefabName);
757
+ return [prefabData];
758
+ }
759
+ }
760
+
761
+ /**
762
+ * Synchronous version of resolvePrefabInheritanceChain
763
+ */
764
+ private resolvePrefabInheritanceChainSync(
765
+ prefabName: string,
766
+ prefabs: Record<string, SerializedActor>,
767
+ visited: Set<string> = new Set()
768
+ ): SerializedActor[] {
769
+ if (visited.has(prefabName)) {
770
+ throw new Error(`🔄 Circular prefab dependency detected: ${Array.from(visited).join(' → ')} → ${prefabName}`);
771
+ }
772
+
773
+ visited.add(prefabName);
774
+
775
+ // Load the current prefab data
776
+ let prefabData: SerializedActor | undefined = prefabs[prefabName];
777
+ prefabData ??= this.loadedPrefabData.get(prefabName);
778
+
779
+ if (!prefabData) {
780
+ throw new Error(`❌ Prefab ${prefabName} not found`);
781
+ }
782
+
783
+ this.loadedPrefabData.set(prefabName, prefabData);
784
+
785
+ // Check if this prefab has a parent
786
+ const parentPrefabName = this.getParentPrefabName(prefabData);
787
+ if (parentPrefabName) {
788
+ // Recursively resolve parent chain
789
+ const parentChain = this.resolvePrefabInheritanceChainSync(parentPrefabName, prefabs, new Set(visited));
790
+ visited.delete(prefabName);
791
+ return [...parentChain, prefabData];
792
+ } else {
793
+ visited.delete(prefabName);
794
+ return [prefabData];
795
+ }
796
+ }
797
+
798
+ private async resolvePrefab(instanceData: SerializedActor, prefabs: Record<string, SerializedActor>): Promise<any | null> {
799
+ const prefabName = this.getPrefabName(instanceData);
800
+ if (!prefabName) return null;
801
+
802
+ // Resolve the complete inheritance chain
803
+ const inheritanceChain = await this.resolvePrefabInheritanceChain(prefabName, prefabs);
804
+
805
+ // Apply inheritance by merging from base to derived
806
+ let resolvedPrefabData: SerializedActor = inheritanceChain[0];
807
+
808
+ for (let i = 1; i < inheritanceChain.length; i++) {
809
+ const childPrefab = inheritanceChain[i];
810
+ resolvedPrefabData = deepMerge(resolvedPrefabData, childPrefab);
811
+ }
812
+
813
+ // Always remove UUID from prefab data - UUIDs are instance-specific, not part of prefab definition
814
+ // The instance UUID will be applied to the actor during construction, but should not be stored in prefab data
815
+ delete resolvedPrefabData.uuid;
816
+ return resolvedPrefabData;
817
+ }
818
+
819
+ private resolvePrefabSync(instanceData: SerializedActor, prefabs: Record<string, SerializedActor>): any | null {
820
+ const prefabName = this.getPrefabName(instanceData);
821
+ if (!prefabName) return null;
822
+
823
+ // Resolve the complete inheritance chain
824
+ const inheritanceChain = this.resolvePrefabInheritanceChainSync(prefabName, prefabs);
825
+
826
+ // Apply inheritance by merging from base to derived
827
+ let resolvedPrefabData: SerializedActor = inheritanceChain[0];
828
+
829
+ for (let i = 1; i < inheritanceChain.length; i++) {
830
+ const childPrefab = inheritanceChain[i];
831
+ resolvedPrefabData = deepMerge(resolvedPrefabData, childPrefab);
832
+ }
833
+
834
+ // Always remove UUID from prefab data - UUIDs are instance-specific, not part of prefab definition
835
+ // The instance UUID will be applied to the actor during construction, but should not be stored in prefab data
836
+ delete resolvedPrefabData.uuid;
837
+ return resolvedPrefabData;
838
+ }
839
+
840
+ private async buildActor(instanceData: SerializedActor, prefabData: SerializedActor | null): Promise<Actor | null> {
841
+ // use a copy of the data to avoid modifying the original data which could be part of the world data (that we shouldn't modify)
842
+ const prefabDataCopy = prefabData ? structuredClone(prefabData) : null;
843
+ let resolvedData: SerializedActor;
844
+ if (prefabDataCopy) {
845
+ resolvedData = deepMerge(prefabDataCopy, instanceData);
846
+ } else {
847
+ resolvedData = structuredClone(instanceData);
848
+ }
849
+
850
+ if (prefabDataCopy) {
851
+ // the instance data may contain an irrelevant class name, use the prefab class instead
852
+ resolvedData.class = prefabDataCopy.class;
853
+ }
854
+
855
+ if (!resolvedData.ctor) {
856
+ throw new Error('Actor data is invalid, missing ctor');
857
+ }
858
+
859
+ if (Array.isArray(resolvedData.ctor)) {
860
+ throw new Error('Actor data is invalid, ctor is an array');
861
+ }
862
+
863
+
864
+ // Skip editor only actor in game
865
+ if (resolvedData.properties?.editorOnly && !this.isEditor) {
866
+ return null;
867
+ }
868
+
869
+ if (resolvedData.ctor.rootComponent) {
870
+ resolvedData.ctor.rootComponent = this.loadSceneObject(null, resolvedData.ctor.rootComponent);
871
+ if (!resolvedData.ctor.rootComponent) {
872
+ // Skip editor only root component in game (skips the actor)
873
+ return null;
874
+ }
875
+ }
876
+
877
+ {
878
+ // TEMP hack to load the components from the now deprecated ctor.components field
879
+ const sceneComponents = resolvedData.ctor.sceneComponents ?? [];
880
+ const components = resolvedData.ctor.components ?? [];
881
+ resolvedData.ctor.sceneComponents = [...sceneComponents, ...components];
882
+ }
883
+
884
+ // Construct actor
885
+ const actor = this.construct(resolvedData) as Actor;
886
+
887
+ const prefabName = this.getPrefabName(instanceData);
888
+
889
+ if (prefabName && prefabDataCopy) {
890
+ // Store the entire prefab registry for this actor so it can resolve inheritance chains later
891
+ // Ensure prefab data doesn't contain instance-specific UUID
892
+ const cleanPrefabData = JSON.parse(JSON.stringify(prefabDataCopy));
893
+ delete cleanPrefabData.uuid;
894
+ actor.setPrefab(prefabName, cleanPrefabData, this.currentPrefabRegistry);
895
+ }
896
+
897
+ return actor;
898
+ }
899
+
900
+ private buildActorSync(instanceData: SerializedActor, prefabData: SerializedActor | null): Actor | null {
901
+ // use a copy of the data to avoid modifying the original data which could be part of the world data (that we shouldn't modify)
902
+ const prefabDataCopy = prefabData ? structuredClone(prefabData) : null;
903
+ let resolvedData: SerializedActor;
904
+ if (prefabDataCopy) {
905
+ resolvedData = deepMerge(prefabDataCopy, instanceData);
906
+ } else {
907
+ resolvedData = structuredClone(instanceData);
908
+ }
909
+
910
+ if (prefabDataCopy) {
911
+ // the instance data may contain an irrelevant class name, use the prefab class instead
912
+ resolvedData.class = prefabDataCopy.class;
913
+ }
914
+
915
+ if (!resolvedData.ctor) {
916
+ throw new Error('Actor data is invalid, missing ctor');
917
+ }
918
+
919
+ if (Array.isArray(resolvedData.ctor)) {
920
+ throw new Error('Actor data is invalid, ctor is an array');
921
+ }
922
+
923
+ // Skip editor only actor in game
924
+ if (resolvedData.properties?.editorOnly && !this.isEditor) {
925
+ return null;
926
+ }
927
+
928
+ if (resolvedData.ctor.rootComponent) {
929
+ resolvedData.ctor.rootComponent = this.loadSceneObject(null, resolvedData.ctor.rootComponent);
930
+ if (!resolvedData.ctor.rootComponent) {
931
+ // Skip editor only root component in game (skips the actor)
932
+ return null;
933
+ }
934
+ }
935
+
936
+ {
937
+ // TEMP hack to load the components from the now deprecated ctor.components field
938
+ const sceneComponents = resolvedData.ctor.sceneComponents ?? [];
939
+ const components = resolvedData.ctor.components ?? [];
940
+ resolvedData.ctor.sceneComponents = [...sceneComponents, ...components];
941
+ }
942
+
943
+ // Construct actor
944
+ const actor = this.construct(resolvedData) as Actor;
945
+
946
+ const prefabName = this.getPrefabName(instanceData);
947
+
948
+ if (prefabName && prefabDataCopy) {
949
+ // Store the entire prefab registry for this actor so it can resolve inheritance chains later
950
+ // Ensure prefab data doesn't contain instance-specific UUID
951
+ const cleanPrefabData = JSON.parse(JSON.stringify(prefabDataCopy));
952
+ delete cleanPrefabData.uuid;
953
+ actor.setPrefab(prefabName, cleanPrefabData, this.currentPrefabRegistry);
954
+ }
955
+
956
+ return actor;
957
+ }
958
+
959
+ private construct(objectData: any): any {
960
+ if (objectData === null || objectData === undefined) {
961
+ return objectData;
962
+ }
963
+ if (objectData[externalRefKey]) {
964
+ return WorldSerializationContext.ExternalObjects.get(objectData[externalRefKey]);
965
+ }
966
+ if (objectData[internalRefKey]) {
967
+ // Resolve internal reference to already loaded object
968
+ const refUUID = objectData[internalRefKey];
969
+ const referencedObject = this.loadedObjectsByUUID.get(refUUID);
970
+ if (!referencedObject) {
971
+ console.warn(`Referenced object with uuid ${refUUID} not found in loaded objects`);
972
+ }
973
+ return referencedObject;
974
+ }
975
+ if (Array.isArray(objectData)) {
976
+ // Check for compact vector format with type tags
977
+ if (objectData.length >= 2 && typeof objectData[objectData.length - 1] === 'string') {
978
+ const typeTag = objectData[objectData.length - 1];
979
+ switch (typeTag) {
980
+ case 'v2':
981
+ return new THREE.Vector2(objectData[0], objectData[1]);
982
+ case 'v': // v for Vector3 (most common)
983
+ case 'v3': // Keep v3 for backward compatibility
984
+ return new THREE.Vector3(objectData[0], objectData[1], objectData[2]);
985
+ case 'v4':
986
+ return new THREE.Vector4(objectData[0], objectData[1], objectData[2], objectData[3]);
987
+ case 'e':
988
+ return new THREE.Euler(objectData[0], objectData[1], objectData[2]);
989
+ case 'q':
990
+ return new THREE.Quaternion(objectData[0], objectData[1], objectData[2], objectData[3]);
991
+ case 'c':
992
+ return new THREE.Color(objectData[0], objectData[1], objectData[2]);
993
+ case 'ia':
994
+ return new Int32Array(objectData.slice(0, objectData.length - 1));
995
+ case 'fa':
996
+ return new Float32Array(objectData.slice(0, objectData.length - 1));
997
+ }
998
+ }
999
+ // array value, construct each value
1000
+ return objectData.map(v => v != null ? this.construct(v) : null).filter(v => v != null);
1001
+ } else if (typeof objectData === 'object') {
1002
+ if (this.constructedObjects.has(objectData)) {
1003
+ // return the object as-is if it's already constructed
1004
+ return objectData;
1005
+ }
1006
+ const className = this.construct(objectData.class);
1007
+ if (className) {
1008
+ // object value needs construction, construct it
1009
+ const object = ClassRegistry.constructObject(className, true, this.construct(objectData.ctor));
1010
+ const properties = this.construct(objectData.properties);
1011
+ if (properties) {
1012
+ if (properties.editorOnly && !this.isEditor) {
1013
+ return null; // Skip editor only objects in game
1014
+ }
1015
+ if (properties.position) {
1016
+ object.position.copy(properties.position);
1017
+ delete properties.position;
1018
+ }
1019
+ if (properties.rotation) {
1020
+ object.rotation.copy(properties.rotation);
1021
+ delete properties.rotation;
1022
+ }
1023
+ if (properties.scale) {
1024
+ object.scale.copy(properties.scale);
1025
+ delete properties.scale;
1026
+ }
1027
+ if (properties.tags && typeof object.setTags === 'function') {
1028
+ object.setTags(properties.tags);
1029
+ delete properties.tags;
1030
+ }
1031
+ if (properties.hiddenInGame !== undefined && typeof object.setHiddenInGame === 'function') {
1032
+ object.setHiddenInGame(properties.hiddenInGame);
1033
+ delete properties.hiddenInGame;
1034
+ }
1035
+ if (properties.editorOnly !== undefined && typeof object.setEditorOnly === 'function') {
1036
+ object.setEditorOnly(properties.editorOnly);
1037
+ delete properties.editorOnly;
1038
+ }
1039
+
1040
+ Object.assign(object, properties);
1041
+ }
1042
+ if (objectData.uuid) {
1043
+ (object as any).uuid = objectData.uuid;
1044
+ // Store the object for potential reference resolution
1045
+ this.loadedObjectsByUUID.set(objectData.uuid, object);
1046
+ }
1047
+ this.constructedObjects.add(object);
1048
+ return object;
1049
+ } else {
1050
+ // regular object value, construct each property
1051
+ const expandedObject: Record<string, any> = {};
1052
+ for (const [k, v] of Object.entries(objectData)) {
1053
+ expandedObject[k] = this.construct(v);
1054
+ }
1055
+ this.constructedObjects.add(expandedObject);
1056
+ return expandedObject;
1057
+ }
1058
+ } else {
1059
+ // none of the above, most likely just a primitive value
1060
+ return objectData;
1061
+ }
1062
+ }
1063
+
1064
+ private loadSceneObject(parent: THREE.Object3D | null, sceneObjectData: any): THREE.Object3D | null {
1065
+ const sceneObject = this.construct(sceneObjectData) as THREE.Object3D;
1066
+ if (!sceneObject) {
1067
+ return null;
1068
+ }
1069
+ if (parent) {
1070
+ parent.add(sceneObject);
1071
+ }
1072
+ for (const childData of sceneObjectData.children ?? []) {
1073
+ this.loadSceneObject(sceneObject, childData);
1074
+ }
1075
+ return sceneObject;
1076
+ }
1077
+ }
1078
+
1079
+ /**
1080
+ * Handles loading and parsing of world data into the engine.
1081
+ * Provides functionality to convert serialized world data into
1082
+ * runtime objects and components.
1083
+ */
1084
+ export class WorldSerializer {
1085
+ /**
1086
+ * Exports an object to a serializable format.
1087
+ * @param object - The object to export
1088
+ * @param includeDefaults - Whether to include default values
1089
+ * @returns The serialized object
1090
+ */
1091
+ public static exportObject(object: any, includeDefaults: boolean): object {
1092
+ let data = new WorldSerializationContext().exportObject(object, false);
1093
+ if (typeof data === 'object' && !(serializationVersionKey in data)) {
1094
+ data = {
1095
+ [serializationVersionKey]: SerializationVersion.Legacy,
1096
+ ...data
1097
+ };
1098
+ }
1099
+ return data;
1100
+ }
1101
+
1102
+ public static exportAsPrefab(obj: any, inlineToPrefab: boolean = false): object {
1103
+ const asPrefab = true;
1104
+ const data = new WorldSerializationContext().exportObject(obj, asPrefab, inlineToPrefab);
1105
+ return data;
1106
+ }
1107
+
1108
+ /**
1109
+ * Validates and parses raw actor data against the defined schema.
1110
+ * @param actorData - The raw actor data object to parse
1111
+ * @returns The validated actor data object
1112
+ */
1113
+ public static parseActorData(actorData: SerializedActor) {
1114
+ return actorSchema.parse(actorData);
1115
+ }
1116
+
1117
+ /**
1118
+ * Loads an actor from serialized data.
1119
+ * @param actorData - The serialized actor data
1120
+ * @param prefabs - A map of prefab names to their serialized data
1121
+ * @returns The loaded actor
1122
+ */
1123
+ public static async loadActor(actorData: SerializedActor, prefabs: Record<string, SerializedActor> = {}, isEditor?: boolean): Promise<Actor | null> {
1124
+ const context = new WorldSerializationContext();
1125
+ context.setEditorMode(isEditor ?? false);
1126
+ const loadedActor = context.loadActor(actorData, prefabs);
1127
+ return loadedActor;
1128
+ }
1129
+
1130
+ /**
1131
+ * Loads an actor from serialized data, synchronous version.
1132
+ * @param actorData - The serialized actor data
1133
+ * @param prefabs - A map of prefab names to their serialized data. It must be provided if actorData contains a prefabName
1134
+ * @returns The loaded actor
1135
+ */
1136
+ public static loadActorSync(actorData: SerializedActor, prefabs: Record<string, SerializedActor> = {}, isEditor?: boolean): Actor | null {
1137
+ const context = new WorldSerializationContext();
1138
+ context.setEditorMode(isEditor ?? false);
1139
+ return context.loadActorSync(actorData, prefabs);
1140
+ }
1141
+
1142
+
1143
+
1144
+ /**
1145
+ * Validates and parses raw world data against the defined schema.
1146
+ * @param worldData - The raw world data object to parse
1147
+ * @returns The validated world data object
1148
+ */
1149
+ public static parseWorldData(worldData: SerializedWorld): SerializedWorld {
1150
+ return worldSchema.parse(worldData);
1151
+ }
1152
+
1153
+ /**
1154
+ * Loads world data into an existing world instance.
1155
+ * Creates actors, components, and scene hierarchies based on the provided data.
1156
+ * @param world - The target world to load data into
1157
+ * @param worldData - The raw world data to load
1158
+ * @param isEditor - Whether the world is being loaded in the editor
1159
+ */
1160
+ public static async loadWorld(world: World, worldData: SerializedWorld, isEditor?: boolean): Promise<void> {
1161
+ const context = new WorldSerializationContext();
1162
+ context.setEditorMode(isEditor ?? false);
1163
+ return context.loadWorld(world, worldData);
1164
+ }
1165
+
1166
+ public static importObject(objectData: SerializedObject, isEditor?: boolean): any {
1167
+ const context = new WorldSerializationContext();
1168
+ context.setEditorMode(isEditor ?? false);
1169
+ return context.importObject(objectData);
1170
+ }
1171
+
1172
+ /**
1173
+ * Creates prefab data from an actor
1174
+ * @param actor - The actor to create prefab data from
1175
+ * @param inlineToPrefab - whether to inline to the actor's prefab itself, as against to creating a new prefab that is dependent on the actor's prefab
1176
+ * @returns The prefab data
1177
+ */
1178
+ public static createPrefabDataFromActor(actor: Actor, inlineToPrefab: boolean = false): any {
1179
+ return WorldSerializer.exportAsPrefab(actor, inlineToPrefab);
1180
+ }
1181
+
1182
+ /** Creates prefab data from an actor with a parent prefab */
1183
+ public static createPrefabDataFromActorWithParent(
1184
+ actor: Actor,
1185
+ parentPrefabName: string
1186
+ ): SerializedActor {
1187
+ const prefabData = actor.asExportedObject();
1188
+ replace_uuids(prefabData, { deleteKey: true });
1189
+ delete prefabData.prefabName;
1190
+ prefabData.parentPrefabName = parentPrefabName;
1191
+ return prefabData;
1192
+ }
1193
+
1194
+ /** Loads the template actor from a prefab */
1195
+ public static loadPrefabTemplateActor(prefabName: string, prefabs: Record<string, any>, isEditor: boolean = true): Actor {
1196
+ const prefabData = prefabs[prefabName];
1197
+ if (isLegacyData(prefabData)) {
1198
+ const prefab = WorldSerializer.loadActorSync({
1199
+ prefabName,
1200
+ }, prefabs, isEditor);
1201
+ if (!prefab) {
1202
+ throw new Error('Failed to load prefab template actor');
1203
+ }
1204
+ if (prefab.getPrefabName() === prefabName) {
1205
+ prefab.clearPrefab(); // Clear prefab reference to avoid circular dependency.
1206
+ }
1207
+ return prefab;
1208
+ }
1209
+ return loadPrefabTemplateInstance(prefabName, prefabs, {withoutEditor: !isEditor});
1210
+ }
1211
+ }