@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.
- package/README.md +123 -0
- package/assets/animation-profiles/mixamo.skeleton-profile.json +63 -0
- package/assets/animation-profiles/rigify.skeleton-profile.json +61 -0
- package/assets/character/SKM_SB_MediumHuman.glb +0 -0
- package/assets/character/config/AnimationStateMachineComponent.md +107 -0
- package/assets/character/config/mannequin-anim.json +53 -0
- package/assets/character/mannequin.glb +0 -0
- package/assets/character/mannequinG.glb +0 -0
- package/assets/default.genesys-scene +194 -0
- package/assets/models/PickupActors/SM_Pickup_Health.glb +0 -0
- package/assets/models/PickupActors/SM_Pickup_Station.glb +0 -0
- package/assets/models/SM_Capsule.glb +0 -0
- package/assets/models/SM_ChamferCube.glb +0 -0
- package/assets/models/SM_Cone.glb +0 -0
- package/assets/models/SM_Cube.glb +0 -0
- package/assets/models/SM_Cylinder.glb +0 -0
- package/assets/models/SM_Plane.glb +0 -0
- package/assets/models/SM_Pyramid.glb +0 -0
- package/assets/models/SM_Sphere.glb +0 -0
- package/assets/models/SM_Torus.glb +0 -0
- package/assets/models/SM_Wedge.glb +0 -0
- package/assets/models/Weapons/SM_ShotGun_01.glb +0 -0
- package/assets/models/demo/Characters/Knightdude.glb +0 -0
- package/assets/models/demo/Characters/Spacedude.glb +0 -0
- package/assets/models/demo/LowPoly/SM_Bush01.glb +0 -0
- package/assets/models/demo/LowPoly/SM_Bush02.glb +0 -0
- package/assets/models/demo/LowPoly/SM_Flower01.glb +0 -0
- package/assets/models/demo/LowPoly/SM_Flower02.glb +0 -0
- package/assets/models/demo/LowPoly/SM_Flower03.glb +0 -0
- package/assets/models/demo/LowPoly/SM_GeneratedLandscape.glb +0 -0
- package/assets/models/demo/LowPoly/SM_Grass01.glb +0 -0
- package/assets/models/demo/LowPoly/SM_Grass02.glb +0 -0
- package/assets/models/demo/LowPoly/SM_Grass03.glb +0 -0
- package/assets/models/demo/LowPoly/SM_Mushroom01.glb +0 -0
- package/assets/models/demo/LowPoly/SM_Mushroom02.glb +0 -0
- package/assets/models/demo/LowPoly/SM_MushroomCluster01.glb +0 -0
- package/assets/models/demo/LowPoly/SM_MushroomCluster02.glb +0 -0
- package/assets/models/demo/LowPoly/SM_Rock01.glb +0 -0
- package/assets/models/demo/LowPoly/SM_Rock02.glb +0 -0
- package/assets/models/demo/LowPoly/SM_Rock03.glb +0 -0
- package/assets/models/demo/LowPoly/SM_Rock04.glb +0 -0
- package/assets/models/demo/LowPoly/SM_Tree01.glb +0 -0
- package/assets/models/demo/LowPoly/SM_Tree02.glb +0 -0
- package/assets/models/demo/LowPoly/SM_Tree03.glb +0 -0
- package/assets/models/demo/LowPoly/SM_Tree04.glb +0 -0
- package/assets/models/demo/LowPoly/SM_TreeStump.glb +0 -0
- package/assets/models/demo/LowPoly/SM_TreeTrunk.glb +0 -0
- package/assets/models/demo/LowPoly/low_poly_ship_wreck.glb +0 -0
- package/assets/models/demo/SandboxAsset/Blocks/SM_SB_Block.glb +0 -0
- package/assets/models/demo/SandboxAsset/Blocks/SM_SB_Block_Dirt.glb +0 -0
- package/assets/models/demo/SandboxAsset/Blocks/SM_SB_Block_Grass02.glb +0 -0
- package/assets/models/demo/SandboxAsset/Blocks/SM_SB_Block_Grass02Patch.glb +0 -0
- package/assets/models/demo/SandboxAsset/Blocks/SM_SB_Block_Gravel.glb +0 -0
- package/assets/models/demo/SandboxAsset/Blocks/SM_SB_Block_Lava.glb +0 -0
- package/assets/models/demo/SandboxAsset/Blocks/SM_SB_Block_LavaStone.glb +0 -0
- package/assets/models/demo/SandboxAsset/Blocks/SM_SB_Block_Sand.glb +0 -0
- package/assets/models/demo/SandboxAsset/Blocks/SM_SB_Block_Stone.glb +0 -0
- package/assets/models/demo/SandboxAsset/Blocks/SM_SB_Block_StoneA.glb +0 -0
- package/assets/models/demo/SandboxAsset/Blocks/SM_SB_Block_StoneC.glb +0 -0
- package/assets/models/demo/SandboxAsset/Blocks/SM_SB_Block_Wall.glb +0 -0
- package/assets/models/demo/SandboxAsset/Blocks/SM_SB_Block_Water.glb +0 -0
- package/assets/models/demo/SandboxAsset/Characters/SKM_Arachnids_Large_Spider.glb +0 -0
- package/assets/models/demo/SandboxAsset/Characters/SKM_SB_Adventurer_F01.glb +0 -0
- package/assets/models/demo/SandboxAsset/Characters/SKM_SB_Adventurer_M01.glb +0 -0
- package/assets/models/demo/SandboxAsset/Characters/SKM_SB_Aviator_F01.glb +0 -0
- package/assets/models/demo/SandboxAsset/Characters/SKM_SB_Aviator_M01.glb +0 -0
- package/assets/models/demo/SandboxAsset/Characters/SKM_SB_Aztec_F01.glb +0 -0
- package/assets/models/demo/SandboxAsset/Characters/SKM_SB_Aztec_M01.glb +0 -0
- package/assets/models/demo/SandboxAsset/Characters/SKM_SB_MediumHuman.glb +0 -0
- package/assets/models/demo/SandboxAsset/Characters/SKM_SB_Shaman.glb +0 -0
- package/assets/models/demo/SandboxAsset/Clouds/SM_SB_Cloud_01.glb +0 -0
- package/assets/models/demo/SandboxAsset/Clouds/SM_SB_Cloud_02.glb +0 -0
- package/assets/models/demo/SandboxAsset/Clouds/SM_SB_Cloud_03.glb +0 -0
- package/assets/models/demo/SandboxAsset/Clouds/SM_SB_Cloud_04.glb +0 -0
- package/assets/models/demo/SandboxAsset/Clouds/SM_SB_Env_Cloud_01.glb +0 -0
- package/assets/models/demo/SandboxAsset/Clouds/SM_SB_Env_Cloud_02.glb +0 -0
- package/assets/models/demo/SandboxAsset/Clouds/SM_SB_Env_Cloud_03.glb +0 -0
- package/assets/models/demo/SandboxAsset/Clouds/SM_SB_Env_Cloud_04.glb +0 -0
- package/assets/models/demo/SandboxAsset/Clouds/SM_SB_Env_Cloud_05.glb +0 -0
- package/assets/models/demo/SandboxAsset/Clouds/SM_SB_Env_Cloud_06.glb +0 -0
- package/assets/models/demo/SandboxAsset/Clouds/SM_SB_Env_Cloud_07.glb +0 -0
- package/assets/models/demo/SandboxAsset/Clouds/SM_SB_SmallCloud01.glb +0 -0
- package/assets/models/demo/SandboxAsset/Clouds/SM_SB_SmallCloud_02.glb +0 -0
- package/assets/models/demo/SandboxAsset/Decorations/SM_SB_AztecStatue.glb +0 -0
- package/assets/models/demo/SandboxAsset/Decorations/SM_SB_Claypot_01.glb +0 -0
- package/assets/models/demo/SandboxAsset/Decorations/SM_SB_Claypot_02.glb +0 -0
- package/assets/models/demo/SandboxAsset/Decorations/SM_SB_Claypot_03.glb +0 -0
- package/assets/models/demo/SandboxAsset/Decorations/SM_SB_Claypot_Broken_01.glb +0 -0
- package/assets/models/demo/SandboxAsset/Decorations/SM_SB_Claypot_Broken_02.glb +0 -0
- package/assets/models/demo/SandboxAsset/Decorations/SM_SB_Crystal_Calendar_01.glb +0 -0
- package/assets/models/demo/SandboxAsset/Decorations/SM_SB_Crystal_Calendar_02.glb +0 -0
- package/assets/models/demo/SandboxAsset/Decorations/SM_SB_Crystal_Skull.glb +0 -0
- package/assets/models/demo/SandboxAsset/Decorations/SM_SB_Goldpile_01.glb +0 -0
- package/assets/models/demo/SandboxAsset/Decorations/SM_SB_Goldpile_02.glb +0 -0
- package/assets/models/demo/SandboxAsset/Decorations/SM_SB_Rubble_Skeleton_01.glb +0 -0
- package/assets/models/demo/SandboxAsset/Decorations/SM_SB_TreasureChest.glb +0 -0
- package/assets/models/demo/SandboxAsset/Decorations/SM_SB_TreasureChestSmall.glb +0 -0
- package/assets/models/demo/SandboxAsset/Decorations/SM_SB_Wall_Deco_01.glb +0 -0
- package/assets/models/demo/SandboxAsset/Dungeon/SM_SB_AngledWall.glb +0 -0
- package/assets/models/demo/SandboxAsset/Dungeon/SM_SB_Arch.glb +0 -0
- package/assets/models/demo/SandboxAsset/Dungeon/SM_SB_Beams.glb +0 -0
- package/assets/models/demo/SandboxAsset/Dungeon/SM_SB_Beams02.glb +0 -0
- package/assets/models/demo/SandboxAsset/Dungeon/SM_SB_Corner.glb +0 -0
- package/assets/models/demo/SandboxAsset/Dungeon/SM_SB_CornerB.glb +0 -0
- package/assets/models/demo/SandboxAsset/Dungeon/SM_SB_Floor.glb +0 -0
- package/assets/models/demo/SandboxAsset/Dungeon/SM_SB_Floor2.glb +0 -0
- package/assets/models/demo/SandboxAsset/Dungeon/SM_SB_Floor3.glb +0 -0
- package/assets/models/demo/SandboxAsset/Dungeon/SM_SB_GrowingTree.glb +0 -0
- package/assets/models/demo/SandboxAsset/Dungeon/SM_SB_HalfFloor.glb +0 -0
- package/assets/models/demo/SandboxAsset/Dungeon/SM_SB_IronBucket.glb +0 -0
- package/assets/models/demo/SandboxAsset/Dungeon/SM_SB_Pillar.glb +0 -0
- package/assets/models/demo/SandboxAsset/Dungeon/SM_SB_Railing.glb +0 -0
- package/assets/models/demo/SandboxAsset/Dungeon/SM_SB_RoofWindow.glb +0 -0
- package/assets/models/demo/SandboxAsset/Dungeon/SM_SB_Stairs01.glb +0 -0
- package/assets/models/demo/SandboxAsset/Dungeon/SM_SB_Statue.glb +0 -0
- package/assets/models/demo/SandboxAsset/Dungeon/SM_SB_Wall.glb +0 -0
- package/assets/models/demo/SandboxAsset/Dungeon/SM_SB_Wall02.glb +0 -0
- package/assets/models/demo/SandboxAsset/Dungeon/SM_SB_Wall03.glb +0 -0
- package/assets/models/demo/SandboxAsset/Dungeon/SM_SB_Wall03B.glb +0 -0
- package/assets/models/demo/SandboxAsset/Dungeon/SM_SB_Wall04.glb +0 -0
- package/assets/models/demo/SandboxAsset/Dungeon/SM_SB_WallB.glb +0 -0
- package/assets/models/demo/SandboxAsset/Dungeon/SM_SB_WallTrim.glb +0 -0
- package/assets/models/demo/SandboxAsset/Floors/SM_SB_Floor_01.glb +0 -0
- package/assets/models/demo/SandboxAsset/Floors/SM_SB_Floor_02.glb +0 -0
- package/assets/models/demo/SandboxAsset/Flowers/SM_SB_Flower01_ColorA.glb +0 -0
- package/assets/models/demo/SandboxAsset/Flowers/SM_SB_Flower01_ColorB.glb +0 -0
- package/assets/models/demo/SandboxAsset/Flowers/SM_SB_Flower02_ColorA.glb +0 -0
- package/assets/models/demo/SandboxAsset/Flowers/SM_SB_Flower02_ColorB.glb +0 -0
- package/assets/models/demo/SandboxAsset/Flowers/SM_SB_Flower03_ColorA.glb +0 -0
- package/assets/models/demo/SandboxAsset/Flowers/SM_SB_Flower03_ColorB.glb +0 -0
- package/assets/models/demo/SandboxAsset/Foliage/SM_SB_Beach_Grass.glb +0 -0
- package/assets/models/demo/SandboxAsset/Foliage/SM_SB_Birgaradier_Tree.glb +0 -0
- package/assets/models/demo/SandboxAsset/Foliage/SM_SB_Cactus_Long.glb +0 -0
- package/assets/models/demo/SandboxAsset/Foliage/SM_SB_ElephantEar01.glb +0 -0
- package/assets/models/demo/SandboxAsset/Foliage/SM_SB_Fern01.glb +0 -0
- package/assets/models/demo/SandboxAsset/Foliage/SM_SB_GrassPatch.glb +0 -0
- package/assets/models/demo/SandboxAsset/Foliage/SM_SB_Growing_Plant.glb +0 -0
- package/assets/models/demo/SandboxAsset/Foliage/SM_SB_Leaf_bush01.glb +0 -0
- package/assets/models/demo/SandboxAsset/Foliage/SM_SB_Middle_Moss.glb +0 -0
- package/assets/models/demo/SandboxAsset/Foliage/SM_SB_Oracle_Tree.glb +0 -0
- package/assets/models/demo/SandboxAsset/Foliage/SM_SB_Plant01.glb +0 -0
- package/assets/models/demo/SandboxAsset/Foliage/SM_SB_Tree01.glb +0 -0
- package/assets/models/demo/SandboxAsset/Foliage/SM_SB_plant.glb +0 -0
- package/assets/models/demo/SandboxAsset/GameItems/SM_SB_Arrow_large_01.glb +0 -0
- package/assets/models/demo/SandboxAsset/GameItems/SM_SB_Arrow_large_02.glb +0 -0
- package/assets/models/demo/SandboxAsset/GameItems/SM_SB_HangingBridgeEnd_01.glb +0 -0
- package/assets/models/demo/SandboxAsset/GameItems/SM_SB_HangingBridgeEnd_02.glb +0 -0
- package/assets/models/demo/SandboxAsset/GameItems/SM_SB_HangingBridgeMiddle.glb +0 -0
- package/assets/models/demo/SandboxAsset/GameItems/SM_SB_MovingPlatform_01.glb +0 -0
- package/assets/models/demo/SandboxAsset/GameItems/SM_SB_MovingWall.glb +0 -0
- package/assets/models/demo/SandboxAsset/GameItems/SM_SB_ObsidianTrap.glb +0 -0
- package/assets/models/demo/SandboxAsset/GameItems/SM_SB_Scull_Arrowshooter01.glb +0 -0
- package/assets/models/demo/SandboxAsset/GameItems/SM_SB_Scull_Arrowshooter02.glb +0 -0
- package/assets/models/demo/SandboxAsset/GameItems/SM_SB_Snakepit.glb +0 -0
- package/assets/models/demo/SandboxAsset/Rocks/SM_SB_Rock01.glb +0 -0
- package/assets/models/demo/SandboxAsset/Rocks/SM_SB_Rock02.glb +0 -0
- package/assets/models/demo/SandboxAsset/Slides/SM_SB_Slide_Corner_L.glb +0 -0
- package/assets/models/demo/SandboxAsset/Slides/SM_SB_Slide_Corner_R.glb +0 -0
- package/assets/models/demo/SandboxAsset/Slides/SM_SB_Slide_Edge.glb +0 -0
- package/assets/models/demo/SandboxAsset/Slides/SM_SB_Slide_End01.glb +0 -0
- package/assets/models/demo/SandboxAsset/Slides/SM_SB_Slide_Module.glb +0 -0
- package/assets/models/demo/SandboxAsset/Trees/SM_SB_CaribbeanPine_01.glb +0 -0
- package/assets/models/demo/SandboxAsset/Trees/SM_SB_CaribbeanPine_02.glb +0 -0
- package/assets/models/demo/SandboxAsset/Trees/SM_SB_CoconutTree01.glb +0 -0
- package/assets/models/demo/SandboxAsset/Trees/SM_SB_CoconutTree02.glb +0 -0
- package/assets/models/demo/SandboxAsset/Trees/SM_SB_KapokTree_01.glb +0 -0
- package/assets/models/demo/SandboxAsset/Trees/SM_SB_KapokTree_02.glb +0 -0
- package/assets/models/demo/SandboxAsset/Trees/SM_SB_QueenPalm_01.glb +0 -0
- package/assets/models/demo/SandboxAsset/Trees/SM_SB_QueenPalm_02.glb +0 -0
- package/assets/models/demo/SandboxAsset/Trees/SM_SB_TreeTrunk.glb +0 -0
- package/assets/models/demo/SandboxAsset/Trims/SM_SB_TrimA.glb +0 -0
- package/assets/models/demo/SandboxAsset/Trims/SM_SB_TrimB.glb +0 -0
- package/assets/models/demo/SandboxAsset/Trims/SM_SB_TrimC.glb +0 -0
- package/assets/models/demo/SandboxAsset/Trims/SM_SB_TrimD.glb +0 -0
- package/assets/models/demo/SandboxAsset/Trims/SM_SB_TrimE.glb +0 -0
- package/assets/models/demo/SandboxAsset/Trims/SM_SB_TrimF.glb +0 -0
- package/assets/models/demo/SandboxAsset/Trims/SM_SB_TrimG.glb +0 -0
- package/assets/models/demo/SandboxAsset/Trims/SM_SB_TrimH.glb +0 -0
- package/assets/models/demo/SandboxAsset/Trims/SM_SB_TrimI.glb +0 -0
- package/assets/models/demo/SandboxAsset/Trims/SM_SB_TrimJ.glb +0 -0
- package/assets/models/demo/SandboxAsset/Walls/SM_SB_Aztec_Wall_01.glb +0 -0
- package/assets/models/demo/SandboxAsset/Walls/SM_SB_Aztec_Wall_02.glb +0 -0
- package/assets/models/demo/SandboxAsset/Walls/SM_SB_Brick01.glb +0 -0
- package/assets/models/demo/SandboxAsset/Walls/SM_SB_BrickBlock01.glb +0 -0
- package/assets/models/demo/SandboxAsset/Walls/SM_SB_BrickBlock02.glb +0 -0
- package/assets/models/demo/SandboxAsset/Walls/SM_SB_Vineswall01.glb +0 -0
- package/assets/models/demo/SandboxAsset/Walls/SM_SB_WallDecoA.glb +0 -0
- package/assets/models/demo/SandboxAsset/Walls/SM_SB_Wall_L_01B_128x96.glb +0 -0
- package/assets/models/demo/SandboxAsset/Walls/SM_SB_Wall_L_01_128x96.glb +0 -0
- package/assets/models/demo/SandboxAsset/Walls/SM_SB_Wall_L_02B_128x96.glb +0 -0
- package/assets/models/demo/SandboxAsset/Walls/SM_SB_Wall_L_02C_128x96.glb +0 -0
- package/assets/models/demo/SandboxAsset/Walls/SM_SB_Wall_L_02D_128x96.glb +0 -0
- package/assets/models/demo/SandboxAsset/Walls/SM_SB_Wall_L_02_128x96.glb +0 -0
- package/assets/models/demo/SandboxAsset/Walls/SM_SB_Wall_L_03B_128x96.glb +0 -0
- package/assets/models/demo/SandboxAsset/Walls/SM_SB_Wall_L_03_128x96.glb +0 -0
- package/assets/prefabs/actors/demo_health_pickup.prefab.json +114 -0
- package/assets/prefabs/actors/demo_health_pickup_spawner.prefab.json +102 -0
- package/assets/prefabs/actors/test.prefab.json +87 -0
- package/assets/shaders/M_Anisotropy_Brushed.material.json +89 -0
- package/assets/shaders/M_Anisotropy_Radial.material.json +55 -0
- package/assets/shaders/M_Chrome.material.json +18 -0
- package/assets/shaders/M_Emissive_Blue.material.json +26 -0
- package/assets/shaders/M_Glass_Frosted.material.json +24 -0
- package/assets/shaders/M_Glass_ThinFilm.material.json +23 -0
- package/assets/shaders/M_Glossy_Grey.material.json +20 -0
- package/assets/shaders/M_Matte_White.material.json +20 -0
- package/assets/shaders/M_Metal_Anisotropic_Gold.material.json +31 -0
- package/assets/shaders/M_Metal_Anisotropic_Silver.material.json +31 -0
- package/assets/shaders/M_Metal_Brushed.material.json +61 -0
- package/assets/shaders/M_Paint_Clearcoat.material.json +28 -0
- package/assets/shaders/M_Stone_Mossy.material.json +153 -0
- package/assets/shaders/M_Stone_Mossy_Snow.material.json +151 -0
- package/assets/shaders/M_Toon_Anime.material.json +49 -0
- package/assets/shaders/M_Toon_Anime_5Step.material.json +45 -0
- package/assets/shaders/M_Toon_Cel.material.json +49 -0
- package/assets/shaders/M_Transmission.material.json +42 -0
- package/assets/shaders/M_Velvet_Blue.material.json +33 -0
- package/assets/shaders/M_Velvet_Purple.material.json +30 -0
- package/assets/shaders/M_Velvet_Red.material.json +33 -0
- package/assets/shaders/M_Wax_SSSLite.material.json +55 -0
- package/assets/shaders/matcap/M_Matcap_Blue.material.json +27 -0
- package/assets/shaders/matcap/M_Matcap_Rainbow.material.json +26 -0
- package/assets/shaders/matcap/M_Matcap_White.material.json +28 -0
- package/assets/sounds/birds.mp3 +0 -0
- package/assets/sounds/explosion.mp3 +0 -0
- package/assets/sounds/game-gun-short.mp3 +0 -0
- package/assets/sounds/laser.mp3 +0 -0
- package/assets/sounds/pickup.mp3 +0 -0
- package/assets/sounds/tuba.mp3 +0 -0
- package/assets/textures/Checkerboard.png +0 -0
- package/assets/textures/Grid_10x10.png +0 -0
- package/assets/textures/T_AnisotropyMap_Radial.png +0 -0
- package/assets/textures/T_Anisotropy_Roughness.png +0 -0
- package/assets/textures/T_Gradient.png +0 -0
- package/assets/textures/T_Grid_01.png +0 -0
- package/assets/textures/T_Grid_01.texture.json +7 -0
- package/assets/textures/T_Metal_Brushed_Normal.png +0 -0
- package/assets/textures/T_Normal.png +0 -0
- package/assets/textures/T_Stone_Mossy_AmbientOcclusion.jpg +0 -0
- package/assets/textures/T_Stone_Mossy_BaseColor.jpg +0 -0
- package/assets/textures/T_Stone_Mossy_Normal.jpg +0 -0
- package/assets/textures/T_Stone_Mossy_Roughness.jpg +0 -0
- package/assets/textures/T_Stone_Mossy_Snow_AmbientOcclusion.jpg +0 -0
- package/assets/textures/T_Stone_Mossy_Snow_BaseColor.jpg +0 -0
- package/assets/textures/T_Stone_Mossy_Snow_Normal.jpg +0 -0
- package/assets/textures/T_Stone_Mossy_Snow_Roughness.jpg +0 -0
- package/assets/textures/T_Toon_Anime_4Step.png +0 -0
- package/assets/textures/T_Toon_Anime_5Step.png +0 -0
- package/assets/textures/T_Toon_Cel_2Step.png +0 -0
- package/assets/textures/T_Wax_Thickness.png +0 -0
- package/assets/textures/matcaps/T_Matcap_Rainbow.png.png +0 -0
- package/assets/textures/matcaps/beige.png +0 -0
- package/assets/textures/matcaps/black.png +0 -0
- package/assets/textures/matcaps/blue.png +0 -0
- package/assets/textures/matcaps/brown.png +0 -0
- package/assets/textures/matcaps/emeraldGreen.png +0 -0
- package/assets/textures/matcaps/gold.png +0 -0
- package/assets/textures/matcaps/gray.png +0 -0
- package/assets/textures/matcaps/green.png +0 -0
- package/assets/textures/matcaps/metal.png +0 -0
- package/assets/textures/matcaps/orange.png +0 -0
- package/assets/textures/matcaps/purple.png +0 -0
- package/assets/textures/matcaps/red.png +0 -0
- package/assets/textures/matcaps/white.png +0 -0
- package/assets/textures/matcaps/yellow.png +0 -0
- package/assets/textures/skybox/citrus_orchard_road_puresky_2k.hdr +0 -0
- package/assets/textures/skybox/venice_sunset_4k.hdr +0 -0
- package/assets/ui/styles/ammo-counter.css +58 -0
- package/assets/ui/styles/compass.css +54 -0
- package/assets/ui/styles/controls-help.css +21 -0
- package/assets/ui/styles/crosshair.css +51 -0
- package/assets/ui/styles/inventory-bar.css +112 -0
- package/assets/ui/styles/inventory-grid.css +257 -0
- package/assets/ui/styles/main-menu.css +59 -0
- package/assets/ui/styles/minimap.css +12 -0
- package/assets/ui/styles/number-display.css +18 -0
- package/assets/ui/styles/progress-bar.css +199 -0
- package/assets/ui/styles/reload-indicator.css +76 -0
- package/assets/ui/templates/ammo-counter.html +7 -0
- package/assets/ui/templates/compass.html +6 -0
- package/assets/ui/templates/controls-help.html +9 -0
- package/assets/ui/templates/crosshair.html +1 -0
- package/assets/ui/templates/inventory-bar.html +38 -0
- package/assets/ui/templates/inventory-grid.html +9 -0
- package/assets/ui/templates/main-menu.html +10 -0
- package/assets/ui/templates/minimap.html +3 -0
- package/assets/ui/templates/number-display.html +3 -0
- package/assets/ui/templates/progress-bar.html +7 -0
- package/assets/ui/templates/reload-indicator.html +13 -0
- package/dist/games/animation-demo.d.ts +21 -0
- package/dist/games/animation-demo.js +398 -0
- package/dist/games/animation-retarget-demo.d.ts +44 -0
- package/dist/games/animation-retarget-demo.js +574 -0
- package/dist/games/behavior-tree-demo.d.ts +100 -0
- package/dist/games/behavior-tree-demo.js +1656 -0
- package/dist/games/character_animation.d.ts +15 -0
- package/dist/games/character_animation.js +170 -0
- package/dist/games/collision-demo.d.ts +4 -0
- package/dist/games/collision-demo.js +134 -0
- package/dist/games/deprecated/advanced-grid-demo.d.ts +18 -0
- package/dist/games/deprecated/advanced-grid-demo.js +305 -0
- package/dist/games/deprecated/airplane-demo.d.ts +10 -0
- package/dist/games/deprecated/airplane-demo.js +136 -0
- package/dist/games/deprecated/character-controller.d.ts +6 -0
- package/dist/games/deprecated/character-controller.js +144 -0
- package/dist/games/deprecated/chase-game.d.ts +17 -0
- package/dist/games/deprecated/chase-game.js +269 -0
- package/dist/games/deprecated/collision-config.d.ts +7 -0
- package/dist/games/deprecated/collision-config.js +295 -0
- package/dist/games/deprecated/door-demo.d.ts +30 -0
- package/dist/games/deprecated/door-demo.js +562 -0
- package/dist/games/deprecated/fps-demo.d.ts +9 -0
- package/dist/games/deprecated/fps-demo.js +119 -0
- package/dist/games/deprecated/fps-shotgun-demo.d.ts +19 -0
- package/dist/games/deprecated/fps-shotgun-demo.js +221 -0
- package/dist/games/deprecated/index.d.ts +25 -0
- package/dist/games/deprecated/index.js +26 -0
- package/dist/games/deprecated/lightmapping-demo.d.ts +135 -0
- package/dist/games/deprecated/lightmapping-demo.js +1344 -0
- package/dist/games/deprecated/lights-demo.d.ts +93 -0
- package/dist/games/deprecated/lights-demo.js +815 -0
- package/dist/games/deprecated/matcap-demo.d.ts +54 -0
- package/dist/games/deprecated/matcap-demo.js +788 -0
- package/dist/games/deprecated/material-demo-2.d.ts +14 -0
- package/dist/games/deprecated/material-demo-2.js +521 -0
- package/dist/games/deprecated/material-demo.d.ts +8 -0
- package/dist/games/deprecated/material-demo.js +177 -0
- package/dist/games/deprecated/memory-leak-test.d.ts +6 -0
- package/dist/games/deprecated/memory-leak-test.js +20 -0
- package/dist/games/deprecated/model-stress-test.d.ts +10 -0
- package/dist/games/deprecated/model-stress-test.js +116 -0
- package/dist/games/deprecated/multiplayer-demo.d.ts +13 -0
- package/dist/games/deprecated/multiplayer-demo.js +377 -0
- package/dist/games/deprecated/physics-demo.d.ts +10 -0
- package/dist/games/deprecated/physics-demo.js +200 -0
- package/dist/games/deprecated/shadow-demo.d.ts +25 -0
- package/dist/games/deprecated/shadow-demo.js +402 -0
- package/dist/games/deprecated/shooting-demo.d.ts +19 -0
- package/dist/games/deprecated/shooting-demo.js +338 -0
- package/dist/games/deprecated/skybox-demo.d.ts +35 -0
- package/dist/games/deprecated/skybox-demo.js +323 -0
- package/dist/games/deprecated/sound-demo.d.ts +11 -0
- package/dist/games/deprecated/sound-demo.js +125 -0
- package/dist/games/deprecated/timer-demo.d.ts +11 -0
- package/dist/games/deprecated/timer-demo.js +150 -0
- package/dist/games/deprecated/voxel-demo.d.ts +5 -0
- package/dist/games/deprecated/voxel-demo.js +41 -0
- package/dist/games/deprecated/world-commands.d.ts +8 -0
- package/dist/games/deprecated/world-commands.js +168 -0
- package/dist/games/deprecated/world-loading.d.ts +6 -0
- package/dist/games/deprecated/world-loading.js +86 -0
- package/dist/games/examples/fps-advanced/const.d.ts +171 -0
- package/dist/games/examples/fps-advanced/const.js +116 -0
- package/dist/games/examples/fps-advanced/enemies.d.ts +21 -0
- package/dist/games/examples/fps-advanced/enemies.js +182 -0
- package/dist/games/examples/fps-advanced/game-mode.d.ts +53 -0
- package/dist/games/examples/fps-advanced/game-mode.js +353 -0
- package/dist/games/examples/fps-advanced/game.d.ts +9 -0
- package/dist/games/examples/fps-advanced/game.js +58 -0
- package/dist/games/examples/fps-advanced/pickups.d.ts +36 -0
- package/dist/games/examples/fps-advanced/pickups.js +225 -0
- package/dist/games/examples/fps-advanced/player.d.ts +12 -0
- package/dist/games/examples/fps-advanced/player.js +110 -0
- package/dist/games/examples/fps-advanced/ui/endgame-ui.d.ts +21 -0
- package/dist/games/examples/fps-advanced/ui/endgame-ui.js +291 -0
- package/dist/games/examples/fps-advanced/ui/game-hud.d.ts +17 -0
- package/dist/games/examples/fps-advanced/ui/game-hud.js +225 -0
- package/dist/games/examples/fps-advanced/ui/menu-ui.d.ts +13 -0
- package/dist/games/examples/fps-advanced/ui/menu-ui.js +224 -0
- package/dist/games/examples/fps-advanced/ui/weapon-hud.d.ts +27 -0
- package/dist/games/examples/fps-advanced/ui/weapon-hud.js +259 -0
- package/dist/games/examples/fps-advanced/weapons.d.ts +14 -0
- package/dist/games/examples/fps-advanced/weapons.js +173 -0
- package/dist/games/examples/index.d.ts +5 -0
- package/dist/games/examples/index.js +6 -0
- package/dist/games/examples/plugin-demo/game.d.ts +7 -0
- package/dist/games/examples/plugin-demo/game.js +168 -0
- package/dist/games/examples/plugin-demo/plugins/dynamic-lighting.d.ts +8 -0
- package/dist/games/examples/plugin-demo/plugins/dynamic-lighting.js +156 -0
- package/dist/games/examples/plugin-demo/plugins/instanced-forest.d.ts +7 -0
- package/dist/games/examples/plugin-demo/plugins/instanced-forest.js +194 -0
- package/dist/games/examples/plugin-demo/plugins/particle-fountain.d.ts +7 -0
- package/dist/games/examples/plugin-demo/plugins/particle-fountain.js +64 -0
- package/dist/games/examples/plugin-demo/plugins/physics-playground.d.ts +7 -0
- package/dist/games/examples/plugin-demo/plugins/physics-playground.js +185 -0
- package/dist/games/examples/plugin-demo/plugins/robot-follower.d.ts +7 -0
- package/dist/games/examples/plugin-demo/plugins/robot-follower.js +347 -0
- package/dist/games/examples/plugin-demo/plugins/scatter-models.d.ts +7 -0
- package/dist/games/examples/plugin-demo/plugins/scatter-models.js +70 -0
- package/dist/games/examples/plugin-demo/plugins/simple-cube.d.ts +7 -0
- package/dist/games/examples/plugin-demo/plugins/simple-cube.js +44 -0
- package/dist/games/examples/plugin-demo/plugins/tic-tac-toe.d.ts +8 -0
- package/dist/games/examples/plugin-demo/plugins/tic-tac-toe.js +526 -0
- package/dist/games/examples/plugin-demo/plugins/wobbling-sphere.d.ts +7 -0
- package/dist/games/examples/plugin-demo/plugins/wobbling-sphere.js +63 -0
- package/dist/games/examples/side-scroller-advanced/const.d.ts +97 -0
- package/dist/games/examples/side-scroller-advanced/const.js +82 -0
- package/dist/games/examples/side-scroller-advanced/game-mode.d.ts +54 -0
- package/dist/games/examples/side-scroller-advanced/game-mode.js +351 -0
- package/dist/games/examples/side-scroller-advanced/game.d.ts +9 -0
- package/dist/games/examples/side-scroller-advanced/game.js +70 -0
- package/dist/games/examples/side-scroller-advanced/level-generator.d.ts +68 -0
- package/dist/games/examples/side-scroller-advanced/level-generator.js +366 -0
- package/dist/games/examples/side-scroller-advanced/pickups.d.ts +18 -0
- package/dist/games/examples/side-scroller-advanced/pickups.js +147 -0
- package/dist/games/examples/side-scroller-advanced/player.d.ts +5 -0
- package/dist/games/examples/side-scroller-advanced/player.js +104 -0
- package/dist/games/examples/side-scroller-advanced/ui/endgame-ui.d.ts +16 -0
- package/dist/games/examples/side-scroller-advanced/ui/endgame-ui.js +290 -0
- package/dist/games/examples/side-scroller-advanced/ui/game-hud.d.ts +21 -0
- package/dist/games/examples/side-scroller-advanced/ui/game-hud.js +265 -0
- package/dist/games/examples/side-scroller-advanced/ui/menu-ui.d.ts +13 -0
- package/dist/games/examples/side-scroller-advanced/ui/menu-ui.js +222 -0
- package/dist/games/examples/vehicle/base-vehicle.d.ts +30 -0
- package/dist/games/examples/vehicle/base-vehicle.js +155 -0
- package/dist/games/examples/vehicle/game.d.ts +11 -0
- package/dist/games/examples/vehicle/game.js +140 -0
- package/dist/games/examples/vehicle/mesh-vehicle.d.ts +19 -0
- package/dist/games/examples/vehicle/mesh-vehicle.js +194 -0
- package/dist/games/examples/vehicle/player.d.ts +9 -0
- package/dist/games/examples/vehicle/player.js +87 -0
- package/dist/games/examples/vehicle/primitive-vehicle.d.ts +21 -0
- package/dist/games/examples/vehicle/primitive-vehicle.js +269 -0
- package/dist/games/examples/vr-game/VRAttachableCube.d.ts +8 -0
- package/dist/games/examples/vr-game/VRAttachableCube.js +41 -0
- package/dist/games/examples/vr-game/VRInteractableCylinder.d.ts +10 -0
- package/dist/games/examples/vr-game/VRInteractableCylinder.js +76 -0
- package/dist/games/examples/vr-game/VRPressableButton.d.ts +24 -0
- package/dist/games/examples/vr-game/VRPressableButton.js +135 -0
- package/dist/games/examples/vr-game/VRProjectileActor.d.ts +19 -0
- package/dist/games/examples/vr-game/VRProjectileActor.js +75 -0
- package/dist/games/examples/vr-game/VRRifleActor.d.ts +16 -0
- package/dist/games/examples/vr-game/VRRifleActor.js +142 -0
- package/dist/games/examples/vr-game/game.d.ts +9 -0
- package/dist/games/examples/vr-game/game.js +56 -0
- package/dist/games/examples/vr-game/index.d.ts +5 -0
- package/dist/games/examples/vr-game/index.js +9 -0
- package/dist/games/examples/vr-game/scene.d.ts +5 -0
- package/dist/games/examples/vr-game/scene.js +83 -0
- package/dist/games/hand-tracking-demo.d.ts +10 -0
- package/dist/games/hand-tracking-demo.js +65 -0
- package/dist/games/index.d.ts +21 -0
- package/dist/games/index.js +22 -0
- package/dist/games/instanced-mesh-demo.d.ts +45 -0
- package/dist/games/instanced-mesh-demo.js +416 -0
- package/dist/games/manifold-demo.d.ts +6 -0
- package/dist/games/manifold-demo.js +44 -0
- package/dist/games/navigation-demo.d.ts +30 -0
- package/dist/games/navigation-demo.js +336 -0
- package/dist/games/navmesh-primitives-demo.d.ts +167 -0
- package/dist/games/navmesh-primitives-demo.js +1105 -0
- package/dist/games/performance-test-demo.d.ts +13 -0
- package/dist/games/performance-test-demo.js +214 -0
- package/dist/games/postprocess-demo.d.ts +46 -0
- package/dist/games/postprocess-demo.js +829 -0
- package/dist/games/ragdoll-demo-simple.d.ts +34 -0
- package/dist/games/ragdoll-demo-simple.js +152 -0
- package/dist/games/ragdoll-demo.d.ts +30 -0
- package/dist/games/ragdoll-demo.js +258 -0
- package/dist/games/swipe-tap-demo.d.ts +24 -0
- package/dist/games/swipe-tap-demo.js +238 -0
- package/dist/games/tween-demo.d.ts +22 -0
- package/dist/games/tween-demo.js +122 -0
- package/dist/games/ui-demo.d.ts +75 -0
- package/dist/games/ui-demo.js +1054 -0
- package/dist/games/vfx-demo.d.ts +48 -0
- package/dist/games/vfx-demo.js +821 -0
- package/dist/games/vfx-wawa-demo.d.ts +7 -0
- package/dist/games/vfx-wawa-demo.js +471 -0
- package/dist/games/vr-ui-demo-minimal.d.ts +15 -0
- package/dist/games/vr-ui-demo-minimal.js +141 -0
- package/dist/games/vr-ui-demo.d.ts +32 -0
- package/dist/games/vr-ui-demo.js +871 -0
- package/dist/genesys.min.mjs +7035 -0
- package/dist/launcher.d.ts +1 -0
- package/dist/launcher.js +778 -0
- package/dist/scripts/build-browser-bundle.d.ts +5 -0
- package/dist/scripts/build-browser-bundle.js +69 -0
- package/dist/scripts/check-asset-path.d.ts +1 -0
- package/dist/scripts/check-asset-path.js +146 -0
- package/dist/scripts/dump-templates.d.ts +1 -0
- package/dist/scripts/dump-templates.js +16 -0
- package/dist/scripts/generate-dependencies.d.ts +1 -0
- package/dist/scripts/generate-dependencies.js +110 -0
- package/dist/scripts/generate-prefabs.d.ts +1 -0
- package/dist/scripts/generate-prefabs.js +106 -0
- package/dist/scripts/load-save-world.d.ts +2 -0
- package/dist/scripts/load-save-world.js +35 -0
- package/dist/scripts/loc.d.ts +1 -0
- package/dist/scripts/loc.js +80 -0
- package/dist/scripts/optimize-glb-wrapper.d.ts +1 -0
- package/dist/scripts/optimize-glb-wrapper.js +26 -0
- package/dist/scripts/optimize-glb.d.ts +41 -0
- package/dist/scripts/optimize-glb.js +296 -0
- package/dist/scripts/session-server.d.ts +117 -0
- package/dist/scripts/session-server.js +782 -0
- package/dist/scripts/test-world-loading.d.ts +14 -0
- package/dist/scripts/test-world-loading.js +19 -0
- package/dist/src/actors/Actor.d.ts +510 -0
- package/dist/src/actors/Actor.js +1180 -0
- package/dist/src/actors/GLTFMeshActor.d.ts +34 -0
- package/dist/src/actors/GLTFMeshActor.js +102 -0
- package/dist/src/actors/GlobalParticleManager.d.ts +154 -0
- package/dist/src/actors/GlobalParticleManager.js +365 -0
- package/dist/src/actors/Pawn.d.ts +191 -0
- package/dist/src/actors/Pawn.js +384 -0
- package/dist/src/actors/PlayerController.d.ts +177 -0
- package/dist/src/actors/PlayerController.js +763 -0
- package/dist/src/actors/PlayerStart.d.ts +8 -0
- package/dist/src/actors/PlayerStart.js +48 -0
- package/dist/src/actors/Projectile.d.ts +50 -0
- package/dist/src/actors/Projectile.js +157 -0
- package/dist/src/actors/RagdollTestActor.d.ts +31 -0
- package/dist/src/actors/RagdollTestActor.js +153 -0
- package/dist/src/actors/ThirdPersonCharacterPawn.d.ts +27 -0
- package/dist/src/actors/ThirdPersonCharacterPawn.js +149 -0
- package/dist/src/actors/index.d.ts +20 -0
- package/dist/src/actors/index.js +21 -0
- package/dist/src/animation/AnimationClipCache.d.ts +41 -0
- package/dist/src/animation/AnimationClipCache.js +97 -0
- package/dist/src/animation/AnimationRetargeting.d.ts +100 -0
- package/dist/src/animation/AnimationRetargeting.js +455 -0
- package/dist/src/animation/SkeletonProfile.d.ts +112 -0
- package/dist/src/animation/SkeletonProfile.js +84 -0
- package/dist/src/animation/index.d.ts +14 -0
- package/dist/src/animation/index.js +15 -0
- package/dist/src/animation/retargeting.d.ts +142 -0
- package/dist/src/animation/retargeting.js +834 -0
- package/dist/src/components/CharacterStatsComponent.d.ts +89 -0
- package/dist/src/components/CharacterStatsComponent.js +207 -0
- package/dist/src/components/CollisionShapeComponent.d.ts +102 -0
- package/dist/src/components/CollisionShapeComponent.js +232 -0
- package/dist/src/components/Component.d.ts +82 -0
- package/dist/src/components/Component.js +2 -0
- package/dist/src/components/FollowComponent.d.ts +67 -0
- package/dist/src/components/FollowComponent.js +128 -0
- package/dist/src/components/PrimitiveComponent.d.ts +183 -0
- package/dist/src/components/PrimitiveComponent.js +368 -0
- package/dist/src/components/ResetPositionComponent.d.ts +52 -0
- package/dist/src/components/ResetPositionComponent.js +161 -0
- package/dist/src/components/SceneComponent.d.ts +225 -0
- package/dist/src/components/SceneComponent.js +621 -0
- package/dist/src/components/audio/SoundComponent.d.ts +109 -0
- package/dist/src/components/audio/SoundComponent.js +353 -0
- package/dist/src/components/audio/index.d.ts +11 -0
- package/dist/src/components/audio/index.js +12 -0
- package/dist/src/components/csg/CSGCombiner.d.ts +87 -0
- package/dist/src/components/csg/CSGCombiner.js +240 -0
- package/dist/src/components/csg/CSGShapes.d.ts +173 -0
- package/dist/src/components/csg/CSGShapes.js +326 -0
- package/dist/src/components/csg/index.d.ts +12 -0
- package/dist/src/components/csg/index.js +13 -0
- package/dist/src/components/gameplay/BaseWeaponComponent.d.ts +175 -0
- package/dist/src/components/gameplay/BaseWeaponComponent.js +496 -0
- package/dist/src/components/gameplay/DoorComponent.d.ts +236 -0
- package/dist/src/components/gameplay/DoorComponent.js +928 -0
- package/dist/src/components/gameplay/Equipment.d.ts +22 -0
- package/dist/src/components/gameplay/Equipment.js +9 -0
- package/dist/src/components/gameplay/GenericEquipment.d.ts +37 -0
- package/dist/src/components/gameplay/GenericEquipment.js +90 -0
- package/dist/src/components/gameplay/InstantHitWeaponComponent.d.ts +96 -0
- package/dist/src/components/gameplay/InstantHitWeaponComponent.js +194 -0
- package/dist/src/components/gameplay/PickupComponent.d.ts +130 -0
- package/dist/src/components/gameplay/PickupComponent.js +429 -0
- package/dist/src/components/gameplay/ProjectileWeaponComponent.d.ts +49 -0
- package/dist/src/components/gameplay/ProjectileWeaponComponent.js +93 -0
- package/dist/src/components/gameplay/ShotgunComponent.d.ts +18 -0
- package/dist/src/components/gameplay/ShotgunComponent.js +216 -0
- package/dist/src/components/gameplay/SwitchComponent.d.ts +152 -0
- package/dist/src/components/gameplay/SwitchComponent.js +481 -0
- package/dist/src/components/gameplay/TriggerZoneComponent.d.ts +157 -0
- package/dist/src/components/gameplay/TriggerZoneComponent.js +312 -0
- package/dist/src/components/gameplay/index.d.ts +20 -0
- package/dist/src/components/gameplay/index.js +21 -0
- package/dist/src/components/index.d.ts +16 -0
- package/dist/src/components/index.js +18 -0
- package/dist/src/components/lights/AmbientLightComponent.d.ts +37 -0
- package/dist/src/components/lights/AmbientLightComponent.js +68 -0
- package/dist/src/components/lights/DirectionalLightComponent.d.ts +77 -0
- package/dist/src/components/lights/DirectionalLightComponent.js +146 -0
- package/dist/src/components/lights/HemisphereLightComponent.d.ts +67 -0
- package/dist/src/components/lights/HemisphereLightComponent.js +121 -0
- package/dist/src/components/lights/LightComponent.d.ts +145 -0
- package/dist/src/components/lights/LightComponent.js +315 -0
- package/dist/src/components/lights/PointLightComponent.d.ts +61 -0
- package/dist/src/components/lights/PointLightComponent.js +103 -0
- package/dist/src/components/lights/RectAreaLightComponent.d.ts +78 -0
- package/dist/src/components/lights/RectAreaLightComponent.js +135 -0
- package/dist/src/components/lights/SpotLightComponent.d.ts +100 -0
- package/dist/src/components/lights/SpotLightComponent.js +167 -0
- package/dist/src/components/lights/index.d.ts +17 -0
- package/dist/src/components/lights/index.js +18 -0
- package/dist/src/components/movement/AerialMovementComponent.d.ts +93 -0
- package/dist/src/components/movement/AerialMovementComponent.js +339 -0
- package/dist/src/components/movement/AirplaneMovementComponent.d.ts +59 -0
- package/dist/src/components/movement/AirplaneMovementComponent.js +215 -0
- package/dist/src/components/movement/BasePawnMovementComponent.d.ts +132 -0
- package/dist/src/components/movement/BasePawnMovementComponent.js +264 -0
- package/dist/src/components/movement/CharacterMovementComponent.d.ts +175 -0
- package/dist/src/components/movement/CharacterMovementComponent.js +448 -0
- package/dist/src/components/movement/DirectionalCharacterMovementComponent.d.ts +17 -0
- package/dist/src/components/movement/DirectionalCharacterMovementComponent.js +82 -0
- package/dist/src/components/movement/NpcMovementComponent.d.ts +232 -0
- package/dist/src/components/movement/NpcMovementComponent.js +890 -0
- package/dist/src/components/movement/PathMovementComponent.d.ts +54 -0
- package/dist/src/components/movement/PathMovementComponent.js +211 -0
- package/dist/src/components/movement/TopDownMovementComponent.d.ts +25 -0
- package/dist/src/components/movement/TopDownMovementComponent.js +79 -0
- package/dist/src/components/movement/TweenMovementComponent.d.ts +59 -0
- package/dist/src/components/movement/TweenMovementComponent.js +362 -0
- package/dist/src/components/movement/VehicleMovementComponent.d.ts +98 -0
- package/dist/src/components/movement/VehicleMovementComponent.js +402 -0
- package/dist/src/components/movement/index.d.ts +19 -0
- package/dist/src/components/movement/index.js +20 -0
- package/dist/src/components/physics/RagdollComponent.d.ts +118 -0
- package/dist/src/components/physics/RagdollComponent.js +671 -0
- package/dist/src/components/visual/AnimationComponent.d.ts +29 -0
- package/dist/src/components/visual/AnimationComponent.js +234 -0
- package/dist/src/components/visual/AnimationStateMachineComponent.d.ts +235 -0
- package/dist/src/components/visual/AnimationStateMachineComponent.js +1048 -0
- package/dist/src/components/visual/BaseInstancedMeshComponent.d.ts +253 -0
- package/dist/src/components/visual/BaseInstancedMeshComponent.js +763 -0
- package/dist/src/components/visual/BillboardComponent.d.ts +26 -0
- package/dist/src/components/visual/BillboardComponent.js +143 -0
- package/dist/src/components/visual/EditorOnlyMeshComponent.d.ts +17 -0
- package/dist/src/components/visual/EditorOnlyMeshComponent.js +53 -0
- package/dist/src/components/visual/FogComponent.d.ts +32 -0
- package/dist/src/components/visual/FogComponent.js +131 -0
- package/dist/src/components/visual/GLTFMeshComponent.d.ts +138 -0
- package/dist/src/components/visual/GLTFMeshComponent.js +411 -0
- package/dist/src/components/visual/InstancedGltfMeshComponent.d.ts +75 -0
- package/dist/src/components/visual/InstancedGltfMeshComponent.js +217 -0
- package/dist/src/components/visual/InstancedMeshComponent.d.ts +57 -0
- package/dist/src/components/visual/InstancedMeshComponent.js +114 -0
- package/dist/src/components/visual/MeshComponent.d.ts +71 -0
- package/dist/src/components/visual/MeshComponent.js +208 -0
- package/dist/src/components/visual/ParticleEmitterComponent.d.ts +145 -0
- package/dist/src/components/visual/ParticleEmitterComponent.js +569 -0
- package/dist/src/components/visual/SkyboxComponent.d.ts +135 -0
- package/dist/src/components/visual/SkyboxComponent.js +342 -0
- package/dist/src/components/visual/TerrainMeshComponent.d.ts +119 -0
- package/dist/src/components/visual/TerrainMeshComponent.js +309 -0
- package/dist/src/components/visual/UI3DComponent.d.ts +60 -0
- package/dist/src/components/visual/UI3DComponent.js +248 -0
- package/dist/src/components/visual/index.d.ts +23 -0
- package/dist/src/components/visual/index.js +24 -0
- package/dist/src/components/voxel/MagicaVoxelLoader.d.ts +18 -0
- package/dist/src/components/voxel/MagicaVoxelLoader.js +151 -0
- package/dist/src/components/voxel/VoxelMeshComponent.d.ts +66 -0
- package/dist/src/components/voxel/VoxelMeshComponent.js +246 -0
- package/dist/src/components/voxel/index.d.ts +2 -0
- package/dist/src/components/voxel/index.js +3 -0
- package/dist/src/const.d.ts +61 -0
- package/dist/src/const.js +62 -0
- package/dist/src/csg/CSGUtils.d.ts +118 -0
- package/dist/src/csg/CSGUtils.js +805 -0
- package/dist/src/csg/ManifoldWrapper.d.ts +172 -0
- package/dist/src/csg/ManifoldWrapper.js +629 -0
- package/dist/src/csg/index.d.ts +13 -0
- package/dist/src/csg/index.js +14 -0
- package/dist/src/dependencies.d.ts +125 -0
- package/dist/src/dependencies.js +72 -0
- package/dist/src/game/GameBuilder.d.ts +104 -0
- package/dist/src/game/GameBuilder.js +263 -0
- package/dist/src/game/GameLoop.d.ts +204 -0
- package/dist/src/game/GameLoop.js +545 -0
- package/dist/src/game/GameMode.d.ts +58 -0
- package/dist/src/game/GameMode.js +131 -0
- package/dist/src/game/Playable.d.ts +38 -0
- package/dist/src/game/Playable.js +83 -0
- package/dist/src/game/World.d.ts +512 -0
- package/dist/src/game/World.js +1467 -0
- package/dist/src/game/index.d.ts +18 -0
- package/dist/src/game/index.js +19 -0
- package/dist/src/index.d.ts +39 -0
- package/dist/src/index.js +40 -0
- package/dist/src/materials.d.ts +49 -0
- package/dist/src/materials.js +177 -0
- package/dist/src/multiplayer/MovementPrediction.d.ts +28 -0
- package/dist/src/multiplayer/MovementPrediction.js +204 -0
- package/dist/src/multiplayer/NetWorld.d.ts +125 -0
- package/dist/src/multiplayer/NetWorld.js +960 -0
- package/dist/src/multiplayer/implementations/MemorySession.d.ts +18 -0
- package/dist/src/multiplayer/implementations/MemorySession.js +112 -0
- package/dist/src/multiplayer/implementations/WebSocketSession.d.ts +134 -0
- package/dist/src/multiplayer/implementations/WebSocketSession.js +439 -0
- package/dist/src/multiplayer/implementations/index.d.ts +14 -0
- package/dist/src/multiplayer/implementations/index.js +15 -0
- package/dist/src/multiplayer/index.d.ts +16 -0
- package/dist/src/multiplayer/index.js +17 -0
- package/dist/src/multiplayer/interface.d.ts +134 -0
- package/dist/src/multiplayer/interface.js +87 -0
- package/dist/src/navigation/NavigationServer.d.ts +134 -0
- package/dist/src/navigation/NavigationServer.js +47 -0
- package/dist/src/navigation/RecastNavigationServer.d.ts +82 -0
- package/dist/src/navigation/RecastNavigationServer.js +325 -0
- package/dist/src/navigation/index.d.ts +16 -0
- package/dist/src/navigation/index.js +17 -0
- package/dist/src/npc/behavior-tree/BehaviorNode.d.ts +95 -0
- package/dist/src/npc/behavior-tree/BehaviorNode.js +177 -0
- package/dist/src/npc/behavior-tree/BehaviorTreeComponent.d.ts +104 -0
- package/dist/src/npc/behavior-tree/BehaviorTreeComponent.js +341 -0
- package/dist/src/npc/behavior-tree/behaviors/BehaviorAction.d.ts +52 -0
- package/dist/src/npc/behavior-tree/behaviors/BehaviorAction.js +70 -0
- package/dist/src/npc/behavior-tree/behaviors/ConditionEvaluator.d.ts +73 -0
- package/dist/src/npc/behavior-tree/behaviors/ConditionEvaluator.js +116 -0
- package/dist/src/npc/behavior-tree/behaviors/actions/aerial/AerialMoveToTargetAction.d.ts +33 -0
- package/dist/src/npc/behavior-tree/behaviors/actions/aerial/AerialMoveToTargetAction.js +138 -0
- package/dist/src/npc/behavior-tree/behaviors/actions/aerial/AerialSearchAction.d.ts +42 -0
- package/dist/src/npc/behavior-tree/behaviors/actions/aerial/AerialSearchAction.js +170 -0
- package/dist/src/npc/behavior-tree/behaviors/actions/aerial/AerialTrackTargetAction.d.ts +27 -0
- package/dist/src/npc/behavior-tree/behaviors/actions/aerial/AerialTrackTargetAction.js +86 -0
- package/dist/src/npc/behavior-tree/behaviors/actions/aerial/AerialWanderAction.d.ts +50 -0
- package/dist/src/npc/behavior-tree/behaviors/actions/aerial/AerialWanderAction.js +189 -0
- package/dist/src/npc/behavior-tree/behaviors/actions/aerial/index.d.ts +4 -0
- package/dist/src/npc/behavior-tree/behaviors/actions/aerial/index.js +6 -0
- package/dist/src/npc/behavior-tree/behaviors/actions/combat/MeleeAttackAction.d.ts +37 -0
- package/dist/src/npc/behavior-tree/behaviors/actions/combat/MeleeAttackAction.js +172 -0
- package/dist/src/npc/behavior-tree/behaviors/actions/combat/ShootAction.d.ts +35 -0
- package/dist/src/npc/behavior-tree/behaviors/actions/combat/ShootAction.js +173 -0
- package/dist/src/npc/behavior-tree/behaviors/actions/combat/index.d.ts +2 -0
- package/dist/src/npc/behavior-tree/behaviors/actions/combat/index.js +4 -0
- package/dist/src/npc/behavior-tree/behaviors/actions/ground/FleeFromTargetAction.d.ts +34 -0
- package/dist/src/npc/behavior-tree/behaviors/actions/ground/FleeFromTargetAction.js +148 -0
- package/dist/src/npc/behavior-tree/behaviors/actions/ground/FollowActorAction.d.ts +30 -0
- package/dist/src/npc/behavior-tree/behaviors/actions/ground/FollowActorAction.js +129 -0
- package/dist/src/npc/behavior-tree/behaviors/actions/ground/MoveToPositionAction.d.ts +27 -0
- package/dist/src/npc/behavior-tree/behaviors/actions/ground/MoveToPositionAction.js +115 -0
- package/dist/src/npc/behavior-tree/behaviors/actions/ground/SetNextWaypointAction.d.ts +28 -0
- package/dist/src/npc/behavior-tree/behaviors/actions/ground/SetNextWaypointAction.js +120 -0
- package/dist/src/npc/behavior-tree/behaviors/actions/ground/WanderAction.d.ts +35 -0
- package/dist/src/npc/behavior-tree/behaviors/actions/ground/WanderAction.js +172 -0
- package/dist/src/npc/behavior-tree/behaviors/actions/ground/index.d.ts +5 -0
- package/dist/src/npc/behavior-tree/behaviors/actions/ground/index.js +7 -0
- package/dist/src/npc/behavior-tree/behaviors/actions/index.d.ts +4 -0
- package/dist/src/npc/behavior-tree/behaviors/actions/index.js +10 -0
- package/dist/src/npc/behavior-tree/behaviors/actions/utility/CalculateTacticalPositionAction.d.ts +32 -0
- package/dist/src/npc/behavior-tree/behaviors/actions/utility/CalculateTacticalPositionAction.js +123 -0
- package/dist/src/npc/behavior-tree/behaviors/actions/utility/LookAtTargetAction.d.ts +43 -0
- package/dist/src/npc/behavior-tree/behaviors/actions/utility/LookAtTargetAction.js +140 -0
- package/dist/src/npc/behavior-tree/behaviors/actions/utility/WaitAction.d.ts +24 -0
- package/dist/src/npc/behavior-tree/behaviors/actions/utility/WaitAction.js +85 -0
- package/dist/src/npc/behavior-tree/behaviors/actions/utility/index.d.ts +3 -0
- package/dist/src/npc/behavior-tree/behaviors/actions/utility/index.js +5 -0
- package/dist/src/npc/behavior-tree/behaviors/conditions/BlackboardValueCondition.d.ts +40 -0
- package/dist/src/npc/behavior-tree/behaviors/conditions/BlackboardValueCondition.js +133 -0
- package/dist/src/npc/behavior-tree/behaviors/conditions/CanSeeTargetCondition.d.ts +29 -0
- package/dist/src/npc/behavior-tree/behaviors/conditions/CanSeeTargetCondition.js +167 -0
- package/dist/src/npc/behavior-tree/behaviors/conditions/HasLastKnownPositionCondition.d.ts +19 -0
- package/dist/src/npc/behavior-tree/behaviors/conditions/HasLastKnownPositionCondition.js +67 -0
- package/dist/src/npc/behavior-tree/behaviors/conditions/HpAbovePercentCondition.d.ts +25 -0
- package/dist/src/npc/behavior-tree/behaviors/conditions/HpAbovePercentCondition.js +94 -0
- package/dist/src/npc/behavior-tree/behaviors/conditions/IsPlayerNearCondition.d.ts +15 -0
- package/dist/src/npc/behavior-tree/behaviors/conditions/IsPlayerNearCondition.js +51 -0
- package/dist/src/npc/behavior-tree/behaviors/conditions/TargetBelowHpPercentCondition.d.ts +19 -0
- package/dist/src/npc/behavior-tree/behaviors/conditions/TargetBelowHpPercentCondition.js +66 -0
- package/dist/src/npc/behavior-tree/behaviors/conditions/TargetInConeCondition.d.ts +26 -0
- package/dist/src/npc/behavior-tree/behaviors/conditions/TargetInConeCondition.js +111 -0
- package/dist/src/npc/behavior-tree/behaviors/conditions/TimeLimitCondition.d.ts +24 -0
- package/dist/src/npc/behavior-tree/behaviors/conditions/TimeLimitCondition.js +81 -0
- package/dist/src/npc/behavior-tree/behaviors/conditions/index.d.ts +8 -0
- package/dist/src/npc/behavior-tree/behaviors/conditions/index.js +15 -0
- package/dist/src/npc/behavior-tree/behaviors/index.d.ts +4 -0
- package/dist/src/npc/behavior-tree/behaviors/index.js +8 -0
- package/dist/src/npc/behavior-tree/blackboard/Blackboard.d.ts +50 -0
- package/dist/src/npc/behavior-tree/blackboard/Blackboard.js +121 -0
- package/dist/src/npc/behavior-tree/blackboard/BlackboardKey.d.ts +35 -0
- package/dist/src/npc/behavior-tree/blackboard/BlackboardKey.js +66 -0
- package/dist/src/npc/behavior-tree/blackboard/index.d.ts +2 -0
- package/dist/src/npc/behavior-tree/blackboard/index.js +3 -0
- package/dist/src/npc/behavior-tree/index.d.ts +9 -0
- package/dist/src/npc/behavior-tree/index.js +19 -0
- package/dist/src/npc/behavior-tree/loader/BehaviorTreeLoader.d.ts +91 -0
- package/dist/src/npc/behavior-tree/loader/BehaviorTreeLoader.js +240 -0
- package/dist/src/npc/behavior-tree/nodes/CompositeNode.d.ts +46 -0
- package/dist/src/npc/behavior-tree/nodes/CompositeNode.js +93 -0
- package/dist/src/npc/behavior-tree/nodes/LeafNode.d.ts +8 -0
- package/dist/src/npc/behavior-tree/nodes/LeafNode.js +11 -0
- package/dist/src/npc/behavior-tree/nodes/composite/SelectorNode.d.ts +15 -0
- package/dist/src/npc/behavior-tree/nodes/composite/SelectorNode.js +61 -0
- package/dist/src/npc/behavior-tree/nodes/composite/SequenceNode.d.ts +15 -0
- package/dist/src/npc/behavior-tree/nodes/composite/SequenceNode.js +61 -0
- package/dist/src/physics/BasePhysicsEngine.d.ts +389 -0
- package/dist/src/physics/BasePhysicsEngine.js +1227 -0
- package/dist/src/physics/IPhysicsVehicle.d.ts +150 -0
- package/dist/src/physics/IPhysicsVehicle.js +2 -0
- package/dist/src/physics/PhysicsEngine.d.ts +425 -0
- package/dist/src/physics/PhysicsEngine.js +69 -0
- package/dist/src/physics/PhysicsTypes.d.ts +91 -0
- package/dist/src/physics/PhysicsTypes.js +24 -0
- package/dist/src/physics/implementations/RapierDebugRender.d.ts +24 -0
- package/dist/src/physics/implementations/RapierDebugRender.js +66 -0
- package/dist/src/physics/implementations/RapierPhysics.d.ts +122 -0
- package/dist/src/physics/implementations/RapierPhysics.js +1191 -0
- package/dist/src/physics/implementations/RapierVehicle.d.ts +31 -0
- package/dist/src/physics/implementations/RapierVehicle.js +236 -0
- package/dist/src/physics/index.d.ts +16 -0
- package/dist/src/physics/index.js +17 -0
- package/dist/src/render/EdgeOutlineEffect.d.ts +40 -0
- package/dist/src/render/EdgeOutlineEffect.js +389 -0
- package/dist/src/render/PostProcessManager.d.ts +274 -0
- package/dist/src/render/PostProcessManager.js +932 -0
- package/dist/src/render/Renderer.d.ts +84 -0
- package/dist/src/render/Renderer.js +306 -0
- package/dist/src/render/Texture.d.ts +51 -0
- package/dist/src/render/Texture.js +144 -0
- package/dist/src/render/index.d.ts +20 -0
- package/dist/src/render/index.js +21 -0
- package/dist/src/render/lightmapping/LightmapAtlas.d.ts +52 -0
- package/dist/src/render/lightmapping/LightmapAtlas.js +201 -0
- package/dist/src/render/lightmapping/LightmapBaker.d.ts +99 -0
- package/dist/src/render/lightmapping/LightmapBaker.js +239 -0
- package/dist/src/render/lightmapping/LightmapManager.d.ts +148 -0
- package/dist/src/render/lightmapping/LightmapManager.js +630 -0
- package/dist/src/render/lightmapping/LightmapMaterial.d.ts +26 -0
- package/dist/src/render/lightmapping/LightmapMaterial.js +242 -0
- package/dist/src/render/lightmapping/LightmapSerialization.d.ts +379 -0
- package/dist/src/render/lightmapping/LightmapSerialization.js +244 -0
- package/dist/src/render/lightmapping/LightmapSerializer.d.ts +94 -0
- package/dist/src/render/lightmapping/LightmapSerializer.js +223 -0
- package/dist/src/render/lightmapping/MultiLightmapperMaterial.d.ts +41 -0
- package/dist/src/render/lightmapping/MultiLightmapperMaterial.js +424 -0
- package/dist/src/render/lightmapping/index.d.ts +9 -0
- package/dist/src/render/lightmapping/index.js +6 -0
- package/dist/src/render/postprocessing/EffectPassWrapper.d.ts +17 -0
- package/dist/src/render/postprocessing/EffectPassWrapper.js +47 -0
- package/dist/src/render/postprocessing/ObjectOutlineEffect.d.ts +49 -0
- package/dist/src/render/postprocessing/ObjectOutlineEffect.js +364 -0
- package/dist/src/render/postprocessing/index.d.ts +2 -0
- package/dist/src/render/postprocessing/index.js +3 -0
- package/dist/src/runtime/GameRuntime.d.ts +25 -0
- package/dist/src/runtime/GameRuntime.js +131 -0
- package/dist/src/runtime/InjectedDependencies.d.ts +13 -0
- package/dist/src/runtime/InjectedDependencies.js +63 -0
- package/dist/src/runtime/Utils.d.ts +16 -0
- package/dist/src/runtime/Utils.js +113 -0
- package/dist/src/runtime/index.d.ts +4 -0
- package/dist/src/runtime/index.js +5 -0
- package/dist/src/runtime/materials/MatcapShaderMaterial.d.ts +23 -0
- package/dist/src/runtime/materials/MatcapShaderMaterial.js +235 -0
- package/dist/src/runtime/materials/index.d.ts +1 -0
- package/dist/src/runtime/materials/index.js +2 -0
- package/dist/src/scripting/Plugin.d.ts +64 -0
- package/dist/src/scripting/Plugin.js +2 -0
- package/dist/src/scripting/PluginManager.d.ts +40 -0
- package/dist/src/scripting/PluginManager.js +111 -0
- package/dist/src/scripting/index.d.ts +1 -0
- package/dist/src/scripting/index.js +2 -0
- package/dist/src/storage/defaultStorageProvider.d.ts +15 -0
- package/dist/src/storage/defaultStorageProvider.js +73 -0
- package/dist/src/storage/index.d.ts +16 -0
- package/dist/src/storage/index.js +17 -0
- package/dist/src/storage/projectContext.d.ts +80 -0
- package/dist/src/storage/projectContext.js +164 -0
- package/dist/src/storage/storageProvider.d.ts +148 -0
- package/dist/src/storage/storageProvider.js +181 -0
- package/dist/src/systems/ClassRegistry.d.ts +98 -0
- package/dist/src/systems/ClassRegistry.js +478 -0
- package/dist/src/systems/ConsoleManager.d.ts +66 -0
- package/dist/src/systems/ConsoleManager.js +465 -0
- package/dist/src/systems/ConsoleVariableHandler.d.ts +17 -0
- package/dist/src/systems/ConsoleVariableHandler.js +120 -0
- package/dist/src/systems/ConsoleVariableManager.d.ts +128 -0
- package/dist/src/systems/ConsoleVariableManager.js +295 -0
- package/dist/src/systems/InputManager.d.ts +511 -0
- package/dist/src/systems/InputManager.js +1025 -0
- package/dist/src/systems/ObjectNamingSystem.d.ts +9 -0
- package/dist/src/systems/ObjectNamingSystem.js +34 -0
- package/dist/src/systems/Stats.d.ts +36 -0
- package/dist/src/systems/Stats.js +193 -0
- package/dist/src/systems/TimerSystem.d.ts +180 -0
- package/dist/src/systems/TimerSystem.js +292 -0
- package/dist/src/systems/TweenManager.d.ts +57 -0
- package/dist/src/systems/TweenManager.js +107 -0
- package/dist/src/systems/WorldSerialization.d.ts +216 -0
- package/dist/src/systems/WorldSerialization.js +1082 -0
- package/dist/src/systems/collision/CollisionConfig.d.ts +56 -0
- package/dist/src/systems/collision/CollisionConfig.js +249 -0
- package/dist/src/systems/collision/CollisionTypes.d.ts +138 -0
- package/dist/src/systems/collision/CollisionTypes.js +204 -0
- package/dist/src/systems/collision/index.d.ts +15 -0
- package/dist/src/systems/collision/index.js +16 -0
- package/dist/src/systems/index.d.ts +23 -0
- package/dist/src/systems/index.js +24 -0
- package/dist/src/templates/MyActor.d.ts +9 -0
- package/dist/src/templates/MyActor.js +25 -0
- package/dist/src/templates/MySceneComponent.d.ts +9 -0
- package/dist/src/templates/MySceneComponent.js +25 -0
- package/dist/src/ui/LoadingScreen.d.ts +15 -0
- package/dist/src/ui/LoadingScreen.js +103 -0
- package/dist/src/ui/UIElement.d.ts +74 -0
- package/dist/src/ui/UIElement.js +202 -0
- package/dist/src/ui/UILayout.d.ts +126 -0
- package/dist/src/ui/UILayout.js +244 -0
- package/dist/src/ui/UIManager.d.ts +44 -0
- package/dist/src/ui/UIManager.js +148 -0
- package/dist/src/ui/UIResource.d.ts +6 -0
- package/dist/src/ui/UIResource.js +24 -0
- package/dist/src/ui/components/AmmoCounter.d.ts +28 -0
- package/dist/src/ui/components/AmmoCounter.js +125 -0
- package/dist/src/ui/components/BaseUIComponent.d.ts +128 -0
- package/dist/src/ui/components/BaseUIComponent.js +342 -0
- package/dist/src/ui/components/Compass.d.ts +28 -0
- package/dist/src/ui/components/Compass.js +125 -0
- package/dist/src/ui/components/ControlsPanel.d.ts +37 -0
- package/dist/src/ui/components/ControlsPanel.js +47 -0
- package/dist/src/ui/components/Crosshair.d.ts +20 -0
- package/dist/src/ui/components/Crosshair.js +67 -0
- package/dist/src/ui/components/InventoryBar.d.ts +103 -0
- package/dist/src/ui/components/InventoryBar.js +177 -0
- package/dist/src/ui/components/InventoryGrid.d.ts +139 -0
- package/dist/src/ui/components/InventoryGrid.js +407 -0
- package/dist/src/ui/components/Minimap.d.ts +39 -0
- package/dist/src/ui/components/Minimap.js +156 -0
- package/dist/src/ui/components/NumberDisplay.d.ts +51 -0
- package/dist/src/ui/components/NumberDisplay.js +164 -0
- package/dist/src/ui/components/ProgressBar.d.ts +115 -0
- package/dist/src/ui/components/ProgressBar.js +347 -0
- package/dist/src/ui/components/ReloadIndicator.d.ts +29 -0
- package/dist/src/ui/components/ReloadIndicator.js +147 -0
- package/dist/src/ui/components/index.d.ts +11 -0
- package/dist/src/ui/components/index.js +13 -0
- package/dist/src/ui/index.d.ts +21 -0
- package/dist/src/ui/index.js +22 -0
- package/dist/src/ui/ui-loader.d.ts +49 -0
- package/dist/src/ui/ui-loader.js +83 -0
- package/dist/src/utils/Color.d.ts +48 -0
- package/dist/src/utils/Color.js +121 -0
- package/dist/src/utils/Delegate.d.ts +72 -0
- package/dist/src/utils/Delegate.js +102 -0
- package/dist/src/utils/DescriptionHelpers.d.ts +47 -0
- package/dist/src/utils/DescriptionHelpers.js +65 -0
- package/dist/src/utils/EditorClassMeta.d.ts +99 -0
- package/dist/src/utils/EditorClassMeta.js +2 -0
- package/dist/src/utils/GlobalAudioManager.d.ts +141 -0
- package/dist/src/utils/GlobalAudioManager.js +312 -0
- package/dist/src/utils/IAsyncLoadable.d.ts +94 -0
- package/dist/src/utils/IAsyncLoadable.js +52 -0
- package/dist/src/utils/MaterialHelpers.d.ts +67 -0
- package/dist/src/utils/MaterialHelpers.js +278 -0
- package/dist/src/utils/MathHelpers.d.ts +65 -0
- package/dist/src/utils/MathHelpers.js +60 -0
- package/dist/src/utils/NodeJs.d.ts +1 -0
- package/dist/src/utils/NodeJs.js +81 -0
- package/dist/src/utils/Perlin.d.ts +39 -0
- package/dist/src/utils/Perlin.js +380 -0
- package/dist/src/utils/ResourceManager.d.ts +183 -0
- package/dist/src/utils/ResourceManager.js +703 -0
- package/dist/src/utils/SceneGraphUtils.d.ts +26 -0
- package/dist/src/utils/SceneGraphUtils.js +139 -0
- package/dist/src/utils/Spawn.d.ts +27 -0
- package/dist/src/utils/Spawn.js +73 -0
- package/dist/src/utils/ThreeJsExtensions.d.ts +298 -0
- package/dist/src/utils/ThreeJsExtensions.js +817 -0
- package/dist/src/utils/TweenExtensions.d.ts +8 -0
- package/dist/src/utils/TweenExtensions.js +103 -0
- package/dist/src/utils/UserCodeEngine.d.ts +70 -0
- package/dist/src/utils/UserCodeEngine.js +235 -0
- package/dist/src/utils/Utils.d.ts +65 -0
- package/dist/src/utils/Utils.js +296 -0
- package/dist/src/utils/VRButtonUtils.d.ts +21 -0
- package/dist/src/utils/VRButtonUtils.js +88 -0
- package/dist/src/utils/browser-polyfills/module.d.ts +20 -0
- package/dist/src/utils/browser-polyfills/module.js +31 -0
- package/dist/src/utils/browser-polyfills/path.d.ts +69 -0
- package/dist/src/utils/browser-polyfills/path.js +188 -0
- package/dist/src/utils/index.d.ts +29 -0
- package/dist/src/utils/index.js +30 -0
- package/dist/src/utils/serialization/cdo.d.ts +6 -0
- package/dist/src/utils/serialization/cdo.js +74 -0
- package/dist/src/utils/serialization/clsAlias.d.ts +15 -0
- package/dist/src/utils/serialization/clsAlias.js +96 -0
- package/dist/src/utils/serialization/decorator.d.ts +132 -0
- package/dist/src/utils/serialization/decorator.js +66 -0
- package/dist/src/utils/serialization/index.d.ts +7 -0
- package/dist/src/utils/serialization/index.js +8 -0
- package/dist/src/utils/serialization/prefab.d.ts +9 -0
- package/dist/src/utils/serialization/prefab.js +55 -0
- package/dist/src/utils/serialization/prefabManager.d.ts +17 -0
- package/dist/src/utils/serialization/prefabManager.js +84 -0
- package/dist/src/utils/serialization/serializable.d.ts +23 -0
- package/dist/src/utils/serialization/serializable.js +2 -0
- package/dist/src/utils/serialization/serializer.d.ts +126 -0
- package/dist/src/utils/serialization/serializer.js +1032 -0
- package/dist/src/utils/serialization/specialization.d.ts +1 -0
- package/dist/src/utils/serialization/specialization.js +194 -0
- package/dist/src/utils/serialization/specializationUtils.d.ts +27 -0
- package/dist/src/utils/serialization/specializationUtils.js +137 -0
- package/dist/src/vfx/VFXComponent.d.ts +65 -0
- package/dist/src/vfx/VFXComponent.js +202 -0
- package/dist/src/vfx/index.d.ts +11 -0
- package/dist/src/vfx/index.js +11 -0
- package/dist/src/vfx/types.d.ts +146 -0
- package/dist/src/vfx/types.js +146 -0
- package/dist/src/world-commands/common.d.ts +23 -0
- package/dist/src/world-commands/common.js +2 -0
- package/dist/src/world-commands/generate-code.d.ts +3 -0
- package/dist/src/world-commands/generate-code.js +90 -0
- package/dist/src/world-commands/index.d.ts +19 -0
- package/dist/src/world-commands/index.js +20 -0
- package/dist/src/world-commands/place-gltf.d.ts +25 -0
- package/dist/src/world-commands/place-gltf.js +39 -0
- package/dist/src/world-commands/place-prefab.d.ts +25 -0
- package/dist/src/world-commands/place-prefab.js +40 -0
- package/dist/src/world-commands/place-primitive.d.ts +39 -0
- package/dist/src/world-commands/place-primitive.js +100 -0
- package/dist/src/world-commands/remove-actors.d.ts +23 -0
- package/dist/src/world-commands/remove-actors.js +9 -0
- package/dist/src/xr/VRActor.d.ts +46 -0
- package/dist/src/xr/VRActor.js +56 -0
- package/dist/src/xr/VRControllerHandler.d.ts +25 -0
- package/dist/src/xr/VRControllerHandler.js +74 -0
- package/dist/src/xr/VRControllerManager.d.ts +194 -0
- package/dist/src/xr/VRControllerManager.js +539 -0
- package/dist/src/xr/VRDeviceHandler.d.ts +47 -0
- package/dist/src/xr/VRDeviceHandler.js +61 -0
- package/dist/src/xr/VRHandHandler.d.ts +23 -0
- package/dist/src/xr/VRHandHandler.js +161 -0
- package/dist/src/xr/VRInputDevice.d.ts +100 -0
- package/dist/src/xr/VRInputDevice.js +367 -0
- package/dist/src/xr/VRPawn.d.ts +198 -0
- package/dist/src/xr/VRPawn.js +771 -0
- package/dist/src/xr/actor-components/CanvasUIComponent.d.ts +61 -0
- package/dist/src/xr/actor-components/CanvasUIComponent.js +418 -0
- package/dist/src/xr/actor-components/VRBaseComponent.d.ts +15 -0
- package/dist/src/xr/actor-components/VRBaseComponent.js +24 -0
- package/dist/src/xr/actor-components/VRGrabbableComponent.d.ts +31 -0
- package/dist/src/xr/actor-components/VRGrabbableComponent.js +81 -0
- package/dist/src/xr/actor-components/VRInteractableComponent.d.ts +19 -0
- package/dist/src/xr/actor-components/VRInteractableComponent.js +50 -0
- package/dist/src/xr/index.d.ts +17 -0
- package/dist/src/xr/index.js +18 -0
- package/dist/src/xr/pawn-components/VRGrabComponent.d.ts +36 -0
- package/dist/src/xr/pawn-components/VRGrabComponent.js +445 -0
- package/dist/src/xr/pawn-components/VRInteractComponent.d.ts +20 -0
- package/dist/src/xr/pawn-components/VRInteractComponent.js +81 -0
- package/dist/src/xr/pawn-components/VRSnapTurnComponent.d.ts +25 -0
- package/dist/src/xr/pawn-components/VRSnapTurnComponent.js +114 -0
- package/dist/src/xr/pawn-components/VRTeleportComponent.d.ts +42 -0
- package/dist/src/xr/pawn-components/VRTeleportComponent.js +318 -0
- package/dist/src/xr/ui/CanvasColorPicker.d.ts +33 -0
- package/dist/src/xr/ui/CanvasColorPicker.js +188 -0
- package/dist/src/xr/ui/CanvasKeyboard.d.ts +21 -0
- package/dist/src/xr/ui/CanvasKeyboard.js +281 -0
- package/dist/src/xr/ui/CanvasSlider.d.ts +21 -0
- package/dist/src/xr/ui/CanvasSlider.js +112 -0
- package/dist/src/xr/ui/CanvasUI.d.ts +129 -0
- package/dist/src/xr/ui/CanvasUI.js +876 -0
- package/dist/src/xr/ui/index.d.ts +8 -0
- package/dist/src/xr/ui/index.js +9 -0
- package/dist/test/absolute-transform.test.d.ts +1 -0
- package/dist/test/absolute-transform.test.js +796 -0
- package/dist/test/asset-path.test.d.ts +1 -0
- package/dist/test/asset-path.test.js +339 -0
- package/dist/test/component.test.d.ts +1 -0
- package/dist/test/component.test.js +24 -0
- package/dist/test/construction.test.d.ts +1 -0
- package/dist/test/construction.test.js +26 -0
- package/dist/test/default-options-validation.test.d.ts +1 -0
- package/dist/test/default-options-validation.test.js +186 -0
- package/dist/test/metadata.test.d.ts +1 -0
- package/dist/test/metadata.test.js +82 -0
- package/dist/test/nodeStorage.d.ts +19 -0
- package/dist/test/nodeStorage.js +85 -0
- package/dist/test/postprocess-manager.test.d.ts +1 -0
- package/dist/test/postprocess-manager.test.js +77 -0
- package/dist/test/prefab.test.d.ts +1 -0
- package/dist/test/prefab.test.js +903 -0
- package/dist/test/scene-component.test.d.ts +1 -0
- package/dist/test/scene-component.test.js +13 -0
- package/dist/test/scene-graph.test.d.ts +1 -0
- package/dist/test/scene-graph.test.js +163 -0
- package/dist/test/serialization-v1.test.d.ts +15 -0
- package/dist/test/serialization-v1.test.js +1057 -0
- package/dist/test/serialization.test.d.ts +1 -0
- package/dist/test/serialization.test.js +425 -0
- package/dist/test/spawn.test.d.ts +1 -0
- package/dist/test/spawn.test.js +137 -0
- package/dist/test/utils.d.ts +27 -0
- package/dist/test/utils.js +115 -0
- package/docs/agent-instructions.md +49 -0
- package/docs/deprecated/8-guide-user-interface-2.md +600 -0
- package/docs/deprecated/Agents.md +117 -0
- package/docs/deprecated/TELEGRAM_MINIAPP_SUPPORT_PLAN.md +283 -0
- package/docs/deprecated/summary-2.md +101 -0
- package/docs/engine-summary.md +104 -0
- package/docs/guides/0-world-and-gameloop.md +331 -0
- package/docs/guides/1-actors-and-components.md +955 -0
- package/docs/guides/10-camera-system.md +778 -0
- package/docs/guides/11-equipment-and-weapons.md +850 -0
- package/docs/guides/12-threejs-extensions.md +528 -0
- package/docs/guides/13-visual-effects-and-particles.md +530 -0
- package/docs/guides/14-sound-system.md +436 -0
- package/docs/guides/15-global-audio-manager.md +367 -0
- package/docs/guides/15-navigation-and-pathfinding.md +818 -0
- package/docs/guides/16-ragdoll-physics.md +479 -0
- package/docs/guides/17-asset-referencing.md +248 -0
- package/docs/guides/18-lightmapping-system.md +984 -0
- package/docs/guides/19-webxr-virtual-reality.md +367 -0
- package/docs/guides/2-player-inputs-and-controls.md +737 -0
- package/docs/guides/3-physics-and-collisions.md +248 -0
- package/docs/guides/4-visuals-and-rendering.md +946 -0
- package/docs/guides/5-animation.md +310 -0
- package/docs/guides/6-ai-and-behavior-trees.md +1316 -0
- package/docs/guides/7-building-levels.md +211 -0
- package/docs/guides/8-user-interface.md +291 -0
- package/docs/guides/9-multiplayer.md +181 -0
- package/docs/high-level-class-hierarchy.md +218 -0
- package/eslint-rules/constructor-type-consistency.js +251 -0
- package/eslint-rules/default-getter-return-type.js +42 -0
- package/eslint-rules/engine-class-name-consistency.js +62 -0
- package/eslint-rules/no-async-override-mismatch.js +100 -0
- package/eslint-rules/no-default-class-fields.js +66 -0
- package/eslint-rules/no-override-methods.js +158 -0
- package/games/animation-demo.ts +367 -0
- package/games/animation-retarget-demo.ts +553 -0
- package/games/behavior-tree-demo.ts +1774 -0
- package/games/character_animation.ts +194 -0
- package/games/collision-demo.ts +139 -0
- package/games/deprecated/advanced-grid-demo.ts +336 -0
- package/games/deprecated/airplane-demo.ts +156 -0
- package/games/deprecated/character-controller.ts +161 -0
- package/games/deprecated/chase-game.ts +310 -0
- package/games/deprecated/collision-config.ts +317 -0
- package/games/deprecated/door-demo.ts +641 -0
- package/games/deprecated/fps-demo.ts +128 -0
- package/games/deprecated/fps-shotgun-demo.ts +227 -0
- package/games/deprecated/index.ts +25 -0
- package/games/deprecated/lightmapping-demo.ts +1515 -0
- package/games/deprecated/lights-demo.ts +957 -0
- package/games/deprecated/matcap-demo.ts +823 -0
- package/games/deprecated/material-demo-2.ts +582 -0
- package/games/deprecated/material-demo.ts +204 -0
- package/games/deprecated/memory-leak-test.ts +23 -0
- package/games/deprecated/model-stress-test.ts +150 -0
- package/games/deprecated/multiplayer-demo.ts +392 -0
- package/games/deprecated/physics-demo.ts +199 -0
- package/games/deprecated/shadow-demo.ts +435 -0
- package/games/deprecated/shooting-demo.ts +352 -0
- package/games/deprecated/skybox-demo.ts +341 -0
- package/games/deprecated/sound-demo.ts +117 -0
- package/games/deprecated/timer-demo.ts +178 -0
- package/games/deprecated/voxel-demo.ts +50 -0
- package/games/deprecated/world-commands.ts +184 -0
- package/games/deprecated/world-loading.ts +90 -0
- package/games/examples/fps-advanced/const.ts +122 -0
- package/games/examples/fps-advanced/enemies.ts +174 -0
- package/games/examples/fps-advanced/game-mode.ts +347 -0
- package/games/examples/fps-advanced/game.ts +74 -0
- package/games/examples/fps-advanced/pickups.ts +225 -0
- package/games/examples/fps-advanced/player.ts +101 -0
- package/games/examples/fps-advanced/ui/endgame-ui.ts +277 -0
- package/games/examples/fps-advanced/ui/game-hud.ts +211 -0
- package/games/examples/fps-advanced/ui/menu-ui.ts +217 -0
- package/games/examples/fps-advanced/ui/weapon-hud.ts +254 -0
- package/games/examples/fps-advanced/weapons.ts +209 -0
- package/games/examples/index.ts +5 -0
- package/games/examples/plugin-demo/game.ts +175 -0
- package/games/examples/plugin-demo/plugins/dynamic-lighting.ts +146 -0
- package/games/examples/plugin-demo/plugins/instanced-forest.ts +186 -0
- package/games/examples/plugin-demo/plugins/particle-fountain.ts +63 -0
- package/games/examples/plugin-demo/plugins/physics-playground.ts +189 -0
- package/games/examples/plugin-demo/plugins/robot-follower.ts +306 -0
- package/games/examples/plugin-demo/plugins/scatter-models.ts +74 -0
- package/games/examples/plugin-demo/plugins/simple-cube.ts +44 -0
- package/games/examples/plugin-demo/plugins/tic-tac-toe.ts +522 -0
- package/games/examples/plugin-demo/plugins/wobbling-sphere.ts +66 -0
- package/games/examples/side-scroller-advanced/const.ts +88 -0
- package/games/examples/side-scroller-advanced/game-mode.ts +350 -0
- package/games/examples/side-scroller-advanced/game.ts +80 -0
- package/games/examples/side-scroller-advanced/level-generator.ts +384 -0
- package/games/examples/side-scroller-advanced/pickups.ts +132 -0
- package/games/examples/side-scroller-advanced/player.ts +105 -0
- package/games/examples/side-scroller-advanced/ui/endgame-ui.ts +278 -0
- package/games/examples/side-scroller-advanced/ui/game-hud.ts +238 -0
- package/games/examples/side-scroller-advanced/ui/menu-ui.ts +215 -0
- package/games/examples/vehicle/base-vehicle.ts +159 -0
- package/games/examples/vehicle/game.ts +154 -0
- package/games/examples/vehicle/mesh-vehicle.ts +191 -0
- package/games/examples/vehicle/player.ts +86 -0
- package/games/examples/vehicle/primitive-vehicle.ts +266 -0
- package/games/examples/vr-game/VRAttachableCube.ts +39 -0
- package/games/examples/vr-game/VRInteractableCylinder.ts +83 -0
- package/games/examples/vr-game/VRPressableButton.ts +113 -0
- package/games/examples/vr-game/VRProjectileActor.ts +69 -0
- package/games/examples/vr-game/VRRifleActor.ts +138 -0
- package/games/examples/vr-game/game.ts +69 -0
- package/games/examples/vr-game/index.ts +9 -0
- package/games/examples/vr-game/scene.ts +99 -0
- package/games/hand-tracking-demo.ts +71 -0
- package/games/index.ts +21 -0
- package/games/instanced-mesh-demo.ts +429 -0
- package/games/manifold-demo.ts +52 -0
- package/games/navigation-demo.ts +351 -0
- package/games/navmesh-primitives-demo.ts +1252 -0
- package/games/performance-test-demo.ts +237 -0
- package/games/postprocess-demo.ts +867 -0
- package/games/ragdoll-demo-simple.ts +163 -0
- package/games/ragdoll-demo.ts +272 -0
- package/games/swipe-tap-demo.ts +228 -0
- package/games/tween-demo.ts +125 -0
- package/games/ui-demo.ts +1058 -0
- package/games/vfx-demo.ts +922 -0
- package/games/vfx-wawa-demo.ts +540 -0
- package/games/vr-ui-demo-minimal.ts +156 -0
- package/games/vr-ui-demo.ts +972 -0
- package/package.json +104 -0
- package/scripts/build-browser-bundle.ts +75 -0
- package/scripts/check-asset-path.ts +166 -0
- package/scripts/dump-templates.ts +21 -0
- package/scripts/generate-dependencies.ts +145 -0
- package/scripts/generate-prefabs.ts +120 -0
- package/scripts/load-save-world.ts +44 -0
- package/scripts/loc.ts +112 -0
- package/scripts/optimize-glb-wrapper.ts +28 -0
- package/scripts/optimize-glb.ts +352 -0
- package/scripts/session-server.ts +861 -0
- package/scripts/test-world-loading.ts +23 -0
- package/src/actors/Actor.ts +1183 -0
- package/src/actors/GLTFMeshActor.ts +107 -0
- package/src/actors/GlobalParticleManager.ts +460 -0
- package/src/actors/Pawn.ts +370 -0
- package/src/actors/PlayerController.ts +646 -0
- package/src/actors/PlayerStart.ts +47 -0
- package/src/actors/Projectile.ts +179 -0
- package/src/actors/RagdollTestActor.ts +153 -0
- package/src/actors/ThirdPersonCharacterPawn.ts +139 -0
- package/src/actors/index.ts +21 -0
- package/src/animation/AnimationClipCache.ts +86 -0
- package/src/animation/AnimationRetargeting.ts +566 -0
- package/src/animation/SkeletonProfile.ts +137 -0
- package/src/animation/index.ts +14 -0
- package/src/animation/retargeting.ts +866 -0
- package/src/components/CharacterStatsComponent.ts +199 -0
- package/src/components/CollisionShapeComponent.ts +256 -0
- package/src/components/Component.ts +111 -0
- package/src/components/FollowComponent.ts +149 -0
- package/src/components/PrimitiveComponent.ts +368 -0
- package/src/components/ResetPositionComponent.ts +175 -0
- package/src/components/SceneComponent.ts +628 -0
- package/src/components/audio/SoundComponent.ts +385 -0
- package/src/components/audio/index.ts +11 -0
- package/src/components/csg/CSGCombiner.ts +268 -0
- package/src/components/csg/CSGShapes.ts +344 -0
- package/src/components/csg/index.ts +12 -0
- package/src/components/gameplay/BaseWeaponComponent.ts +597 -0
- package/src/components/gameplay/DoorComponent.ts +930 -0
- package/src/components/gameplay/Equipment.ts +30 -0
- package/src/components/gameplay/GenericEquipment.ts +96 -0
- package/src/components/gameplay/InstantHitWeaponComponent.ts +248 -0
- package/src/components/gameplay/PickupComponent.ts +473 -0
- package/src/components/gameplay/ProjectileWeaponComponent.ts +114 -0
- package/src/components/gameplay/ShotgunComponent.ts +220 -0
- package/src/components/gameplay/SwitchComponent.ts +466 -0
- package/src/components/gameplay/TriggerZoneComponent.ts +346 -0
- package/src/components/gameplay/index.ts +20 -0
- package/src/components/index.ts +19 -0
- package/src/components/lights/AmbientLightComponent.ts +72 -0
- package/src/components/lights/DirectionalLightComponent.ts +163 -0
- package/src/components/lights/HemisphereLightComponent.ts +132 -0
- package/src/components/lights/LightComponent.ts +351 -0
- package/src/components/lights/PointLightComponent.ts +115 -0
- package/src/components/lights/RectAreaLightComponent.ts +151 -0
- package/src/components/lights/SpotLightComponent.ts +193 -0
- package/src/components/lights/index.ts +17 -0
- package/src/components/movement/AerialMovementComponent.ts +348 -0
- package/src/components/movement/AirplaneMovementComponent.ts +236 -0
- package/src/components/movement/BasePawnMovementComponent.ts +297 -0
- package/src/components/movement/CharacterMovementComponent.ts +446 -0
- package/src/components/movement/DirectionalCharacterMovementComponent.ts +79 -0
- package/src/components/movement/NpcMovementComponent.ts +930 -0
- package/src/components/movement/PathMovementComponent.ts +190 -0
- package/src/components/movement/TopDownMovementComponent.ts +88 -0
- package/src/components/movement/TweenMovementComponent.ts +386 -0
- package/src/components/movement/VehicleMovementComponent.ts +469 -0
- package/src/components/movement/index.ts +19 -0
- package/src/components/physics/RagdollComponent.ts +730 -0
- package/src/components/visual/AnimationComponent.ts +208 -0
- package/src/components/visual/AnimationStateMachineComponent.ts +1079 -0
- package/src/components/visual/BaseInstancedMeshComponent.ts +904 -0
- package/src/components/visual/BillboardComponent.ts +127 -0
- package/src/components/visual/EditorOnlyMeshComponent.ts +54 -0
- package/src/components/visual/FogComponent.ts +131 -0
- package/src/components/visual/GLTFMeshComponent.ts +444 -0
- package/src/components/visual/InstancedGltfMeshComponent.ts +215 -0
- package/src/components/visual/InstancedMeshComponent.ts +118 -0
- package/src/components/visual/MeshComponent.ts +224 -0
- package/src/components/visual/ParticleEmitterComponent.ts +628 -0
- package/src/components/visual/SkyboxComponent.ts +381 -0
- package/src/components/visual/TerrainMeshComponent.ts +346 -0
- package/src/components/visual/UI3DComponent.ts +264 -0
- package/src/components/visual/index.ts +23 -0
- package/src/components/voxel/MagicaVoxelLoader.ts +184 -0
- package/src/components/voxel/VoxelMeshComponent.ts +274 -0
- package/src/components/voxel/index.ts +3 -0
- package/src/const.ts +68 -0
- package/src/csg/CSGUtils.ts +771 -0
- package/src/csg/ManifoldWrapper.ts +704 -0
- package/src/csg/index.ts +13 -0
- package/src/dependencies.ts +76 -0
- package/src/game/GameBuilder.ts +280 -0
- package/src/game/GameLoop.ts +614 -0
- package/src/game/GameMode.ts +127 -0
- package/src/game/Playable.ts +84 -0
- package/src/game/World.ts +1430 -0
- package/src/game/index.ts +18 -0
- package/src/global.d.ts +11 -0
- package/src/index.ts +39 -0
- package/src/materials.ts +181 -0
- package/src/multiplayer/MovementPrediction.ts +202 -0
- package/src/multiplayer/NetWorld.ts +920 -0
- package/src/multiplayer/README.md +349 -0
- package/src/multiplayer/implementations/MemorySession.ts +112 -0
- package/src/multiplayer/implementations/WebSocketSession.ts +468 -0
- package/src/multiplayer/implementations/index.ts +14 -0
- package/src/multiplayer/index.ts +16 -0
- package/src/multiplayer/interface.ts +174 -0
- package/src/navigation/NavigationServer.ts +170 -0
- package/src/navigation/RecastNavigationServer.ts +370 -0
- package/src/navigation/index.ts +17 -0
- package/src/npc/behavior-tree/BehaviorNode.ts +191 -0
- package/src/npc/behavior-tree/BehaviorTreeComponent.ts +351 -0
- package/src/npc/behavior-tree/behaviors/BehaviorAction.ts +97 -0
- package/src/npc/behavior-tree/behaviors/ConditionEvaluator.ts +128 -0
- package/src/npc/behavior-tree/behaviors/actions/aerial/AerialMoveToTargetAction.ts +128 -0
- package/src/npc/behavior-tree/behaviors/actions/aerial/AerialSearchAction.ts +159 -0
- package/src/npc/behavior-tree/behaviors/actions/aerial/AerialTrackTargetAction.ts +76 -0
- package/src/npc/behavior-tree/behaviors/actions/aerial/AerialWanderAction.ts +160 -0
- package/src/npc/behavior-tree/behaviors/actions/aerial/index.ts +5 -0
- package/src/npc/behavior-tree/behaviors/actions/combat/MeleeAttackAction.ts +151 -0
- package/src/npc/behavior-tree/behaviors/actions/combat/ShootAction.ts +158 -0
- package/src/npc/behavior-tree/behaviors/actions/combat/index.ts +3 -0
- package/src/npc/behavior-tree/behaviors/actions/ground/FleeFromTargetAction.ts +157 -0
- package/src/npc/behavior-tree/behaviors/actions/ground/FollowActorAction.ts +131 -0
- package/src/npc/behavior-tree/behaviors/actions/ground/MoveToPositionAction.ts +99 -0
- package/src/npc/behavior-tree/behaviors/actions/ground/SetNextWaypointAction.ts +114 -0
- package/src/npc/behavior-tree/behaviors/actions/ground/WanderAction.ts +146 -0
- package/src/npc/behavior-tree/behaviors/actions/ground/index.ts +6 -0
- package/src/npc/behavior-tree/behaviors/actions/index.ts +13 -0
- package/src/npc/behavior-tree/behaviors/actions/utility/CalculateTacticalPositionAction.ts +117 -0
- package/src/npc/behavior-tree/behaviors/actions/utility/LookAtTargetAction.ts +136 -0
- package/src/npc/behavior-tree/behaviors/actions/utility/WaitAction.ts +70 -0
- package/src/npc/behavior-tree/behaviors/actions/utility/index.ts +4 -0
- package/src/npc/behavior-tree/behaviors/conditions/BlackboardValueCondition.ts +144 -0
- package/src/npc/behavior-tree/behaviors/conditions/CanSeeTargetCondition.ts +171 -0
- package/src/npc/behavior-tree/behaviors/conditions/HasLastKnownPositionCondition.ts +63 -0
- package/src/npc/behavior-tree/behaviors/conditions/HpAbovePercentCondition.ts +83 -0
- package/src/npc/behavior-tree/behaviors/conditions/IsPlayerNearCondition.ts +49 -0
- package/src/npc/behavior-tree/behaviors/conditions/TargetBelowHpPercentCondition.ts +61 -0
- package/src/npc/behavior-tree/behaviors/conditions/TargetInConeCondition.ts +106 -0
- package/src/npc/behavior-tree/behaviors/conditions/TimeLimitCondition.ts +65 -0
- package/src/npc/behavior-tree/behaviors/conditions/index.ts +19 -0
- package/src/npc/behavior-tree/behaviors/index.ts +9 -0
- package/src/npc/behavior-tree/blackboard/Blackboard.ts +127 -0
- package/src/npc/behavior-tree/blackboard/BlackboardKey.ts +59 -0
- package/src/npc/behavior-tree/blackboard/index.ts +2 -0
- package/src/npc/behavior-tree/index.ts +27 -0
- package/src/npc/behavior-tree/loader/BehaviorTreeLoader.ts +296 -0
- package/src/npc/behavior-tree/nodes/CompositeNode.ts +100 -0
- package/src/npc/behavior-tree/nodes/LeafNode.ts +11 -0
- package/src/npc/behavior-tree/nodes/composite/SelectorNode.ts +56 -0
- package/src/npc/behavior-tree/nodes/composite/SequenceNode.ts +56 -0
- package/src/physics/BasePhysicsEngine.ts +1486 -0
- package/src/physics/IPhysicsVehicle.ts +162 -0
- package/src/physics/PhysicsEngine.ts +517 -0
- package/src/physics/PhysicsTypes.ts +116 -0
- package/src/physics/implementations/RapierDebugRender.ts +55 -0
- package/src/physics/implementations/RapierPhysics.ts +1419 -0
- package/src/physics/implementations/RapierVehicle.ts +267 -0
- package/src/physics/index.ts +16 -0
- package/src/render/EdgeOutlineEffect.ts +365 -0
- package/src/render/PostProcessManager.ts +1025 -0
- package/src/render/Renderer.ts +310 -0
- package/src/render/Texture.ts +140 -0
- package/src/render/index.ts +22 -0
- package/src/render/lightmapping/LightmapAtlas.ts +248 -0
- package/src/render/lightmapping/LightmapBaker.ts +333 -0
- package/src/render/lightmapping/LightmapManager.ts +752 -0
- package/src/render/lightmapping/LightmapMaterial.ts +283 -0
- package/src/render/lightmapping/LightmapSerialization.ts +336 -0
- package/src/render/lightmapping/LightmapSerializer.ts +309 -0
- package/src/render/lightmapping/MultiLightmapperMaterial.ts +484 -0
- package/src/render/lightmapping/index.ts +18 -0
- package/src/render/postprocessing/EffectPassWrapper.ts +47 -0
- package/src/render/postprocessing/ObjectOutlineEffect.ts +356 -0
- package/src/render/postprocessing/index.ts +2 -0
- package/src/runtime/GameRuntime.ts +153 -0
- package/src/runtime/InjectedDependencies.ts +70 -0
- package/src/runtime/Utils.ts +146 -0
- package/src/runtime/index.ts +4 -0
- package/src/runtime/materials/MatcapShaderMaterial.ts +242 -0
- package/src/runtime/materials/index.ts +1 -0
- package/src/scripting/Plugin.ts +67 -0
- package/src/scripting/PluginManager.ts +99 -0
- package/src/scripting/index.ts +1 -0
- package/src/storage/defaultStorageProvider.ts +95 -0
- package/src/storage/index.ts +16 -0
- package/src/storage/projectContext.ts +176 -0
- package/src/storage/storageProvider.ts +271 -0
- package/src/systems/ClassRegistry.ts +484 -0
- package/src/systems/ConsoleManager.ts +484 -0
- package/src/systems/ConsoleVariableHandler.ts +105 -0
- package/src/systems/ConsoleVariableManager.ts +288 -0
- package/src/systems/InputManager.ts +1255 -0
- package/src/systems/ObjectNamingSystem.ts +30 -0
- package/src/systems/Stats.ts +178 -0
- package/src/systems/TimerSystem.ts +353 -0
- package/src/systems/TweenManager.ts +107 -0
- package/src/systems/WorldSerialization.ts +1211 -0
- package/src/systems/collision/CollisionConfig.ts +281 -0
- package/src/systems/collision/CollisionTypes.ts +185 -0
- package/src/systems/collision/index.ts +15 -0
- package/src/systems/index.ts +23 -0
- package/src/templates/MyActor.ts +29 -0
- package/src/templates/MySceneComponent.ts +29 -0
- package/src/templates/README.md +1 -0
- package/src/types/rapier-es.d.ts +16 -0
- package/src/types/stats.js.d.ts +22 -0
- package/src/ui/LoadingScreen.ts +110 -0
- package/src/ui/UIElement.ts +224 -0
- package/src/ui/UILayout.ts +269 -0
- package/src/ui/UIManager.ts +161 -0
- package/src/ui/UIResource.ts +20 -0
- package/src/ui/components/AmmoCounter.ts +126 -0
- package/src/ui/components/BaseUIComponent.md +296 -0
- package/src/ui/components/BaseUIComponent.ts +390 -0
- package/src/ui/components/Compass.ts +144 -0
- package/src/ui/components/ControlsPanel.ts +62 -0
- package/src/ui/components/Crosshair.ts +76 -0
- package/src/ui/components/InventoryBar.ts +224 -0
- package/src/ui/components/InventoryGrid.ts +471 -0
- package/src/ui/components/Minimap.ts +181 -0
- package/src/ui/components/NumberDisplay.ts +198 -0
- package/src/ui/components/ProgressBar.ts +403 -0
- package/src/ui/components/ReloadIndicator.ts +159 -0
- package/src/ui/components/index.ts +12 -0
- package/src/ui/index.ts +21 -0
- package/src/ui/ui-loader.ts +87 -0
- package/src/utils/Color.ts +51 -0
- package/src/utils/Delegate.ts +112 -0
- package/src/utils/DescriptionHelpers.ts +93 -0
- package/src/utils/EditorClassMeta.ts +91 -0
- package/src/utils/GlobalAudioManager.ts +370 -0
- package/src/utils/IAsyncLoadable.ts +122 -0
- package/src/utils/MaterialHelpers.ts +321 -0
- package/src/utils/MathHelpers.ts +79 -0
- package/src/utils/NodeJs.ts +79 -0
- package/src/utils/Perlin.ts +346 -0
- package/src/utils/ResourceManager.ts +716 -0
- package/src/utils/SceneGraphUtils.ts +173 -0
- package/src/utils/Spawn.ts +93 -0
- package/src/utils/ThreeJsExtensions.ts +1200 -0
- package/src/utils/TweenExtensions.ts +124 -0
- package/src/utils/UserCodeEngine.ts +243 -0
- package/src/utils/Utils.ts +328 -0
- package/src/utils/VRButtonUtils.ts +125 -0
- package/src/utils/browser-polyfills/module.ts +36 -0
- package/src/utils/browser-polyfills/path.ts +232 -0
- package/src/utils/index.ts +29 -0
- package/src/utils/serialization/cdo.ts +87 -0
- package/src/utils/serialization/clsAlias.ts +92 -0
- package/src/utils/serialization/decorator.ts +176 -0
- package/src/utils/serialization/index.ts +7 -0
- package/src/utils/serialization/prefab.ts +78 -0
- package/src/utils/serialization/prefabManager.ts +88 -0
- package/src/utils/serialization/serializable.ts +28 -0
- package/src/utils/serialization/serializer.ts +1111 -0
- package/src/utils/serialization/specialization.ts +224 -0
- package/src/utils/serialization/specializationUtils.ts +185 -0
- package/src/vfx/VFXComponent.ts +206 -0
- package/src/vfx/index.ts +17 -0
- package/src/vfx/types.ts +287 -0
- package/src/vfx/wawa-vfx-reference.md +399 -0
- package/src/world-commands/common.ts +25 -0
- package/src/world-commands/generate-code.ts +99 -0
- package/src/world-commands/index.ts +19 -0
- package/src/world-commands/place-gltf.ts +63 -0
- package/src/world-commands/place-prefab.ts +62 -0
- package/src/world-commands/place-primitive.ts +128 -0
- package/src/world-commands/remove-actors.ts +32 -0
- package/src/xr/VRActor.ts +71 -0
- package/src/xr/VRControllerHandler.ts +87 -0
- package/src/xr/VRControllerManager.ts +559 -0
- package/src/xr/VRDeviceHandler.ts +77 -0
- package/src/xr/VRHandHandler.ts +166 -0
- package/src/xr/VRInputDevice.ts +374 -0
- package/src/xr/VRPawn.ts +815 -0
- package/src/xr/actor-components/CanvasUIComponent.ts +425 -0
- package/src/xr/actor-components/VRBaseComponent.ts +26 -0
- package/src/xr/actor-components/VRGrabbableComponent.ts +73 -0
- package/src/xr/actor-components/VRInteractableComponent.ts +43 -0
- package/src/xr/index.ts +17 -0
- package/src/xr/pawn-components/VRGrabComponent.ts +435 -0
- package/src/xr/pawn-components/VRInteractComponent.ts +77 -0
- package/src/xr/pawn-components/VRSnapTurnComponent.ts +103 -0
- package/src/xr/pawn-components/VRTeleportComponent.ts +284 -0
- package/src/xr/ui/CanvasColorPicker.ts +172 -0
- package/src/xr/ui/CanvasKeyboard.ts +283 -0
- package/src/xr/ui/CanvasSlider.ts +83 -0
- package/src/xr/ui/CanvasUI.ts +879 -0
- 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
|
+
}
|