@hypersoniclabs/helix-cli 0.1.7 → 0.1.23
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 +627 -6
- package/assets/bridge/metahuman-eye-baked.png +0 -0
- package/assets/item-def-sounds/Common/A_DryShot.ogg +0 -0
- package/assets/item-def-sounds/Common/A_LMG_CloseCoverA.ogg +0 -0
- package/assets/item-def-sounds/Common/A_LMG_CloseCoverB.ogg +0 -0
- package/assets/item-def-sounds/Common/A_LMG_InsertMag.ogg +0 -0
- package/assets/item-def-sounds/Common/A_LMG_RemoveMag.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Pistol_InsertMag_001.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Pistol_InsertMag_002.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Pistol_InsertMag_003.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Pistol_RemoveMag_001.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Pistol_RemoveMag_002.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Pistol_RemoveMag_003.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Rifle_ChargingHandle_001.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Rifle_ChargingHandle_002.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Rifle_ChargingHandle_003.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Rifle_InsertMag_001.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Rifle_InsertMag_002.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Rifle_InsertMag_003.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Rifle_RemoveMag_001.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Rifle_RemoveMag_002.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Rifle_RemoveMag_003.ogg +0 -0
- package/assets/item-def-sounds/Common/A_SMG_ChargingHandle_001.ogg +0 -0
- package/assets/item-def-sounds/Common/A_SMG_ChargingHandle_002.ogg +0 -0
- package/assets/item-def-sounds/Common/A_SMG_ChargingHandle_003.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Sniper_ChargingHandle.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Sniper_RemoveMag_001.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Sniper_RemoveMag_002.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Sniper_RemoveMag_003.ogg +0 -0
- package/assets/item-def-sounds/Explosions/Explosions_Grenade_Punch-Close_01.ogg +0 -0
- package/assets/item-def-sounds/Explosions/Explosions_Grenade_Punch-Close_02.ogg +0 -0
- package/assets/item-def-sounds/Explosions/Explosions_Grenade_Punch-Close_03.ogg +0 -0
- package/assets/item-def-sounds/LMG/A_LWS-32_Shot_001.ogg +0 -0
- package/assets/item-def-sounds/LMG/A_LWS-32_Shot_002.ogg +0 -0
- package/assets/item-def-sounds/LMG/A_LWS-32_Shot_003.ogg +0 -0
- package/assets/item-def-sounds/Pistol/A_Gaston_Shot_001.ogg +0 -0
- package/assets/item-def-sounds/Pistol/A_Gaston_Shot_002.ogg +0 -0
- package/assets/item-def-sounds/Pistol/A_Gaston_Shot_003.ogg +0 -0
- package/assets/item-def-sounds/Rifle/A_KAL_Shot_001.ogg +0 -0
- package/assets/item-def-sounds/Rifle/A_KAL_Shot_002.ogg +0 -0
- package/assets/item-def-sounds/Rifle/A_KAL_Shot_003.ogg +0 -0
- package/assets/item-def-sounds/SMG/A_Bison_InsertMag.ogg +0 -0
- package/assets/item-def-sounds/SMG/A_Bison_RemoveMag.ogg +0 -0
- package/assets/item-def-sounds/SMG/A_Bison_Shot_001.ogg +0 -0
- package/assets/item-def-sounds/SMG/A_Bison_Shot_002.ogg +0 -0
- package/assets/item-def-sounds/SMG/A_Bison_Shot_003.ogg +0 -0
- package/assets/item-def-sounds/Shotgun/A_DB-12_Shot_001.ogg +0 -0
- package/assets/item-def-sounds/Shotgun/A_DB-12_Shot_002.ogg +0 -0
- package/assets/item-def-sounds/Shotgun/A_DB-12_Shot_003.ogg +0 -0
- package/assets/item-def-sounds/Sniper/A_CS-446_Shot_001.ogg +0 -0
- package/assets/item-def-sounds/Sniper/A_CS-446_Shot_002.ogg +0 -0
- package/assets/item-def-sounds/Sniper/A_CS-446_Shot_003.ogg +0 -0
- package/bridge-plugins/helix.bridge.unreal/bin/unreal-skeletal-mesh-extract.js +812 -0
- package/bridge-plugins/helix.bridge.unreal/bridge-plugin.json +40 -0
- package/bridge-plugins/helix.bridge.unreal/test/exporter.test.js +418 -0
- package/bridge-plugins/helix.bridge.unreal/test/handler.test.js +417 -0
- package/bridge-plugins/helix.bridge.unreal/unreal/export_skeletal_mesh.py +384 -0
- package/bridge-recipes/cyberpunk/cyberpunk-female-bone-map.json +476 -0
- package/bridge-recipes/sims4/README.md +43 -0
- package/bridge-recipes/sims4/sims4-female-bone-map.json +65 -0
- package/bridge-recipes/unreal/character-customizer/README.md +58 -0
- package/bridge-recipes/unreal/character-customizer/all.json +13 -0
- package/bridge-recipes/unreal/character-customizer/base-male-body.json +6 -0
- package/bridge-recipes/unreal/character-customizer/base-male-head.json +6 -0
- package/bridge-recipes/unreal/character-customizer/beard.addon.json +1 -0
- package/bridge-recipes/unreal/character-customizer/beard.json +6 -0
- package/bridge-recipes/unreal/character-customizer/bottom.addon.json +1 -0
- package/bridge-recipes/unreal/character-customizer/bottom.json +6 -0
- package/bridge-recipes/unreal/character-customizer/eyewear.addon.json +1 -0
- package/bridge-recipes/unreal/character-customizer/eyewear.json +6 -0
- package/bridge-recipes/unreal/character-customizer/footwear.addon.json +1 -0
- package/bridge-recipes/unreal/character-customizer/footwear.json +6 -0
- package/bridge-recipes/unreal/character-customizer/hair.addon.json +1 -0
- package/bridge-recipes/unreal/character-customizer/hair.json +6 -0
- package/bridge-recipes/unreal/character-customizer/test/recipes.test.js +74 -0
- package/bridge-recipes/unreal/character-customizer/top.addon.json +1 -0
- package/bridge-recipes/unreal/character-customizer/top.json +6 -0
- package/bridge-recipes/unreal/helix-character-creator-female/README.md +57 -0
- package/bridge-recipes/unreal/helix-character-creator-female/all.json +18 -0
- package/bridge-recipes/unreal/helix-character-creator-female/back.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/back.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/base-female-face.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/base-female.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/bottom.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/bottom.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/eyewear.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/eyewear.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-basic-t-shirt.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-basic-t-shirt.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-batch-hair.json +23 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-batch-nebula-urbanghost.json +7 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-batch-singles.json +19 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-batch5.json +19 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-batch6.json +19 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-batch7.json +11 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-cap-2.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-cap-2.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-cap.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-cap.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-cargo-pants.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-cargo-pants.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-carnival-mask-3.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-carnival-mask-3.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-chain.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-chain.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-clare-pants.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-clare-pants.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-clare-shoes.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-clare-shoes.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-clare-top.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-clare-top.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-compression-bodysuit-2.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-compression-bodysuit-2.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-compression-bodysuit.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-compression-bodysuit.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-eye-hole-mask-2.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-eye-hole-mask-2.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-eye-patch.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-eye-patch.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-firefight-outfit.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-firefight-outfit.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-fruity-pants.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-fruity-pants.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-fruity-sneakers.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-fruity-sneakers.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-fruity-top.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-fruity-top.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-gamer-mask.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-gamer-mask.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-guy-fawkes-mask.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-guy-fawkes-mask.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a1.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a1.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a10.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a10.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a11.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a11.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a12.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a12.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a13.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a13.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a14.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a14.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a15.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a15.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a16.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a16.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a17.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a17.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a18.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a18.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a19.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a19.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a2.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a2.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a20.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a20.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a21.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a21.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a3.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a3.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a4.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a4.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a5.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a5.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a6.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a6.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a7.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a7.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a8.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a8.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a9.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a9.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-high-waist-tailored-trousers.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-high-waist-tailored-trousers.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hogwarts-pants.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hogwarts-pants.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hoody.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hoody.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-jacket-6.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-jacket-6.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-joker-mask.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-joker-mask.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-kombes-brown.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-kombes-brown.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-kombes.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-kombes.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-marshmallow-mask.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-marshmallow-mask.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-maska.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-maska.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-nebula-executive-pants.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-nebula-executive-pants.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-nebula-executive-shoes.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-nebula-executive-shoes.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-ninza-costume.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-ninza-costume.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-orange-kombes.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-orange-kombes.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-panama.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-panama.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-panda-bag-2.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-panda-bag-2.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-pantslow.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-pantslow.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-paper-bag-mask.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-paper-bag-mask.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-pig-mask.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-pig-mask.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-police-uniform.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-police-uniform.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-prison-outfit.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-prison-outfit.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-short-b4low.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-short-b4low.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-short-swimming.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-short-swimming.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-shortlow.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-shortlow.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-shorts-b3.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-shorts-b3.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-sterile-gloves.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-sterile-gloves.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-surgeon-mask.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-surgeon-mask.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-swat.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-swat.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-top.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-top.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-topx1.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-topx1.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-urban-ghost-hoodie.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-urban-ghost-hoodie.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-urban-ghost-mask.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-urban-ghost-mask.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-urban-ghost-pants.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-urban-ghost-pants.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-warehouse-uniform.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-warehouse-uniform.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-wide-top.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-wide-top.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-wolf-set.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-wolf-set.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-woman-mask-3.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-woman-mask-3.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-women-out-2.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-women-out-2.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/footwear.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/footwear.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/gloves.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/gloves.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/hair.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/hair.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/headwear.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/headwear.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/mask.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/mask.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/neck.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/neck.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/outfit.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/outfit.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/top.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/top.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/README.md +15 -0
- package/bridge-recipes/unreal/helix-character-creator-male/all.json +18 -0
- package/bridge-recipes/unreal/helix-character-creator-male/back.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/back.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/base-male-face.json +6 -0
- package/bridge-recipes/unreal/helix-character-creator-male/base-male.json +6 -0
- package/bridge-recipes/unreal/helix-character-creator-male/bottom.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/bottom.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/eyewear.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/eyewear.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/footwear.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/footwear.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/gloves.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/gloves.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/hair.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/hair.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/headwear.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/headwear.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-batch-hair.json +23 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-batch-nebula-urbanghost.json +7 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-batch-uniforms.json +10 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-batch6-slot2.json +7 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-batch7-slot3.json +6 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-batch8-combined.json +11 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-boots-25.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-cargo-pants.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-cargo-pants.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-carnival-mask-2.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-carnival-mask-2.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-carnival-mask-3.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-carnival-mask-3.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-clare-pants.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-clare-pants.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-clare-shoes.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-clare-shoes.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-clare-top.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-clare-top.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-diamond-hands.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-diamond-hands.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-doctor-outfit.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-doctor-outfit.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-eye-hole-mask-2.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-eye-hole-mask-2.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-eye-hole-mask.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-eye-hole-mask.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-eye-patch.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-eye-patch.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-fb-cargo-pants-2.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-fb-cargo-pants-2.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-fb-cargo-pants.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-fb-puffy.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-fb-puffy.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-firefight-outfit.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-firefight-outfit.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-gamer-mask-2.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-gamer-mask-2.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a1.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a1.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a10.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a10.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a11.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a11.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a12.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a12.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a13.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a13.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a14.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a14.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a15.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a15.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a16.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a16.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a17.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a17.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a18.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a18.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a19.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a19.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a2.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a2.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a20.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a20.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a21.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a21.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a3.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a3.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a4.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a4.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a5.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a5.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a6.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a6.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a7.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a7.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a8.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a8.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a9.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a9.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-kombes-brown-v2.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-kombes-brown-v2.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-kombes-brown.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-man-mask-3.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-marshmallow-mask.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-marshmallow-mask.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-mikejack-jacket.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-nebula-executive-coat.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-nebula-executive-coat.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-nebula-executive-pants.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-nebula-executive-pants.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-nebula-executive-shoes.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-nebula-executive-shoes.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-neo-arcane-heir-gloves.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-neo-arcane-heir-gloves.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-neo-arcane-heir-mantle.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-neo-arcane-heir-mantle.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-neo-arcane-heir-tunic.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-neo-arcane-heir-tunic.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-orangekombes.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-orangekombes.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-out2-boots.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-out2-boots.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-panda-bag-2.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-panda-bag-2.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-pants-2.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-pants-2.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-paper-bag-mask.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-paper-bag-mask.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-pig-mask.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-pig-mask.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-police-uniform.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-police-uniform.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-prison-outfit.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-prison-outfit.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-puffer-jacket.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-puffer-jacket.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-pullover-hoodie.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-pullover-hoodie.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-robber-mask.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-robber-mask.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-short-swimming.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-short-swimming.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-sinth-ascetic-jacket.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-sinth-ascetic-jacket.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-sip-cap.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-sip-cap.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-socks.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-socks.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-surgeon-mask.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-surgeon-mask.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-tech-hoodie.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-tech-hoodie.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-urban-ghost-hoodie.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-urban-ghost-hoodie.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-urban-ghost-mask.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-urban-ghost-mask.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-urban-ghost-pants.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-urban-ghost-pants.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-warehouse-uniform.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-warehouse-uniform.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/mask.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/mask.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/neck.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/neck.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/outfit.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/outfit.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/palette-pilot.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/test/recipes.test.js +122 -0
- package/bridge-recipes/unreal/helix-character-creator-male/top.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/top.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/variants/bottom-nopalette.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/variants/headwear-nopalette.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/variants/neck-nopalette.addon.json +1 -0
- package/dist/ability.d.ts +2 -2
- package/dist/ability.js +6 -5
- package/dist/ability.js.map +1 -1
- package/dist/achievement.d.ts +123 -0
- package/dist/achievement.js +400 -0
- package/dist/achievement.js.map +1 -0
- package/dist/api.d.ts +19 -1
- package/dist/api.js +80 -6
- package/dist/api.js.map +1 -1
- package/dist/assets.d.ts +595 -0
- package/dist/assets.js +1121 -0
- package/dist/assets.js.map +1 -0
- package/dist/audioCommand.d.ts +65 -0
- package/dist/audioCommand.js +181 -0
- package/dist/audioCommand.js.map +1 -0
- package/dist/bakeBodyRegionsCli.d.ts +19 -0
- package/dist/bakeBodyRegionsCli.js +25 -0
- package/dist/bakeBodyRegionsCli.js.map +1 -0
- package/dist/bakeLighting.d.ts +173 -0
- package/dist/bakeLighting.js +452 -0
- package/dist/bakeLighting.js.map +1 -0
- package/dist/bridge/bridge.testutil.d.ts +105 -0
- package/dist/bridge/bridge.testutil.js +259 -0
- package/dist/bridge/bridge.testutil.js.map +1 -0
- package/dist/bridge/characterAddon.d.ts +47 -0
- package/dist/bridge/characterAddon.js +146 -0
- package/dist/bridge/characterAddon.js.map +1 -0
- package/dist/bridge/detect.d.ts +4 -0
- package/dist/bridge/detect.js +154 -0
- package/dist/bridge/detect.js.map +1 -0
- package/dist/bridge/execute.d.ts +3 -0
- package/dist/bridge/execute.js +206 -0
- package/dist/bridge/execute.js.map +1 -0
- package/dist/bridge/glb.d.ts +60 -0
- package/dist/bridge/glb.js +81 -0
- package/dist/bridge/glb.js.map +1 -0
- package/dist/bridge/hash.d.ts +6 -0
- package/dist/bridge/hash.js +40 -0
- package/dist/bridge/hash.js.map +1 -0
- package/dist/bridge/index.d.ts +11 -0
- package/dist/bridge/index.js +28 -0
- package/dist/bridge/index.js.map +1 -0
- package/dist/bridge/internal/artifacts.d.ts +5 -0
- package/dist/bridge/internal/artifacts.js +31 -0
- package/dist/bridge/internal/artifacts.js.map +1 -0
- package/dist/bridge/internal/builtInExecution.d.ts +4 -0
- package/dist/bridge/internal/builtInExecution.js +514 -0
- package/dist/bridge/internal/builtInExecution.js.map +1 -0
- package/dist/bridge/internal/externalExecution.d.ts +12 -0
- package/dist/bridge/internal/externalExecution.js +261 -0
- package/dist/bridge/internal/externalExecution.js.map +1 -0
- package/dist/bridge/internal/outputReservation.d.ts +13 -0
- package/dist/bridge/internal/outputReservation.js +151 -0
- package/dist/bridge/internal/outputReservation.js.map +1 -0
- package/dist/bridge/internal/snapshots.d.ts +32 -0
- package/dist/bridge/internal/snapshots.js +562 -0
- package/dist/bridge/internal/snapshots.js.map +1 -0
- package/dist/bridge/management.d.ts +40 -0
- package/dist/bridge/management.js +333 -0
- package/dist/bridge/management.js.map +1 -0
- package/dist/bridge/manifest.d.ts +8 -0
- package/dist/bridge/manifest.js +192 -0
- package/dist/bridge/manifest.js.map +1 -0
- package/dist/bridge/metahuman.d.ts +26 -0
- package/dist/bridge/metahuman.js +332 -0
- package/dist/bridge/metahuman.js.map +1 -0
- package/dist/bridge/planner.d.ts +9 -0
- package/dist/bridge/planner.js +246 -0
- package/dist/bridge/planner.js.map +1 -0
- package/dist/bridge/plugins.d.ts +17 -0
- package/dist/bridge/plugins.js +307 -0
- package/dist/bridge/plugins.js.map +1 -0
- package/dist/bridge/resolution.d.ts +8 -0
- package/dist/bridge/resolution.js +55 -0
- package/dist/bridge/resolution.js.map +1 -0
- package/dist/bridge/types.d.ts +247 -0
- package/dist/bridge/types.js +60 -0
- package/dist/bridge/types.js.map +1 -0
- package/dist/bridge/validate.d.ts +12 -0
- package/dist/bridge/validate.js +370 -0
- package/dist/bridge/validate.js.map +1 -0
- package/dist/bridge/zipSource.d.ts +27 -0
- package/dist/bridge/zipSource.js +90 -0
- package/dist/bridge/zipSource.js.map +1 -0
- package/dist/browser/hostSlots.d.ts +57 -0
- package/dist/browser/hostSlots.js +371 -0
- package/dist/browser/hostSlots.js.map +1 -0
- package/dist/browser/launch.d.ts +25 -0
- package/dist/browser/launch.js +74 -0
- package/dist/browser/launch.js.map +1 -0
- package/dist/browser/nonSystemChrome.d.ts +15 -0
- package/dist/browser/nonSystemChrome.js +91 -0
- package/dist/browser/nonSystemChrome.js.map +1 -0
- package/dist/builds/index.d.ts +54 -0
- package/dist/builds/index.js +215 -0
- package/dist/builds/index.js.map +1 -0
- package/dist/bundle.d.ts +35 -2
- package/dist/bundle.js +437 -20
- package/dist/bundle.js.map +1 -1
- package/dist/canary/cli.d.ts +17 -0
- package/dist/canary/cli.js +95 -0
- package/dist/canary/cli.js.map +1 -0
- package/dist/canary/index.d.ts +4 -0
- package/dist/canary/index.js +21 -0
- package/dist/canary/index.js.map +1 -0
- package/dist/canary/inventory.d.ts +46 -0
- package/dist/canary/inventory.js +499 -0
- package/dist/canary/inventory.js.map +1 -0
- package/dist/canary/pacifica.d.ts +51 -0
- package/dist/canary/pacifica.js +247 -0
- package/dist/canary/pacifica.js.map +1 -0
- package/dist/canary/plan.d.ts +115 -0
- package/dist/canary/plan.js +479 -0
- package/dist/canary/plan.js.map +1 -0
- package/dist/character/addonPushOut.d.ts +66 -0
- package/dist/character/addonPushOut.js +211 -0
- package/dist/character/addonPushOut.js.map +1 -0
- package/dist/character/avatarPreflight.d.ts +92 -0
- package/dist/character/avatarPreflight.js +261 -0
- package/dist/character/avatarPreflight.js.map +1 -0
- package/dist/character/bakeBodyRegions.d.ts +80 -0
- package/dist/character/bakeBodyRegions.js +190 -0
- package/dist/character/bakeBodyRegions.js.map +1 -0
- package/dist/character/baseColorGuard.d.ts +62 -0
- package/dist/character/baseColorGuard.js +141 -0
- package/dist/character/baseColorGuard.js.map +1 -0
- package/dist/character/bodyGeometryGuard.d.ts +243 -0
- package/dist/character/bodyGeometryGuard.js +417 -0
- package/dist/character/bodyGeometryGuard.js.map +1 -0
- package/dist/character/bodyRegionHide.d.ts +57 -0
- package/dist/character/bodyRegionHide.js +97 -0
- package/dist/character/bodyRegionHide.js.map +1 -0
- package/dist/character/composeBaseMale.d.ts +25 -0
- package/dist/character/composeBaseMale.js +712 -0
- package/dist/character/composeBaseMale.js.map +1 -0
- package/dist/character/esm.js +3 -1
- package/dist/character/esm.js.map +1 -1
- package/dist/character/faceManifest.d.ts +53 -0
- package/dist/character/faceManifest.js +256 -0
- package/dist/character/faceManifest.js.map +1 -0
- package/dist/character/fbx.d.ts +61 -0
- package/dist/character/fbx.js +360 -0
- package/dist/character/fbx.js.map +1 -0
- package/dist/character/fitGarmentFile.d.ts +39 -0
- package/dist/character/fitGarmentFile.js +53 -0
- package/dist/character/fitGarmentFile.js.map +1 -0
- package/dist/character/helixPalette.d.ts +68 -0
- package/dist/character/helixPalette.js +183 -0
- package/dist/character/helixPalette.js.map +1 -0
- package/dist/character/hideCoverage.d.ts +135 -0
- package/dist/character/hideCoverage.js +450 -0
- package/dist/character/hideCoverage.js.map +1 -0
- package/dist/character/imageLimits.d.ts +3 -0
- package/dist/character/imageLimits.js +7 -0
- package/dist/character/imageLimits.js.map +1 -0
- package/dist/character/importCharacter.d.ts +188 -10
- package/dist/character/importCharacter.js +853 -76
- package/dist/character/importCharacter.js.map +1 -1
- package/dist/character/importTrust.d.ts +11 -0
- package/dist/character/importTrust.js +56 -0
- package/dist/character/importTrust.js.map +1 -0
- package/dist/character/ktx2Decode.d.ts +11 -0
- package/dist/character/ktx2Decode.js +87 -0
- package/dist/character/ktx2Decode.js.map +1 -0
- package/dist/character/mat4.d.ts +7 -0
- package/dist/character/mat4.js +25 -2
- package/dist/character/mat4.js.map +1 -1
- package/dist/character/meshyToHelixMap.d.ts +10 -0
- package/dist/character/meshyToHelixMap.js +92 -3
- package/dist/character/meshyToHelixMap.js.map +1 -1
- package/dist/character/metahumanToHelixMap.d.ts +2 -0
- package/dist/character/metahumanToHelixMap.js +34 -0
- package/dist/character/metahumanToHelixMap.js.map +1 -0
- package/dist/character/normalMapGuard.d.ts +59 -0
- package/dist/character/normalMapGuard.js +139 -0
- package/dist/character/normalMapGuard.js.map +1 -0
- package/dist/character/quat.js +2 -2
- package/dist/character/quat.js.map +1 -1
- package/dist/character/reframeSkeletonFile.d.ts +19 -0
- package/dist/character/reframeSkeletonFile.js +45 -0
- package/dist/character/reframeSkeletonFile.js.map +1 -0
- package/dist/character/repairLodSkeletonsFile.d.ts +25 -0
- package/dist/character/repairLodSkeletonsFile.js +49 -0
- package/dist/character/repairLodSkeletonsFile.js.map +1 -0
- package/dist/character/restFrameGuard.d.ts +52 -0
- package/dist/character/restFrameGuard.js +90 -0
- package/dist/character/restFrameGuard.js.map +1 -0
- package/dist/character/slotBudgets.d.ts +37 -0
- package/dist/character/slotBudgets.generated.d.ts +15 -0
- package/dist/character/slotBudgets.generated.js +110 -0
- package/dist/character/slotBudgets.generated.js.map +1 -0
- package/dist/character/slotBudgets.js +45 -0
- package/dist/character/slotBudgets.js.map +1 -0
- package/dist/character/stages/atlasMaterials.d.ts +53 -0
- package/dist/character/stages/atlasMaterials.js +246 -0
- package/dist/character/stages/atlasMaterials.js.map +1 -0
- package/dist/character/stages/bakeTexture.d.ts +28 -7
- package/dist/character/stages/bakeTexture.js +586 -108
- package/dist/character/stages/bakeTexture.js.map +1 -1
- package/dist/character/stages/conform.d.ts +54 -9
- package/dist/character/stages/conform.js +686 -113
- package/dist/character/stages/conform.js.map +1 -1
- package/dist/character/stages/earClearance.d.ts +105 -0
- package/dist/character/stages/earClearance.js +480 -0
- package/dist/character/stages/earClearance.js.map +1 -0
- package/dist/character/stages/faceRegion.d.ts +55 -0
- package/dist/character/stages/faceRegion.js +183 -0
- package/dist/character/stages/faceRegion.js.map +1 -0
- package/dist/character/stages/firstPersonHide.d.ts +42 -0
- package/dist/character/stages/firstPersonHide.js +140 -0
- package/dist/character/stages/firstPersonHide.js.map +1 -0
- package/dist/character/stages/joinPerMesh.d.ts +18 -0
- package/dist/character/stages/joinPerMesh.js +46 -0
- package/dist/character/stages/joinPerMesh.js.map +1 -0
- package/dist/character/stages/ktx2.d.ts +6 -4
- package/dist/character/stages/ktx2.js +81 -29
- package/dist/character/stages/ktx2.js.map +1 -1
- package/dist/character/stages/limbBridge.d.ts +114 -0
- package/dist/character/stages/limbBridge.js +1286 -0
- package/dist/character/stages/limbBridge.js.map +1 -0
- package/dist/character/stages/mergeLods.d.ts +19 -0
- package/dist/character/stages/mergeLods.js +58 -2
- package/dist/character/stages/mergeLods.js.map +1 -1
- package/dist/character/stages/poseAwareFit.d.ts +192 -0
- package/dist/character/stages/poseAwareFit.js +417 -0
- package/dist/character/stages/poseAwareFit.js.map +1 -0
- package/dist/character/stages/poseFit/math.d.ts +141 -0
- package/dist/character/stages/poseFit/math.js +514 -0
- package/dist/character/stages/poseFit/math.js.map +1 -0
- package/dist/character/stages/poseFit/measure.d.ts +88 -0
- package/dist/character/stages/poseFit/measure.js +148 -0
- package/dist/character/stages/poseFit/measure.js.map +1 -0
- package/dist/character/stages/poseFit/model.d.ts +46 -0
- package/dist/character/stages/poseFit/model.js +147 -0
- package/dist/character/stages/poseFit/model.js.map +1 -0
- package/dist/character/stages/poseFit/offsetField.d.ts +76 -0
- package/dist/character/stages/poseFit/offsetField.js +249 -0
- package/dist/character/stages/poseFit/offsetField.js.map +1 -0
- package/dist/character/stages/poseFit/posing.d.ts +52 -0
- package/dist/character/stages/poseFit/posing.js +330 -0
- package/dist/character/stages/poseFit/posing.js.map +1 -0
- package/dist/character/stages/poseFit/testRig.d.ts +31 -0
- package/dist/character/stages/poseFit/testRig.js +85 -0
- package/dist/character/stages/poseFit/testRig.js.map +1 -0
- package/dist/character/stages/reframeSkeletonToHost.d.ts +35 -0
- package/dist/character/stages/reframeSkeletonToHost.js +111 -0
- package/dist/character/stages/reframeSkeletonToHost.js.map +1 -0
- package/dist/character/stages/report.js +0 -2
- package/dist/character/stages/report.js.map +1 -1
- package/dist/character/stages/resizeTextures.js +4 -4
- package/dist/character/stages/resizeTextures.js.map +1 -1
- package/dist/character/stages/retarget.d.ts +8 -2
- package/dist/character/stages/retarget.js +52 -4
- package/dist/character/stages/retarget.js.map +1 -1
- package/dist/character/stages/retargetClip.d.ts +6 -2
- package/dist/character/stages/retargetClip.js +53 -16
- package/dist/character/stages/retargetClip.js.map +1 -1
- package/dist/character/stages/sanitizeMaterials.d.ts +39 -0
- package/dist/character/stages/sanitizeMaterials.js +136 -0
- package/dist/character/stages/sanitizeMaterials.js.map +1 -0
- package/dist/character/stages/simplifyMesh.js +6 -3
- package/dist/character/stages/simplifyMesh.js.map +1 -1
- package/dist/character/stages/splitFacePrimitive.js +0 -2
- package/dist/character/stages/splitFacePrimitive.js.map +1 -1
- package/dist/character/stages/splitSharedLodSkeletons.d.ts +31 -0
- package/dist/character/stages/splitSharedLodSkeletons.js +104 -0
- package/dist/character/stages/splitSharedLodSkeletons.js.map +1 -0
- package/dist/character/stages/unifyMaterial.d.ts +66 -0
- package/dist/character/stages/unifyMaterial.js +136 -0
- package/dist/character/stages/unifyMaterial.js.map +1 -0
- package/dist/character/stages/vrmDynamics.d.ts +144 -0
- package/dist/character/stages/vrmDynamics.js +421 -0
- package/dist/character/stages/vrmDynamics.js.map +1 -0
- package/dist/character/stages/vrmFace.d.ts +82 -0
- package/dist/character/stages/vrmFace.js +280 -0
- package/dist/character/stages/vrmFace.js.map +1 -0
- package/dist/character/stages/weldedSimplify.d.ts +15 -1
- package/dist/character/stages/weldedSimplify.js +90 -9
- package/dist/character/stages/weldedSimplify.js.map +1 -1
- package/dist/character/testutil/meshyBridgeFixture.d.ts +33 -0
- package/dist/character/testutil/meshyBridgeFixture.js +219 -0
- package/dist/character/testutil/meshyBridgeFixture.js.map +1 -0
- package/dist/character/testutil/meshyHead.d.ts +19 -0
- package/dist/character/testutil/meshyHead.js +99 -0
- package/dist/character/testutil/meshyHead.js.map +1 -0
- package/dist/character/testutil/meshyRig.d.ts +17 -0
- package/dist/character/testutil/meshyRig.js +117 -0
- package/dist/character/testutil/meshyRig.js.map +1 -0
- package/dist/character/testutil/slotBudgetExpectations.d.ts +11 -0
- package/dist/character/testutil/slotBudgetExpectations.js +21 -0
- package/dist/character/testutil/slotBudgetExpectations.js.map +1 -0
- package/dist/character/testutil/syntheticRig.d.ts +12 -1
- package/dist/character/testutil/syntheticRig.js +88 -3
- package/dist/character/testutil/syntheticRig.js.map +1 -1
- package/dist/character/unrealMaterialSidecar.d.ts +94 -0
- package/dist/character/unrealMaterialSidecar.js +879 -0
- package/dist/character/unrealMaterialSidecar.js.map +1 -0
- package/dist/character/untrustedSource.d.ts +54 -0
- package/dist/character/untrustedSource.js +181 -0
- package/dist/character/untrustedSource.js.map +1 -0
- package/dist/character/vrmCharacter.d.ts +156 -0
- package/dist/character/vrmCharacter.js +678 -0
- package/dist/character/vrmCharacter.js.map +1 -0
- package/dist/config.d.ts +5 -0
- package/dist/config.js +66 -22
- package/dist/config.js.map +1 -1
- package/dist/continuum/adminPackagePinCommand.d.ts +14 -0
- package/dist/continuum/adminPackagePinCommand.js +46 -0
- package/dist/continuum/adminPackagePinCommand.js.map +1 -0
- package/dist/continuum/adminPackagePublishCommand.d.ts +13 -0
- package/dist/continuum/adminPackagePublishCommand.js +22 -0
- package/dist/continuum/adminPackagePublishCommand.js.map +1 -0
- package/dist/continuum/authoring.d.ts +52 -0
- package/dist/continuum/authoring.js +143 -0
- package/dist/continuum/authoring.js.map +1 -0
- package/dist/continuum/characterMigrationGenerator.d.ts +17 -0
- package/dist/continuum/characterMigrationGenerator.js +242 -0
- package/dist/continuum/characterMigrationGenerator.js.map +1 -0
- package/dist/continuum/cli.d.ts +69 -0
- package/dist/continuum/cli.js +145 -0
- package/dist/continuum/cli.js.map +1 -0
- package/dist/continuum/cliAuthority.d.ts +17 -0
- package/dist/continuum/cliAuthority.js +28 -0
- package/dist/continuum/cliAuthority.js.map +1 -0
- package/dist/continuum/client.d.ts +103 -0
- package/dist/continuum/client.js +190 -0
- package/dist/continuum/client.js.map +1 -0
- package/dist/continuum/homeScenePackage.d.ts +159 -0
- package/dist/continuum/homeScenePackage.js +267 -0
- package/dist/continuum/homeScenePackage.js.map +1 -0
- package/dist/continuum/homeScenePackageCommand.d.ts +44 -0
- package/dist/continuum/homeScenePackageCommand.js +107 -0
- package/dist/continuum/homeScenePackageCommand.js.map +1 -0
- package/dist/continuum/identity.d.ts +4 -0
- package/dist/continuum/identity.js +20 -0
- package/dist/continuum/identity.js.map +1 -0
- package/dist/continuum/index.d.ts +11 -0
- package/dist/continuum/index.js +28 -0
- package/dist/continuum/index.js.map +1 -0
- package/dist/continuum/missingNormals.d.ts +48 -0
- package/dist/continuum/missingNormals.js +99 -0
- package/dist/continuum/missingNormals.js.map +1 -0
- package/dist/continuum/objectUpload.d.ts +64 -0
- package/dist/continuum/objectUpload.js +375 -0
- package/dist/continuum/objectUpload.js.map +1 -0
- package/dist/continuum/pull.d.ts +22 -0
- package/dist/continuum/pull.js +47 -0
- package/dist/continuum/pull.js.map +1 -0
- package/dist/continuum/sourceBundle.d.ts +18 -0
- package/dist/continuum/sourceBundle.js +160 -0
- package/dist/continuum/sourceBundle.js.map +1 -0
- package/dist/continuum/state.d.ts +41 -0
- package/dist/continuum/state.js +198 -0
- package/dist/continuum/state.js.map +1 -0
- package/dist/continuum/types.d.ts +156 -0
- package/dist/continuum/types.js +6 -0
- package/dist/continuum/types.js.map +1 -0
- package/dist/continuum/workflow.d.ts +62 -0
- package/dist/continuum/workflow.js +592 -0
- package/dist/continuum/workflow.js.map +1 -0
- package/dist/cs2/areas.d.ts +41 -0
- package/dist/cs2/areas.js +82 -0
- package/dist/cs2/areas.js.map +1 -0
- package/dist/cs2/binary.d.ts +10 -0
- package/dist/cs2/binary.js +59 -0
- package/dist/cs2/binary.js.map +1 -0
- package/dist/cs2/cityLegacy.d.ts +29 -0
- package/dist/cs2/cityLegacy.js +48 -0
- package/dist/cs2/cityLegacy.js.map +1 -0
- package/dist/cs2/convert/areas.d.ts +32 -0
- package/dist/cs2/convert/areas.js +96 -0
- package/dist/cs2/convert/areas.js.map +1 -0
- package/dist/cs2/convert/glb.d.ts +48 -0
- package/dist/cs2/convert/glb.js +178 -0
- package/dist/cs2/convert/glb.js.map +1 -0
- package/dist/cs2/convert/markings.d.ts +96 -0
- package/dist/cs2/convert/markings.js +329 -0
- package/dist/cs2/convert/markings.js.map +1 -0
- package/dist/cs2/convert/nodeSeams.d.ts +20 -0
- package/dist/cs2/convert/nodeSeams.js +164 -0
- package/dist/cs2/convert/nodeSeams.js.map +1 -0
- package/dist/cs2/convert/roadBake.d.ts +112 -0
- package/dist/cs2/convert/roadBake.js +290 -0
- package/dist/cs2/convert/roadBake.js.map +1 -0
- package/dist/cs2/convert/roads.d.ts +110 -0
- package/dist/cs2/convert/roads.js +419 -0
- package/dist/cs2/convert/roads.js.map +1 -0
- package/dist/cs2/convert/terrain.d.ts +67 -0
- package/dist/cs2/convert/terrain.js +141 -0
- package/dist/cs2/convert/terrain.js.map +1 -0
- package/dist/cs2/convert/terrainConform.d.ts +58 -0
- package/dist/cs2/convert/terrainConform.js +284 -0
- package/dist/cs2/convert/terrainConform.js.map +1 -0
- package/dist/cs2/convert/treeRoadClearance.d.ts +17 -0
- package/dist/cs2/convert/treeRoadClearance.js +78 -0
- package/dist/cs2/convert/treeRoadClearance.js.map +1 -0
- package/dist/cs2/convert/trees.d.ts +33 -0
- package/dist/cs2/convert/trees.js +68 -0
- package/dist/cs2/convert/trees.js.map +1 -0
- package/dist/cs2/csm2.d.ts +58 -0
- package/dist/cs2/csm2.js +188 -0
- package/dist/cs2/csm2.js.map +1 -0
- package/dist/cs2/fixtures.d.ts +5 -0
- package/dist/cs2/fixtures.js +15 -0
- package/dist/cs2/fixtures.js.map +1 -0
- package/dist/cs2/impostors.d.ts +31 -0
- package/dist/cs2/impostors.js +42 -0
- package/dist/cs2/impostors.js.map +1 -0
- package/dist/cs2/index.d.ts +22 -0
- package/dist/cs2/index.js +191 -0
- package/dist/cs2/index.js.map +1 -0
- package/dist/cs2/inspect.d.ts +81 -0
- package/dist/cs2/inspect.js +181 -0
- package/dist/cs2/inspect.js.map +1 -0
- package/dist/cs2/lods.d.ts +22 -0
- package/dist/cs2/lods.js +136 -0
- package/dist/cs2/lods.js.map +1 -0
- package/dist/cs2/materials.d.ts +43 -0
- package/dist/cs2/materials.js +137 -0
- package/dist/cs2/materials.js.map +1 -0
- package/dist/cs2/placements.d.ts +57 -0
- package/dist/cs2/placements.js +116 -0
- package/dist/cs2/placements.js.map +1 -0
- package/dist/cs2/roadPieces.d.ts +79 -0
- package/dist/cs2/roadPieces.js +263 -0
- package/dist/cs2/roadPieces.js.map +1 -0
- package/dist/cs2/roads.d.ts +92 -0
- package/dist/cs2/roads.js +329 -0
- package/dist/cs2/roads.js.map +1 -0
- package/dist/cs2/terrain.d.ts +37 -0
- package/dist/cs2/terrain.js +91 -0
- package/dist/cs2/terrain.js.map +1 -0
- package/dist/cs2/types.d.ts +444 -0
- package/dist/cs2/types.js +22 -0
- package/dist/cs2/types.js.map +1 -0
- package/dist/cs2/water.d.ts +26 -0
- package/dist/cs2/water.js +58 -0
- package/dist/cs2/water.js.map +1 -0
- package/dist/currency.d.ts +94 -0
- package/dist/currency.js +425 -0
- package/dist/currency.js.map +1 -0
- package/dist/dev/devServer.d.ts +53 -0
- package/dist/dev/devServer.js +228 -0
- package/dist/dev/devServer.js.map +1 -0
- package/dist/dev/shellPage.d.ts +3 -0
- package/dist/dev/shellPage.js +297 -0
- package/dist/dev/shellPage.js.map +1 -0
- package/dist/dev/state.d.ts +84 -0
- package/dist/dev/state.js +265 -0
- package/dist/dev/state.js.map +1 -0
- package/dist/device.d.ts +104 -0
- package/dist/device.js +2744 -0
- package/dist/device.js.map +1 -0
- package/dist/deviceActionValidation.d.ts +21 -0
- package/dist/deviceActionValidation.js +460 -0
- package/dist/deviceActionValidation.js.map +1 -0
- package/dist/distribution.d.ts +69 -0
- package/dist/distribution.js +138 -0
- package/dist/distribution.js.map +1 -0
- package/dist/enginePins.d.ts +45 -0
- package/dist/enginePins.js +134 -0
- package/dist/enginePins.js.map +1 -0
- package/dist/gesture/axisReference.d.ts +22 -0
- package/dist/gesture/axisReference.js +32 -0
- package/dist/gesture/axisReference.js.map +1 -0
- package/dist/gesture/capture.d.ts +84 -0
- package/dist/gesture/capture.js +303 -0
- package/dist/gesture/capture.js.map +1 -0
- package/dist/gesture/harnessPage.d.ts +23 -0
- package/dist/gesture/harnessPage.js +153 -0
- package/dist/gesture/harnessPage.js.map +1 -0
- package/dist/gesture/inspect.d.ts +189 -0
- package/dist/gesture/inspect.js +678 -0
- package/dist/gesture/inspect.js.map +1 -0
- package/dist/gesture/rig.d.ts +12 -0
- package/dist/gesture/rig.js +111 -0
- package/dist/gesture/rig.js.map +1 -0
- package/dist/gesture/worldRuntime.d.ts +65 -0
- package/dist/gesture/worldRuntime.js +110 -0
- package/dist/gesture/worldRuntime.js.map +1 -0
- package/dist/glb/draw-calls.d.ts +60 -0
- package/dist/glb/draw-calls.js +160 -0
- package/dist/glb/draw-calls.js.map +1 -0
- package/dist/glb/glb-summary.d.ts +68 -0
- package/dist/glb/glb-summary.js +450 -0
- package/dist/glb/glb-summary.js.map +1 -0
- package/dist/glb/index.d.ts +12 -0
- package/dist/glb/index.js +24 -0
- package/dist/glb/index.js.map +1 -0
- package/dist/glb/smooth-normals.d.ts +98 -0
- package/dist/glb/smooth-normals.js +395 -0
- package/dist/glb/smooth-normals.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +6786 -128
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts +35 -1
- package/dist/init.js +1115 -47
- package/dist/init.js.map +1 -1
- package/dist/install.d.ts +16 -5
- package/dist/install.js +123 -23
- package/dist/install.js.map +1 -1
- package/dist/interactable.d.ts +154 -0
- package/dist/interactable.js +1219 -0
- package/dist/interactable.js.map +1 -0
- package/dist/item.d.ts +217 -0
- package/dist/item.js +892 -0
- package/dist/item.js.map +1 -0
- package/dist/itemDef/distribute.d.ts +17 -0
- package/dist/itemDef/distribute.js +29 -0
- package/dist/itemDef/distribute.js.map +1 -0
- package/dist/itemDef/emoteRules.d.ts +85 -0
- package/dist/itemDef/emoteRules.js +368 -0
- package/dist/itemDef/emoteRules.js.map +1 -0
- package/dist/itemDef/gunConfigRules.d.ts +24 -0
- package/dist/itemDef/gunConfigRules.js +300 -0
- package/dist/itemDef/gunConfigRules.js.map +1 -0
- package/dist/itemDef/inspect.d.ts +19 -0
- package/dist/itemDef/inspect.js +144 -0
- package/dist/itemDef/inspect.js.map +1 -0
- package/dist/itemDef/scaffold.d.ts +41 -0
- package/dist/itemDef/scaffold.js +303 -0
- package/dist/itemDef/scaffold.js.map +1 -0
- package/dist/itemDef/tables.d.ts +81 -0
- package/dist/itemDef/tables.js +226 -0
- package/dist/itemDef/tables.js.map +1 -0
- package/dist/itemDef/validate.d.ts +30 -0
- package/dist/itemDef/validate.js +175 -0
- package/dist/itemDef/validate.js.map +1 -0
- package/dist/itemPublishVersion.d.ts +46 -0
- package/dist/itemPublishVersion.js +242 -0
- package/dist/itemPublishVersion.js.map +1 -0
- package/dist/itemSearch.d.ts +128 -0
- package/dist/itemSearch.js +140 -0
- package/dist/itemSearch.js.map +1 -0
- package/dist/itemSetVersion.d.ts +42 -0
- package/dist/itemSetVersion.js +94 -0
- package/dist/itemSetVersion.js.map +1 -0
- package/dist/itemThumbnail.d.ts +40 -0
- package/dist/itemThumbnail.js +116 -0
- package/dist/itemThumbnail.js.map +1 -0
- package/dist/lib.d.ts +571 -7
- package/dist/lib.js +1178 -15
- package/dist/lib.js.map +1 -1
- package/dist/looks.d.ts +103 -0
- package/dist/looks.js +102 -0
- package/dist/looks.js.map +1 -0
- package/dist/materials/availability.d.ts +8 -0
- package/dist/materials/availability.js +22 -0
- package/dist/materials/availability.js.map +1 -0
- package/dist/materials/identity.d.ts +30 -0
- package/dist/materials/identity.js +68 -0
- package/dist/materials/identity.js.map +1 -0
- package/dist/materials/pins.d.ts +23 -0
- package/dist/materials/pins.js +93 -0
- package/dist/materials/pins.js.map +1 -0
- package/dist/mesh/surfaceBvh.d.ts +13 -0
- package/dist/mesh/surfaceBvh.js +197 -0
- package/dist/mesh/surfaceBvh.js.map +1 -0
- package/dist/module-validation.d.ts +2 -0
- package/dist/module-validation.js +24 -0
- package/dist/module-validation.js.map +1 -0
- package/dist/money.d.ts +183 -0
- package/dist/money.js +299 -0
- package/dist/money.js.map +1 -0
- package/dist/npc/capture.d.ts +41 -0
- package/dist/npc/capture.js +99 -0
- package/dist/npc/capture.js.map +1 -0
- package/dist/npc/format.d.ts +2 -0
- package/dist/npc/format.js +102 -0
- package/dist/npc/format.js.map +1 -0
- package/dist/npc/inspect.d.ts +23 -0
- package/dist/npc/inspect.js +54 -0
- package/dist/npc/inspect.js.map +1 -0
- package/dist/npc/metrics.d.ts +132 -0
- package/dist/npc/metrics.js +214 -0
- package/dist/npc/metrics.js.map +1 -0
- package/dist/npc/session.d.ts +35 -0
- package/dist/npc/session.js +172 -0
- package/dist/npc/session.js.map +1 -0
- package/dist/pack/locomotionReference.d.ts +40 -0
- package/dist/pack/locomotionReference.js +132 -0
- package/dist/pack/locomotionReference.js.map +1 -0
- package/dist/pack/scaffold.d.ts +15 -0
- package/dist/pack/scaffold.js +144 -0
- package/dist/pack/scaffold.js.map +1 -0
- package/dist/pack/validate.d.ts +67 -0
- package/dist/pack/validate.js +317 -0
- package/dist/pack/validate.js.map +1 -0
- package/dist/package.d.ts +14 -1
- package/dist/package.js +106 -7
- package/dist/package.js.map +1 -1
- package/dist/paletteShowcase.d.ts +183 -0
- package/dist/paletteShowcase.js +454 -0
- package/dist/paletteShowcase.js.map +1 -0
- package/dist/paletteShowcaseProfiles.d.ts +112 -0
- package/dist/paletteShowcaseProfiles.js +121 -0
- package/dist/paletteShowcaseProfiles.js.map +1 -0
- package/dist/paths.d.ts +4 -0
- package/dist/paths.js +11 -0
- package/dist/paths.js.map +1 -0
- package/dist/placementRequest.d.ts +37 -0
- package/dist/placementRequest.js +220 -0
- package/dist/placementRequest.js.map +1 -0
- package/dist/placements/assets.d.ts +7 -0
- package/dist/placements/assets.js +114 -0
- package/dist/placements/assets.js.map +1 -0
- package/dist/placements/attachFoliageLods.d.ts +4 -0
- package/dist/placements/attachFoliageLods.js +70 -0
- package/dist/placements/attachFoliageLods.js.map +1 -0
- package/dist/placements/attachImpostors.d.ts +3 -0
- package/dist/placements/attachImpostors.js +51 -0
- package/dist/placements/attachImpostors.js.map +1 -0
- package/dist/placements/authored.d.ts +11 -0
- package/dist/placements/authored.js +65 -0
- package/dist/placements/authored.js.map +1 -0
- package/dist/placements/bake.d.ts +2 -0
- package/dist/placements/bake.js +235 -0
- package/dist/placements/bake.js.map +1 -0
- package/dist/placements/captureHost.d.ts +4 -0
- package/dist/placements/captureHost.js +125 -0
- package/dist/placements/captureHost.js.map +1 -0
- package/dist/placements/foliageCapture.d.ts +2 -0
- package/dist/placements/foliageCapture.js +98 -0
- package/dist/placements/foliageCapture.js.map +1 -0
- package/dist/placements/foliageCards.d.ts +17 -0
- package/dist/placements/foliageCards.js +120 -0
- package/dist/placements/foliageCards.js.map +1 -0
- package/dist/placements/foliageLods.d.ts +8 -0
- package/dist/placements/foliageLods.js +240 -0
- package/dist/placements/foliageLods.js.map +1 -0
- package/dist/placements/foliageTexture.d.ts +4 -0
- package/dist/placements/foliageTexture.js +91 -0
- package/dist/placements/foliageTexture.js.map +1 -0
- package/dist/placements/impostorCapture.d.ts +2 -0
- package/dist/placements/impostorCapture.js +111 -0
- package/dist/placements/impostorCapture.js.map +1 -0
- package/dist/placements/impostors.d.ts +18 -0
- package/dist/placements/impostors.js +279 -0
- package/dist/placements/impostors.js.map +1 -0
- package/dist/placements/source.d.ts +53 -0
- package/dist/placements/source.js +111 -0
- package/dist/placements/source.js.map +1 -0
- package/dist/product.d.ts +84 -0
- package/dist/product.js +285 -0
- package/dist/product.js.map +1 -0
- package/dist/publications.d.ts +116 -0
- package/dist/publications.js +180 -0
- package/dist/publications.js.map +1 -0
- package/dist/publishDuplicateGuard.d.ts +92 -0
- package/dist/publishDuplicateGuard.js +128 -0
- package/dist/publishDuplicateGuard.js.map +1 -0
- package/dist/realizability.d.ts +36 -0
- package/dist/realizability.js +269 -0
- package/dist/realizability.js.map +1 -0
- package/dist/resolve.d.ts +7 -1
- package/dist/resolve.js +77 -11
- package/dist/resolve.js.map +1 -1
- package/dist/sceneElements/compiler.d.ts +21 -0
- package/dist/sceneElements/compiler.js +976 -0
- package/dist/sceneElements/compiler.js.map +1 -0
- package/dist/sceneElements/continuum.d.ts +54 -0
- package/dist/sceneElements/continuum.js +451 -0
- package/dist/sceneElements/continuum.js.map +1 -0
- package/dist/sceneElements/devices.d.ts +12 -0
- package/dist/sceneElements/devices.js +212 -0
- package/dist/sceneElements/devices.js.map +1 -0
- package/dist/sceneElements/meshCells.d.ts +49 -0
- package/dist/sceneElements/meshCells.js +174 -0
- package/dist/sceneElements/meshCells.js.map +1 -0
- package/dist/sceneElements/types.d.ts +261 -0
- package/dist/sceneElements/types.js +3 -0
- package/dist/sceneElements/types.js.map +1 -0
- package/dist/sceneHlod/approximate.d.ts +23 -0
- package/dist/sceneHlod/approximate.js +171 -0
- package/dist/sceneHlod/approximate.js.map +1 -0
- package/dist/sceneHlod/artifact.d.ts +3 -0
- package/dist/sceneHlod/artifact.js +29 -0
- package/dist/sceneHlod/artifact.js.map +1 -0
- package/dist/sceneHlod/bakeSurface.d.ts +2 -0
- package/dist/sceneHlod/bakeSurface.js +59 -0
- package/dist/sceneHlod/bakeSurface.js.map +1 -0
- package/dist/sceneHlod/basisEncoder.d.ts +3 -0
- package/dist/sceneHlod/basisEncoder.js +68 -0
- package/dist/sceneHlod/basisEncoder.js.map +1 -0
- package/dist/sceneHlod/cellArtifact.d.ts +17 -0
- package/dist/sceneHlod/cellArtifact.js +78 -0
- package/dist/sceneHlod/cellArtifact.js.map +1 -0
- package/dist/sceneHlod/commands.d.ts +2 -0
- package/dist/sceneHlod/commands.js +114 -0
- package/dist/sceneHlod/commands.js.map +1 -0
- package/dist/sceneHlod/complete.d.ts +78 -0
- package/dist/sceneHlod/complete.js +261 -0
- package/dist/sceneHlod/complete.js.map +1 -0
- package/dist/sceneHlod/completePrototype.d.ts +39 -0
- package/dist/sceneHlod/completePrototype.js +121 -0
- package/dist/sceneHlod/completePrototype.js.map +1 -0
- package/dist/sceneHlod/geometry.d.ts +6 -0
- package/dist/sceneHlod/geometry.js +101 -0
- package/dist/sceneHlod/geometry.js.map +1 -0
- package/dist/sceneHlod/imageSampling.d.ts +11 -0
- package/dist/sceneHlod/imageSampling.js +100 -0
- package/dist/sceneHlod/imageSampling.js.map +1 -0
- package/dist/sceneHlod/refinement.d.ts +46 -0
- package/dist/sceneHlod/refinement.js +204 -0
- package/dist/sceneHlod/refinement.js.map +1 -0
- package/dist/sceneHlod/scene.d.ts +80 -0
- package/dist/sceneHlod/scene.js +264 -0
- package/dist/sceneHlod/scene.js.map +1 -0
- package/dist/sceneHlod/sharedAtlas.d.ts +37 -0
- package/dist/sceneHlod/sharedAtlas.js +84 -0
- package/dist/sceneHlod/sharedAtlas.js.map +1 -0
- package/dist/sceneHlod/source.d.ts +17 -0
- package/dist/sceneHlod/source.js +241 -0
- package/dist/sceneHlod/source.js.map +1 -0
- package/dist/sceneHlod/textureCodec.d.ts +4 -0
- package/dist/sceneHlod/textureCodec.js +66 -0
- package/dist/sceneHlod/textureCodec.js.map +1 -0
- package/dist/sceneHlod/transfer.d.ts +8 -0
- package/dist/sceneHlod/transfer.js +147 -0
- package/dist/sceneHlod/transfer.js.map +1 -0
- package/dist/sceneHlod/types.d.ts +69 -0
- package/dist/sceneHlod/types.js +3 -0
- package/dist/sceneHlod/types.js.map +1 -0
- package/dist/sceneImport/archive.d.ts +30 -0
- package/dist/sceneImport/archive.js +336 -0
- package/dist/sceneImport/archive.js.map +1 -0
- package/dist/sceneImport/bistroMaterialBake.d.ts +20 -0
- package/dist/sceneImport/bistroMaterialBake.js +169 -0
- package/dist/sceneImport/bistroMaterialBake.js.map +1 -0
- package/dist/sceneImport/bistroTexturePlan.d.ts +6 -0
- package/dist/sceneImport/bistroTexturePlan.js +23 -0
- package/dist/sceneImport/bistroTexturePlan.js.map +1 -0
- package/dist/sceneImport/compiler.d.ts +36 -0
- package/dist/sceneImport/compiler.js +251 -0
- package/dist/sceneImport/compiler.js.map +1 -0
- package/dist/sceneImport/composeMounts.d.ts +159 -0
- package/dist/sceneImport/composeMounts.js +687 -0
- package/dist/sceneImport/composeMounts.js.map +1 -0
- package/dist/sceneImport/defaultMaterials.d.ts +45 -0
- package/dist/sceneImport/defaultMaterials.js +121 -0
- package/dist/sceneImport/defaultMaterials.js.map +1 -0
- package/dist/sceneImport/externalTextures.d.ts +44 -0
- package/dist/sceneImport/externalTextures.js +146 -0
- package/dist/sceneImport/externalTextures.js.map +1 -0
- package/dist/sceneImport/fbx.d.ts +101 -0
- package/dist/sceneImport/fbx.js +307 -0
- package/dist/sceneImport/fbx.js.map +1 -0
- package/dist/sceneImport/glbSplit.d.ts +24 -0
- package/dist/sceneImport/glbSplit.js +95 -0
- package/dist/sceneImport/glbSplit.js.map +1 -0
- package/dist/sceneImport/gltfIo.d.ts +32 -0
- package/dist/sceneImport/gltfIo.js +39 -0
- package/dist/sceneImport/gltfIo.js.map +1 -0
- package/dist/sceneImport/helsinkiTiles.d.ts +31 -0
- package/dist/sceneImport/helsinkiTiles.js +52 -0
- package/dist/sceneImport/helsinkiTiles.js.map +1 -0
- package/dist/sceneImport/materials/binding.d.ts +16 -0
- package/dist/sceneImport/materials/binding.js +42 -0
- package/dist/sceneImport/materials/binding.js.map +1 -0
- package/dist/sceneImport/materials/catalog.d.ts +36 -0
- package/dist/sceneImport/materials/catalog.js +233 -0
- package/dist/sceneImport/materials/catalog.js.map +1 -0
- package/dist/sceneImport/materials/index.d.ts +4 -0
- package/dist/sceneImport/materials/index.js +21 -0
- package/dist/sceneImport/materials/index.js.map +1 -0
- package/dist/sceneImport/materials/matcher.d.ts +33 -0
- package/dist/sceneImport/materials/matcher.js +127 -0
- package/dist/sceneImport/materials/matcher.js.map +1 -0
- package/dist/sceneImport/materials/recipe.d.ts +30 -0
- package/dist/sceneImport/materials/recipe.js +134 -0
- package/dist/sceneImport/materials/recipe.js.map +1 -0
- package/dist/sceneImport/multiAsset.d.ts +79 -0
- package/dist/sceneImport/multiAsset.js +535 -0
- package/dist/sceneImport/multiAsset.js.map +1 -0
- package/dist/sceneImport/multiAssetSpawn.d.ts +40 -0
- package/dist/sceneImport/multiAssetSpawn.js +98 -0
- package/dist/sceneImport/multiAssetSpawn.js.map +1 -0
- package/dist/sceneImport/obj.d.ts +41 -0
- package/dist/sceneImport/obj.js +276 -0
- package/dist/sceneImport/obj.js.map +1 -0
- package/dist/sceneImport/package.d.ts +104 -0
- package/dist/sceneImport/package.js +1004 -0
- package/dist/sceneImport/package.js.map +1 -0
- package/dist/sceneImport/packageReader.d.ts +10 -0
- package/dist/sceneImport/packageReader.js +250 -0
- package/dist/sceneImport/packageReader.js.map +1 -0
- package/dist/sceneImport/proxy.d.ts +100 -0
- package/dist/sceneImport/proxy.js +334 -0
- package/dist/sceneImport/proxy.js.map +1 -0
- package/dist/sceneImport/publish.d.ts +47 -0
- package/dist/sceneImport/publish.js +98 -0
- package/dist/sceneImport/publish.js.map +1 -0
- package/dist/sceneImport/semantic.d.ts +75 -0
- package/dist/sceneImport/semantic.js +296 -0
- package/dist/sceneImport/semantic.js.map +1 -0
- package/dist/sceneImport/spawnProbe.d.ts +55 -0
- package/dist/sceneImport/spawnProbe.js +159 -0
- package/dist/sceneImport/spawnProbe.js.map +1 -0
- package/dist/sceneImport/streamLayout.d.ts +96 -0
- package/dist/sceneImport/streamLayout.js +203 -0
- package/dist/sceneImport/streamLayout.js.map +1 -0
- package/dist/sceneImport/textureDecode.d.ts +21 -0
- package/dist/sceneImport/textureDecode.js +292 -0
- package/dist/sceneImport/textureDecode.js.map +1 -0
- package/dist/sceneImport/types.d.ts +84 -0
- package/dist/sceneImport/types.js +58 -0
- package/dist/sceneImport/types.js.map +1 -0
- package/dist/scenePerformance.d.ts +162 -0
- package/dist/scenePerformance.js +905 -0
- package/dist/scenePerformance.js.map +1 -0
- package/dist/screenshot/captureScreenshots.d.ts +36 -0
- package/dist/screenshot/captureScreenshots.js +229 -0
- package/dist/screenshot/captureScreenshots.js.map +1 -0
- package/dist/screenshot/encodeImagePreview.d.ts +5 -0
- package/dist/screenshot/encodeImagePreview.js +42 -0
- package/dist/screenshot/encodeImagePreview.js.map +1 -0
- package/dist/screenshot/publishThumbnail.d.ts +4 -0
- package/dist/screenshot/publishThumbnail.js +56 -0
- package/dist/screenshot/publishThumbnail.js.map +1 -0
- package/dist/screenshot/staticServe.d.ts +14 -0
- package/dist/screenshot/staticServe.js +120 -0
- package/dist/screenshot/staticServe.js.map +1 -0
- package/dist/source-archive.d.ts +101 -0
- package/dist/source-archive.js +309 -0
- package/dist/source-archive.js.map +1 -0
- package/dist/stdioBlocking.d.ts +1 -0
- package/dist/stdioBlocking.js +9 -0
- package/dist/stdioBlocking.js.map +1 -0
- package/dist/terrain/bake.d.ts +40 -0
- package/dist/terrain/bake.js +318 -0
- package/dist/terrain/bake.js.map +1 -0
- package/dist/terrain/generate.d.ts +21 -0
- package/dist/terrain/generate.js +239 -0
- package/dist/terrain/generate.js.map +1 -0
- package/dist/terrain/grid.d.ts +48 -0
- package/dist/terrain/grid.js +133 -0
- package/dist/terrain/grid.js.map +1 -0
- package/dist/terrain/import.d.ts +40 -0
- package/dist/terrain/import.js +252 -0
- package/dist/terrain/import.js.map +1 -0
- package/dist/terrain/index.d.ts +11 -0
- package/dist/terrain/index.js +88 -0
- package/dist/terrain/index.js.map +1 -0
- package/dist/terrain/inspect.d.ts +35 -0
- package/dist/terrain/inspect.js +115 -0
- package/dist/terrain/inspect.js.map +1 -0
- package/dist/terrain/island.d.ts +31 -0
- package/dist/terrain/island.js +128 -0
- package/dist/terrain/island.js.map +1 -0
- package/dist/terrain/noise.d.ts +79 -0
- package/dist/terrain/noise.js +162 -0
- package/dist/terrain/noise.js.map +1 -0
- package/dist/terrain/normals.d.ts +21 -0
- package/dist/terrain/normals.js +55 -0
- package/dist/terrain/normals.js.map +1 -0
- package/dist/terrain/presets/alpine.json +20 -0
- package/dist/terrain/presets/coast.json +20 -0
- package/dist/terrain/presets/desert.json +22 -0
- package/dist/terrain/presets/forest.json +20 -0
- package/dist/terrain/presets/meadow.json +20 -0
- package/dist/terrain/presets/volcanic.json +22 -0
- package/dist/terrain/presets.d.ts +29 -0
- package/dist/terrain/presets.js +128 -0
- package/dist/terrain/presets.js.map +1 -0
- package/dist/terrain/source.d.ts +42 -0
- package/dist/terrain/source.js +241 -0
- package/dist/terrain/source.js.map +1 -0
- package/dist/terrain/tile.d.ts +92 -0
- package/dist/terrain/tile.js +268 -0
- package/dist/terrain/tile.js.map +1 -0
- package/dist/textureAudit.d.ts +23 -0
- package/dist/textureAudit.js +192 -0
- package/dist/textureAudit.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/unreal/avatarMode.d.ts +21 -0
- package/dist/unreal/avatarMode.js +33 -0
- package/dist/unreal/avatarMode.js.map +1 -0
- package/dist/unreal/delivery.d.ts +46 -0
- package/dist/unreal/delivery.js +89 -0
- package/dist/unreal/delivery.js.map +1 -0
- package/dist/unreal/doctor.d.ts +50 -0
- package/dist/unreal/doctor.js +102 -0
- package/dist/unreal/doctor.js.map +1 -0
- package/dist/unreal/package.d.ts +80 -0
- package/dist/unreal/package.js +273 -0
- package/dist/unreal/package.js.map +1 -0
- package/dist/unreal/release.d.ts +41 -0
- package/dist/unreal/release.js +122 -0
- package/dist/unreal/release.js.map +1 -0
- package/dist/unreal.d.ts +30 -0
- package/dist/unreal.js +362 -0
- package/dist/unreal.js.map +1 -0
- package/dist/unrealCandidate.d.ts +213 -0
- package/dist/unrealCandidate.js +765 -0
- package/dist/unrealCandidate.js.map +1 -0
- package/dist/unrealManifest.d.ts +74 -0
- package/dist/unrealManifest.js +354 -0
- package/dist/unrealManifest.js.map +1 -0
- package/dist/unrealPublish.d.ts +111 -0
- package/dist/unrealPublish.js +331 -0
- package/dist/unrealPublish.js.map +1 -0
- package/dist/vault.d.ts +121 -0
- package/dist/vault.js +136 -0
- package/dist/vault.js.map +1 -0
- package/dist/vehicle/addOnDefinition.d.ts +19 -0
- package/dist/vehicle/addOnDefinition.js +21 -0
- package/dist/vehicle/addOnDefinition.js.map +1 -0
- package/dist/vehicle/addon.d.ts +158 -0
- package/dist/vehicle/addon.js +441 -0
- package/dist/vehicle/addon.js.map +1 -0
- package/dist/vehicle/addonDefinitionGuard.d.ts +53 -0
- package/dist/vehicle/addonDefinitionGuard.js +206 -0
- package/dist/vehicle/addonDefinitionGuard.js.map +1 -0
- package/dist/vehicle/addonPublished.d.ts +80 -0
- package/dist/vehicle/addonPublished.js +221 -0
- package/dist/vehicle/addonPublished.js.map +1 -0
- package/dist/vehicle/audio.d.ts +259 -0
- package/dist/vehicle/audio.js +1069 -0
- package/dist/vehicle/audio.js.map +1 -0
- package/dist/vehicle/audioDefects.d.ts +125 -0
- package/dist/vehicle/audioDefects.js +591 -0
- package/dist/vehicle/audioDefects.js.map +1 -0
- package/dist/vehicle/audioDistinct.d.ts +62 -0
- package/dist/vehicle/audioDistinct.js +479 -0
- package/dist/vehicle/audioDistinct.js.map +1 -0
- package/dist/vehicle/audioImport.d.ts +217 -0
- package/dist/vehicle/audioImport.js +610 -0
- package/dist/vehicle/audioImport.js.map +1 -0
- package/dist/vehicle/audioProvenance.d.ts +47 -0
- package/dist/vehicle/audioProvenance.js +364 -0
- package/dist/vehicle/audioProvenance.js.map +1 -0
- package/dist/vehicle/audioReference.d.ts +36 -0
- package/dist/vehicle/audioReference.js +176 -0
- package/dist/vehicle/audioReference.js.map +1 -0
- package/dist/vehicle/audioSlots.d.ts +27 -0
- package/dist/vehicle/audioSlots.js +43 -0
- package/dist/vehicle/audioSlots.js.map +1 -0
- package/dist/vehicle/audioSpectral.d.ts +71 -0
- package/dist/vehicle/audioSpectral.js +534 -0
- package/dist/vehicle/audioSpectral.js.map +1 -0
- package/dist/vehicle/cabinCheck.d.ts +209 -0
- package/dist/vehicle/cabinCheck.js +799 -0
- package/dist/vehicle/cabinCheck.js.map +1 -0
- package/dist/vehicle/drive.d.ts +66 -0
- package/dist/vehicle/drive.js +228 -0
- package/dist/vehicle/drive.js.map +1 -0
- package/dist/vehicle/enginePolicy.d.ts +68 -0
- package/dist/vehicle/enginePolicy.js +209 -0
- package/dist/vehicle/enginePolicy.js.map +1 -0
- package/dist/vehicle/hostFrame.d.ts +78 -0
- package/dist/vehicle/hostFrame.js +136 -0
- package/dist/vehicle/hostFrame.js.map +1 -0
- package/dist/vehicle/inspectionSheets.d.ts +42 -0
- package/dist/vehicle/inspectionSheets.js +173 -0
- package/dist/vehicle/inspectionSheets.js.map +1 -0
- package/dist/vehicle/keyboardLaunch.d.ts +189 -0
- package/dist/vehicle/keyboardLaunch.js +340 -0
- package/dist/vehicle/keyboardLaunch.js.map +1 -0
- package/dist/vehicle/lampCoverage.d.ts +49 -0
- package/dist/vehicle/lampCoverage.js +252 -0
- package/dist/vehicle/lampCoverage.js.map +1 -0
- package/dist/vehicle/mintAddOn.d.ts +110 -0
- package/dist/vehicle/mintAddOn.js +321 -0
- package/dist/vehicle/mintAddOn.js.map +1 -0
- package/dist/vehicle/mintVehicle.d.ts +189 -0
- package/dist/vehicle/mintVehicle.js +417 -0
- package/dist/vehicle/mintVehicle.js.map +1 -0
- package/dist/vehicle/paintHue.d.ts +89 -0
- package/dist/vehicle/paintHue.js +248 -0
- package/dist/vehicle/paintHue.js.map +1 -0
- package/dist/vehicle/panelCoverage.d.ts +37 -0
- package/dist/vehicle/panelCoverage.js +93 -0
- package/dist/vehicle/panelCoverage.js.map +1 -0
- package/dist/vehicle/platform.d.ts +71 -0
- package/dist/vehicle/platform.js +144 -0
- package/dist/vehicle/platform.js.map +1 -0
- package/dist/vehicle/preview.d.ts +339 -0
- package/dist/vehicle/preview.js +854 -0
- package/dist/vehicle/preview.js.map +1 -0
- package/dist/vehicle/previewAddon.d.ts +197 -0
- package/dist/vehicle/previewAddon.js +520 -0
- package/dist/vehicle/previewAddon.js.map +1 -0
- package/dist/vehicle/previewSeats.d.ts +102 -0
- package/dist/vehicle/previewSeats.js +190 -0
- package/dist/vehicle/previewSeats.js.map +1 -0
- package/dist/vehicle/publish.d.ts +78 -0
- package/dist/vehicle/publish.js +111 -0
- package/dist/vehicle/publish.js.map +1 -0
- package/dist/vehicle/recheckListed.d.ts +87 -0
- package/dist/vehicle/recheckListed.js +200 -0
- package/dist/vehicle/recheckListed.js.map +1 -0
- package/dist/vehicle/renditionManifest.d.ts +10 -0
- package/dist/vehicle/renditionManifest.js +56 -0
- package/dist/vehicle/renditionManifest.js.map +1 -0
- package/dist/vehicle/sealCheck.d.ts +30 -0
- package/dist/vehicle/sealCheck.js +59 -0
- package/dist/vehicle/sealCheck.js.map +1 -0
- package/dist/vehicle/simulate.d.ts +219 -0
- package/dist/vehicle/simulate.js +536 -0
- package/dist/vehicle/simulate.js.map +1 -0
- package/dist/vehicle/simulateRuntime.d.ts +76 -0
- package/dist/vehicle/simulateRuntime.js +252 -0
- package/dist/vehicle/simulateRuntime.js.map +1 -0
- package/dist/vehicle/testutil/sourcedAudio.d.ts +13 -0
- package/dist/vehicle/testutil/sourcedAudio.js +96 -0
- package/dist/vehicle/testutil/sourcedAudio.js.map +1 -0
- package/dist/vehicle/validate.d.ts +225 -0
- package/dist/vehicle/validate.js +956 -0
- package/dist/vehicle/validate.js.map +1 -0
- package/dist/vehicle/wheelDesign.d.ts +98 -0
- package/dist/vehicle/wheelDesign.js +276 -0
- package/dist/vehicle/wheelDesign.js.map +1 -0
- package/dist/verifySubPath.d.ts +69 -0
- package/dist/verifySubPath.js +458 -0
- package/dist/verifySubPath.js.map +1 -0
- package/dist/visualQa/animation.d.ts +57 -0
- package/dist/visualQa/animation.js +503 -0
- package/dist/visualQa/animation.js.map +1 -0
- package/dist/visualQa/avatar.d.ts +3 -0
- package/dist/visualQa/avatar.js +443 -0
- package/dist/visualQa/avatar.js.map +1 -0
- package/dist/visualQa/avatarMath.d.ts +180 -0
- package/dist/visualQa/avatarMath.js +318 -0
- package/dist/visualQa/avatarMath.js.map +1 -0
- package/dist/visualQa/avatarPreview.d.ts +26 -0
- package/dist/visualQa/avatarPreview.js +167 -0
- package/dist/visualQa/avatarPreview.js.map +1 -0
- package/dist/visualQa/avatarPreviewMath.d.ts +189 -0
- package/dist/visualQa/avatarPreviewMath.js +696 -0
- package/dist/visualQa/avatarPreviewMath.js.map +1 -0
- package/dist/visualQa/avatarPreviewProbe.d.ts +7 -0
- package/dist/visualQa/avatarPreviewProbe.js +181 -0
- package/dist/visualQa/avatarPreviewProbe.js.map +1 -0
- package/dist/visualQa/avatarProbe.d.ts +1 -0
- package/dist/visualQa/avatarProbe.js +264 -0
- package/dist/visualQa/avatarProbe.js.map +1 -0
- package/dist/visualQa/browser.d.ts +116 -0
- package/dist/visualQa/browser.js +817 -0
- package/dist/visualQa/browser.js.map +1 -0
- package/dist/visualQa/candidate.d.ts +116 -0
- package/dist/visualQa/candidate.js +265 -0
- package/dist/visualQa/candidate.js.map +1 -0
- package/dist/visualQa/checklists.d.ts +31 -0
- package/dist/visualQa/checklists.js +160 -0
- package/dist/visualQa/checklists.js.map +1 -0
- package/dist/visualQa/command.d.ts +110 -0
- package/dist/visualQa/command.js +521 -0
- package/dist/visualQa/command.js.map +1 -0
- package/dist/visualQa/commonAsserts.d.ts +68 -0
- package/dist/visualQa/commonAsserts.js +239 -0
- package/dist/visualQa/commonAsserts.js.map +1 -0
- package/dist/visualQa/contactSheet.d.ts +32 -0
- package/dist/visualQa/contactSheet.js +153 -0
- package/dist/visualQa/contactSheet.js.map +1 -0
- package/dist/visualQa/critic.d.ts +18 -0
- package/dist/visualQa/critic.js +179 -0
- package/dist/visualQa/critic.js.map +1 -0
- package/dist/visualQa/emotePage.d.ts +10 -0
- package/dist/visualQa/emotePage.js +249 -0
- package/dist/visualQa/emotePage.js.map +1 -0
- package/dist/visualQa/evidenceOverlay.d.ts +74 -0
- package/dist/visualQa/evidenceOverlay.js +268 -0
- package/dist/visualQa/evidenceOverlay.js.map +1 -0
- package/dist/visualQa/harness.d.ts +57 -0
- package/dist/visualQa/harness.js +3 -0
- package/dist/visualQa/harness.js.map +1 -0
- package/dist/visualQa/hosted.d.ts +152 -0
- package/dist/visualQa/hosted.js +367 -0
- package/dist/visualQa/hosted.js.map +1 -0
- package/dist/visualQa/labelLimit.d.ts +12 -0
- package/dist/visualQa/labelLimit.js +31 -0
- package/dist/visualQa/labelLimit.js.map +1 -0
- package/dist/visualQa/mirror.d.ts +36 -0
- package/dist/visualQa/mirror.js +98 -0
- package/dist/visualQa/mirror.js.map +1 -0
- package/dist/visualQa/moveUx.d.ts +44 -0
- package/dist/visualQa/moveUx.js +103 -0
- package/dist/visualQa/moveUx.js.map +1 -0
- package/dist/visualQa/pinnedChrome.d.ts +63 -0
- package/dist/visualQa/pinnedChrome.js +214 -0
- package/dist/visualQa/pinnedChrome.js.map +1 -0
- package/dist/visualQa/resolve.d.ts +88 -0
- package/dist/visualQa/resolve.js +248 -0
- package/dist/visualQa/resolve.js.map +1 -0
- package/dist/visualQa/scene.d.ts +14 -0
- package/dist/visualQa/scene.js +688 -0
- package/dist/visualQa/scene.js.map +1 -0
- package/dist/visualQa/shot.d.ts +2 -0
- package/dist/visualQa/shot.js +27 -0
- package/dist/visualQa/shot.js.map +1 -0
- package/dist/visualQa/signIn.d.ts +35 -0
- package/dist/visualQa/signIn.js +144 -0
- package/dist/visualQa/signIn.js.map +1 -0
- package/dist/visualQa/submitBudget.d.ts +25 -0
- package/dist/visualQa/submitBudget.js +82 -0
- package/dist/visualQa/submitBudget.js.map +1 -0
- package/dist/visualQa/types.d.ts +195 -0
- package/dist/visualQa/types.js +12 -0
- package/dist/visualQa/types.js.map +1 -0
- package/dist/visualQa/vehicle.d.ts +130 -0
- package/dist/visualQa/vehicle.js +2001 -0
- package/dist/visualQa/vehicle.js.map +1 -0
- package/dist/visualQa/vehicleAddonProbe.d.ts +1 -0
- package/dist/visualQa/vehicleAddonProbe.js +115 -0
- package/dist/visualQa/vehicleAddonProbe.js.map +1 -0
- package/dist/visualQa/vehicleCabinFit.d.ts +78 -0
- package/dist/visualQa/vehicleCabinFit.js +55 -0
- package/dist/visualQa/vehicleCabinFit.js.map +1 -0
- package/dist/visualQa/vehicleClearance.d.ts +135 -0
- package/dist/visualQa/vehicleClearance.js +299 -0
- package/dist/visualQa/vehicleClearance.js.map +1 -0
- package/dist/visualQa/vehicleDriveAlive.d.ts +55 -0
- package/dist/visualQa/vehicleDriveAlive.js +103 -0
- package/dist/visualQa/vehicleDriveAlive.js.map +1 -0
- package/dist/visualQa/vehicleGrip.d.ts +156 -0
- package/dist/visualQa/vehicleGrip.js +439 -0
- package/dist/visualQa/vehicleGrip.js.map +1 -0
- package/dist/visualQa/vehicleInspection.d.ts +30 -0
- package/dist/visualQa/vehicleInspection.js +189 -0
- package/dist/visualQa/vehicleInspection.js.map +1 -0
- package/dist/visualQa/vehicleLamps.d.ts +118 -0
- package/dist/visualQa/vehicleLamps.js +374 -0
- package/dist/visualQa/vehicleLamps.js.map +1 -0
- package/dist/visualQa/vehicleMath.d.ts +440 -0
- package/dist/visualQa/vehicleMath.js +967 -0
- package/dist/visualQa/vehicleMath.js.map +1 -0
- package/dist/visualQa/vehicleOccupants.d.ts +66 -0
- package/dist/visualQa/vehicleOccupants.js +448 -0
- package/dist/visualQa/vehicleOccupants.js.map +1 -0
- package/dist/visualQa/vehiclePenetration.d.ts +172 -0
- package/dist/visualQa/vehiclePenetration.js +1157 -0
- package/dist/visualQa/vehiclePenetration.js.map +1 -0
- package/dist/visualQa/vehiclePoses.d.ts +25 -0
- package/dist/visualQa/vehiclePoses.js +56 -0
- package/dist/visualQa/vehiclePoses.js.map +1 -0
- package/dist/visualQa/vehiclePosture.d.ts +78 -0
- package/dist/visualQa/vehiclePosture.js +263 -0
- package/dist/visualQa/vehiclePosture.js.map +1 -0
- package/dist/visualQa/vehiclePreview.d.ts +103 -0
- package/dist/visualQa/vehiclePreview.js +312 -0
- package/dist/visualQa/vehiclePreview.js.map +1 -0
- package/dist/visualQa/vehicleProbe.d.ts +3 -0
- package/dist/visualQa/vehicleProbe.js +670 -0
- package/dist/visualQa/vehicleProbe.js.map +1 -0
- package/dist/visualQa/vehicleStance.d.ts +108 -0
- package/dist/visualQa/vehicleStance.js +200 -0
- package/dist/visualQa/vehicleStance.js.map +1 -0
- package/dist/visualQa/viewer.d.ts +6 -0
- package/dist/visualQa/viewer.js +750 -0
- package/dist/visualQa/viewer.js.map +1 -0
- package/dist/visualQa/viewerGeometry.d.ts +116 -0
- package/dist/visualQa/viewerGeometry.js +476 -0
- package/dist/visualQa/viewerGeometry.js.map +1 -0
- package/dist/visualQa/viewerPage.d.ts +11 -0
- package/dist/visualQa/viewerPage.js +414 -0
- package/dist/visualQa/viewerPage.js.map +1 -0
- package/dist/visualQa/webgpuSelfTest.d.ts +52 -0
- package/dist/visualQa/webgpuSelfTest.js +113 -0
- package/dist/visualQa/webgpuSelfTest.js.map +1 -0
- package/dist/visualQa/winChrome.d.ts +92 -0
- package/dist/visualQa/winChrome.js +445 -0
- package/dist/visualQa/winChrome.js.map +1 -0
- package/dist/visualQa/worldWalk.d.ts +59 -0
- package/dist/visualQa/worldWalk.js +523 -0
- package/dist/visualQa/worldWalk.js.map +1 -0
- package/dist/visualQa/worldWalkMath.d.ts +263 -0
- package/dist/visualQa/worldWalkMath.js +873 -0
- package/dist/visualQa/worldWalkMath.js.map +1 -0
- package/dist/visualQa/worldWalkProbe.d.ts +1 -0
- package/dist/visualQa/worldWalkProbe.js +206 -0
- package/dist/visualQa/worldWalkProbe.js.map +1 -0
- package/dist/visualsConfig.d.ts +65 -0
- package/dist/visualsConfig.js +1333 -0
- package/dist/visualsConfig.js.map +1 -0
- package/dist/voiceCommand.d.ts +11 -0
- package/dist/voiceCommand.js +101 -0
- package/dist/voiceCommand.js.map +1 -0
- package/dist/world/analyze.d.ts +51 -0
- package/dist/world/analyze.js +767 -0
- package/dist/world/analyze.js.map +1 -0
- package/dist/world/baseline.d.ts +33 -0
- package/dist/world/baseline.js +111 -0
- package/dist/world/baseline.js.map +1 -0
- package/dist/world/canonicalize.d.ts +7 -0
- package/dist/world/canonicalize.js +110 -0
- package/dist/world/canonicalize.js.map +1 -0
- package/dist/world/diff.d.ts +18 -0
- package/dist/world/diff.js +58 -0
- package/dist/world/diff.js.map +1 -0
- package/dist/world/focus.d.ts +11 -0
- package/dist/world/focus.js +161 -0
- package/dist/world/focus.js.map +1 -0
- package/dist/world/format.d.ts +6 -0
- package/dist/world/format.js +125 -0
- package/dist/world/format.js.map +1 -0
- package/dist/world/readWorldMetrics.d.ts +10 -0
- package/dist/world/readWorldMetrics.js +31 -0
- package/dist/world/readWorldMetrics.js.map +1 -0
- package/dist/world/snapshotTypes.d.ts +59 -0
- package/dist/world/snapshotTypes.js +8 -0
- package/dist/world/snapshotTypes.js.map +1 -0
- package/dist/world/snapshotWorld.d.ts +16 -0
- package/dist/world/snapshotWorld.js +142 -0
- package/dist/world/snapshotWorld.js.map +1 -0
- package/dist/world/wiring.d.ts +21 -0
- package/dist/world/wiring.js +73 -0
- package/dist/world/wiring.js.map +1 -0
- package/dist/world/zones.d.ts +23 -0
- package/dist/world/zones.js +134 -0
- package/dist/world/zones.js.map +1 -0
- package/docs/bridge.md +304 -0
- package/docs/device-hand-reach.md +44 -0
- package/docs/scene-hlod.md +139 -0
- package/docs/vehicle-audio-import.md +299 -0
- package/docs/vehicle-simulate.md +165 -0
- package/docs/visual-qa-candidate-versions.md +71 -0
- package/docs/visual-qa.md +462 -0
- package/package.json +69 -4
- package/plugins/beamng-vehicle/README.md +129 -0
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_abs.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_audio.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_engine.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_expression.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_jbeam.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_materials.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_stock_events.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/fmod_studio.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/fsb5.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/sim_audio.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/sim_audio_ac.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/sim_audio_beamng.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/sim_audio_fixtures.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/test_beamng_engine.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/test_sim_audio.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/beamng-vehicle.mjs +1295 -0
- package/plugins/beamng-vehicle/bin/beamng_abs.py +408 -0
- package/plugins/beamng-vehicle/bin/beamng_audio.py +394 -0
- package/plugins/beamng-vehicle/bin/beamng_engine.py +184 -0
- package/plugins/beamng-vehicle/bin/beamng_expression.py +373 -0
- package/plugins/beamng-vehicle/bin/beamng_jbeam.py +858 -0
- package/plugins/beamng-vehicle/bin/beamng_materials.py +261 -0
- package/plugins/beamng-vehicle/bin/beamng_stock_events.py +171 -0
- package/plugins/beamng-vehicle/bin/convert-beamng.py +1563 -0
- package/plugins/beamng-vehicle/bin/fmod_studio.py +524 -0
- package/plugins/beamng-vehicle/bin/fsb5.py +304 -0
- package/plugins/beamng-vehicle/bin/index-beamng-common.mjs +16 -0
- package/plugins/beamng-vehicle/bin/index-beamng.py +69 -0
- package/plugins/beamng-vehicle/bin/lower-beamng.py +2399 -0
- package/plugins/beamng-vehicle/bin/sim_audio.py +250 -0
- package/plugins/beamng-vehicle/bin/sim_audio_ac.py +378 -0
- package/plugins/beamng-vehicle/bin/sim_audio_beamng.py +878 -0
- package/plugins/beamng-vehicle/bin/sim_audio_fixtures.py +287 -0
- package/plugins/beamng-vehicle/bin/sim_audio_import.py +135 -0
- package/plugins/beamng-vehicle/bin/test_beamng_engine.py +124 -0
- package/plugins/beamng-vehicle/bin/test_beamng_jbeam.py +383 -0
- package/plugins/beamng-vehicle/bin/test_beamng_precedence.py +134 -0
- package/plugins/beamng-vehicle/bin/test_sim_audio.py +249 -0
- package/plugins/beamng-vehicle/bridge-plugin.json +55 -0
- package/plugins/beamng-vehicle/controller-adapters/beamng-0.39.4-abs.json +52 -0
- package/plugins/beamng-vehicle/lib/common-dependency.mjs +357 -0
- package/plugins/beamng-vehicle/lib/dae-scan.mjs +40 -0
- package/plugins/beamng-vehicle/lib/file-identity.mjs +46 -0
- package/plugins/beamng-vehicle/lib/material-semantics.mjs +312 -0
- package/plugins/beamng-vehicle/lib/palette-contract.mjs +6 -0
- package/plugins/beamng-vehicle/lib/vehicle-qa.mjs +567 -0
- package/plugins/beamng-vehicle/lib/vehicle-source.mjs +247 -0
- package/plugins/beamng-vehicle/profiles/source-compatibility.json +14 -0
- package/plugins/beamng-vehicle/vendor/vehicle-package-v2.mjs +6451 -0
- package/vendor/README.md +63 -0
- package/vendor/ability-manifest.mjs +527 -6
- package/vendor/audits/asset-credits.mjs +96 -0
- package/vendor/audits/check-loaders.mjs +80 -0
- package/vendor/audits/perf-gate.mjs +759 -0
- package/vendor/audits/prove-live.mjs +307 -0
- package/vendor/audits/source-audit.mjs +530 -0
- package/vendor/audits/world-audit.mjs +439 -0
- package/vendor/capture-body.glb +0 -0
- package/vendor/capture-face.glb +0 -0
- package/vendor/installed-index.mjs +1 -1
- package/vendor/vehicle-package-v2.mjs +6451 -0
package/dist/init.js
CHANGED
|
@@ -1,57 +1,676 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.slugify = slugify;
|
|
37
|
+
exports.sdkDependencySpec = sdkDependencySpec;
|
|
3
38
|
exports.initTemplate = initTemplate;
|
|
39
|
+
exports.initTemplateWithTerrain = initTemplateWithTerrain;
|
|
4
40
|
const node_fs_1 = require("node:fs");
|
|
5
41
|
const node_path_1 = require("node:path");
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
42
|
+
const config_1 = require("./config");
|
|
43
|
+
const compiler_1 = require("./sceneElements/compiler");
|
|
44
|
+
const types_1 = require("./sceneImport/types");
|
|
45
|
+
// Pinned ranges for a freshly scaffolded world. engine-core is pinned by DEFAULT (not left to an
|
|
46
|
+
// upgrade pass) because every engine-core tool needs BOTH halves — the pin AND a matching in-world
|
|
47
|
+
// call — and a world scaffolded without them cannot be measured or captured at all until someone
|
|
48
|
+
// retrofits both. main.ts below makes both calls: world.ready() for `helix world inspect` /
|
|
49
|
+
// inspect_world / world_metrics, and screenshots.register() + screenshots.ready() for `helix
|
|
50
|
+
// screenshot` / capture_world_screenshot.
|
|
51
|
+
//
|
|
52
|
+
// >= 0.1.2 is what the screenshot `hide` option needs (added in 0.1.1); do not loosen it.
|
|
53
|
+
const SYSTEM_PINS = {
|
|
54
|
+
'humanoid-character': '^0.3',
|
|
55
|
+
'engine-core': '^0.1.2',
|
|
56
|
+
};
|
|
57
|
+
// A scene world's environment IS the streamed Scene v2 document, so it pins the two systems that
|
|
58
|
+
// realize it — and main.ts below calls both (the pin-without-its-call trap above).
|
|
59
|
+
//
|
|
60
|
+
// >= 0.1.9 is the first @helix/visual carrying the GI contributor lane `attachSceneVisuals` drives
|
|
61
|
+
// (0.1.8 is the maintainers' fidelity-contract release, without it). @helix/scene 0.3 is the line with
|
|
62
|
+
// Scene HLOD, activation volumes and distant trees; the 0.2 line keeps serving worlds that pinned it.
|
|
63
|
+
const SCENE_SYSTEM_PINS = {
|
|
64
|
+
scene: '^0.3',
|
|
65
|
+
visual: '^0.1.9',
|
|
66
|
+
};
|
|
67
|
+
/** The starter document's folder under public/scene/ — `?scene=<folder>` picks between documents. */
|
|
68
|
+
const SCENE_FOLDER = 'mall';
|
|
69
|
+
// The starter terrain: 4 x 4 tiles at 1 m per sample (256 m each), generated from a FIXED seed so two scaffolds of the same
|
|
70
|
+
// preset produce byte-identical ground, and read back by the compiler from the folder beside the document.
|
|
71
|
+
const TERRAIN_FOLDER = 'terrain';
|
|
72
|
+
const STARTER_TERRAIN_TILES = 4;
|
|
73
|
+
const STARTER_TERRAIN_SEED = 4242;
|
|
74
|
+
// The starter scene, compiled OFFLINE at scaffold time. This is a copy of the CLI's own
|
|
75
|
+
// examples/minimal-mall.elements.json: `examples/` is not in package.json `files`, so it does not
|
|
76
|
+
// reach the published package and cannot be read from disk at scaffold time.
|
|
77
|
+
const MALL_ELEMENTS = `{
|
|
78
|
+
"format": "helix.scene-elements",
|
|
79
|
+
"version": 1,
|
|
80
|
+
"id": "scene.example.mall",
|
|
81
|
+
"title": "Minimal Mall",
|
|
82
|
+
"spawn": { "position": [0, 1.9, 4], "rotationYDeg": 180 },
|
|
83
|
+
"buildings": [
|
|
84
|
+
{
|
|
85
|
+
"id": "building.mall",
|
|
86
|
+
"type": "building",
|
|
87
|
+
"elements": [
|
|
88
|
+
{
|
|
89
|
+
"id": "floor.ground",
|
|
90
|
+
"type": "floor",
|
|
91
|
+
"center": [0, 0],
|
|
92
|
+
"elevation": -0.1,
|
|
93
|
+
"size": [20, 12],
|
|
94
|
+
"thickness": 0.2
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
"id": "wall.north",
|
|
98
|
+
"type": "wall",
|
|
99
|
+
"start": [-10, -6],
|
|
100
|
+
"end": [10, -6],
|
|
101
|
+
"height": 4,
|
|
102
|
+
"thickness": 0.25
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
"id": "ceiling.main",
|
|
106
|
+
"type": "ceiling",
|
|
107
|
+
"center": [0, 0],
|
|
108
|
+
"elevation": 4,
|
|
109
|
+
"size": [20, 12],
|
|
110
|
+
"thickness": 0.2
|
|
111
|
+
}
|
|
112
|
+
]
|
|
113
|
+
}
|
|
114
|
+
]
|
|
115
|
+
}
|
|
116
|
+
`;
|
|
117
|
+
/** The mall, and — when the scaffold generated one — the terrain it stands on. */
|
|
118
|
+
function starterElements(terrain) {
|
|
119
|
+
const elements = JSON.parse(MALL_ELEMENTS);
|
|
120
|
+
if (!terrain)
|
|
121
|
+
return elements;
|
|
122
|
+
elements.terrain = { type: 'terrain', id: 'ground', source: terrain.source };
|
|
123
|
+
elements.buildings[0].position = [0, terrain.groundY, 0];
|
|
124
|
+
elements.spawn.position = [0, terrain.groundY + 1.9, 4];
|
|
125
|
+
return elements;
|
|
126
|
+
}
|
|
127
|
+
// Compiling here (rather than shipping a pre-sealed document) keeps the pin and the bytes provably
|
|
128
|
+
// the same object: `revision` and `integrity.sha256` come off the document the scaffold just wrote.
|
|
129
|
+
function compileStarterScene(terrain) {
|
|
130
|
+
const scene = (0, compiler_1.compileSceneElements)(starterElements(terrain?.terrain ?? null), terrain ? { baseDir: terrain.baseDir } : {});
|
|
131
|
+
return {
|
|
132
|
+
document: (0, types_1.serializeSceneDocument)(scene),
|
|
133
|
+
pin: {
|
|
134
|
+
kind: 'scene-v2',
|
|
135
|
+
id: scene.id,
|
|
136
|
+
revision: scene.revision,
|
|
137
|
+
integrity: { sha256: scene.integrity.sha256 },
|
|
138
|
+
},
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
function slugify(value) {
|
|
142
|
+
return value
|
|
143
|
+
.toLowerCase()
|
|
144
|
+
.replace(/[^a-z0-9-]+/g, '-')
|
|
145
|
+
.replace(/^-+|-+$/g, '')
|
|
146
|
+
.slice(0, 50)
|
|
147
|
+
.padEnd(3, '0');
|
|
148
|
+
}
|
|
149
|
+
function manifest(opts, scenePin) {
|
|
150
|
+
// A scene world is a multiplayer world whose environment is streamed rather than built in code.
|
|
151
|
+
const multiplayer = opts.kind === 'multiplayer' || opts.kind === 'scene';
|
|
152
|
+
const base = {
|
|
153
|
+
// v0.3 adds the multiplayer block + the reserved voice.* permissions; a single-player character
|
|
154
|
+
// world stays on v0.2. Both carry `systems`, which is what `helix install` resolves.
|
|
155
|
+
helixVersion: multiplayer ? '0.3' : '0.2',
|
|
156
|
+
title: opts.title,
|
|
157
|
+
slug: opts.slug,
|
|
14
158
|
entry: 'index.html',
|
|
15
|
-
maxPlayers: 1,
|
|
16
|
-
permissions:
|
|
159
|
+
maxPlayers: multiplayer ? opts.maxPlayers : 1,
|
|
160
|
+
permissions: multiplayer
|
|
161
|
+
? ['auth.profile', 'multiplayer', 'voice.proximity']
|
|
162
|
+
: ['auth.profile'],
|
|
17
163
|
supportsMobile: true,
|
|
18
164
|
contentRating: 'everyone',
|
|
19
|
-
|
|
20
|
-
|
|
165
|
+
systems: {
|
|
166
|
+
...SYSTEM_PINS,
|
|
167
|
+
...(opts.kind === 'scene' ? SCENE_SYSTEM_PINS : {}),
|
|
168
|
+
},
|
|
169
|
+
...(multiplayer
|
|
170
|
+
? {
|
|
171
|
+
multiplayer: {
|
|
172
|
+
// Proximity voice is ON by default in every multiplayer world — remove this block AND
|
|
173
|
+
// the fail-soft join in main.ts only for a deliberately silent world.
|
|
174
|
+
voice: { mode: 'proximity' },
|
|
175
|
+
},
|
|
176
|
+
}
|
|
177
|
+
: {}),
|
|
178
|
+
// The environment a published scene world streams. `integrity.sha256` is the AUTHORITATIVE
|
|
179
|
+
// address (documents are content-addressed); id/revision are advisory display text.
|
|
180
|
+
...(scenePin ? { scene: scenePin } : {}),
|
|
181
|
+
};
|
|
182
|
+
return `${JSON.stringify(base, null, 2)}\n`;
|
|
183
|
+
}
|
|
184
|
+
function sdkDependencySpec(scope = config_1.HELIX_SCOPE) {
|
|
185
|
+
return scope === '@hypersoniclabs'
|
|
186
|
+
? '^0.1.0'
|
|
187
|
+
: `npm:${scope}/helix-sdk@latest`;
|
|
188
|
+
}
|
|
189
|
+
function packageJson(slug) {
|
|
190
|
+
return `${JSON.stringify({
|
|
191
|
+
name: slug,
|
|
192
|
+
version: '0.1.0',
|
|
193
|
+
private: true,
|
|
194
|
+
type: 'module',
|
|
195
|
+
scripts: {
|
|
196
|
+
dev: 'vite',
|
|
197
|
+
build: 'vite build',
|
|
198
|
+
preview: 'vite preview',
|
|
199
|
+
typecheck: 'tsc --noEmit',
|
|
200
|
+
},
|
|
201
|
+
dependencies: {
|
|
202
|
+
// Keep source imports stable while resolving the SDK from the same
|
|
203
|
+
// environment scope as this CLI build. A helix3 scaffold that silently
|
|
204
|
+
// installs the production SDK starts stale and contradicts doctor/MCP.
|
|
205
|
+
'@hypersoniclabs/helix-sdk': sdkDependencySpec(),
|
|
206
|
+
},
|
|
207
|
+
devDependencies: {
|
|
208
|
+
// Rapier is a devDependency like three: the build externalizes it and the browser resolves
|
|
209
|
+
// the bare specifier through the import map, while types + `helix dev` use the local copy.
|
|
210
|
+
'@dimforge/rapier3d-compat': '^0.14.0',
|
|
211
|
+
'@types/three': '^0.185.4',
|
|
212
|
+
three: '^0.185.1',
|
|
213
|
+
typescript: '~5.7.3',
|
|
214
|
+
vite: '^6.0.0',
|
|
215
|
+
},
|
|
216
|
+
}, null, 2)}\n`;
|
|
217
|
+
}
|
|
218
|
+
const VITE_CONFIG = `import { defineConfig } from 'vite';
|
|
219
|
+
import { fileURLToPath } from 'node:url';
|
|
220
|
+
|
|
221
|
+
// base: './' is REQUIRED. A published world is served from a nested path
|
|
222
|
+
// (…/instant-worlds/<id>/<build>/), never the origin root, so root-absolute asset URLs 404 in
|
|
223
|
+
// production while working perfectly in local preview. A relative base is what makes one build work
|
|
224
|
+
// at both. \`helix verify-subpath dist\` proves it.
|
|
225
|
+
//
|
|
226
|
+
// \`three\`, \`@dimforge/rapier3d-compat\`, and platform-owned \`@helix/*\` systems stay EXTERNAL:
|
|
227
|
+
// the browser resolves the bare specifiers
|
|
228
|
+
// through the import map in index.html (written by \`helix install\`) to the platform-hosted single
|
|
229
|
+
// instances, so the world, the platform system, and the runtime abilities all share ONE of each —
|
|
230
|
+
// and the ~2 MB Rapier module is downloaded once per player, not baked into every world bundle.
|
|
231
|
+
//
|
|
232
|
+
// Test locally with \`npm run build\` + \`npm run preview\` — NOT the dev server, which rewrites bare
|
|
233
|
+
// imports and hides whether the import map is correct.
|
|
234
|
+
export default defineConfig({
|
|
235
|
+
base: './',
|
|
236
|
+
resolve: {
|
|
237
|
+
alias: {
|
|
238
|
+
// \`helix install\` materializes the resolved systems here. Every engine-core SUBPATH alias must
|
|
239
|
+
// come BEFORE the root '@helix/engine-core' entry — rollup substitutes by prefix in object
|
|
240
|
+
// order, and a root alias listed first mangles a subpath import into an ENOENT.
|
|
241
|
+
'@helix/engine-core/inspect': fileURLToPath(new URL('./public/helix_modules/engine-core/inspect/index.js', import.meta.url)),
|
|
242
|
+
'@helix/engine-core/screenshot': fileURLToPath(new URL('./public/helix_modules/engine-core/screenshot/index.js', import.meta.url)),
|
|
243
|
+
'@helix/engine-core/world-camera': fileURLToPath(new URL('./public/helix_modules/engine-core/world-camera/index.js', import.meta.url)),
|
|
244
|
+
'@helix/engine-core': fileURLToPath(new URL('./public/helix_modules/engine-core/index.js', import.meta.url)),
|
|
245
|
+
'@helix/humanoid-character': fileURLToPath(new URL('./public/helix_modules/humanoid-character/index.js', import.meta.url)),
|
|
246
|
+
// Scene-world systems. An alias is inert until something imports it, so these are harmless in a
|
|
247
|
+
// world that pins neither — the subpath-before-root rule above applies to '@helix/scene' too.
|
|
248
|
+
'@helix/scene/visual': fileURLToPath(new URL('./public/helix_modules/scene/visual/index.js', import.meta.url)),
|
|
249
|
+
'@helix/scene': fileURLToPath(new URL('./public/helix_modules/scene/index.js', import.meta.url)),
|
|
250
|
+
'@helix/visual': fileURLToPath(new URL('./public/helix_modules/visual/index.js', import.meta.url)),
|
|
251
|
+
},
|
|
252
|
+
},
|
|
253
|
+
build: {
|
|
254
|
+
target: 'es2022',
|
|
255
|
+
rollupOptions: { external: (id) => id === 'three' || id === '@dimforge/rapier3d-compat' || id.startsWith('@helix/') },
|
|
256
|
+
},
|
|
257
|
+
});
|
|
258
|
+
`;
|
|
259
|
+
const TSCONFIG = `${JSON.stringify({
|
|
260
|
+
compilerOptions: {
|
|
261
|
+
target: 'ES2022',
|
|
262
|
+
module: 'ESNext',
|
|
263
|
+
moduleResolution: 'bundler',
|
|
264
|
+
lib: ['ES2022', 'DOM', 'DOM.Iterable'],
|
|
265
|
+
strict: true,
|
|
266
|
+
noEmit: true,
|
|
267
|
+
skipLibCheck: true,
|
|
268
|
+
resolveJsonModule: true,
|
|
269
|
+
isolatedModules: true,
|
|
270
|
+
types: ['vite/client'],
|
|
271
|
+
paths: {
|
|
272
|
+
'@helix/humanoid-character': [
|
|
273
|
+
'./public/helix_modules/humanoid-character/index.d.ts',
|
|
274
|
+
],
|
|
275
|
+
// One entry per engine-core subpath the world can import, plus the root. TypeScript matches
|
|
276
|
+
// `paths` by longest pattern rather than object order, so ordering is cosmetic here — but it
|
|
277
|
+
// mirrors vite.config.ts, where the order IS load-bearing.
|
|
278
|
+
'@helix/engine-core/inspect': [
|
|
279
|
+
'./public/helix_modules/engine-core/inspect/index.d.ts',
|
|
280
|
+
],
|
|
281
|
+
'@helix/engine-core/screenshot': [
|
|
282
|
+
'./public/helix_modules/engine-core/screenshot/index.d.ts',
|
|
283
|
+
],
|
|
284
|
+
'@helix/engine-core/world-camera': [
|
|
285
|
+
'./public/helix_modules/engine-core/world-camera/index.d.ts',
|
|
286
|
+
],
|
|
287
|
+
'@helix/engine-core': [
|
|
288
|
+
'./public/helix_modules/engine-core/index.d.ts',
|
|
289
|
+
],
|
|
290
|
+
'@helix/scene/visual': [
|
|
291
|
+
'./public/helix_modules/scene/visual/index.d.ts',
|
|
292
|
+
],
|
|
293
|
+
'@helix/scene': [
|
|
294
|
+
'./public/helix_modules/scene/index.d.ts',
|
|
295
|
+
],
|
|
296
|
+
'@helix/visual': [
|
|
297
|
+
'./public/helix_modules/visual/index.d.ts',
|
|
298
|
+
],
|
|
299
|
+
},
|
|
300
|
+
},
|
|
301
|
+
include: ['src'],
|
|
302
|
+
}, null, 2)}\n`;
|
|
303
|
+
const GITIGNORE = `node_modules/
|
|
304
|
+
dist/
|
|
305
|
+
# Resolved system/ability CODE — re-created by \`helix install\` from helix.lock.json.
|
|
306
|
+
public/helix_modules/
|
|
307
|
+
`;
|
|
308
|
+
// Durable, machine-readable proof for the mobile audit. The generated HUD also exposes the same
|
|
309
|
+
// contract marker in the live DOM; this file survives bundling so validation does not guess from a
|
|
310
|
+
// fragile source regex. A custom implementation may replace provider with "custom" while keeping
|
|
311
|
+
// the required capabilities honest and proving them in touch QA.
|
|
312
|
+
const MOBILE_CONTROLS_CONTRACT = `${JSON.stringify({
|
|
313
|
+
version: 1,
|
|
314
|
+
provider: '@helix/humanoid-character',
|
|
315
|
+
capabilities: ['move', 'look', 'zoom', 'jump'],
|
|
316
|
+
}, null, 2)}\n`;
|
|
317
|
+
// How a scene world is LIT — the per-world visual contract `helix validate` audits and `helix
|
|
318
|
+
// bake-lighting` patches. sceneVisualsConfig() overlays what the scene itself declares (its authored
|
|
319
|
+
// sun, probe box, exposure band) on top of this before the runtime parses it.
|
|
320
|
+
const VISUALS_CONFIG = `${JSON.stringify({
|
|
321
|
+
version: 1,
|
|
322
|
+
mode: 'dynamic',
|
|
323
|
+
timeOfDay: {
|
|
324
|
+
hours: 10,
|
|
325
|
+
cycleSeconds: 0,
|
|
326
|
+
latitudeDeg: 10,
|
|
327
|
+
declinationDeg: 0,
|
|
328
|
+
noonAzimuthDeg: 130,
|
|
329
|
+
},
|
|
330
|
+
}, null, 2)}\n`;
|
|
331
|
+
// Read at the BUNDLE root: vite copies public/ verbatim into dist/, which is what `helix publish`
|
|
332
|
+
// uploads, so this file is what makes the local documents dev-only rather than merely intended.
|
|
333
|
+
const HELIXIGNORE = `# gitignore-style, read at the bundle root. A published world resolves its scene from the pin in helix.json, so
|
|
334
|
+
# the documents under scene/ are a DEV OVERRIDE that must never ride into the bundle vite copies into dist/.
|
|
335
|
+
scene/
|
|
336
|
+
terrain/
|
|
337
|
+
`;
|
|
338
|
+
// GENERATED by `helix install`; emitted as placeholders so `npm run typecheck` and an editor both
|
|
339
|
+
// work in a freshly scaffolded project, before install has ever run.
|
|
340
|
+
const RUNTIME_STUB = `// GENERATED by \`helix install\` — do not hand-edit. These are placeholders until you run install,
|
|
341
|
+
// which fills them from the resolved system: the hosted three version, its module URL + KTX2
|
|
342
|
+
// transcoder path on the platform CDN, and the system's CDN asset base (from helix.lock.json).
|
|
343
|
+
export const THREE_VERSION = '';
|
|
344
|
+
export const THREE_MODULE_URL = '';
|
|
345
|
+
export const TRANSCODER_PATH = '/runtime/basis/';
|
|
346
|
+
export const SYSTEM_ASSET_BASE = '';
|
|
347
|
+
`;
|
|
348
|
+
const escapeHtml = (value) => value.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');
|
|
349
|
+
function indexHtml(title) {
|
|
350
|
+
const escaped = escapeHtml(title);
|
|
351
|
+
return `<!doctype html>
|
|
21
352
|
<html lang="en">
|
|
22
353
|
<head>
|
|
23
354
|
<meta charset="utf-8" />
|
|
24
355
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
25
|
-
<title
|
|
26
|
-
|
|
356
|
+
<title>${escaped}</title>
|
|
357
|
+
<!-- data: favicon stops the browser's automatic /favicon.ico probe — that request escapes the
|
|
358
|
+
bundle's sub-path and 404s at the CDN in production for every published world. -->
|
|
359
|
+
<link rel="icon" href="data:," />
|
|
360
|
+
<!-- helix:three:start -->
|
|
361
|
+
<!-- \`helix install\` writes the import map here, pointing the bare \`three\` specifier at the
|
|
362
|
+
platform-hosted single instance. Until you run install it stays empty (the build won't load). -->
|
|
27
363
|
<script type="importmap">
|
|
28
|
-
|
|
364
|
+
{ "imports": { "three": "" } }
|
|
29
365
|
</script>
|
|
366
|
+
<!-- helix:three:end -->
|
|
367
|
+
<style>
|
|
368
|
+
html, body { margin: 0; height: 100%; overflow: hidden; background: #14161a; }
|
|
369
|
+
#hud {
|
|
370
|
+
position: fixed; top: 12px; left: 12px; z-index: 10;
|
|
371
|
+
font: 12px/1.5 ui-monospace, monospace; color: #cdd6e0; white-space: pre;
|
|
372
|
+
background: rgba(20, 22, 26, 0.7); border: 1px solid #39424e;
|
|
373
|
+
border-radius: 6px; padding: 8px 10px;
|
|
374
|
+
}
|
|
375
|
+
#controls-hint {
|
|
376
|
+
position: fixed; left: 50%; bottom: 28px; z-index: 10; transform: translateX(-50%);
|
|
377
|
+
max-width: min(560px, calc(100vw - 32px)); padding: 10px 14px; border-radius: 999px;
|
|
378
|
+
color: #eef4fb; background: rgba(20, 22, 26, 0.72); border: 1px solid rgba(205, 214, 224, 0.28);
|
|
379
|
+
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.22); backdrop-filter: blur(14px);
|
|
380
|
+
font: 500 13px/1.4 system-ui, sans-serif; text-align: center; pointer-events: none;
|
|
381
|
+
opacity: 1; transition: opacity 0.35s ease, transform 0.35s ease;
|
|
382
|
+
}
|
|
383
|
+
#controls-hint.hidden { opacity: 0; transform: translate(-50%, 6px); }
|
|
384
|
+
/* Loading overlay — painted on HTML parse (before any JS downloads → no flash). */
|
|
385
|
+
#loading {
|
|
386
|
+
position: fixed; inset: 0; z-index: 100; display: flex; align-items: center; justify-content: center;
|
|
387
|
+
background: #14161a; color: #cdd6e0; font: 13px/1.5 ui-monospace, monospace;
|
|
388
|
+
opacity: 1; transition: opacity 0.4s ease;
|
|
389
|
+
}
|
|
390
|
+
html[data-helix-hosted-loading] #loading { display: none; }
|
|
391
|
+
#loading.done { opacity: 0; pointer-events: none; }
|
|
392
|
+
#loading .card { width: min(360px, 76vw); text-align: center; }
|
|
393
|
+
#loading .eyebrow { font-size: 11px; letter-spacing: 0.18em; text-transform: uppercase; color: #6cc7ff; opacity: 0.75; }
|
|
394
|
+
#loading .title { margin: 6px 0 18px; font-size: 16px; font-weight: 600; color: #e6edf5; }
|
|
395
|
+
#loading .bar { height: 6px; border-radius: 3px; background: #232830; overflow: hidden; }
|
|
396
|
+
#loading #bar { width: 30%; height: 100%; border-radius: 3px; background: #6cc7ff; animation: helix-marquee 1.1s ease-in-out infinite; }
|
|
397
|
+
#loading.determinate #bar { animation: none; transition: width 0.25s ease; }
|
|
398
|
+
#loading.working #bar { animation: helix-pulse 1s ease-in-out infinite; }
|
|
399
|
+
#loading.error #bar { animation: none; width: 100% !important; background: #e5675e; }
|
|
400
|
+
#loading-text { margin-top: 12px; color: #9aa7b4; }
|
|
401
|
+
@keyframes helix-marquee { 0% { transform: translateX(-110%); } 100% { transform: translateX(370%); } }
|
|
402
|
+
@keyframes helix-pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.4; } }
|
|
403
|
+
</style>
|
|
30
404
|
</head>
|
|
31
405
|
<body>
|
|
32
|
-
<script
|
|
406
|
+
<script>
|
|
407
|
+
// The host owns the overlay only when it explicitly asks and this is an iframe.
|
|
408
|
+
if (window.parent !== window && new URLSearchParams(location.search).get('helixHostedLoading') === '1') {
|
|
409
|
+
document.documentElement.setAttribute('data-helix-hosted-loading', '');
|
|
410
|
+
}
|
|
411
|
+
</script>
|
|
412
|
+
<div id="loading">
|
|
413
|
+
<div class="card">
|
|
414
|
+
<div class="eyebrow">HELIX Instant</div>
|
|
415
|
+
<div class="title">${escaped}</div>
|
|
416
|
+
<div class="bar"><div id="bar"></div></div>
|
|
417
|
+
<div id="loading-text">Starting…</div>
|
|
418
|
+
</div>
|
|
419
|
+
</div>
|
|
420
|
+
<div id="hud">Loading…</div>
|
|
421
|
+
<div id="controls-hint" aria-live="polite"></div>
|
|
422
|
+
<script type="module" src="/src/main.ts"></script>
|
|
33
423
|
</body>
|
|
34
424
|
</html>
|
|
35
|
-
|
|
36
|
-
|
|
425
|
+
`;
|
|
426
|
+
}
|
|
427
|
+
const LOADING_TS = `// Standalone owns the HTML overlay; the hosted shell owns it with ?helixHostedLoading=1.
|
|
428
|
+
// Readiness means the first rendered frame, not the SDK handshake or an asset manager batch.
|
|
429
|
+
import * as THREE from 'three';
|
|
430
|
+
|
|
431
|
+
export type LoadingScreen = {
|
|
432
|
+
/** Register an extra async unit of work so it counts on the bar. Returns its completion callback. */
|
|
433
|
+
task: (label?: string) => () => void;
|
|
434
|
+
done: () => void;
|
|
435
|
+
error: (message: string) => void;
|
|
436
|
+
};
|
|
437
|
+
|
|
438
|
+
export function createLoadingScreen(): LoadingScreen {
|
|
439
|
+
const root = document.getElementById('loading');
|
|
440
|
+
const bar = document.getElementById('bar');
|
|
441
|
+
const text = document.getElementById('loading-text');
|
|
442
|
+
const hosted = window.parent !== window && new URLSearchParams(location.search).get('helixHostedLoading') === '1';
|
|
443
|
+
let parentOrigin = '*';
|
|
444
|
+
try {
|
|
445
|
+
const origin = new URL(document.referrer).origin;
|
|
446
|
+
if (origin !== 'null') parentOrigin = origin;
|
|
447
|
+
} catch { /* An opaque or absent referrer has no target origin; the shell validates our frame. */ }
|
|
448
|
+
let extraTotal = 0;
|
|
449
|
+
let extraDone = 0;
|
|
450
|
+
let assetsTotal = 0;
|
|
451
|
+
let assetsDone = 0;
|
|
452
|
+
let fraction = 0;
|
|
453
|
+
const progress = () => {
|
|
454
|
+
const total = assetsTotal + extraTotal;
|
|
455
|
+
if (total > 0) fraction = Math.max(fraction, Math.min(1, (assetsDone + extraDone) / total));
|
|
456
|
+
return { loaded: fraction * total, total };
|
|
457
|
+
};
|
|
458
|
+
let state: 'loading' | 'ready' | 'error' = 'loading';
|
|
459
|
+
let label = 'Starting…';
|
|
460
|
+
const manager = THREE.DefaultLoadingManager;
|
|
461
|
+
const previousProgress = manager.onProgress;
|
|
462
|
+
|
|
463
|
+
const report = (error?: string) => {
|
|
464
|
+
if (!hosted) return;
|
|
465
|
+
const { total } = progress();
|
|
466
|
+
window.parent.postMessage({
|
|
467
|
+
type: 'helix:loading', state, label: label.slice(0, 160),
|
|
468
|
+
...(total > 0 ? { loaded: fraction, total: 1 } : {}),
|
|
469
|
+
...(error !== undefined ? { error: error.slice(0, 2000) } : {}),
|
|
470
|
+
}, parentOrigin);
|
|
471
|
+
};
|
|
472
|
+
const render = () => {
|
|
473
|
+
if (state !== 'loading') return;
|
|
474
|
+
const { total } = progress();
|
|
475
|
+
if (text) text.textContent = label;
|
|
476
|
+
if (root && bar && total > 0) {
|
|
477
|
+
root.classList.add('determinate');
|
|
478
|
+
bar.style.width = \`\${Math.min(100, Math.round(fraction * 100))}%\`;
|
|
479
|
+
}
|
|
480
|
+
report();
|
|
481
|
+
};
|
|
482
|
+
const fail = (message: string) => {
|
|
483
|
+
if (state !== 'loading') return;
|
|
484
|
+
const details = message || 'World startup failed';
|
|
485
|
+
state = 'error';
|
|
486
|
+
label = details;
|
|
487
|
+
root?.classList.add('error');
|
|
488
|
+
if (text) text.textContent = details;
|
|
489
|
+
report(details);
|
|
490
|
+
};
|
|
491
|
+
const onProgress: NonNullable<typeof manager.onProgress> = (url, loaded, total) => {
|
|
492
|
+
assetsDone = loaded;
|
|
493
|
+
assetsTotal = total;
|
|
494
|
+
label = 'Loading assets…';
|
|
495
|
+
render();
|
|
496
|
+
previousProgress?.call(manager, url, loaded, total);
|
|
497
|
+
};
|
|
498
|
+
manager.onProgress = onProgress;
|
|
499
|
+
// Claim the loading lifecycle synchronously, before Helix.init() sends its handshake.
|
|
500
|
+
report();
|
|
501
|
+
|
|
502
|
+
return {
|
|
503
|
+
task(taskLabel) {
|
|
504
|
+
if (state !== 'loading') return () => {};
|
|
505
|
+
extraTotal += 1;
|
|
506
|
+
if (taskLabel) label = taskLabel;
|
|
507
|
+
render();
|
|
508
|
+
let settled = false;
|
|
509
|
+
return () => {
|
|
510
|
+
if (settled || state !== 'loading') return;
|
|
511
|
+
settled = true;
|
|
512
|
+
extraDone += 1;
|
|
513
|
+
render();
|
|
514
|
+
};
|
|
515
|
+
},
|
|
516
|
+
done() {
|
|
517
|
+
if (state !== 'loading') return;
|
|
518
|
+
state = 'ready';
|
|
519
|
+
label = 'Ready';
|
|
520
|
+
if (text) text.textContent = label;
|
|
521
|
+
if (manager.onProgress === onProgress) manager.onProgress = previousProgress;
|
|
522
|
+
if (hosted) root?.remove();
|
|
523
|
+
else {
|
|
524
|
+
root?.classList.remove('working');
|
|
525
|
+
root?.classList.add('done');
|
|
526
|
+
setTimeout(() => root?.remove(), 500);
|
|
527
|
+
}
|
|
528
|
+
report();
|
|
529
|
+
},
|
|
530
|
+
error: fail,
|
|
531
|
+
};
|
|
532
|
+
}
|
|
533
|
+
|
|
534
|
+
// New facades expose honest initial equipped presentation readiness; older pinned facades
|
|
535
|
+
// have already assembled their compatible body by create(). Never wait on swap events.
|
|
536
|
+
export async function waitForInitialAvatar(character: unknown, loading: LoadingScreen, deadlineMs = 45_000): Promise<void> {
|
|
537
|
+
const facade = character as { initialAvatarReady?: PromiseLike<{ status: string }> };
|
|
538
|
+
if (!facade.initialAvatarReady || typeof facade.initialAvatarReady.then !== 'function') {
|
|
539
|
+
const finish = loading.task('Using compatible avatar…');
|
|
540
|
+
console.info('[HELIX] This character module uses its assembled compatible avatar; equipped-avatar readiness is unavailable.');
|
|
541
|
+
finish();
|
|
542
|
+
return;
|
|
543
|
+
}
|
|
544
|
+
const finish = loading.task('Loading your avatar…');
|
|
545
|
+
let timeout: ReturnType<typeof setTimeout> | undefined;
|
|
546
|
+
try {
|
|
547
|
+
const result = await Promise.race([
|
|
548
|
+
facade.initialAvatarReady,
|
|
549
|
+
new Promise<never>((_, reject) => {
|
|
550
|
+
timeout = setTimeout(() => reject(new Error('Your avatar did not finish loading. Try again.')), deadlineMs);
|
|
551
|
+
}),
|
|
552
|
+
]);
|
|
553
|
+
if (!result || typeof result !== 'object') throw new Error('Your avatar reported an invalid readiness state. Try again.');
|
|
554
|
+
if (result.status === 'failed' || result.status === 'disposed') throw new Error('Your avatar could not be prepared. Try again.');
|
|
555
|
+
if (result.status !== 'ready' && result.status !== 'fallback') throw new Error('Your avatar reported an invalid readiness state. Try again.');
|
|
556
|
+
if (result.status === 'fallback') {
|
|
557
|
+
loading.task('Using compatible avatar…')();
|
|
558
|
+
console.info('[HELIX] The character module recovered a usable fallback avatar.');
|
|
559
|
+
}
|
|
560
|
+
finish();
|
|
561
|
+
} finally {
|
|
562
|
+
if (timeout !== undefined) clearTimeout(timeout);
|
|
563
|
+
}
|
|
564
|
+
}
|
|
565
|
+
`;
|
|
566
|
+
// The one line this scaffold is most careful about:
|
|
567
|
+
//
|
|
568
|
+
// new URL('helix_modules/', document.baseURI).href
|
|
569
|
+
//
|
|
570
|
+
// NOT '/helix_modules'. A published world is served from …/instant-worlds/<id>/<build>/, so a
|
|
571
|
+
// root-absolute path 404s and loadInstalledAbilities THROWS — the world renders nothing but an error
|
|
572
|
+
// bar. Every local gate passes anyway, because they all serve dist/ from a root. `helix
|
|
573
|
+
// verify-subpath` (which `helix publish` runs) is the check that catches it.
|
|
574
|
+
function mainTs(kind, title) {
|
|
575
|
+
const multiplayer = kind === 'multiplayer';
|
|
576
|
+
return `import * as THREE from 'three';
|
|
577
|
+
import { Helix } from '@hypersoniclabs/helix-sdk';
|
|
578
|
+
import {
|
|
579
|
+
CharacterMultiplayer,
|
|
580
|
+
InputService,
|
|
581
|
+
RapierBody,
|
|
582
|
+
createMobileControls,
|
|
583
|
+
loadInstalledAbilities,
|
|
584
|
+
} from '@helix/humanoid-character';
|
|
585
|
+
import { world } from '@helix/engine-core/inspect';
|
|
586
|
+
import { screenshots } from '@helix/engine-core/screenshot';
|
|
587
|
+
import { SYSTEM_ASSET_BASE, TRANSCODER_PATH } from './helix.runtime';
|
|
588
|
+
import { createLoadingScreen, waitForInitialAvatar } from './loading';
|
|
589
|
+
|
|
590
|
+
// ${title} — a HELIX Instant ${multiplayer ? 'multiplayer' : 'character'} world.
|
|
591
|
+
//
|
|
592
|
+
// Flow: RapierBody.create builds the world physics → CharacterMultiplayer.create assembles the platform
|
|
593
|
+
// character, universal avatar, camera and emote wheel → loadInstalledAbilities loads whatever
|
|
594
|
+
// \`helix install\` resolved (fly, swim, …). join:false keeps a character world solo without removing
|
|
595
|
+
// its platform-owned avatar/emote/input features.
|
|
596
|
+
//
|
|
597
|
+
// Test with \`npm run build\` + \`npm run preview\`, NOT the dev server: dev rewrites bare imports and
|
|
598
|
+
// hides whether the import map is correct.
|
|
599
|
+
|
|
600
|
+
const SPAWN = { x: 0, y: 0.2, z: 0 };
|
|
601
|
+
|
|
602
|
+
// The world's cover shot. A placeholder pose framing the spawn area — ADJUST position/lookAt/fov to
|
|
603
|
+
// frame whatever you actually build, then rebuild so the shot is stable for everyone. Registering is
|
|
604
|
+
// a no-op during normal play; it only activates under ?helixScreenshot=1, which \`helix screenshot\`
|
|
605
|
+
// and capture_world_screenshot pass. Add \`warmupMs\` if your scene needs physics to settle first.
|
|
606
|
+
screenshots.register('hero', { position: [12, 8, -20], lookAt: [0, 2, 0], fov: 55 });
|
|
607
|
+
|
|
608
|
+
const hud = document.getElementById('hud')!;
|
|
609
|
+
const controlsHint = document.getElementById('controls-hint')!;
|
|
610
|
+
const loading = createLoadingScreen();
|
|
37
611
|
|
|
38
612
|
const scene = new THREE.Scene();
|
|
39
|
-
|
|
40
|
-
camera.
|
|
613
|
+
scene.background = new THREE.Color(0x14161a);
|
|
614
|
+
const camera = new THREE.PerspectiveCamera(60, innerWidth / innerHeight, 0.05, 200);
|
|
615
|
+
|
|
616
|
+
/**
|
|
617
|
+
* Procedural sky/ground gradient used as the scene ENVIRONMENT (HYPR-5290).
|
|
618
|
+
* PBR materials need an environment to reflect: without one, metals and glossy
|
|
619
|
+
* surfaces render flat black no matter how many lights the scene has. A tiny
|
|
620
|
+
* equirect gradient gives them real ambient reflections with zero assets and no
|
|
621
|
+
* three/examples import (which would bundle a second copy of three next to the
|
|
622
|
+
* platform-hosted one). Keep an environment set; retint per the world's mood.
|
|
623
|
+
*/
|
|
624
|
+
function createGradientEnvironment(sky: THREE.Color, horizon: THREE.Color, ground: THREE.Color): THREE.DataTexture {
|
|
625
|
+
// 64x32 (2:1 equirect). Keep real dimensions: a few-pixel-wide texture renders
|
|
626
|
+
// BLACK — the renderer's cube-UV conversion cannot sample it (measured).
|
|
627
|
+
const width = 64, height = 32;
|
|
628
|
+
const data = new Uint8Array(width * height * 4);
|
|
629
|
+
const c = new THREE.Color();
|
|
630
|
+
for (let y = 0; y < height; y++) {
|
|
631
|
+
// Row 0 is the BOTTOM of an equirect map (ground), row height-1 the zenith.
|
|
632
|
+
const t = y / (height - 1);
|
|
633
|
+
if (t < 0.5) c.lerpColors(ground, horizon, t * 2);
|
|
634
|
+
else c.lerpColors(horizon, sky, (t - 0.5) * 2);
|
|
635
|
+
for (let x = 0; x < width; x++) {
|
|
636
|
+
const i = (y * width + x) * 4;
|
|
637
|
+
data[i] = Math.round(c.r * 255);
|
|
638
|
+
data[i + 1] = Math.round(c.g * 255);
|
|
639
|
+
data[i + 2] = Math.round(c.b * 255);
|
|
640
|
+
data[i + 3] = 255;
|
|
641
|
+
}
|
|
642
|
+
}
|
|
643
|
+
const texture = new THREE.DataTexture(data, width, height);
|
|
644
|
+
texture.mapping = THREE.EquirectangularReflectionMapping;
|
|
645
|
+
texture.colorSpace = THREE.SRGBColorSpace;
|
|
646
|
+
texture.magFilter = THREE.LinearFilter;
|
|
647
|
+
texture.minFilter = THREE.LinearFilter;
|
|
648
|
+
texture.needsUpdate = true;
|
|
649
|
+
return texture;
|
|
650
|
+
}
|
|
651
|
+
// Matches the hemisphere light below so ambience and reflections agree.
|
|
652
|
+
scene.environment = createGradientEnvironment(
|
|
653
|
+
new THREE.Color(0x9ecbff),
|
|
654
|
+
new THREE.Color(0xe8ddc8),
|
|
655
|
+
new THREE.Color(0x40382a),
|
|
656
|
+
);
|
|
41
657
|
|
|
42
658
|
const renderer = new THREE.WebGLRenderer({ antialias: true });
|
|
43
659
|
renderer.setSize(innerWidth, innerHeight);
|
|
660
|
+
renderer.setPixelRatio(Math.min(devicePixelRatio, 2));
|
|
661
|
+
renderer.outputColorSpace = THREE.SRGBColorSpace;
|
|
662
|
+
renderer.toneMapping = THREE.ACESFilmicToneMapping;
|
|
663
|
+
renderer.shadowMap.enabled = true;
|
|
664
|
+
renderer.shadowMap.type = THREE.PCFSoftShadowMap;
|
|
44
665
|
document.body.appendChild(renderer.domElement);
|
|
45
666
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
light.position.set(2, 3, 4);
|
|
54
|
-
scene.add(light);
|
|
667
|
+
scene.add(new THREE.HemisphereLight(0xbfd4ff, 0x40382a, 0.9));
|
|
668
|
+
const sun = new THREE.DirectionalLight(0xffffff, 2.2);
|
|
669
|
+
sun.position.set(6, 12, 4);
|
|
670
|
+
sun.castShadow = true;
|
|
671
|
+
sun.shadow.mapSize.set(1024, 1024);
|
|
672
|
+
sun.shadow.normalBias = 0.02;
|
|
673
|
+
scene.add(sun);
|
|
55
674
|
|
|
56
675
|
addEventListener('resize', () => {
|
|
57
676
|
camera.aspect = innerWidth / innerHeight;
|
|
@@ -59,29 +678,478 @@ addEventListener('resize', () => {
|
|
|
59
678
|
renderer.setSize(innerWidth, innerHeight);
|
|
60
679
|
});
|
|
61
680
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
681
|
+
async function main(): Promise<void> {
|
|
682
|
+
const finishStartup = loading.task('Preparing world…');
|
|
683
|
+
// RapierBody.create is a static async factory — the constructor is private.
|
|
684
|
+
const body = await RapierBody.create({ position: SPAWN });
|
|
685
|
+
body.addStaticCuboid({ x: 24, y: 0.5, z: 24 }, { x: 0, y: -0.5, z: 0 }); // floor, top at y=0
|
|
686
|
+
|
|
687
|
+
const floor = new THREE.Mesh(
|
|
688
|
+
new THREE.BoxGeometry(48, 1, 48),
|
|
689
|
+
new THREE.MeshStandardMaterial({ color: 0x2a3138, roughness: 0.95 }),
|
|
690
|
+
);
|
|
691
|
+
floor.position.y = -0.5;
|
|
692
|
+
floor.receiveShadow = true;
|
|
693
|
+
scene.add(floor);
|
|
694
|
+
scene.add(new THREE.GridHelper(48, 48, 0x39424e, 0x232830));
|
|
695
|
+
|
|
696
|
+
// ONE world-owned InputService, injected into the character. Register every game key on this
|
|
697
|
+
// router — never a raw addEventListener — so bindings stay device-correct (keyboard/pad/touch),
|
|
698
|
+
// rebindable, and inert while a menu context is pushed. Never bind the platform-reserved keys
|
|
699
|
+
// (Escape = the tablet, KeyB = voice push-to-talk, backtick = the debug overlay).
|
|
700
|
+
const input = new InputService();
|
|
701
|
+
// An injected InputService is world-owned, so the world also owns its desktop DOM wiring.
|
|
702
|
+
// This preserves keyboard, mouse drag/pointer-lock, wheel, and gamepad alongside touch.
|
|
703
|
+
input.attach(window as never);
|
|
704
|
+
input.attachPointer(renderer.domElement as never, document as never, { dragLook: true });
|
|
705
|
+
|
|
706
|
+
// Tunables live in the system's published CONFIG, not the TS class API — read them via
|
|
707
|
+
// get_package_manifest("humanoid-character") or the character-world recipe. Never guess keys.
|
|
708
|
+
const character = await CharacterMultiplayer.create({
|
|
709
|
+
helix: Helix,
|
|
710
|
+
renderer,
|
|
711
|
+
scene,
|
|
712
|
+
camera,
|
|
713
|
+
body,
|
|
714
|
+
input,
|
|
715
|
+
domElement: renderer.domElement,
|
|
716
|
+
assetBase: SYSTEM_ASSET_BASE,
|
|
717
|
+
transcoderPath: TRANSCODER_PATH,
|
|
718
|
+
spawn: SPAWN,
|
|
719
|
+
// Platform features stay individually overridable: pass emotes:false, emoteWheel:false,
|
|
720
|
+
// universalAvatars:false or localControl:false when the world needs it. Keep helix.json systems as ranges
|
|
721
|
+
// (^0.3): never pin an exact engine version to get a fix — promote the fix instead.
|
|
722
|
+
join: ${multiplayer ? 'true' : 'false'},
|
|
723
|
+
character: {
|
|
724
|
+
character: {
|
|
725
|
+
spawn: SPAWN,
|
|
726
|
+
camera: { mode: 'third-person', lookSensitivity: 1.2 },
|
|
727
|
+
},
|
|
728
|
+
locomotion: { runSpeed: 5.5 },
|
|
729
|
+
},
|
|
730
|
+
});
|
|
731
|
+
|
|
732
|
+
// Keep rendering while the initial equipped avatar settles, and reveal only a frame
|
|
733
|
+
// rendered after readiness. The public Promise includes native fallback recovery.
|
|
734
|
+
let avatarBootReady = false;
|
|
735
|
+
void waitForInitialAvatar(character, loading).then(() => { avatarBootReady = true; }).catch((error: unknown) => {
|
|
736
|
+
loading.error(error instanceof Error ? error.message : String(error));
|
|
737
|
+
});
|
|
738
|
+
|
|
739
|
+
// CharacterMultiplayer registers the platform actions (including \`emote\`) on the injected
|
|
740
|
+
// InputService. Format binding-aware onboarding only after those actions exist.
|
|
741
|
+
const desktopHint = (captured: boolean): string => {
|
|
742
|
+
const cameraHint = captured
|
|
743
|
+
? 'Move mouse to look · Scroll to zoom'
|
|
744
|
+
: 'Click world to control camera';
|
|
745
|
+
return input.hasAction('emote')
|
|
746
|
+
? input.format(\`\${cameraHint} · Hold {emote} for emote wheel\`)
|
|
747
|
+
: cameraHint;
|
|
748
|
+
};
|
|
749
|
+
controlsHint.textContent = desktopHint(false);
|
|
750
|
+
renderer.domElement.addEventListener('click', () => {
|
|
751
|
+
controlsHint.textContent = desktopHint(true);
|
|
752
|
+
setTimeout(() => controlsHint.classList.add('hidden'), 4500);
|
|
753
|
+
}, { once: true });
|
|
754
|
+
|
|
755
|
+
// Everything \`helix install\` resolved. Resolve the modules base against document.baseURI so it
|
|
756
|
+
// works at the origin root (local preview) AND at the nested path a published world is served
|
|
757
|
+
// from — a root-absolute '/helix_modules' 404s in production and throws.
|
|
758
|
+
const modulesBase = new URL('helix_modules/', document.baseURI).href;
|
|
759
|
+
const installed = await loadInstalledAbilities(modulesBase, character.local);
|
|
760
|
+
if (installed.length) {
|
|
761
|
+
console.info(\`abilities installed: \${installed.map((a) => a.manifest.id).join(', ')}\`);
|
|
762
|
+
}
|
|
763
|
+
|
|
764
|
+
// Default mobile controls are a platform system, not per-world UI. They render from the actions
|
|
765
|
+
// registered above (including installed abilities), drive this SAME InputService, and remain
|
|
766
|
+
// fully replaceable/configurable. Use actions: [{ id, label, order, placement, visible }] for
|
|
767
|
+
// safe text/layout overrides; register a custom action with touch: 'button' or 'hold' to add it.
|
|
768
|
+
const mobileControls = createMobileControls(input, {
|
|
769
|
+
surface: renderer.domElement,
|
|
770
|
+
// The host can reserve space above the world without reaching across the iframe boundary.
|
|
771
|
+
platformTopOffset: 0,
|
|
772
|
+
});
|
|
773
|
+
|
|
774
|
+
// Player-facing control text NEVER hardcodes key names — format() expands {action} tokens to the
|
|
775
|
+
// CURRENT binding for the active device, so it stays correct across pad/keyboard and rebinds.
|
|
776
|
+
const clock = new THREE.Clock();
|
|
777
|
+
let firstFrame = true;
|
|
778
|
+
renderer.setAnimationLoop(() => {
|
|
779
|
+
const dt = Math.min(clock.getDelta(), 0.1);
|
|
780
|
+
mobileControls.update(); // before character.update(): delivers this frame's pinch/context state
|
|
781
|
+
character.update(dt);
|
|
782
|
+
if (body.position.y < -10) character.local.respawn(); // fell off the world
|
|
783
|
+
renderer.render(scene, camera);
|
|
784
|
+
if (firstFrame && avatarBootReady) {
|
|
785
|
+
firstFrame = false;
|
|
786
|
+
finishStartup();
|
|
787
|
+
loading.done();
|
|
788
|
+
}
|
|
789
|
+
hud.textContent = mobileControls.active
|
|
790
|
+
? 'Drag to look · Pinch to zoom'
|
|
791
|
+
: input.format(\`{move} move · {jump} jump · {sprint} sprint · Click + move mouse to look · Scroll zoom\${input.hasAction('emote') ? ' · Hold {emote} for emote wheel' : ''}\`);
|
|
792
|
+
if (mobileControls.active) controlsHint.classList.add('hidden');
|
|
793
|
+
});
|
|
794
|
+
|
|
795
|
+
// Measurement hook for \`helix world inspect\` / inspect_world. A cheap no-op during normal play —
|
|
796
|
+
// it only activates under ?helixInspect=1. Call it at the END of boot, once the scene is built.
|
|
797
|
+
world.ready({ scene, body, spawn: SPAWN });
|
|
798
|
+
|
|
799
|
+
// The other half of the screenshot integration — the pin alone is NOT enough, so this ships wired.
|
|
800
|
+
// Both halves are required: \`helix screenshot\` / capture_world_screenshot wait on
|
|
801
|
+
// window.__helixScreenshots.ready and time out after 60s without this call. It must run at the END
|
|
802
|
+
// of boot, once the scene is built — a capture drives THIS renderer/scene/camera, applying the
|
|
803
|
+
// registered pose for one frame and restoring it after; no separate camera is created.
|
|
804
|
+
//
|
|
805
|
+
// \`hide\` blanks the local body for the whole screenshot session: headless captures run logged out,
|
|
806
|
+
// so the player renders as the bare default mannequin — rarely what you want in a cover shot. Drop
|
|
807
|
+
// it if you deliberately want the character in frame. Until you build something, that leaves the
|
|
808
|
+
// hero shot as bare floor + grid: the capture is working, the scene is just still empty.
|
|
809
|
+
screenshots.ready({ renderer, scene, camera, hide: [character.local.model] });
|
|
810
|
+
}
|
|
811
|
+
|
|
812
|
+
main().catch((err: unknown) => {
|
|
813
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
814
|
+
console.error(err);
|
|
815
|
+
loading.error(message);
|
|
816
|
+
hud.textContent = \`ERROR: \${message}\\nDid you run \\\`helix install\\\`?\`;
|
|
817
|
+
});
|
|
818
|
+
`;
|
|
819
|
+
}
|
|
820
|
+
// The scene kind's boot. It diverges from mainTs() in one load-bearing way — the environment is a
|
|
821
|
+
// sealed Scene v2 document, so it is READ BEFORE the renderer exists (the header below says why).
|
|
822
|
+
function sceneMainTs(title) {
|
|
823
|
+
return `import * as THREE from 'three';
|
|
824
|
+
import { Helix } from '@hypersoniclabs/helix-sdk';
|
|
825
|
+
import {
|
|
826
|
+
CharacterMultiplayer,
|
|
827
|
+
InputService,
|
|
828
|
+
RapierBody,
|
|
829
|
+
createMobileControls,
|
|
830
|
+
loadInstalledAbilities,
|
|
831
|
+
} from '@helix/humanoid-character';
|
|
832
|
+
import { createVisualRuntime, type VisualRuntime } from '@helix/visual';
|
|
833
|
+
import {
|
|
834
|
+
createHttpSceneApi,
|
|
835
|
+
createSceneLoaders,
|
|
836
|
+
createSceneWorld,
|
|
837
|
+
loadSceneDocument,
|
|
838
|
+
type EnvironmentPin,
|
|
839
|
+
} from '@helix/scene';
|
|
840
|
+
import { attachSceneVisuals, sceneVisualsConfig } from '@helix/scene/visual';
|
|
841
|
+
import { world } from '@helix/engine-core/inspect';
|
|
842
|
+
import { screenshots } from '@helix/engine-core/screenshot';
|
|
843
|
+
import { SYSTEM_ASSET_BASE, TRANSCODER_PATH } from './helix.runtime';
|
|
844
|
+
import { createLoadingScreen, waitForInitialAvatar } from './loading';
|
|
845
|
+
|
|
846
|
+
// ${title} — a HELIX Instant SCENE world. Its ENVIRONMENT is a published HELIX Scene v2 document
|
|
847
|
+
// streamed by @helix/scene and lit by @helix/visual's runtime: geometry, materials, authored lights,
|
|
848
|
+
// spawn and collision all come from the scene. No floor, no props, no hand-placed lights live here.
|
|
849
|
+
//
|
|
850
|
+
// BOOT ORDER IS AN INVARIANT. The document is read FIRST because the scene's own lighting shapes the
|
|
851
|
+
// runtime's config: \`sceneVisualsConfig\` folds its authored sun, probe box and exposure band into
|
|
852
|
+
// helix.visuals.json before \`createVisualRuntime\` parses it. The runtime comes next: it OWNS the
|
|
853
|
+
// renderer (the scene loaders need it for KTX2 detection) and bakes its first probe field over a
|
|
854
|
+
// still-empty room; the scene's geometry reaches that field a debounce later, through the contributor
|
|
855
|
+
// lane \`attachSceneVisuals\` opens. \`loaded\` is handed back to \`createSceneWorld\` so the document
|
|
856
|
+
// is fetched and verified once, not twice.
|
|
857
|
+
//
|
|
858
|
+
// Test with \`npm run build\` + \`npm run preview\`, NOT the dev server: dev rewrites bare imports and
|
|
859
|
+
// hides whether the import map is correct.
|
|
860
|
+
|
|
861
|
+
// Where the body starts until the scene's own spawn is known; the character is created with the real one.
|
|
862
|
+
const PLACEHOLDER_SPAWN = { x: 0, y: 1, z: 0 };
|
|
863
|
+
|
|
864
|
+
// \`?quality=low\` overrides the tier the runtime would pick itself; anything unrecognized means \`auto\`.
|
|
865
|
+
const QUALITY_LEVELS = ['minimal', 'low', 'medium', 'high', 'ultra', 'auto'] as const;
|
|
866
|
+
const QUALITY_PARAM = new URLSearchParams(location.search).get('quality');
|
|
867
|
+
const QUALITY = QUALITY_LEVELS.find((level) => level === QUALITY_PARAM) ?? 'auto';
|
|
868
|
+
|
|
869
|
+
// The backend the scene resolves its pin and its Vault surfaces through. Inside HELIX the shell
|
|
870
|
+
// announces it on \`helix:init\`, which is why Helix.init() runs before the document is fetched;
|
|
871
|
+
// \`?api=\` is the standalone-dev override (the local dev-stack serves it on :5000).
|
|
872
|
+
function apiBaseUrl(): string {
|
|
873
|
+
const override = new URLSearchParams(location.search).get('api');
|
|
874
|
+
return override ?? Helix.multiplayer.resolveApiBase(null) ?? 'http://localhost:5000';
|
|
875
|
+
}
|
|
876
|
+
|
|
877
|
+
// How this world is LIT lives in public/helix.visuals.json — the per-world visual contract \`helix
|
|
878
|
+
// validate\` audits and \`helix bake-lighting\` patches. Fetched raw; the runtime's parser owns validation.
|
|
879
|
+
async function loadVisualsConfig(): Promise<unknown> {
|
|
880
|
+
const response = await fetch(new URL('helix.visuals.json', document.baseURI));
|
|
881
|
+
if (!response.ok) throw new Error(\`helix.visuals.json failed to load — HTTP \${response.status}\`);
|
|
882
|
+
return response.json();
|
|
883
|
+
}
|
|
884
|
+
|
|
885
|
+
// One folder per document under public/scene/ — \`?scene=<folder>\` picks between them. DEV ONLY: a
|
|
886
|
+
// published world names the same identity in helix.json and the runtime resolves it content-addressed.
|
|
887
|
+
async function loadScenePin(): Promise<{ name: string; pin: EnvironmentPin }> {
|
|
888
|
+
const name = new URLSearchParams(location.search).get('scene') ?? '${SCENE_FOLDER}';
|
|
889
|
+
const response = await fetch(new URL(\`scene/\${name}/pin.json\`, document.baseURI));
|
|
890
|
+
if (!response.ok) throw new Error(\`scene/\${name}/pin.json failed to load — HTTP \${response.status}\`);
|
|
891
|
+
const pin = (await response.json()) as EnvironmentPin;
|
|
892
|
+
// A document's OWN url is the bundle base every \`bundle\` resource resolves against, so the
|
|
893
|
+
// per-folder layout is what keeps each document's web/*.glb beside it — never a shared scene/ root.
|
|
894
|
+
if (pin.kind === 'scene-v2') pin.documentUrl = new URL(\`scene/\${name}/scene.helix-scene.json\`, document.baseURI).href;
|
|
895
|
+
return { name, pin };
|
|
896
|
+
}
|
|
897
|
+
|
|
898
|
+
const hud = document.getElementById('hud')!;
|
|
899
|
+
const controlsHint = document.getElementById('controls-hint')!;
|
|
900
|
+
const loading = createLoadingScreen();
|
|
901
|
+
|
|
902
|
+
const scene = new THREE.Scene();
|
|
903
|
+
const camera = new THREE.PerspectiveCamera(60, innerWidth / innerHeight, 0.05, 200);
|
|
904
|
+
|
|
905
|
+
// The runtime owns the renderer (and the sky, the sun, the shadow rig and the post stack) — the world
|
|
906
|
+
// only supplies the canvas it draws into.
|
|
907
|
+
const canvas = document.createElement('canvas');
|
|
908
|
+
canvas.style.cssText = 'position:fixed;inset:0;display:block;width:100%;height:100%';
|
|
909
|
+
document.body.appendChild(canvas);
|
|
910
|
+
|
|
911
|
+
let visuals: VisualRuntime | null = null;
|
|
912
|
+
|
|
913
|
+
addEventListener('resize', () => {
|
|
914
|
+
camera.aspect = innerWidth / innerHeight;
|
|
915
|
+
camera.updateProjectionMatrix();
|
|
916
|
+
visuals?.setSize({ width: innerWidth, height: innerHeight });
|
|
66
917
|
});
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
918
|
+
|
|
919
|
+
async function main(): Promise<void> {
|
|
920
|
+
const finishStartup = loading.task('Preparing world…');
|
|
921
|
+
// Before the document: the shell's \`helix:init\` is where the platform API base comes from.
|
|
922
|
+
await Helix.init();
|
|
923
|
+
|
|
924
|
+
// The physics body exists before the scene so the scene's colliders register through it (the one
|
|
925
|
+
// sanctioned static path: RapierBody mirrors statics into the shared and ragdoll worlds).
|
|
926
|
+
const body = await RapierBody.create({ position: PLACEHOLDER_SPAWN });
|
|
927
|
+
|
|
928
|
+
const api = createHttpSceneApi({ apiBaseUrl: apiBaseUrl() });
|
|
929
|
+
const { name, pin } = await loadScenePin();
|
|
930
|
+
const loaded = await loadSceneDocument({ api, pin });
|
|
931
|
+
const config = await sceneVisualsConfig(loaded, await loadVisualsConfig(), { api });
|
|
932
|
+
|
|
933
|
+
visuals = await createVisualRuntime({
|
|
934
|
+
canvas,
|
|
935
|
+
scene,
|
|
936
|
+
camera,
|
|
937
|
+
config,
|
|
938
|
+
quality: QUALITY,
|
|
939
|
+
size: { width: innerWidth, height: innerHeight },
|
|
940
|
+
});
|
|
941
|
+
const renderer = visuals.renderer;
|
|
942
|
+
|
|
943
|
+
const sceneWorld = await createSceneWorld({
|
|
944
|
+
renderer,
|
|
945
|
+
scene,
|
|
946
|
+
camera,
|
|
947
|
+
api,
|
|
948
|
+
loaders: createSceneLoaders(renderer, { transcoderPath: TRANSCODER_PATH }),
|
|
949
|
+
pin,
|
|
950
|
+
loaded,
|
|
951
|
+
colliders: body,
|
|
952
|
+
// The runtime's sun and probe field ARE the light here: realizing the document's own directional
|
|
953
|
+
// sun and its legacy ambient/hemisphere fills on top would double every lit surface.
|
|
954
|
+
lighting: { realizeAuthoredSun: false, realizeLegacyFills: false },
|
|
955
|
+
viewportHeightPx: () => innerHeight,
|
|
956
|
+
onError: (error) => console.warn('[scene]', error),
|
|
957
|
+
});
|
|
958
|
+
// The scene root becomes one GI contributor and every activated node is adopted (materials, shadow
|
|
959
|
+
// policy); the probe field picks the streamed geometry up one debounce later.
|
|
960
|
+
const sceneVisuals = attachSceneVisuals(sceneWorld, visuals);
|
|
961
|
+
|
|
962
|
+
const spawn = sceneWorld.spawn?.position ?? PLACEHOLDER_SPAWN;
|
|
963
|
+
body.teleport(spawn);
|
|
964
|
+
console.info(\`[scene] \${name} · \${sceneWorld.loaded.scene.id}@\${sceneWorld.loaded.scene.revision}\`
|
|
965
|
+
+ \` · spawn \${spawn.x.toFixed(1)},\${spawn.y.toFixed(1)},\${spawn.z.toFixed(1)}\`
|
|
966
|
+
+ \` · colliders \${sceneWorld.colliders()} · adopted \${sceneVisuals.stats().adopted}\`);
|
|
967
|
+
|
|
968
|
+
// ONE world-owned InputService, injected into the character. Register every game key on this
|
|
969
|
+
// router — never a raw addEventListener — so bindings stay device-correct (keyboard/pad/touch),
|
|
970
|
+
// rebindable, and inert while a menu context is pushed. Never bind the platform-reserved keys
|
|
971
|
+
// (Escape = the tablet, KeyB = voice push-to-talk, backtick = the debug overlay).
|
|
972
|
+
const input = new InputService();
|
|
973
|
+
input.attach(window as never);
|
|
974
|
+
input.attachPointer(renderer.domElement as never, document as never, { dragLook: true });
|
|
975
|
+
|
|
976
|
+
// Tunables live in the system's published CONFIG, not the TS class API — read them via
|
|
977
|
+
// get_package_manifest("humanoid-character") or the character-world recipe. Never guess keys.
|
|
978
|
+
const character = await CharacterMultiplayer.create({
|
|
979
|
+
helix: Helix,
|
|
980
|
+
renderer,
|
|
981
|
+
scene,
|
|
982
|
+
camera,
|
|
983
|
+
body,
|
|
984
|
+
input,
|
|
985
|
+
domElement: renderer.domElement,
|
|
986
|
+
assetBase: SYSTEM_ASSET_BASE,
|
|
987
|
+
transcoderPath: TRANSCODER_PATH,
|
|
988
|
+
spawn,
|
|
989
|
+
join: true,
|
|
990
|
+
character: {
|
|
991
|
+
character: { spawn, camera: { mode: 'third-person', lookSensitivity: 1.2 } },
|
|
992
|
+
locomotion: { runSpeed: 5.5 },
|
|
993
|
+
},
|
|
994
|
+
});
|
|
995
|
+
|
|
996
|
+
// Keep rendering while the initial equipped avatar settles, and reveal only a frame
|
|
997
|
+
// rendered after readiness. The public Promise includes native fallback recovery.
|
|
998
|
+
let avatarBootReady = false;
|
|
999
|
+
void waitForInitialAvatar(character, loading).then(() => { avatarBootReady = true; }).catch((error: unknown) => {
|
|
1000
|
+
loading.error(error instanceof Error ? error.message : String(error));
|
|
1001
|
+
});
|
|
1002
|
+
|
|
1003
|
+
const desktopHint = (captured: boolean): string => {
|
|
1004
|
+
const cameraHint = captured
|
|
1005
|
+
? 'Move mouse to look · Scroll to zoom'
|
|
1006
|
+
: 'Click world to control camera';
|
|
1007
|
+
return input.hasAction('emote')
|
|
1008
|
+
? input.format(\`\${cameraHint} · Hold {emote} for emote wheel\`)
|
|
1009
|
+
: cameraHint;
|
|
1010
|
+
};
|
|
1011
|
+
controlsHint.textContent = desktopHint(false);
|
|
1012
|
+
renderer.domElement.addEventListener('click', () => {
|
|
1013
|
+
controlsHint.textContent = desktopHint(true);
|
|
1014
|
+
setTimeout(() => controlsHint.classList.add('hidden'), 4500);
|
|
1015
|
+
}, { once: true });
|
|
1016
|
+
|
|
1017
|
+
// Everything \`helix install\` resolved. Resolve the modules base against document.baseURI so it
|
|
1018
|
+
// works at the origin root (local preview) AND at the nested path a published world is served
|
|
1019
|
+
// from — a root-absolute '/helix_modules' 404s in production and throws.
|
|
1020
|
+
const modulesBase = new URL('helix_modules/', document.baseURI).href;
|
|
1021
|
+
const installed = await loadInstalledAbilities(modulesBase, character.local);
|
|
1022
|
+
if (installed.length) {
|
|
1023
|
+
console.info(\`abilities installed: \${installed.map((a) => a.manifest.id).join(', ')}\`);
|
|
1024
|
+
}
|
|
1025
|
+
|
|
1026
|
+
// Default mobile controls are a platform system, not per-world UI. They render from the actions
|
|
1027
|
+
// registered above (including installed abilities), drive this SAME InputService, and remain
|
|
1028
|
+
// fully replaceable/configurable.
|
|
1029
|
+
const mobileControls = createMobileControls(input, { surface: renderer.domElement, platformTopOffset: 0 });
|
|
1030
|
+
|
|
1031
|
+
// The camera only reached its real pose once the facade placed the player: re-aim everything that lags.
|
|
1032
|
+
visuals.catchUp();
|
|
1033
|
+
|
|
1034
|
+
const clock = new THREE.Clock();
|
|
1035
|
+
let firstFrame = true;
|
|
1036
|
+
renderer.setAnimationLoop(() => {
|
|
1037
|
+
const dt = Math.min(clock.getDelta(), 0.1);
|
|
1038
|
+
mobileControls.update(); // before character.update(): delivers this frame's pinch/context state
|
|
1039
|
+
sceneWorld.tick(dt); // residency on the scene's cadence; colliders follow the resident meshes
|
|
1040
|
+
character.update(dt);
|
|
1041
|
+
if (body.position.y < -10) character.local.respawn(); // fell out of the scene
|
|
1042
|
+
visuals?.tick(dt); // the clock, the sun, the cadences — and the frame's own render
|
|
1043
|
+
if (firstFrame && avatarBootReady) {
|
|
1044
|
+
firstFrame = false;
|
|
1045
|
+
finishStartup();
|
|
1046
|
+
loading.done();
|
|
1047
|
+
}
|
|
1048
|
+
hud.textContent = mobileControls.active
|
|
1049
|
+
? 'Drag to look · Pinch to zoom'
|
|
1050
|
+
: input.format(\`{move} move · {jump} jump · {sprint} sprint · Click + move mouse to look · Scroll zoom\${input.hasAction('emote') ? ' · Hold {emote} for emote wheel' : ''}\`);
|
|
1051
|
+
if (mobileControls.active) controlsHint.classList.add('hidden');
|
|
1052
|
+
});
|
|
1053
|
+
|
|
1054
|
+
// Measurement hook for \`helix world inspect\` / inspect_world. A cheap no-op during normal play —
|
|
1055
|
+
// it only activates under ?helixInspect=1. Call it at the END of boot, once the scene is built.
|
|
1056
|
+
world.ready({ scene, body, spawn });
|
|
1057
|
+
|
|
1058
|
+
// The world's cover shot, framed off the scene's own spawn. Registering is a no-op during normal
|
|
1059
|
+
// play; it only activates under ?helixScreenshot=1, which \`helix screenshot\` and
|
|
1060
|
+
// capture_world_screenshot pass. The graded frame comes off the runtime's POST STACK, so the
|
|
1061
|
+
// capture must render through \`tick\` — a bare renderer.render would photograph the linear frame.
|
|
1062
|
+
screenshots.register('hero', {
|
|
1063
|
+
position: [spawn.x + 6, spawn.y + 4, spawn.z + 8],
|
|
1064
|
+
lookAt: [spawn.x, spawn.y + 1, spawn.z],
|
|
1065
|
+
fov: 55,
|
|
1066
|
+
});
|
|
1067
|
+
screenshots.ready({
|
|
1068
|
+
renderer: {
|
|
1069
|
+
render: () => visuals?.tick(0),
|
|
1070
|
+
domElement: renderer.domElement,
|
|
1071
|
+
setSize: (width, height) => visuals?.setSize({ width, height }),
|
|
1072
|
+
getPixelRatio: () => renderer.getPixelRatio(),
|
|
1073
|
+
setPixelRatio: (ratio) => renderer.setPixelRatio(ratio),
|
|
1074
|
+
},
|
|
1075
|
+
scene,
|
|
1076
|
+
camera,
|
|
1077
|
+
hide: [character.local.model],
|
|
1078
|
+
});
|
|
1079
|
+
}
|
|
1080
|
+
|
|
1081
|
+
main().catch((err: unknown) => {
|
|
1082
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
1083
|
+
console.error(err);
|
|
1084
|
+
loading.error(message);
|
|
1085
|
+
hud.textContent = \`ERROR: \${message}\\nDid you run \\\`helix install\\\`?\`;
|
|
1086
|
+
});
|
|
1087
|
+
`;
|
|
1088
|
+
}
|
|
1089
|
+
function initTemplate(targetDir, options = {}) {
|
|
1090
|
+
const kind = options.kind ?? 'character';
|
|
1091
|
+
// Compiled offline, here, so the manifest pin and the bytes under public/scene/ are one object.
|
|
1092
|
+
return writeScaffold(targetDir, options, kind === 'scene' ? compileStarterScene() : null);
|
|
1093
|
+
}
|
|
1094
|
+
/**
|
|
1095
|
+
* `helix init --kind scene --terrain <preset>`: the same scaffold, over a generated 1 km x 1 km landform.
|
|
1096
|
+
* The mall keeps its authored footprint and is lifted onto the flat plateau the generator leaves at the spawn.
|
|
1097
|
+
*/
|
|
1098
|
+
async function initTemplateWithTerrain(targetDir, options) {
|
|
1099
|
+
const { bakeTerrainSplats, generateTerrain, loadPreset, tileTerrain, writeTerrainSource } = await Promise.resolve().then(() => __importStar(require('./terrain')));
|
|
1100
|
+
const sceneDir = (0, node_path_1.join)(targetDir, 'public', 'scene', SCENE_FOLDER);
|
|
1101
|
+
const grid = generateTerrain({
|
|
1102
|
+
seed: STARTER_TERRAIN_SEED,
|
|
1103
|
+
tilesX: STARTER_TERRAIN_TILES,
|
|
1104
|
+
tilesZ: STARTER_TERRAIN_TILES,
|
|
1105
|
+
preset: options.terrain,
|
|
1106
|
+
});
|
|
1107
|
+
const baked = await bakeTerrainSplats(tileTerrain(grid), loadPreset(options.terrain), { grid });
|
|
1108
|
+
await writeTerrainSource((0, node_path_1.join)(sceneDir, TERRAIN_FOLDER), baked);
|
|
1109
|
+
const centre = ((grid.samplesZ - 1) / 2) * grid.samplesX + (grid.samplesX - 1) / 2;
|
|
1110
|
+
const groundY = Math.round(grid.heights[centre] * 100) / 100;
|
|
1111
|
+
const starter = compileStarterScene({ baseDir: sceneDir, terrain: { source: TERRAIN_FOLDER, groundY } });
|
|
1112
|
+
const result = writeScaffold(targetDir, { ...options, kind: 'scene' }, starter);
|
|
1113
|
+
result.created.push(`public/scene/${SCENE_FOLDER}/${TERRAIN_FOLDER}/`);
|
|
1114
|
+
return result;
|
|
1115
|
+
}
|
|
1116
|
+
function writeScaffold(targetDir, options, starter) {
|
|
1117
|
+
const kind = options.kind ?? 'character';
|
|
1118
|
+
const slug = slugify(options.slug ?? (0, node_path_1.basename)(targetDir));
|
|
1119
|
+
const title = options.title ?? 'My HELIX World';
|
|
1120
|
+
const maxPlayers = options.maxPlayers ?? 8;
|
|
1121
|
+
const files = {
|
|
1122
|
+
'package.json': packageJson(slug),
|
|
1123
|
+
'vite.config.ts': VITE_CONFIG,
|
|
1124
|
+
'tsconfig.json': TSCONFIG,
|
|
1125
|
+
'.gitignore': GITIGNORE,
|
|
1126
|
+
'index.html': indexHtml(title),
|
|
1127
|
+
'public/helix.json': manifest({ title, slug, kind, maxPlayers }, starter?.pin),
|
|
1128
|
+
'public/helix.controls.json': MOBILE_CONTROLS_CONTRACT,
|
|
1129
|
+
'src/main.ts': kind === 'scene' ? sceneMainTs(title) : mainTs(kind, title),
|
|
1130
|
+
'src/loading.ts': LOADING_TS,
|
|
1131
|
+
'src/helix.runtime.ts': RUNTIME_STUB,
|
|
1132
|
+
...(starter
|
|
1133
|
+
? {
|
|
1134
|
+
'public/helix.visuals.json': VISUALS_CONFIG,
|
|
1135
|
+
'public/.helixignore': HELIXIGNORE,
|
|
1136
|
+
[`public/scene/${SCENE_FOLDER}/scene.helix-scene.json`]: starter.document,
|
|
1137
|
+
[`public/scene/${SCENE_FOLDER}/pin.json`]: `${JSON.stringify(starter.pin, null, 2)}\n`,
|
|
1138
|
+
}
|
|
1139
|
+
: {}),
|
|
1140
|
+
};
|
|
78
1141
|
const created = [];
|
|
79
|
-
|
|
1142
|
+
const skipped = [];
|
|
1143
|
+
for (const [path, contents] of Object.entries(files)) {
|
|
80
1144
|
const absolute = (0, node_path_1.join)(targetDir, path);
|
|
1145
|
+
if ((0, node_fs_1.existsSync)(absolute) && !options.overwrite) {
|
|
1146
|
+
skipped.push(path);
|
|
1147
|
+
continue;
|
|
1148
|
+
}
|
|
81
1149
|
(0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(absolute), { recursive: true });
|
|
82
|
-
(0, node_fs_1.writeFileSync)(absolute,
|
|
1150
|
+
(0, node_fs_1.writeFileSync)(absolute, contents, 'utf8');
|
|
83
1151
|
created.push(path);
|
|
84
1152
|
}
|
|
85
|
-
return created;
|
|
1153
|
+
return { created, skipped };
|
|
86
1154
|
}
|
|
87
1155
|
//# sourceMappingURL=init.js.map
|