hytopia 0.1.37 → 0.1.40
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/bin/scripts.js +10 -1
- package/docs/server.basecharactercontroller.createcolliders.md +19 -0
- package/docs/server.basecharactercontroller.md +2 -2
- package/docs/server.blocktype.md +1 -1
- package/docs/server.blocktype.onentitycollision.md +6 -1
- package/docs/server.blocktype.onentitycontactforce.md +5 -0
- package/docs/server.coefficientcombinerule.md +89 -0
- package/docs/server.collider.getbouncinesscombinerule.md +19 -0
- package/docs/server.collider.getfrictioncombinerule.md +19 -0
- package/docs/server.collider.md +56 -0
- package/docs/server.collider.setbouncinesscombinerule.md +53 -0
- package/docs/server.collider.setfrictioncombinerule.md +53 -0
- package/docs/server.collideroptions.bouncinesscombinerule.md +13 -0
- package/docs/server.collideroptions.frictioncombinerule.md +13 -0
- package/docs/server.collideroptions.indices.md +13 -0
- package/docs/server.collideroptions.md +76 -0
- package/docs/server.collideroptions.vertices.md +13 -0
- package/docs/server.collidershape.md +14 -0
- package/docs/server.collisioncallback.md +1 -1
- package/docs/{server.defaultcharactercontroller.createsensorcolliders.md → server.defaultcharactercontroller.createcolliders.md} +4 -4
- package/docs/server.defaultcharactercontroller.md +2 -2
- package/docs/server.entity.isblockentity.md +13 -0
- package/docs/server.entity.ismodelentity.md +13 -0
- package/docs/server.entity.md +79 -2
- package/docs/server.entity.modelhiddennodes.md +13 -0
- package/docs/server.entity.onblockcollision.md +6 -1
- package/docs/server.entity.onblockcontactforce.md +5 -0
- package/docs/server.entity.onentitycollision.md +6 -1
- package/docs/server.entity.onentitycontactforce.md +5 -0
- package/docs/server.entity.setmodelhiddennodes.md +53 -0
- package/docs/server.entity.startmodelloopedanimations.md +4 -0
- package/docs/server.entity.startmodeloneshotanimations.md +4 -0
- package/docs/server.entity.stopmodelanimations.md +4 -0
- package/docs/server.entityeventpayload.md +9 -0
- package/docs/server.entityeventpayload.setmodelhiddennodes.entity.md +11 -0
- package/docs/server.entityeventpayload.setmodelhiddennodes.md +70 -0
- package/docs/server.entityeventpayload.setmodelhiddennodes.modelhiddennodes.md +11 -0
- package/docs/server.entityeventtype.md +14 -0
- package/docs/server.entityoptions.md +19 -0
- package/docs/server.entityoptions.modelhiddennodes.md +13 -0
- package/docs/server.hytopia.basecharactercontroller.createcolliders.md +19 -0
- package/docs/server.hytopia.basecharactercontroller.md +2 -2
- package/docs/server.hytopia.blocktype.md +1 -1
- package/docs/server.hytopia.blocktype.onentitycollision.md +6 -1
- package/docs/server.hytopia.blocktype.onentitycontactforce.md +5 -0
- package/docs/server.hytopia.coefficientcombinerule.md +89 -0
- package/docs/server.hytopia.collider.getbouncinesscombinerule.md +19 -0
- package/docs/server.hytopia.collider.getfrictioncombinerule.md +19 -0
- package/docs/server.hytopia.collider.md +56 -0
- package/docs/server.hytopia.collider.setbouncinesscombinerule.md +53 -0
- package/docs/server.hytopia.collider.setfrictioncombinerule.md +53 -0
- package/docs/server.hytopia.collideroptions.bouncinesscombinerule.md +13 -0
- package/docs/server.hytopia.collideroptions.frictioncombinerule.md +13 -0
- package/docs/server.hytopia.collideroptions.indices.md +13 -0
- package/docs/server.hytopia.collideroptions.md +76 -0
- package/docs/server.hytopia.collideroptions.vertices.md +13 -0
- package/docs/server.hytopia.collidershape.md +14 -0
- package/docs/server.hytopia.collisioncallback.md +1 -1
- package/docs/server.hytopia.defaultcharactercontroller.createcolliders.md +19 -0
- package/docs/server.hytopia.defaultcharactercontroller.md +2 -2
- package/docs/server.hytopia.entity.isblockentity.md +13 -0
- package/docs/server.hytopia.entity.ismodelentity.md +13 -0
- package/docs/server.hytopia.entity.md +79 -2
- package/docs/server.hytopia.entity.modelhiddennodes.md +13 -0
- package/docs/server.hytopia.entity.onblockcollision.md +6 -1
- package/docs/server.hytopia.entity.onblockcontactforce.md +5 -0
- package/docs/server.hytopia.entity.onentitycollision.md +6 -1
- package/docs/server.hytopia.entity.onentitycontactforce.md +5 -0
- package/docs/server.hytopia.entity.setmodelhiddennodes.md +53 -0
- package/docs/server.hytopia.entity.startmodelloopedanimations.md +4 -0
- package/docs/server.hytopia.entity.startmodeloneshotanimations.md +4 -0
- package/docs/server.hytopia.entity.stopmodelanimations.md +4 -0
- package/docs/server.hytopia.entityeventpayload.md +9 -0
- package/docs/server.hytopia.entityeventpayload.setmodelhiddennodes.entity.md +11 -0
- package/docs/server.hytopia.entityeventpayload.setmodelhiddennodes.md +70 -0
- package/docs/server.hytopia.entityeventpayload.setmodelhiddennodes.modelhiddennodes.md +11 -0
- package/docs/server.hytopia.entityeventtype.md +14 -0
- package/docs/server.hytopia.entityoptions.md +19 -0
- package/docs/server.hytopia.entityoptions.modelhiddennodes.md +13 -0
- package/docs/server.hytopia.md +11 -0
- package/docs/server.hytopia.playercamera.md +10 -10
- package/docs/{server.hytopia.playercamera.hiddenmodelnodes.md → server.hytopia.playercamera.modelhiddennodes.md} +3 -3
- package/docs/{server.hytopia.playercamera.sethiddenmodelnodes.md → server.hytopia.playercamera.setmodelhiddennodes.md} +4 -4
- package/docs/server.hytopia.playercameraeventpayload.md +2 -2
- package/docs/{server.hytopia.playercameraeventpayload.sethiddenmodelnodes.md → server.hytopia.playercameraeventpayload.setmodelhiddennodes.md} +6 -6
- package/docs/server.hytopia.playercameraeventpayload.setmodelhiddennodes.modelhiddennodes.md +11 -0
- package/docs/server.hytopia.playercameraeventpayload.setmodelhiddennodes.playercamera.md +11 -0
- package/docs/server.hytopia.playercameraeventtype.md +4 -4
- package/docs/server.hytopia.simulation.getcontactmanifolds.md +75 -0
- package/docs/server.hytopia.simulation.md +14 -0
- package/docs/server.md +11 -0
- package/docs/server.playercamera.md +10 -10
- package/docs/{server.playercamera.hiddenmodelnodes.md → server.playercamera.modelhiddennodes.md} +3 -3
- package/docs/{server.playercamera.sethiddenmodelnodes.md → server.playercamera.setmodelhiddennodes.md} +4 -4
- package/docs/server.playercameraeventpayload.md +2 -2
- package/docs/{server.playercameraeventpayload.sethiddenmodelnodes.md → server.playercameraeventpayload.setmodelhiddennodes.md} +6 -6
- package/docs/server.playercameraeventpayload.setmodelhiddennodes.modelhiddennodes.md +11 -0
- package/docs/{server.playercameraeventpayload.sethiddenmodelnodes.playercamera.md → server.playercameraeventpayload.setmodelhiddennodes.playercamera.md} +2 -2
- package/docs/server.playercameraeventtype.md +4 -4
- package/docs/server.simulation.getcontactmanifolds.md +75 -0
- package/docs/server.simulation.md +14 -0
- package/examples/big-world/README.md +15 -0
- package/examples/big-world/index.ts +41 -0
- package/examples/block-entity/index.ts +11 -8
- package/examples/character-controller/MyCharacterController.ts +25 -5
- package/examples/character-controller/index.ts +3 -1
- package/examples/entity-spawn/index.ts +3 -1
- package/examples/payload-game/index.ts +10 -10
- package/package.json +1 -1
- package/server.api.json +1836 -212
- package/server.d.ts +143 -20
- package/server.js +79 -79
- package/boilerplate/assets/audio/music/cave.mp3 +0 -0
- package/boilerplate/assets/audio/music/desert.mp3 +0 -0
- package/boilerplate/assets/audio/music/end.mp3 +0 -0
- package/boilerplate/assets/audio/music/jungle.mp3 +0 -0
- package/boilerplate/assets/audio/music/nether.mp3 +0 -0
- package/boilerplate/assets/audio/music/night.mp3 +0 -0
- package/boilerplate/assets/audio/music/night2.mp3 +0 -0
- package/boilerplate/assets/audio/music/overworld.mp3 +0 -0
- package/boilerplate/assets/audio/music/snow.mp3 +0 -0
- package/boilerplate/assets/audio/sfx/damage.wav +0 -0
- package/boilerplate/assets/audio/sfx/step.wav +0 -0
- package/boilerplate/assets/certs/README.md +0 -10
- package/boilerplate/assets/certs/localhost.crt +0 -20
- package/boilerplate/assets/certs/localhost.key +0 -27
- package/boilerplate/assets/cubemaps/skybox/+x.png +0 -0
- package/boilerplate/assets/cubemaps/skybox/+y.png +0 -0
- package/boilerplate/assets/cubemaps/skybox/+z.png +0 -0
- package/boilerplate/assets/cubemaps/skybox/-x.png +0 -0
- package/boilerplate/assets/cubemaps/skybox/-y.png +0 -0
- package/boilerplate/assets/cubemaps/skybox/-z.png +0 -0
- package/boilerplate/assets/map.json +0 -2623
- package/boilerplate/assets/models/bat.gltf +0 -1
- package/boilerplate/assets/models/chicken.gltf +0 -1
- package/boilerplate/assets/models/cow.gltf +0 -1
- package/boilerplate/assets/models/donkey.gltf +0 -1
- package/boilerplate/assets/models/horse.gltf +0 -1
- package/boilerplate/assets/models/mindflayer.gltf +0 -1
- package/boilerplate/assets/models/pig.gltf +0 -1
- package/boilerplate/assets/models/player.gltf +0 -1
- package/boilerplate/assets/models/rabbit.gltf +0 -1
- package/boilerplate/assets/models/sheep.gltf +0 -1
- package/boilerplate/assets/models/skeleton.gltf +0 -1
- package/boilerplate/assets/models/spider.gltf +0 -1
- package/boilerplate/assets/models/squid.gltf +0 -1
- package/boilerplate/assets/models/stalker.gltf +0 -1
- package/boilerplate/assets/models/zombie.gltf +0 -1
- package/boilerplate/assets/textures/bricks.png +0 -0
- package/boilerplate/assets/textures/clay.png +0 -0
- package/boilerplate/assets/textures/cobblestone.png +0 -0
- package/boilerplate/assets/textures/diamond_ore.png +0 -0
- package/boilerplate/assets/textures/dirt.png +0 -0
- package/boilerplate/assets/textures/dragons_stone.png +0 -0
- package/boilerplate/assets/textures/emerald_ore.png +0 -0
- package/boilerplate/assets/textures/glass.png +0 -0
- package/boilerplate/assets/textures/gold_ore.png +0 -0
- package/boilerplate/assets/textures/grass/+x.png +0 -0
- package/boilerplate/assets/textures/grass/+y.png +0 -0
- package/boilerplate/assets/textures/grass/+z.png +0 -0
- package/boilerplate/assets/textures/grass/-x.png +0 -0
- package/boilerplate/assets/textures/grass/-y.png +0 -0
- package/boilerplate/assets/textures/grass/-z.png +0 -0
- package/boilerplate/assets/textures/gravel.png +0 -0
- package/boilerplate/assets/textures/ice.png +0 -0
- package/boilerplate/assets/textures/infected_shadowrock.png +0 -0
- package/boilerplate/assets/textures/iron_ore.png +0 -0
- package/boilerplate/assets/textures/lava.png +0 -0
- package/boilerplate/assets/textures/log_side.png +0 -0
- package/boilerplate/assets/textures/log_top.png +0 -0
- package/boilerplate/assets/textures/mossy_coblestone.png +0 -0
- package/boilerplate/assets/textures/nuit.png +0 -0
- package/boilerplate/assets/textures/oak_leaves.png +0 -0
- package/boilerplate/assets/textures/oak_planks.png +0 -0
- package/boilerplate/assets/textures/sand.png +0 -0
- package/boilerplate/assets/textures/sandstone.png +0 -0
- package/boilerplate/assets/textures/shadowrock.png +0 -0
- package/boilerplate/assets/textures/snow.png +0 -0
- package/boilerplate/assets/textures/stone.png +0 -0
- package/boilerplate/assets/textures/stone_bricks.png +0 -0
- package/boilerplate/assets/textures/void_grass/+x.png +0 -0
- package/boilerplate/assets/textures/void_grass/+y.png +0 -0
- package/boilerplate/assets/textures/void_grass/+z.png +0 -0
- package/boilerplate/assets/textures/void_grass/-x.png +0 -0
- package/boilerplate/assets/textures/void_grass/-y.png +0 -0
- package/boilerplate/assets/textures/void_grass/-z.png +0 -0
- package/boilerplate/assets/textures/void_sand.png +0 -0
- package/boilerplate/assets/textures/water.png +0 -0
- package/docs/server.basecharactercontroller.createsensorcolliders.md +0 -19
- package/docs/server.hytopia.basecharactercontroller.createsensorcolliders.md +0 -19
- package/docs/server.hytopia.defaultcharactercontroller.createsensorcolliders.md +0 -19
- package/docs/server.hytopia.playercameraeventpayload.sethiddenmodelnodes.hiddenmodelnodes.md +0 -11
- package/docs/server.hytopia.playercameraeventpayload.sethiddenmodelnodes.playercamera.md +0 -11
- package/docs/server.playercameraeventpayload.sethiddenmodelnodes.hiddenmodelnodes.md +0 -11
- package/examples/block-entity/assets/audio/music/cave.mp3 +0 -0
- package/examples/block-entity/assets/audio/music/desert.mp3 +0 -0
- package/examples/block-entity/assets/audio/music/end.mp3 +0 -0
- package/examples/block-entity/assets/audio/music/jungle.mp3 +0 -0
- package/examples/block-entity/assets/audio/music/nether.mp3 +0 -0
- package/examples/block-entity/assets/audio/music/night.mp3 +0 -0
- package/examples/block-entity/assets/audio/music/night2.mp3 +0 -0
- package/examples/block-entity/assets/audio/music/overworld.mp3 +0 -0
- package/examples/block-entity/assets/audio/music/snow.mp3 +0 -0
- package/examples/block-entity/assets/audio/sfx/damage.wav +0 -0
- package/examples/block-entity/assets/audio/sfx/step.wav +0 -0
- package/examples/block-entity/assets/certs/README.md +0 -10
- package/examples/block-entity/assets/certs/localhost.crt +0 -20
- package/examples/block-entity/assets/certs/localhost.key +0 -27
- package/examples/block-entity/assets/cubemaps/skybox/+x.png +0 -0
- package/examples/block-entity/assets/cubemaps/skybox/+y.png +0 -0
- package/examples/block-entity/assets/cubemaps/skybox/+z.png +0 -0
- package/examples/block-entity/assets/cubemaps/skybox/-x.png +0 -0
- package/examples/block-entity/assets/cubemaps/skybox/-y.png +0 -0
- package/examples/block-entity/assets/cubemaps/skybox/-z.png +0 -0
- package/examples/block-entity/assets/map.json +0 -2623
- package/examples/block-entity/assets/models/bat.gltf +0 -1
- package/examples/block-entity/assets/models/chicken.gltf +0 -1
- package/examples/block-entity/assets/models/cow.gltf +0 -1
- package/examples/block-entity/assets/models/donkey.gltf +0 -1
- package/examples/block-entity/assets/models/horse.gltf +0 -1
- package/examples/block-entity/assets/models/mindflayer.gltf +0 -1
- package/examples/block-entity/assets/models/pig.gltf +0 -1
- package/examples/block-entity/assets/models/player.gltf +0 -1
- package/examples/block-entity/assets/models/rabbit.gltf +0 -1
- package/examples/block-entity/assets/models/sheep.gltf +0 -1
- package/examples/block-entity/assets/models/skeleton.gltf +0 -1
- package/examples/block-entity/assets/models/spider.gltf +0 -1
- package/examples/block-entity/assets/models/squid.gltf +0 -1
- package/examples/block-entity/assets/models/stalker.gltf +0 -1
- package/examples/block-entity/assets/models/zombie.gltf +0 -1
- package/examples/block-entity/assets/textures/bricks.png +0 -0
- package/examples/block-entity/assets/textures/clay.png +0 -0
- package/examples/block-entity/assets/textures/cobblestone.png +0 -0
- package/examples/block-entity/assets/textures/diamond_ore.png +0 -0
- package/examples/block-entity/assets/textures/dirt.png +0 -0
- package/examples/block-entity/assets/textures/dragons_stone.png +0 -0
- package/examples/block-entity/assets/textures/emerald_ore.png +0 -0
- package/examples/block-entity/assets/textures/glass.png +0 -0
- package/examples/block-entity/assets/textures/gold_ore.png +0 -0
- package/examples/block-entity/assets/textures/grass/+x.png +0 -0
- package/examples/block-entity/assets/textures/grass/+y.png +0 -0
- package/examples/block-entity/assets/textures/grass/+z.png +0 -0
- package/examples/block-entity/assets/textures/grass/-x.png +0 -0
- package/examples/block-entity/assets/textures/grass/-y.png +0 -0
- package/examples/block-entity/assets/textures/grass/-z.png +0 -0
- package/examples/block-entity/assets/textures/gravel.png +0 -0
- package/examples/block-entity/assets/textures/ice.png +0 -0
- package/examples/block-entity/assets/textures/infected_shadowrock.png +0 -0
- package/examples/block-entity/assets/textures/iron_ore.png +0 -0
- package/examples/block-entity/assets/textures/lava.png +0 -0
- package/examples/block-entity/assets/textures/log_side.png +0 -0
- package/examples/block-entity/assets/textures/log_top.png +0 -0
- package/examples/block-entity/assets/textures/mossy_coblestone.png +0 -0
- package/examples/block-entity/assets/textures/nuit.png +0 -0
- package/examples/block-entity/assets/textures/oak_leaves.png +0 -0
- package/examples/block-entity/assets/textures/oak_planks.png +0 -0
- package/examples/block-entity/assets/textures/sand.png +0 -0
- package/examples/block-entity/assets/textures/sandstone.png +0 -0
- package/examples/block-entity/assets/textures/shadowrock.png +0 -0
- package/examples/block-entity/assets/textures/snow.png +0 -0
- package/examples/block-entity/assets/textures/stone.png +0 -0
- package/examples/block-entity/assets/textures/stone_bricks.png +0 -0
- package/examples/block-entity/assets/textures/void_grass/+x.png +0 -0
- package/examples/block-entity/assets/textures/void_grass/+y.png +0 -0
- package/examples/block-entity/assets/textures/void_grass/+z.png +0 -0
- package/examples/block-entity/assets/textures/void_grass/-x.png +0 -0
- package/examples/block-entity/assets/textures/void_grass/-y.png +0 -0
- package/examples/block-entity/assets/textures/void_grass/-z.png +0 -0
- package/examples/block-entity/assets/textures/void_sand.png +0 -0
- package/examples/block-entity/assets/textures/water.png +0 -0
- package/examples/block-entity/package.json +0 -14
- package/examples/character-controller/assets/audio/sfx/damage.wav +0 -0
- package/examples/character-controller/assets/audio/sfx/step.wav +0 -0
- package/examples/character-controller/assets/certs/README.md +0 -10
- package/examples/character-controller/assets/certs/localhost.crt +0 -20
- package/examples/character-controller/assets/certs/localhost.key +0 -27
- package/examples/character-controller/assets/cubemaps/skybox/+x.png +0 -0
- package/examples/character-controller/assets/cubemaps/skybox/+y.png +0 -0
- package/examples/character-controller/assets/cubemaps/skybox/+z.png +0 -0
- package/examples/character-controller/assets/cubemaps/skybox/-x.png +0 -0
- package/examples/character-controller/assets/cubemaps/skybox/-y.png +0 -0
- package/examples/character-controller/assets/cubemaps/skybox/-z.png +0 -0
- package/examples/character-controller/assets/map.json +0 -2623
- package/examples/character-controller/assets/models/player.gltf +0 -1
- package/examples/character-controller/assets/textures/bricks.png +0 -0
- package/examples/character-controller/assets/textures/clay.png +0 -0
- package/examples/character-controller/assets/textures/diamond_ore.png +0 -0
- package/examples/character-controller/assets/textures/dirt.png +0 -0
- package/examples/character-controller/assets/textures/dragons_stone.png +0 -0
- package/examples/character-controller/assets/textures/glass.png +0 -0
- package/examples/character-controller/assets/textures/grass/+x.png +0 -0
- package/examples/character-controller/assets/textures/grass/+y.png +0 -0
- package/examples/character-controller/assets/textures/grass/+z.png +0 -0
- package/examples/character-controller/assets/textures/grass/-x.png +0 -0
- package/examples/character-controller/assets/textures/grass/-y.png +0 -0
- package/examples/character-controller/assets/textures/grass/-z.png +0 -0
- package/examples/character-controller/assets/textures/grass.png +0 -0
- package/examples/character-controller/assets/textures/gravel.png +0 -0
- package/examples/character-controller/assets/textures/ice.png +0 -0
- package/examples/character-controller/assets/textures/infected_shadowrock.png +0 -0
- package/examples/character-controller/assets/textures/log_side.png +0 -0
- package/examples/character-controller/assets/textures/log_top.png +0 -0
- package/examples/character-controller/assets/textures/mossy_coblestone.png +0 -0
- package/examples/character-controller/assets/textures/nuit.png +0 -0
- package/examples/character-controller/assets/textures/oak_leaves.png +0 -0
- package/examples/character-controller/assets/textures/oak_planks.png +0 -0
- package/examples/character-controller/assets/textures/sand.png +0 -0
- package/examples/character-controller/assets/textures/shadowrock.png +0 -0
- package/examples/character-controller/assets/textures/stone.png +0 -0
- package/examples/character-controller/assets/textures/stone_bricks.png +0 -0
- package/examples/character-controller/assets/textures/void_sand.png +0 -0
- package/examples/character-controller/assets/textures/water_still.png +0 -0
- package/examples/entity-spawn/assets/certs/README.md +0 -10
- package/examples/entity-spawn/assets/certs/localhost.crt +0 -20
- package/examples/entity-spawn/assets/certs/localhost.key +0 -27
- package/examples/entity-spawn/assets/cubemaps/skybox/+x.png +0 -0
- package/examples/entity-spawn/assets/cubemaps/skybox/+y.png +0 -0
- package/examples/entity-spawn/assets/cubemaps/skybox/+z.png +0 -0
- package/examples/entity-spawn/assets/cubemaps/skybox/-x.png +0 -0
- package/examples/entity-spawn/assets/cubemaps/skybox/-y.png +0 -0
- package/examples/entity-spawn/assets/cubemaps/skybox/-z.png +0 -0
- package/examples/entity-spawn/assets/map.json +0 -2623
- package/examples/entity-spawn/assets/models/player.gltf +0 -1
- package/examples/entity-spawn/assets/models/spider.gltf +0 -1
- package/examples/entity-spawn/assets/textures/bricks.png +0 -0
- package/examples/entity-spawn/assets/textures/clay.png +0 -0
- package/examples/entity-spawn/assets/textures/diamond_ore.png +0 -0
- package/examples/entity-spawn/assets/textures/dirt.png +0 -0
- package/examples/entity-spawn/assets/textures/dragons_stone.png +0 -0
- package/examples/entity-spawn/assets/textures/glass.png +0 -0
- package/examples/entity-spawn/assets/textures/grass/+x.png +0 -0
- package/examples/entity-spawn/assets/textures/grass/+y.png +0 -0
- package/examples/entity-spawn/assets/textures/grass/+z.png +0 -0
- package/examples/entity-spawn/assets/textures/grass/-x.png +0 -0
- package/examples/entity-spawn/assets/textures/grass/-y.png +0 -0
- package/examples/entity-spawn/assets/textures/grass/-z.png +0 -0
- package/examples/entity-spawn/assets/textures/grass.png +0 -0
- package/examples/entity-spawn/assets/textures/gravel.png +0 -0
- package/examples/entity-spawn/assets/textures/ice.png +0 -0
- package/examples/entity-spawn/assets/textures/infected_shadowrock.png +0 -0
- package/examples/entity-spawn/assets/textures/log_side.png +0 -0
- package/examples/entity-spawn/assets/textures/log_top.png +0 -0
- package/examples/entity-spawn/assets/textures/mossy_coblestone.png +0 -0
- package/examples/entity-spawn/assets/textures/nuit.png +0 -0
- package/examples/entity-spawn/assets/textures/oak_leaves.png +0 -0
- package/examples/entity-spawn/assets/textures/oak_planks.png +0 -0
- package/examples/entity-spawn/assets/textures/sand.png +0 -0
- package/examples/entity-spawn/assets/textures/shadowrock.png +0 -0
- package/examples/entity-spawn/assets/textures/stone.png +0 -0
- package/examples/entity-spawn/assets/textures/stone_bricks.png +0 -0
- package/examples/entity-spawn/assets/textures/void_sand.png +0 -0
- package/examples/entity-spawn/assets/textures/water_still.png +0 -0
@@ -1,15 +1,15 @@
|
|
1
1
|
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
|
2
2
|
|
3
|
-
[Home](./index.md) > [server](./server.md) > [PlayerCamera](./server.playercamera.md) > [
|
3
|
+
[Home](./index.md) > [server](./server.md) > [PlayerCamera](./server.playercamera.md) > [setModelHiddenNodes](./server.playercamera.setmodelhiddennodes.md)
|
4
4
|
|
5
|
-
## PlayerCamera.
|
5
|
+
## PlayerCamera.setModelHiddenNodes() method
|
6
6
|
|
7
7
|
Sets the nodes of the model the camera is attached to that will not be rendered for the player. Uses case insensitive substring matching.
|
8
8
|
|
9
9
|
**Signature:**
|
10
10
|
|
11
11
|
```typescript
|
12
|
-
|
12
|
+
setModelHiddenNodes(modelHiddenNodes: string[]): void;
|
13
13
|
```
|
14
14
|
|
15
15
|
## Parameters
|
@@ -32,7 +32,7 @@ Description
|
|
32
32
|
</th></tr></thead>
|
33
33
|
<tbody><tr><td>
|
34
34
|
|
35
|
-
|
35
|
+
modelHiddenNodes
|
36
36
|
|
37
37
|
|
38
38
|
</td><td>
|
@@ -90,7 +90,7 @@ Description
|
|
90
90
|
</td></tr>
|
91
91
|
<tr><td>
|
92
92
|
|
93
|
-
[
|
93
|
+
[SetMode](./server.playercameraeventpayload.setmode.md)
|
94
94
|
|
95
95
|
|
96
96
|
</td><td>
|
@@ -99,7 +99,7 @@ Description
|
|
99
99
|
</td></tr>
|
100
100
|
<tr><td>
|
101
101
|
|
102
|
-
[
|
102
|
+
[SetModelHiddenNodes](./server.playercameraeventpayload.setmodelhiddennodes.md)
|
103
103
|
|
104
104
|
|
105
105
|
</td><td>
|
@@ -1,13 +1,13 @@
|
|
1
1
|
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
|
2
2
|
|
3
|
-
[Home](./index.md) > [server](./server.md) > [PlayerCameraEventPayload](./server.playercameraeventpayload.md) > [
|
3
|
+
[Home](./index.md) > [server](./server.md) > [PlayerCameraEventPayload](./server.playercameraeventpayload.md) > [SetModelHiddenNodes](./server.playercameraeventpayload.setmodelhiddennodes.md)
|
4
4
|
|
5
|
-
## PlayerCameraEventPayload.
|
5
|
+
## PlayerCameraEventPayload.SetModelHiddenNodes interface
|
6
6
|
|
7
7
|
**Signature:**
|
8
8
|
|
9
9
|
```typescript
|
10
|
-
interface
|
10
|
+
interface SetModelHiddenNodes
|
11
11
|
```
|
12
12
|
|
13
13
|
## Properties
|
@@ -35,7 +35,7 @@ Description
|
|
35
35
|
</th></tr></thead>
|
36
36
|
<tbody><tr><td>
|
37
37
|
|
38
|
-
[
|
38
|
+
[modelHiddenNodes](./server.playercameraeventpayload.setmodelhiddennodes.modelhiddennodes.md)
|
39
39
|
|
40
40
|
|
41
41
|
</td><td>
|
@@ -43,7 +43,7 @@ Description
|
|
43
43
|
|
44
44
|
</td><td>
|
45
45
|
|
46
|
-
string
|
46
|
+
Set<string>
|
47
47
|
|
48
48
|
|
49
49
|
</td><td>
|
@@ -52,7 +52,7 @@ string\[\]
|
|
52
52
|
</td></tr>
|
53
53
|
<tr><td>
|
54
54
|
|
55
|
-
[playerCamera](./server.playercameraeventpayload.
|
55
|
+
[playerCamera](./server.playercameraeventpayload.setmodelhiddennodes.playercamera.md)
|
56
56
|
|
57
57
|
|
58
58
|
</td><td>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
|
2
|
+
|
3
|
+
[Home](./index.md) > [server](./server.md) > [PlayerCameraEventPayload](./server.playercameraeventpayload.md) > [SetModelHiddenNodes](./server.playercameraeventpayload.setmodelhiddennodes.md) > [modelHiddenNodes](./server.playercameraeventpayload.setmodelhiddennodes.modelhiddennodes.md)
|
4
|
+
|
5
|
+
## PlayerCameraEventPayload.SetModelHiddenNodes.modelHiddenNodes property
|
6
|
+
|
7
|
+
**Signature:**
|
8
|
+
|
9
|
+
```typescript
|
10
|
+
modelHiddenNodes: Set<string>;
|
11
|
+
```
|
@@ -1,8 +1,8 @@
|
|
1
1
|
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
|
2
2
|
|
3
|
-
[Home](./index.md) > [server](./server.md) > [PlayerCameraEventPayload](./server.playercameraeventpayload.md) > [
|
3
|
+
[Home](./index.md) > [server](./server.md) > [PlayerCameraEventPayload](./server.playercameraeventpayload.md) > [SetModelHiddenNodes](./server.playercameraeventpayload.setmodelhiddennodes.md) > [playerCamera](./server.playercameraeventpayload.setmodelhiddennodes.playercamera.md)
|
4
4
|
|
5
|
-
## PlayerCameraEventPayload.
|
5
|
+
## PlayerCameraEventPayload.SetModelHiddenNodes.playerCamera property
|
6
6
|
|
7
7
|
**Signature:**
|
8
8
|
|
@@ -130,12 +130,12 @@ SET\_FOV
|
|
130
130
|
</td></tr>
|
131
131
|
<tr><td>
|
132
132
|
|
133
|
-
SET\
|
133
|
+
SET\_MODE
|
134
134
|
|
135
135
|
|
136
136
|
</td><td>
|
137
137
|
|
138
|
-
`"PLAYER_CAMERA.
|
138
|
+
`"PLAYER_CAMERA.SET_MODE"`
|
139
139
|
|
140
140
|
|
141
141
|
</td><td>
|
@@ -144,12 +144,12 @@ SET\_HIDDEN\_MODEL\_NODES
|
|
144
144
|
</td></tr>
|
145
145
|
<tr><td>
|
146
146
|
|
147
|
-
SET\
|
147
|
+
SET\_MODEL\_HIDDEN\_NODES
|
148
148
|
|
149
149
|
|
150
150
|
</td><td>
|
151
151
|
|
152
|
-
`"PLAYER_CAMERA.
|
152
|
+
`"PLAYER_CAMERA.SET_MODEL_HIDDEN_NODES"`
|
153
153
|
|
154
154
|
|
155
155
|
</td><td>
|
@@ -0,0 +1,75 @@
|
|
1
|
+
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
|
2
|
+
|
3
|
+
[Home](./index.md) > [server](./server.md) > [Simulation](./server.simulation.md) > [getContactManifolds](./server.simulation.getcontactmanifolds.md)
|
4
|
+
|
5
|
+
## Simulation.getContactManifolds() method
|
6
|
+
|
7
|
+
Gets the contact manifolds for a pair of colliders.
|
8
|
+
|
9
|
+
**Signature:**
|
10
|
+
|
11
|
+
```typescript
|
12
|
+
getContactManifolds(colliderHandleA: RAPIER.ColliderHandle, colliderHandleB: RAPIER.ColliderHandle): ContactManifold[];
|
13
|
+
```
|
14
|
+
|
15
|
+
## Parameters
|
16
|
+
|
17
|
+
<table><thead><tr><th>
|
18
|
+
|
19
|
+
Parameter
|
20
|
+
|
21
|
+
|
22
|
+
</th><th>
|
23
|
+
|
24
|
+
Type
|
25
|
+
|
26
|
+
|
27
|
+
</th><th>
|
28
|
+
|
29
|
+
Description
|
30
|
+
|
31
|
+
|
32
|
+
</th></tr></thead>
|
33
|
+
<tbody><tr><td>
|
34
|
+
|
35
|
+
colliderHandleA
|
36
|
+
|
37
|
+
|
38
|
+
</td><td>
|
39
|
+
|
40
|
+
RAPIER.ColliderHandle
|
41
|
+
|
42
|
+
|
43
|
+
</td><td>
|
44
|
+
|
45
|
+
The handle of the first collider.
|
46
|
+
|
47
|
+
|
48
|
+
</td></tr>
|
49
|
+
<tr><td>
|
50
|
+
|
51
|
+
colliderHandleB
|
52
|
+
|
53
|
+
|
54
|
+
</td><td>
|
55
|
+
|
56
|
+
RAPIER.ColliderHandle
|
57
|
+
|
58
|
+
|
59
|
+
</td><td>
|
60
|
+
|
61
|
+
The handle of the second collider.
|
62
|
+
|
63
|
+
|
64
|
+
</td></tr>
|
65
|
+
</tbody></table>
|
66
|
+
**Returns:**
|
67
|
+
|
68
|
+
ContactManifold\[\]
|
69
|
+
|
70
|
+
The contact manifolds, or an empty array if no contact.
|
71
|
+
|
72
|
+
## Remarks
|
73
|
+
|
74
|
+
Contact manifolds will not be returned for contacts that involve sensors.
|
75
|
+
|
@@ -172,6 +172,20 @@ Casts a ray through the simulation.
|
|
172
172
|
Enables or disables debug rendering for the simulation. When enabled, all colliders, rigid body and raycast outlines will be rendered in the world. Do not enable this in production. In large worlds enabling this can cause noticable lag and RTT spikes.
|
173
173
|
|
174
174
|
|
175
|
+
</td></tr>
|
176
|
+
<tr><td>
|
177
|
+
|
178
|
+
[getContactManifolds(colliderHandleA, colliderHandleB)](./server.simulation.getcontactmanifolds.md)
|
179
|
+
|
180
|
+
|
181
|
+
</td><td>
|
182
|
+
|
183
|
+
|
184
|
+
</td><td>
|
185
|
+
|
186
|
+
Gets the contact manifolds for a pair of colliders.
|
187
|
+
|
188
|
+
|
175
189
|
</td></tr>
|
176
190
|
<tr><td>
|
177
191
|
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# big-world
|
2
|
+
|
3
|
+
To install dependencies:
|
4
|
+
|
5
|
+
```bash
|
6
|
+
bun install
|
7
|
+
```
|
8
|
+
|
9
|
+
To run:
|
10
|
+
|
11
|
+
```bash
|
12
|
+
bun run index.ts
|
13
|
+
```
|
14
|
+
|
15
|
+
This project was created using `bun init` in bun v1.1.26. [Bun](https://bun.sh) is a fast all-in-one JavaScript runtime.
|
@@ -0,0 +1,41 @@
|
|
1
|
+
import {
|
2
|
+
startServer,
|
3
|
+
PlayerEntity,
|
4
|
+
} from 'hytopia';
|
5
|
+
|
6
|
+
import worldMap from './assets/map.json';
|
7
|
+
|
8
|
+
/**
|
9
|
+
* This example loads and simulates extremely large map that is
|
10
|
+
* 750^2 blocks in area. Approximately 2,000,000+ blocks are loaded,
|
11
|
+
* resulting in thousands of chunks and a large amount of physics vertices.
|
12
|
+
*
|
13
|
+
* This example is meant to showcase the performance of the server.
|
14
|
+
* When dealing with large fully simulated worlds, as well as benchmark
|
15
|
+
* and test client performance.
|
16
|
+
*
|
17
|
+
* Client load times may take a few seconds because batch
|
18
|
+
* loading is not yet implemented.
|
19
|
+
*/
|
20
|
+
|
21
|
+
startServer(world => {
|
22
|
+
world.loadMap(worldMap);
|
23
|
+
|
24
|
+
// Spawn a player entity when a player joins the game.
|
25
|
+
world.onPlayerJoin = player => {
|
26
|
+
const playerEntity = new PlayerEntity({
|
27
|
+
player,
|
28
|
+
name: 'Player',
|
29
|
+
modelUri: 'models/player.gltf',
|
30
|
+
modelLoopedAnimations: [ 'idle' ],
|
31
|
+
modelScale: 0.5,
|
32
|
+
});
|
33
|
+
|
34
|
+
playerEntity.spawn(world, { x: 0, y: 10, z: 0 });
|
35
|
+
};
|
36
|
+
|
37
|
+
// Despawn all player entities when a player leaves the game.
|
38
|
+
world.onPlayerLeave = player => {
|
39
|
+
world.entityManager.getAllPlayerEntities(player).forEach(entity => entity.despawn());
|
40
|
+
};
|
41
|
+
});
|
@@ -12,7 +12,10 @@ import worldMap from './assets/map.json';
|
|
12
12
|
|
13
13
|
startServer(world => {
|
14
14
|
// Boilerplate
|
15
|
-
|
15
|
+
|
16
|
+
// Uncomment this to visualize physics vertices, will cause noticable lag.
|
17
|
+
// world.simulation.enableDebugRendering(true);
|
18
|
+
|
16
19
|
world.loadMap(worldMap);
|
17
20
|
world.onPlayerJoin = player => {
|
18
21
|
const playerEntity = new PlayerEntity({
|
@@ -66,7 +69,7 @@ startServer(world => {
|
|
66
69
|
rigidBodyOptions: {
|
67
70
|
type: RigidBodyType.KINEMATIC_VELOCITY,
|
68
71
|
angularVelocity: { x: 1, y: 1, z: 1 },
|
69
|
-
}
|
72
|
+
},
|
70
73
|
});
|
71
74
|
|
72
75
|
spinningBlock.spawn(world, { x: 0, y: 10, z: -6 });
|
@@ -88,7 +91,7 @@ startServer(world => {
|
|
88
91
|
if (started) {
|
89
92
|
world.chatManager.sendBroadcastMessage('The sand block was pushed!');
|
90
93
|
}
|
91
|
-
}
|
94
|
+
};
|
92
95
|
|
93
96
|
movableBlock.spawn(world, { x: -4, y: 10, z: -6 });
|
94
97
|
|
@@ -103,7 +106,7 @@ startServer(world => {
|
|
103
106
|
type: RigidBodyType.DYNAMIC,
|
104
107
|
additionalMass: 10,
|
105
108
|
enabledRotations: { x: false, y: false, z: false },
|
106
|
-
}
|
109
|
+
},
|
107
110
|
});
|
108
111
|
|
109
112
|
heavyBlock.spawn(world, { x: -4, y: 10, z: -1 });
|
@@ -122,10 +125,10 @@ startServer(world => {
|
|
122
125
|
{
|
123
126
|
shape: ColliderShape.BLOCK,
|
124
127
|
halfExtents: { x: 0.5, y: 0.5, z: 0.5 },
|
125
|
-
bounciness: 2
|
126
|
-
}
|
127
|
-
]
|
128
|
-
}
|
128
|
+
bounciness: 2,
|
129
|
+
},
|
130
|
+
],
|
131
|
+
},
|
129
132
|
});
|
130
133
|
|
131
134
|
bouncingBlock.spawn(world, { x: 0, y: 10, z: -3 });
|
@@ -5,6 +5,7 @@ import {
|
|
5
5
|
Collider,
|
6
6
|
Entity,
|
7
7
|
ColliderShape,
|
8
|
+
CoefficientCombineRule,
|
8
9
|
BlockType,
|
9
10
|
} from 'hytopia';
|
10
11
|
|
@@ -47,14 +48,14 @@ export default class MyCharacterController extends BaseCharacterController {
|
|
47
48
|
public get platform(): Entity | undefined { return this._platform; }
|
48
49
|
|
49
50
|
/**
|
50
|
-
* Create the
|
51
|
+
* Create the colliders for the character controller.
|
51
52
|
*/
|
52
|
-
public
|
53
|
+
public createColliders(): Collider[] {
|
53
54
|
if (!this.entity.isSpawned) {
|
54
55
|
throw new Error('CharacterController.createSensorColliders(): Entity is not spawned!');
|
55
56
|
}
|
56
57
|
|
57
|
-
const
|
58
|
+
const colliders: Collider[] = [];
|
58
59
|
|
59
60
|
/**
|
60
61
|
* Our ground sensor detects when we're on the ground.
|
@@ -63,7 +64,7 @@ export default class MyCharacterController extends BaseCharacterController {
|
|
63
64
|
* by the DEFAULT_ENTITY_RIGID_BODY_OPTIONS constant of
|
64
65
|
* the hytopia package.
|
65
66
|
*/
|
66
|
-
|
67
|
+
colliders.push(new Collider({
|
67
68
|
shape: ColliderShape.CYLINDER,
|
68
69
|
radius: 0.30,
|
69
70
|
halfHeight: 0.125,
|
@@ -95,7 +96,26 @@ export default class MyCharacterController extends BaseCharacterController {
|
|
95
96
|
},
|
96
97
|
}));
|
97
98
|
|
98
|
-
|
99
|
+
/**
|
100
|
+
* A wall collider slightly larger than our player hitbox with
|
101
|
+
* a collision group that only collides with blocks. This prevent
|
102
|
+
* sticking and friction to blocks as a player moves, creating
|
103
|
+
* a smooth slide effect on walls that we jump into, etc.
|
104
|
+
*/
|
105
|
+
colliders.push(new Collider({
|
106
|
+
shape: ColliderShape.CAPSULE,
|
107
|
+
halfHeight: 0.30,
|
108
|
+
radius: 0.37,
|
109
|
+
collisionGroups: {
|
110
|
+
belongsTo: [ CollisionGroup.ENTITY_SENSOR ],
|
111
|
+
collidesWith: [ CollisionGroup.BLOCK ],
|
112
|
+
},
|
113
|
+
friction: 0,
|
114
|
+
frictionCombineRule: CoefficientCombineRule.Min,
|
115
|
+
tag: 'wallCollider',
|
116
|
+
}));
|
117
|
+
|
118
|
+
return colliders;
|
99
119
|
}
|
100
120
|
|
101
121
|
/**
|
@@ -8,7 +8,9 @@ import MyCharacterController from './MyCharacterController';
|
|
8
8
|
import worldMap from './assets/map.json';
|
9
9
|
|
10
10
|
startServer(world => {
|
11
|
-
|
11
|
+
// Uncomment this to visualize physics vertices, will cause noticable lag.
|
12
|
+
// world.simulation.enableDebugRendering(true);
|
13
|
+
|
12
14
|
world.loadMap(worldMap);
|
13
15
|
|
14
16
|
world.onPlayerJoin = player => {
|
@@ -67,7 +67,9 @@ startServer(world => {
|
|
67
67
|
* Boilerplate setup for our example
|
68
68
|
*/
|
69
69
|
function setup(world: World) {
|
70
|
-
|
70
|
+
// Uncomment this to visualize physics vertices, will cause noticable lag.
|
71
|
+
// world.simulation.enableDebugRendering(true);
|
72
|
+
|
71
73
|
world.loadMap(worldMap);
|
72
74
|
|
73
75
|
// Spawn a player entity when a player joins the game.
|
@@ -34,8 +34,8 @@ import {
|
|
34
34
|
import type {
|
35
35
|
PlayerInputState,
|
36
36
|
PlayerOrientationState,
|
37
|
-
|
38
|
-
|
37
|
+
QuaternionLike,
|
38
|
+
Vector3Like,
|
39
39
|
} from 'hytopia';
|
40
40
|
|
41
41
|
import map from './assets/map.json';
|
@@ -78,7 +78,7 @@ const PAYLOAD_WAYPOINT_ENEMY_SPAWNS = [
|
|
78
78
|
// Simple game state tracking via globals.
|
79
79
|
const enemyHealth: Record<number, number> = {}; // Entity id -> health
|
80
80
|
const enemyPathfindAccumulators: Record<number, number> = {}; // Entity id -> accumulator, so we don't pathfind each tick
|
81
|
-
const enemyPathfindingTargets: Record<number,
|
81
|
+
const enemyPathfindingTargets: Record<number, Vector3Like> = {}; // Entity id -> target coordinate
|
82
82
|
const playerEntityHealth: Record<number, number> = {}; // Player entity id -> health
|
83
83
|
let started = false; // Game started flag
|
84
84
|
let payloadEntity: Entity | null = null; // Payload entity
|
@@ -90,8 +90,8 @@ let targetWaypointCoordinateIndex = 0; // Current waypoint coordinate index for
|
|
90
90
|
startServer(world => { // Perform our game setup logic in the startServer init callback here.
|
91
91
|
const chatManager = world.chatManager;
|
92
92
|
|
93
|
-
//
|
94
|
-
//
|
93
|
+
// Uncomment this to visualize physics vertices, will cause noticable lag.
|
94
|
+
// world.simulation.enableDebugRendering(true);
|
95
95
|
|
96
96
|
// Load Map
|
97
97
|
world.loadMap(map);
|
@@ -109,7 +109,7 @@ startServer(world => { // Perform our game setup logic in the startServer init c
|
|
109
109
|
// Setup a first person camera for the player
|
110
110
|
player.camera.setMode(PlayerCameraMode.FIRST_PERSON); // set first person mode
|
111
111
|
player.camera.setOffset({ x: 0, y: 0.4, z: 0 }); // shift camrea up on Y axis so we see from "head" perspective.
|
112
|
-
player.camera.
|
112
|
+
player.camera.setModelHiddenNodes([ 'head', 'neck' ]); // hide the head node from the model so we don't see it in the camera, this is just hidden for the controlling player.
|
113
113
|
player.camera.setForwardOffset(0.3); // Shift the camera forward so we are looking slightly in front of where the player is looking.
|
114
114
|
|
115
115
|
// Spawn the player entity at a random coordinate
|
@@ -207,7 +207,7 @@ function startEnemySpawnLoop(world: World) {
|
|
207
207
|
spawn();
|
208
208
|
}
|
209
209
|
|
210
|
-
function spawnBullet(world: World, coordinate:
|
210
|
+
function spawnBullet(world: World, coordinate: Vector3Like, direction: Vector3Like) {
|
211
211
|
// Spawn a bullet when the player shoots.
|
212
212
|
const bullet = new Entity({
|
213
213
|
name: 'Bullet',
|
@@ -340,7 +340,7 @@ function spawnPayloadEntity(world: World) {
|
|
340
340
|
})).play(world);
|
341
341
|
}
|
342
342
|
|
343
|
-
function spawnSpider(world: World, coordinate:
|
343
|
+
function spawnSpider(world: World, coordinate: Vector3Like) {
|
344
344
|
const baseScale = 0.5;
|
345
345
|
const baseSpeed = 3;
|
346
346
|
const randomScaleMultiplier = Math.random() * 2 + 1; // Random value between 1 and 3 // Random scale multiplier to make each spider a different size
|
@@ -529,7 +529,7 @@ function damagePlayer(playerEntity: PlayerEntity) {
|
|
529
529
|
}
|
530
530
|
}
|
531
531
|
|
532
|
-
function getDirectionFromOrientation(orientationState: PlayerOrientationState):
|
532
|
+
function getDirectionFromOrientation(orientationState: PlayerOrientationState): Vector3Like {
|
533
533
|
const { yaw, pitch } = orientationState;
|
534
534
|
const cosPitch = Math.cos(pitch);
|
535
535
|
|
@@ -540,7 +540,7 @@ function getDirectionFromOrientation(orientationState: PlayerOrientationState):
|
|
540
540
|
};
|
541
541
|
}
|
542
542
|
|
543
|
-
function getRotationFromDirection(direction:
|
543
|
+
function getRotationFromDirection(direction: Vector3Like): QuaternionLike {
|
544
544
|
// Calculate yaw (rotation around Y-axis)
|
545
545
|
const yaw = Math.atan2(-direction.x, -direction.z);
|
546
546
|
|