@zephyr3d/scene 0.9.2 → 0.9.4
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/dist/animation/animationset.js +135 -135
- package/dist/animation/animationset.js.map +1 -1
- package/dist/animation/ik/ik_chain_builder.js +68 -0
- package/dist/animation/ik/ik_chain_builder.js.map +1 -0
- package/dist/animation/ik/ik_pole_constraint.js +2 -7
- package/dist/animation/ik/ik_pole_constraint.js.map +1 -1
- package/dist/animation/joint_dynamics/controller.js +146 -146
- package/dist/animation/joint_dynamics/controller.js.map +1 -1
- package/dist/animation/joint_dynamics/math.js +16 -0
- package/dist/animation/joint_dynamics/math.js.map +1 -0
- package/dist/animation/spring/spring_system.js +75 -75
- package/dist/animation/spring/spring_system.js.map +1 -1
- package/dist/animation/spring2/constraints.js.map +1 -1
- package/dist/animation/spring2/controller.js +64 -64
- package/dist/animation/spring2/controller.js.map +1 -1
- package/dist/animation/spring2/math.js.map +1 -1
- package/dist/animation/spring2/spring_system.js +8 -8
- package/dist/animation/spring2/spring_system.js.map +1 -1
- package/dist/app/engine.js +119 -71
- package/dist/app/engine.js.map +1 -1
- package/dist/asset/assetmanager.js +296 -244
- package/dist/asset/assetmanager.js.map +1 -1
- package/dist/asset/loaders/gltf/gltf_loader.js +1 -0
- package/dist/asset/loaders/gltf/gltf_loader.js.map +1 -1
- package/dist/camera/camera.js +184 -184
- package/dist/camera/camera.js.map +1 -1
- package/dist/index.d.ts +685 -38
- package/dist/index.js +11 -2
- package/dist/index.js.map +1 -1
- package/dist/material/material.js +290 -290
- package/dist/material/material.js.map +1 -1
- package/dist/material/msdf_text.js +180 -0
- package/dist/material/msdf_text.js.map +1 -0
- package/dist/material/msdf_text_sprite.js +64 -0
- package/dist/material/msdf_text_sprite.js.map +1 -0
- package/dist/material/pbrblueprint.js +123 -108
- package/dist/material/pbrblueprint.js.map +1 -1
- package/dist/material/shader/helper.js +6 -3
- package/dist/material/shader/helper.js.map +1 -1
- package/dist/material/sprite_sdf.js +106 -0
- package/dist/material/sprite_sdf.js.map +1 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +38 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +1 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +10 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +1 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +127 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +1 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +263 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +1 -0
- package/dist/posteffect/ssr.js +1 -0
- package/dist/posteffect/ssr.js.map +1 -1
- package/dist/render/abuffer_oit.js +1 -0
- package/dist/render/abuffer_oit.js.map +1 -1
- package/dist/render/cluster_light.js +3 -4
- package/dist/render/cluster_light.js.map +1 -1
- package/dist/render/cull_visitor.js +28 -0
- package/dist/render/cull_visitor.js.map +1 -1
- package/dist/render/drawable.js.map +1 -1
- package/dist/render/drawable_mixin.js +1 -0
- package/dist/render/drawable_mixin.js.map +1 -1
- package/dist/render/fbm_wavegenerator.js +1 -0
- package/dist/render/fbm_wavegenerator.js.map +1 -1
- package/dist/render/gerstner_wavegenerator.js +1 -0
- package/dist/render/gerstner_wavegenerator.js.map +1 -1
- package/dist/render/globalbindgroup_allocator.js +1 -0
- package/dist/render/globalbindgroup_allocator.js.map +1 -1
- package/dist/render/render_queue.js +1 -0
- package/dist/render/render_queue.js.map +1 -1
- package/dist/render/rendergraph/history_resource_manager.js +93 -93
- package/dist/render/rendergraph/history_resource_manager.js.map +1 -1
- package/dist/render/rendergraph/history_resources.js +3 -3
- package/dist/render/rendergraph/history_resources.js.map +1 -1
- package/dist/render/rendergraph/types.js +22 -22
- package/dist/render/rendergraph/types.js.map +1 -1
- package/dist/scene/basesprite.js +1 -5
- package/dist/scene/basesprite.js.map +1 -1
- package/dist/scene/batchgroup.js +29 -17
- package/dist/scene/batchgroup.js.map +1 -1
- package/dist/scene/environment.js +1 -0
- package/dist/scene/environment.js.map +1 -1
- package/dist/scene/mesh.js +8 -9
- package/dist/scene/mesh.js.map +1 -1
- package/dist/scene/meshdrawable.js +96 -0
- package/dist/scene/meshdrawable.js.map +1 -0
- package/dist/scene/msdftext.js +341 -0
- package/dist/scene/msdftext.js.map +1 -0
- package/dist/scene/msdftextsprite.js +349 -0
- package/dist/scene/msdftextsprite.js.map +1 -0
- package/dist/scene/particlesys.js +1 -0
- package/dist/scene/particlesys.js.map +1 -1
- package/dist/scene/scene.js +1 -0
- package/dist/scene/scene.js.map +1 -1
- package/dist/scene/scene_node.js +6 -0
- package/dist/scene/scene_node.js.map +1 -1
- package/dist/scene/sdftextsprite.js +322 -0
- package/dist/scene/sdftextsprite.js.map +1 -0
- package/dist/scene/terrain-cm/grass.js +1 -0
- package/dist/scene/terrain-cm/grass.js.map +1 -1
- package/dist/scene/terrain-cm/grassmaterial.js +1 -0
- package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
- package/dist/scene/terrain-cm/terrain-cm.js +1 -0
- package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
- package/dist/scene/textsprite.js +120 -0
- package/dist/scene/textsprite.js.map +1 -0
- package/dist/scene/water.js +1 -0
- package/dist/scene/water.js.map +1 -1
- package/dist/shadow/shader.js +1 -0
- package/dist/shadow/shader.js.map +1 -1
- package/dist/shapes/torus.js +90 -59
- package/dist/shapes/torus.js.map +1 -1
- package/dist/src/animation/animation.js +127 -0
- package/dist/src/animation/animation.js.map +1 -0
- package/dist/src/animation/animationset.js +255 -0
- package/dist/src/animation/animationset.js.map +1 -0
- package/dist/src/animation/animationtrack.js +34 -0
- package/dist/src/animation/animationtrack.js.map +1 -0
- package/dist/src/animation/eulerrotationtrack.js +52 -0
- package/dist/src/animation/eulerrotationtrack.js.map +1 -0
- package/dist/src/animation/morphtarget.js +93 -0
- package/dist/src/animation/morphtarget.js.map +1 -0
- package/dist/src/animation/morphtrack.js +70 -0
- package/dist/src/animation/morphtrack.js.map +1 -0
- package/dist/src/animation/proptrack.js +161 -0
- package/dist/src/animation/proptrack.js.map +1 -0
- package/dist/src/animation/rotationtrack.js +51 -0
- package/dist/src/animation/rotationtrack.js.map +1 -0
- package/dist/src/animation/scaletrack.js +50 -0
- package/dist/src/animation/scaletrack.js.map +1 -0
- package/dist/src/animation/skeleton.js +204 -0
- package/dist/src/animation/skeleton.js.map +1 -0
- package/dist/src/animation/translationtrack.js +50 -0
- package/dist/src/animation/translationtrack.js.map +1 -0
- package/dist/src/app/app.js +129 -0
- package/dist/src/app/app.js.map +1 -0
- package/dist/src/app/inputmgr.js +267 -0
- package/dist/src/app/inputmgr.js.map +1 -0
- package/dist/src/asset/assetmanager.js +404 -0
- package/dist/src/asset/assetmanager.js.map +1 -0
- package/dist/src/asset/builtin.js +337 -0
- package/dist/src/asset/builtin.js.map +1 -0
- package/dist/src/asset/loaders/dds/dds.js +470 -0
- package/dist/src/asset/loaders/dds/dds.js.map +1 -0
- package/dist/src/asset/loaders/dds/dds_loader.js +28 -0
- package/dist/src/asset/loaders/dds/dds_loader.js.map +1 -0
- package/dist/src/asset/loaders/gltf/gltf_loader.js +1265 -0
- package/dist/src/asset/loaders/gltf/gltf_loader.js.map +1 -0
- package/dist/src/asset/loaders/gltf/helpers.js +327 -0
- package/dist/src/asset/loaders/gltf/helpers.js.map +1 -0
- package/dist/src/asset/loaders/hdr/hdr.js +180 -0
- package/dist/src/asset/loaders/hdr/hdr.js.map +1 -0
- package/dist/src/asset/loaders/image/tga_Loader.js +116 -0
- package/dist/src/asset/loaders/image/tga_Loader.js.map +1 -0
- package/dist/src/asset/loaders/image/webimage_loader.js +63 -0
- package/dist/src/asset/loaders/image/webimage_loader.js.map +1 -0
- package/dist/src/asset/loaders/loader.js +45 -0
- package/dist/src/asset/loaders/loader.js.map +1 -0
- package/dist/src/asset/model.js +414 -0
- package/dist/src/asset/model.js.map +1 -0
- package/dist/src/blitter/bilateralblur.js +221 -0
- package/dist/src/blitter/bilateralblur.js.map +1 -0
- package/dist/src/blitter/blitter.js +390 -0
- package/dist/src/blitter/blitter.js.map +1 -0
- package/dist/src/blitter/box.js +118 -0
- package/dist/src/blitter/box.js.map +1 -0
- package/dist/src/blitter/copy.js +22 -0
- package/dist/src/blitter/copy.js.map +1 -0
- package/dist/src/blitter/gaussianblur.js +228 -0
- package/dist/src/blitter/gaussianblur.js.map +1 -0
- package/dist/src/camera/base.js +92 -0
- package/dist/src/camera/base.js.map +1 -0
- package/dist/src/camera/camera.js +1005 -0
- package/dist/src/camera/camera.js.map +1 -0
- package/dist/src/camera/fps.js +238 -0
- package/dist/src/camera/fps.js.map +1 -0
- package/dist/src/camera/orbit.js +245 -0
- package/dist/src/camera/orbit.js.map +1 -0
- package/dist/src/camera/orthocamera.js +167 -0
- package/dist/src/camera/orthocamera.js.map +1 -0
- package/dist/src/camera/perspectivecamera.js +141 -0
- package/dist/src/camera/perspectivecamera.js.map +1 -0
- package/dist/src/index.js +120 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/material/blinn.js +81 -0
- package/dist/src/material/blinn.js.map +1 -0
- package/dist/src/material/grassmaterial.js +113 -0
- package/dist/src/material/grassmaterial.js.map +1 -0
- package/dist/src/material/lambert.js +92 -0
- package/dist/src/material/lambert.js.map +1 -0
- package/dist/src/material/material.js +301 -0
- package/dist/src/material/material.js.map +1 -0
- package/dist/src/material/meshmaterial.js +704 -0
- package/dist/src/material/meshmaterial.js.map +1 -0
- package/dist/src/material/mixins/albedocolor.js +76 -0
- package/dist/src/material/mixins/albedocolor.js.map +1 -0
- package/dist/src/material/mixins/foliage.js +47 -0
- package/dist/src/material/mixins/foliage.js.map +1 -0
- package/dist/src/material/mixins/lightmodel/blinnphong.js +112 -0
- package/dist/src/material/mixins/lightmodel/blinnphong.js.map +1 -0
- package/dist/src/material/mixins/lightmodel/lambert.js +58 -0
- package/dist/src/material/mixins/lightmodel/lambert.js.map +1 -0
- package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js +178 -0
- package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -0
- package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js +139 -0
- package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -0
- package/dist/src/material/mixins/lit.js +476 -0
- package/dist/src/material/mixins/lit.js.map +1 -0
- package/dist/src/material/mixins/pbr/common.js +918 -0
- package/dist/src/material/mixins/pbr/common.js.map +1 -0
- package/dist/src/material/mixins/texture.js +172 -0
- package/dist/src/material/mixins/texture.js.map +1 -0
- package/dist/src/material/mixins/vertexcolor.js +56 -0
- package/dist/src/material/mixins/vertexcolor.js.map +1 -0
- package/dist/src/material/particle.js +178 -0
- package/dist/src/material/particle.js.map +1 -0
- package/dist/src/material/pbrmr.js +97 -0
- package/dist/src/material/pbrmr.js.map +1 -0
- package/dist/src/material/pbrsg.js +97 -0
- package/dist/src/material/pbrsg.js.map +1 -0
- package/dist/src/material/shader/helper.js +1209 -0
- package/dist/src/material/shader/helper.js.map +1 -0
- package/dist/src/material/terrain-cm.js +606 -0
- package/dist/src/material/terrain-cm.js.map +1 -0
- package/dist/src/material/terrainmaterial.js +375 -0
- package/dist/src/material/terrainmaterial.js.map +1 -0
- package/dist/src/material/unlit.js +41 -0
- package/dist/src/material/unlit.js.map +1 -0
- package/dist/src/material/water.js +417 -0
- package/dist/src/material/water.js.map +1 -0
- package/dist/src/posteffect/bloom.js +361 -0
- package/dist/src/posteffect/bloom.js.map +1 -0
- package/dist/src/posteffect/compositor.js +226 -0
- package/dist/src/posteffect/compositor.js.map +1 -0
- package/dist/src/posteffect/fxaa.js +273 -0
- package/dist/src/posteffect/fxaa.js.map +1 -0
- package/dist/src/posteffect/grayscale.js +69 -0
- package/dist/src/posteffect/grayscale.js.map +1 -0
- package/dist/src/posteffect/motionblur.js +96 -0
- package/dist/src/posteffect/motionblur.js.map +1 -0
- package/dist/src/posteffect/posteffect.js +126 -0
- package/dist/src/posteffect/posteffect.js.map +1 -0
- package/dist/src/posteffect/sao.js +324 -0
- package/dist/src/posteffect/sao.js.map +1 -0
- package/dist/src/posteffect/ssr.js +489 -0
- package/dist/src/posteffect/ssr.js.map +1 -0
- package/dist/src/posteffect/taa.js +172 -0
- package/dist/src/posteffect/taa.js.map +1 -0
- package/dist/src/posteffect/tonemap.js +94 -0
- package/dist/src/posteffect/tonemap.js.map +1 -0
- package/dist/src/render/abuffer_oit.js +361 -0
- package/dist/src/render/abuffer_oit.js.map +1 -0
- package/dist/src/render/clipmap.js +851 -0
- package/dist/src/render/clipmap.js.map +1 -0
- package/dist/src/render/cluster_light.js +333 -0
- package/dist/src/render/cluster_light.js.map +1 -0
- package/dist/src/render/cull_visitor.js +187 -0
- package/dist/src/render/cull_visitor.js.map +1 -0
- package/dist/src/render/depthpass.js +68 -0
- package/dist/src/render/depthpass.js.map +1 -0
- package/dist/src/render/drawable_mixin.js +227 -0
- package/dist/src/render/drawable_mixin.js.map +1 -0
- package/dist/src/render/envlight.js +463 -0
- package/dist/src/render/envlight.js.map +1 -0
- package/dist/src/render/fbm_wavegenerator.js +251 -0
- package/dist/src/render/fbm_wavegenerator.js.map +1 -0
- package/dist/src/render/fft_wavegenerator.js +1006 -0
- package/dist/src/render/fft_wavegenerator.js.map +1 -0
- package/dist/src/render/fullscreenquad.js +38 -0
- package/dist/src/render/fullscreenquad.js.map +1 -0
- package/dist/src/render/gerstner_wavegenerator.js +314 -0
- package/dist/src/render/gerstner_wavegenerator.js.map +1 -0
- package/dist/src/render/globalbindgroup_allocator.js +60 -0
- package/dist/src/render/globalbindgroup_allocator.js.map +1 -0
- package/dist/src/render/hzb.js +273 -0
- package/dist/src/render/hzb.js.map +1 -0
- package/dist/src/render/lightpass.js +172 -0
- package/dist/src/render/lightpass.js.map +1 -0
- package/dist/src/render/objectcolorpass.js +51 -0
- package/dist/src/render/objectcolorpass.js.map +1 -0
- package/dist/src/render/primitive.js +364 -0
- package/dist/src/render/primitive.js.map +1 -0
- package/dist/src/render/render_queue.js +467 -0
- package/dist/src/render/render_queue.js.map +1 -0
- package/dist/src/render/renderbundle_wrapper.js +152 -0
- package/dist/src/render/renderbundle_wrapper.js.map +1 -0
- package/dist/src/render/renderer.js +455 -0
- package/dist/src/render/renderer.js.map +1 -0
- package/dist/src/render/renderpass.js +200 -0
- package/dist/src/render/renderpass.js.map +1 -0
- package/dist/src/render/shadowmap_pass.js +56 -0
- package/dist/src/render/shadowmap_pass.js.map +1 -0
- package/dist/src/render/sky.js +1103 -0
- package/dist/src/render/sky.js.map +1 -0
- package/dist/src/render/weightedblended_oit.js +168 -0
- package/dist/src/render/weightedblended_oit.js.map +1 -0
- package/dist/src/scene/batchgroup.js +162 -0
- package/dist/src/scene/batchgroup.js.map +1 -0
- package/dist/src/scene/environment.js +209 -0
- package/dist/src/scene/environment.js.map +1 -0
- package/dist/src/scene/graph_node.js +72 -0
- package/dist/src/scene/graph_node.js.map +1 -0
- package/dist/src/scene/light.js +416 -0
- package/dist/src/scene/light.js.map +1 -0
- package/dist/src/scene/mesh.js +341 -0
- package/dist/src/scene/mesh.js.map +1 -0
- package/dist/src/scene/octree.js +649 -0
- package/dist/src/scene/octree.js.map +1 -0
- package/dist/src/scene/particlesys.js +738 -0
- package/dist/src/scene/particlesys.js.map +1 -0
- package/dist/src/scene/raycast_visitor.js +103 -0
- package/dist/src/scene/raycast_visitor.js.map +1 -0
- package/dist/src/scene/scene.js +284 -0
- package/dist/src/scene/scene.js.map +1 -0
- package/dist/src/scene/scene_node.js +732 -0
- package/dist/src/scene/scene_node.js.map +1 -0
- package/dist/src/scene/terrain/grass.js +278 -0
- package/dist/src/scene/terrain/grass.js.map +1 -0
- package/dist/src/scene/terrain/heightfield.js +475 -0
- package/dist/src/scene/terrain/heightfield.js.map +1 -0
- package/dist/src/scene/terrain/patch.js +530 -0
- package/dist/src/scene/terrain/patch.js.map +1 -0
- package/dist/src/scene/terrain/quadtree.js +461 -0
- package/dist/src/scene/terrain/quadtree.js.map +1 -0
- package/dist/src/scene/terrain/terrain.js +246 -0
- package/dist/src/scene/terrain/terrain.js.map +1 -0
- package/dist/src/scene/terrain-cm/grass.js +594 -0
- package/dist/src/scene/terrain-cm/grass.js.map +1 -0
- package/dist/src/scene/terrain-cm/grassmaterial.js +159 -0
- package/dist/src/scene/terrain-cm/grassmaterial.js.map +1 -0
- package/dist/src/scene/terrain-cm/terrain-cm.js +538 -0
- package/dist/src/scene/terrain-cm/terrain-cm.js.map +1 -0
- package/dist/src/scene/water.js +374 -0
- package/dist/src/scene/water.js.map +1 -0
- package/dist/src/shaders/atmosphere.js +957 -0
- package/dist/src/shaders/atmosphere.js.map +1 -0
- package/dist/src/shaders/fog.js +112 -0
- package/dist/src/shaders/fog.js.map +1 -0
- package/dist/src/shaders/misc.js +266 -0
- package/dist/src/shaders/misc.js.map +1 -0
- package/dist/src/shaders/noise.js +222 -0
- package/dist/src/shaders/noise.js.map +1 -0
- package/dist/src/shaders/pbr.js +51 -0
- package/dist/src/shaders/pbr.js.map +1 -0
- package/dist/src/shaders/shadow.js +636 -0
- package/dist/src/shaders/shadow.js.map +1 -0
- package/dist/src/shaders/ssr.js +490 -0
- package/dist/src/shaders/ssr.js.map +1 -0
- package/dist/src/shaders/temporal.js +215 -0
- package/dist/src/shaders/temporal.js.map +1 -0
- package/dist/src/shaders/water.js +756 -0
- package/dist/src/shaders/water.js.map +1 -0
- package/dist/src/shadow/esm.js +237 -0
- package/dist/src/shadow/esm.js.map +1 -0
- package/dist/src/shadow/pcf_opt.js +181 -0
- package/dist/src/shadow/pcf_opt.js.map +1 -0
- package/dist/src/shadow/pcf_pd.js +189 -0
- package/dist/src/shadow/pcf_pd.js.map +1 -0
- package/dist/src/shadow/shader.js +37 -0
- package/dist/src/shadow/shader.js.map +1 -0
- package/dist/src/shadow/shadow_impl.js +15 -0
- package/dist/src/shadow/shadow_impl.js.map +1 -0
- package/dist/src/shadow/shadowmapper.js +790 -0
- package/dist/src/shadow/shadowmapper.js.map +1 -0
- package/dist/src/shadow/ssm.js +159 -0
- package/dist/src/shadow/ssm.js.map +1 -0
- package/dist/src/shadow/vsm.js +297 -0
- package/dist/src/shadow/vsm.js.map +1 -0
- package/dist/src/shapes/box.js +386 -0
- package/dist/src/shapes/box.js.map +1 -0
- package/dist/src/shapes/cylinder.js +125 -0
- package/dist/src/shapes/cylinder.js.map +1 -0
- package/dist/src/shapes/plane.js +88 -0
- package/dist/src/shapes/plane.js.map +1 -0
- package/dist/src/shapes/shape.js +87 -0
- package/dist/src/shapes/shape.js.map +1 -0
- package/dist/src/shapes/sphere.js +114 -0
- package/dist/src/shapes/sphere.js.map +1 -0
- package/dist/src/shapes/tetrahedron.js +188 -0
- package/dist/src/shapes/tetrahedron.js.map +1 -0
- package/dist/src/shapes/torus.js +111 -0
- package/dist/src/shapes/torus.js.map +1 -0
- package/dist/src/utility/aabbtree.js +400 -0
- package/dist/src/utility/aabbtree.js.map +1 -0
- package/dist/src/utility/bounding_volume.js +29 -0
- package/dist/src/utility/bounding_volume.js.map +1 -0
- package/dist/src/utility/debug.js +28 -0
- package/dist/src/utility/debug.js.map +1 -0
- package/dist/src/utility/draco/decoder.js +116 -0
- package/dist/src/utility/draco/decoder.js.map +1 -0
- package/dist/src/utility/misc.js +105 -0
- package/dist/src/utility/misc.js.map +1 -0
- package/dist/src/utility/panorama.js +163 -0
- package/dist/src/utility/panorama.js.map +1 -0
- package/dist/src/utility/pmrem.js +354 -0
- package/dist/src/utility/pmrem.js.map +1 -0
- package/dist/src/utility/rendermipmap.js +115 -0
- package/dist/src/utility/rendermipmap.js.map +1 -0
- package/dist/src/utility/serialization/json.js +402 -0
- package/dist/src/utility/serialization/json.js.map +1 -0
- package/dist/src/utility/serialization/manager.js +623 -0
- package/dist/src/utility/serialization/manager.js.map +1 -0
- package/dist/src/utility/serialization/scene/animation.js +248 -0
- package/dist/src/utility/serialization/scene/animation.js.map +1 -0
- package/dist/src/utility/serialization/scene/batch.js +59 -0
- package/dist/src/utility/serialization/scene/batch.js.map +1 -0
- package/dist/src/utility/serialization/scene/camera.js +790 -0
- package/dist/src/utility/serialization/scene/camera.js.map +1 -0
- package/dist/src/utility/serialization/scene/common.js +222 -0
- package/dist/src/utility/serialization/scene/common.js.map +1 -0
- package/dist/src/utility/serialization/scene/light.js +575 -0
- package/dist/src/utility/serialization/scene/light.js.map +1 -0
- package/dist/src/utility/serialization/scene/material.js +1111 -0
- package/dist/src/utility/serialization/scene/material.js.map +1 -0
- package/dist/src/utility/serialization/scene/mesh.js +148 -0
- package/dist/src/utility/serialization/scene/mesh.js.map +1 -0
- package/dist/src/utility/serialization/scene/misc.js +39 -0
- package/dist/src/utility/serialization/scene/misc.js.map +1 -0
- package/dist/src/utility/serialization/scene/node.js +451 -0
- package/dist/src/utility/serialization/scene/node.js.map +1 -0
- package/dist/src/utility/serialization/scene/particle.js +425 -0
- package/dist/src/utility/serialization/scene/particle.js.map +1 -0
- package/dist/src/utility/serialization/scene/primitive.js +692 -0
- package/dist/src/utility/serialization/scene/primitive.js.map +1 -0
- package/dist/src/utility/serialization/scene/scene.js +704 -0
- package/dist/src/utility/serialization/scene/scene.js.map +1 -0
- package/dist/src/utility/serialization/scene/terrain.js +488 -0
- package/dist/src/utility/serialization/scene/terrain.js.map +1 -0
- package/dist/src/utility/serialization/scene/water.js +465 -0
- package/dist/src/utility/serialization/scene/water.js.map +1 -0
- package/dist/src/utility/shprojector.js +297 -0
- package/dist/src/utility/shprojector.js.map +1 -0
- package/dist/src/utility/textures/ggxlut.js +213 -0
- package/dist/src/utility/textures/ggxlut.js.map +1 -0
- package/dist/src/utility/textures/gradientnoise.js +62 -0
- package/dist/src/utility/textures/gradientnoise.js.map +1 -0
- package/dist/src/utility/textures/randomnoise.js +41 -0
- package/dist/src/utility/textures/randomnoise.js.map +1 -0
- package/dist/src/values.js +162 -0
- package/dist/src/values.js.map +1 -0
- package/dist/text/font/font_asset.js +884 -0
- package/dist/text/font/font_asset.js.map +1 -0
- package/dist/text/font/sfnt_reader.js +43 -0
- package/dist/text/font/sfnt_reader.js.map +1 -0
- package/dist/text/msdf/generator.js +417 -0
- package/dist/text/msdf/generator.js.map +1 -0
- package/dist/text/msdf/shape.js +143 -0
- package/dist/text/msdf/shape.js.map +1 -0
- package/dist/text/runtime/msdf_glyph_atlas.js +146 -0
- package/dist/text/runtime/msdf_glyph_atlas.js.map +1 -0
- package/dist/text/runtime/msdf_text_atlas_manager.js +47 -0
- package/dist/text/runtime/msdf_text_atlas_manager.js.map +1 -0
- package/dist/text/runtime/text_layout.js +96 -0
- package/dist/text/runtime/text_layout.js.map +1 -0
- package/dist/utility/blueprint/material/common.js +7 -0
- package/dist/utility/blueprint/material/common.js.map +1 -0
- package/dist/utility/blueprint/material/inputs.js +1275 -1091
- package/dist/utility/blueprint/material/inputs.js.map +1 -1
- package/dist/utility/blueprint/material/ir.js +505 -490
- package/dist/utility/blueprint/material/ir.js.map +1 -1
- package/dist/utility/blueprint/material/pbr.js +32 -0
- package/dist/utility/blueprint/material/pbr.js.map +1 -1
- package/dist/utility/serialization/blueprint/constants.js +255 -0
- package/dist/utility/serialization/blueprint/constants.js.map +1 -0
- package/dist/utility/serialization/blueprint/material/constants.js +203 -0
- package/dist/utility/serialization/blueprint/material/constants.js.map +1 -0
- package/dist/utility/serialization/blueprint/material/texture.js +165 -0
- package/dist/utility/serialization/blueprint/material/texture.js.map +1 -0
- package/dist/utility/serialization/manager.js +55 -11
- package/dist/utility/serialization/manager.js.map +1 -1
- package/dist/utility/serialization/scene/animation.js +2 -0
- package/dist/utility/serialization/scene/animation.js.map +1 -1
- package/dist/utility/serialization/scene/batch.js +2 -0
- package/dist/utility/serialization/scene/batch.js.map +1 -1
- package/dist/utility/serialization/scene/camera.js +2 -0
- package/dist/utility/serialization/scene/camera.js.map +1 -1
- package/dist/utility/serialization/scene/common.js.map +1 -1
- package/dist/utility/serialization/scene/light.js +2 -0
- package/dist/utility/serialization/scene/light.js.map +1 -1
- package/dist/utility/serialization/scene/material.js +1 -0
- package/dist/utility/serialization/scene/material.js.map +1 -1
- package/dist/utility/serialization/scene/mesh.js +2 -0
- package/dist/utility/serialization/scene/mesh.js.map +1 -1
- package/dist/utility/serialization/scene/node.js +2 -0
- package/dist/utility/serialization/scene/node.js.map +1 -1
- package/dist/utility/serialization/scene/particle.js +2 -0
- package/dist/utility/serialization/scene/particle.js.map +1 -1
- package/dist/utility/serialization/scene/primitive.js +1 -0
- package/dist/utility/serialization/scene/primitive.js.map +1 -1
- package/dist/utility/serialization/scene/scene.js.map +1 -1
- package/dist/utility/serialization/scene/sprite.js +2 -0
- package/dist/utility/serialization/scene/sprite.js.map +1 -1
- package/dist/utility/serialization/scene/terrain.js +2 -0
- package/dist/utility/serialization/scene/terrain.js.map +1 -1
- package/dist/utility/serialization/scene/text.js +516 -0
- package/dist/utility/serialization/scene/text.js.map +1 -0
- package/dist/utility/serialization/scene/water.js +2 -0
- package/dist/utility/serialization/scene/water.js.map +1 -1
- package/dist/utility/serialization/types.js +4 -4
- package/dist/utility/serialization/types.js.map +1 -1
- package/dist/values.js +1 -5
- package/dist/values.js.map +1 -1
- package/package.json +3 -3
- package/dist/animation/joint_dynamics/vrm_spring_bone.js +0 -46
- package/dist/animation/joint_dynamics/vrm_spring_bone.js.map +0 -1
- package/dist/animation/spring/spring_bone.js +0 -240
- package/dist/animation/spring/spring_bone.js.map +0 -1
- package/dist/animation/spring/spring_bone_collider.js +0 -198
- package/dist/animation/spring/spring_bone_collider.js.map +0 -1
- package/dist/animation/spring/spring_bone_constraint.js +0 -170
- package/dist/animation/spring/spring_bone_constraint.js.map +0 -1
- package/dist/animation/spring/spring_bone_system.js +0 -328
- package/dist/animation/spring/spring_bone_system.js.map +0 -1
- package/dist/render/sky_motion_vector.js +0 -85
- package/dist/render/sky_motion_vector.js.map +0 -1
package/dist/app/engine.js
CHANGED
|
@@ -24,39 +24,42 @@ import { PBRSpecularGlossinessMaterial } from '../material/pbrsg.js';
|
|
|
24
24
|
import '../material/pbrblueprint.js';
|
|
25
25
|
import '../material/sprite.js';
|
|
26
26
|
import { StandardSpriteMaterial } from '../material/sprite_std.js';
|
|
27
|
+
import '../material/msdf_text.js';
|
|
27
28
|
import '../utility/blueprint/material/texture.js';
|
|
28
29
|
import { ScreenAdapter } from './screen.js';
|
|
30
|
+
import { MSDFTextAtlasManager } from '../text/runtime/msdf_text_atlas_manager.js';
|
|
29
31
|
|
|
30
|
-
/**
|
|
31
|
-
* Core engine class managing scripting, serialization, and rendering.
|
|
32
|
-
*
|
|
33
|
-
* Responsibilities:
|
|
34
|
-
* - Manages a {@link ScriptingSystem} for dynamic script attachment and lifecycle.
|
|
35
|
-
* - Manages a {@link ResourceManager} for loading scenes and assets.
|
|
36
|
-
* - Maintains a list of active renderable objects to be rendered each frame.
|
|
37
|
-
* - Provides methods to attach/detach scripts, update scripts, load scenes, and read files.
|
|
38
|
-
* - Supports enabling/disabling of runtime operations.
|
|
39
|
-
*
|
|
40
|
-
* @remarks
|
|
41
|
-
* The engine can be configured with a virtual file system (VFS) and script root path.
|
|
42
|
-
* It exposes methods to manage scripts on host objects, update scripts each frame,
|
|
43
|
-
* load scenes from files, and render active objects.
|
|
44
|
-
*
|
|
45
|
-
* @public
|
|
32
|
+
/**
|
|
33
|
+
* Core engine class managing scripting, serialization, and rendering.
|
|
34
|
+
*
|
|
35
|
+
* Responsibilities:
|
|
36
|
+
* - Manages a {@link ScriptingSystem} for dynamic script attachment and lifecycle.
|
|
37
|
+
* - Manages a {@link ResourceManager} for loading scenes and assets.
|
|
38
|
+
* - Maintains a list of active renderable objects to be rendered each frame.
|
|
39
|
+
* - Provides methods to attach/detach scripts, update scripts, load scenes, and read files.
|
|
40
|
+
* - Supports enabling/disabling of runtime operations.
|
|
41
|
+
*
|
|
42
|
+
* @remarks
|
|
43
|
+
* The engine can be configured with a virtual file system (VFS) and script root path.
|
|
44
|
+
* It exposes methods to manage scripts on host objects, update scripts each frame,
|
|
45
|
+
* load scenes from files, and render active objects.
|
|
46
|
+
*
|
|
47
|
+
* @public
|
|
46
48
|
*/ class Engine {
|
|
47
49
|
_builtinsVFS;
|
|
48
50
|
_scriptingSystem;
|
|
49
51
|
_resourceManager;
|
|
52
|
+
_msdfTextAtlasManager;
|
|
50
53
|
_enabled;
|
|
51
54
|
_screen;
|
|
52
55
|
_activeRenderables;
|
|
53
56
|
_loadingScenes;
|
|
54
|
-
/**
|
|
55
|
-
* Creates a new runtime manager.
|
|
56
|
-
*
|
|
57
|
-
* @param VFS - Optional virtual file system passed to the internal {@link ScriptingSystem}.
|
|
58
|
-
* @param scriptsRoot - Optional scripts root path within the VFS. Defaults as in `ScriptingSystem`.
|
|
59
|
-
* @param enabled - Whether runtime operations are active. Defaults to `true`.
|
|
57
|
+
/**
|
|
58
|
+
* Creates a new runtime manager.
|
|
59
|
+
*
|
|
60
|
+
* @param VFS - Optional virtual file system passed to the internal {@link ScriptingSystem}.
|
|
61
|
+
* @param scriptsRoot - Optional scripts root path within the VFS. Defaults as in `ScriptingSystem`.
|
|
62
|
+
* @param enabled - Whether runtime operations are active. Defaults to `true`.
|
|
60
63
|
*/ constructor(VFS, scriptsRoot, enabled){
|
|
61
64
|
VFS = VFS ?? new HttpFS('./');
|
|
62
65
|
this._builtinsVFS = null;
|
|
@@ -65,18 +68,19 @@ import { ScreenAdapter } from './screen.js';
|
|
|
65
68
|
scriptsRoot
|
|
66
69
|
});
|
|
67
70
|
this._resourceManager = new ResourceManager(VFS);
|
|
71
|
+
this._msdfTextAtlasManager = new MSDFTextAtlasManager();
|
|
68
72
|
this._enabled = enabled ?? true;
|
|
69
73
|
this._activeRenderables = [];
|
|
70
74
|
this._loadingScenes = {};
|
|
71
75
|
this._screen = new ScreenAdapter();
|
|
72
76
|
}
|
|
73
|
-
/**
|
|
74
|
-
* Exposes the instance of {@link ScriptingSystem}.
|
|
77
|
+
/**
|
|
78
|
+
* Exposes the instance of {@link ScriptingSystem}.
|
|
75
79
|
*/ get scriptingSystem() {
|
|
76
80
|
return this._scriptingSystem;
|
|
77
81
|
}
|
|
78
|
-
/**
|
|
79
|
-
* Exposes the virtual file system used by the underlying {@link ScriptingSystem}'s registry.
|
|
82
|
+
/**
|
|
83
|
+
* Exposes the virtual file system used by the underlying {@link ScriptingSystem}'s registry.
|
|
80
84
|
*/ get VFS() {
|
|
81
85
|
return this._scriptingSystem.registry.VFS;
|
|
82
86
|
}
|
|
@@ -88,78 +92,122 @@ import { ScreenAdapter } from './screen.js';
|
|
|
88
92
|
this.ensureBuiltinVFS();
|
|
89
93
|
}
|
|
90
94
|
}
|
|
91
|
-
/**
|
|
92
|
-
* Exposes the instance of {@link ResourceManager}.
|
|
95
|
+
/**
|
|
96
|
+
* Exposes the instance of {@link ResourceManager}.
|
|
93
97
|
*/ get resourceManager() {
|
|
94
98
|
return this._resourceManager;
|
|
95
99
|
}
|
|
96
|
-
/**
|
|
97
|
-
* Exposes the
|
|
100
|
+
/**
|
|
101
|
+
* Exposes the shared runtime MSDF text atlas manager.
|
|
102
|
+
*/ get msdfTextAtlasManager() {
|
|
103
|
+
return this._msdfTextAtlasManager;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Releases a loaded font asset from the resource cache and disposes its shared MSDF atlas textures.
|
|
107
|
+
*
|
|
108
|
+
* Existing scene nodes that still reference this font asset are not updated automatically.
|
|
109
|
+
* Call this only after you have stopped using the font, or when you intentionally want it to rebuild later.
|
|
110
|
+
*
|
|
111
|
+
* @param fontAsset - The loaded font asset to release.
|
|
112
|
+
* @returns `true` if either the atlas cache or the font cache had an entry to remove.
|
|
113
|
+
*/ releaseFontAsset(font) {
|
|
114
|
+
const fontAsset = this._resourceManager.getFontAsset(font);
|
|
115
|
+
if (!fontAsset) {
|
|
116
|
+
return false;
|
|
117
|
+
}
|
|
118
|
+
const atlasReleased = this._msdfTextAtlasManager.releaseAtlas(fontAsset);
|
|
119
|
+
const fontReleased = this._resourceManager.releaseFontAsset(fontAsset);
|
|
120
|
+
return atlasReleased || fontReleased;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Configures the MSDF atlas for a given font asset, creating or replacing the atlas as needed.
|
|
124
|
+
*
|
|
125
|
+
* This is useful to customize the glyph size, atlas page size, distance range, and padding for MSDF text rendering.
|
|
126
|
+
* Existing scene nodes that reference this font asset will use the updated atlas automatically.
|
|
127
|
+
*
|
|
128
|
+
* @param font - The font asset path to configure the MSDF atlas for.
|
|
129
|
+
* @param pageSize - The size of each atlas page in pixels (e.g., 512, 1024).
|
|
130
|
+
* @param glyphSize - The size of each glyph in pixels (e.g., 32, 64).
|
|
131
|
+
* @param distanceRange - The distance range for MSDF generation. Defaults to 4.
|
|
132
|
+
* @param padding - The padding between glyphs in the atlas in pixels. Defaults to 2.
|
|
133
|
+
* @returns `true` if the atlas was successfully configured, or `false` if the font asset was not found.
|
|
134
|
+
*
|
|
135
|
+
* @remarks
|
|
136
|
+
* The font asset must be loaded and available in the resource manager for the atlas to be configured.
|
|
137
|
+
*/ configureMSDFAtlas(font, pageSize, glyphSize, distanceRange, padding) {
|
|
138
|
+
const fontAsset = this._resourceManager.getFontAsset(font);
|
|
139
|
+
if (!fontAsset) {
|
|
140
|
+
console.warn(`Font asset '${font}' not found for MSDF atlas configuration.`);
|
|
141
|
+
return false;
|
|
142
|
+
}
|
|
143
|
+
this._msdfTextAtlasManager.configureAtlas(fontAsset, pageSize, glyphSize, distanceRange, padding);
|
|
144
|
+
return true;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Exposes the active {@link ScreenAdapter}.
|
|
98
148
|
*/ get screen() {
|
|
99
149
|
return this._screen;
|
|
100
150
|
}
|
|
101
151
|
/** @internal */ async init() {
|
|
102
152
|
await this.ensureBuiltinVFS();
|
|
103
153
|
}
|
|
104
|
-
/**
|
|
105
|
-
* Detaches all scripts from all hosts, if enabled.
|
|
106
|
-
*
|
|
107
|
-
* No-op when `enabled === false`.
|
|
154
|
+
/**
|
|
155
|
+
* Detaches all scripts from all hosts, if enabled.
|
|
156
|
+
*
|
|
157
|
+
* No-op when `enabled === false`.
|
|
108
158
|
*/ detachAllScripts() {
|
|
109
159
|
if (this._enabled) {
|
|
110
160
|
this._scriptingSystem.detachAllScripts();
|
|
111
161
|
}
|
|
112
162
|
}
|
|
113
|
-
/**
|
|
114
|
-
* Loads a runtime script class from file
|
|
115
|
-
* @param module - file path
|
|
116
|
-
* @returns The runtime script class or null
|
|
163
|
+
/**
|
|
164
|
+
* Loads a runtime script class from file
|
|
165
|
+
* @param module - file path
|
|
166
|
+
* @returns The runtime script class or null
|
|
117
167
|
*/ async loadRuntimeScriptClass(module) {
|
|
118
168
|
return await this._scriptingSystem.loadRuntimeScriptClass(module);
|
|
119
169
|
}
|
|
120
|
-
/**
|
|
121
|
-
* Attaches a script module to the given host, if enabled.
|
|
122
|
-
*
|
|
123
|
-
* When disabled, this method resolves to `null` without side effects.
|
|
124
|
-
*
|
|
125
|
-
* @typeParam T - Host type.
|
|
126
|
-
* @param host - Host object to attach the script to.
|
|
127
|
-
* @param module - Module identifier to resolve and load.
|
|
128
|
-
* @returns The `RuntimeScript<T>` instance, or `null` if disabled or on failure.
|
|
170
|
+
/**
|
|
171
|
+
* Attaches a script module to the given host, if enabled.
|
|
172
|
+
*
|
|
173
|
+
* When disabled, this method resolves to `null` without side effects.
|
|
174
|
+
*
|
|
175
|
+
* @typeParam T - Host type.
|
|
176
|
+
* @param host - Host object to attach the script to.
|
|
177
|
+
* @param module - Module identifier to resolve and load.
|
|
178
|
+
* @returns The `RuntimeScript<T>` instance, or `null` if disabled or on failure.
|
|
129
179
|
*/ async attachScript(host, module, config) {
|
|
130
180
|
return this._enabled ? await this._scriptingSystem.attachScript(host, module, config) : null;
|
|
131
181
|
}
|
|
132
|
-
/**
|
|
133
|
-
* Detaches a script from a host, by module ID or instance, if enabled.
|
|
134
|
-
*
|
|
135
|
-
* No-op when disabled.
|
|
136
|
-
*
|
|
137
|
-
* @typeParam T - Host type.
|
|
138
|
-
* @param host - Host to detach from.
|
|
139
|
-
* @param idOrInstance - Target script by module ID or instance reference.
|
|
182
|
+
/**
|
|
183
|
+
* Detaches a script from a host, by module ID or instance, if enabled.
|
|
184
|
+
*
|
|
185
|
+
* No-op when disabled.
|
|
186
|
+
*
|
|
187
|
+
* @typeParam T - Host type.
|
|
188
|
+
* @param host - Host to detach from.
|
|
189
|
+
* @param idOrInstance - Target script by module ID or instance reference.
|
|
140
190
|
*/ detachScript(host, idOrInstance) {
|
|
141
191
|
if (this._enabled) {
|
|
142
192
|
this._scriptingSystem.detachScript(host, idOrInstance);
|
|
143
193
|
}
|
|
144
194
|
}
|
|
145
|
-
/**
|
|
146
|
-
* Gets all scripts attached to a host.
|
|
147
|
-
*
|
|
148
|
-
* Delegates to {@link ScriptingSystem.getScriptObjects}.
|
|
149
|
-
*
|
|
150
|
-
* @typeParam T - Expected script type.
|
|
151
|
-
* @param host - Host object to query.
|
|
152
|
-
* @returns Script instances attached to the host, or an empty array.
|
|
195
|
+
/**
|
|
196
|
+
* Gets all scripts attached to a host.
|
|
197
|
+
*
|
|
198
|
+
* Delegates to {@link ScriptingSystem.getScriptObjects}.
|
|
199
|
+
*
|
|
200
|
+
* @typeParam T - Expected script type.
|
|
201
|
+
* @param host - Host object to query.
|
|
202
|
+
* @returns Script instances attached to the host, or an empty array.
|
|
153
203
|
*/ getScriptObjects(host) {
|
|
154
204
|
return this._scriptingSystem.getScriptObjects(host);
|
|
155
205
|
}
|
|
156
|
-
/**
|
|
157
|
-
* Ticks all attached scripts by calling their `onUpdate` hooks, if enabled.
|
|
158
|
-
*
|
|
159
|
-
*
|
|
160
|
-
*
|
|
161
|
-
* @param deltaTime - Time since last update in Seconds.
|
|
162
|
-
* @param elapsedTime - Total elapsed time in Seconds.
|
|
206
|
+
/**
|
|
207
|
+
* Ticks all attached scripts by calling their `onUpdate` hooks, if enabled.
|
|
208
|
+
*
|
|
209
|
+
* @param deltaTime - Time since last update in Seconds.
|
|
210
|
+
* @param elapsedTime - Total elapsed time in Seconds.
|
|
163
211
|
*/ update(deltaTime, elapsedTime) {
|
|
164
212
|
if (this._enabled) {
|
|
165
213
|
this._scriptingSystem.update(deltaTime, elapsedTime);
|
|
@@ -323,5 +371,5 @@ import { ScreenAdapter } from './screen.js';
|
|
|
323
371
|
}
|
|
324
372
|
}
|
|
325
373
|
|
|
326
|
-
export { Engine };
|
|
374
|
+
export { Engine, MSDFTextAtlasManager };
|
|
327
375
|
//# sourceMappingURL=engine.js.map
|
package/dist/app/engine.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.js","sources":["../../src/app/engine.ts"],"sourcesContent":["import type { GenericConstructor, IDisposable, Nullable, ReadOptions } from '@zephyr3d/base';\r\nimport { MemoryFS, objectEntries } from '@zephyr3d/base';\r\nimport { DRef } from '@zephyr3d/base';\r\nimport { HttpFS, type VFS } from '@zephyr3d/base';\r\nimport { ScriptingSystem } from './scriptingsystem';\r\nimport type { Host } from './scriptingsystem';\r\nimport type { RuntimeScript, RuntimeScriptConfig } from './runtimescript';\r\nimport { ResourceManager } from '../utility/serialization/manager';\r\nimport type { Scene } from '../scene';\r\nimport {\r\n BoxShape,\r\n CapsuleShape,\r\n CylinderShape,\r\n PlaneShape,\r\n SphereShape,\r\n TetrahedronShape,\r\n TorusShape\r\n} from '../shapes';\r\nimport {\r\n BlinnMaterial,\r\n LambertMaterial,\r\n PBRMetallicRoughnessMaterial,\r\n PBRSpecularGlossinessMaterial,\r\n UnlitMaterial\r\n} from '../material';\r\nimport { StandardSpriteMaterial } from '../material/sprite_std';\r\nimport { ScreenAdapter } from './screen';\r\n\r\n/**\r\n * Interface for objects that can be rendered.\r\n *\r\n * @public\r\n */\r\nexport interface IRenderable extends IDisposable {\r\n render(): void;\r\n}\r\n\r\n/**\r\n * Interface for render hooks to customize rendering behavior.\r\n *\r\n * @public\r\n */\r\nexport interface IRenderHook {\r\n // If presents, called before rendering the renderable. Return `false` to skip rendering.\r\n beforeRender?: (renderable: any) => boolean | void;\r\n // If presents, called after rendering the renderable.\r\n afterRender?: (renderable: any) => void;\r\n}\r\n\r\n/**\r\n * Core engine class managing scripting, serialization, and rendering.\r\n *\r\n * Responsibilities:\r\n * - Manages a {@link ScriptingSystem} for dynamic script attachment and lifecycle.\r\n * - Manages a {@link ResourceManager} for loading scenes and assets.\r\n * - Maintains a list of active renderable objects to be rendered each frame.\r\n * - Provides methods to attach/detach scripts, update scripts, load scenes, and read files.\r\n * - Supports enabling/disabling of runtime operations.\r\n *\r\n * @remarks\r\n * The engine can be configured with a virtual file system (VFS) and script root path.\r\n * It exposes methods to manage scripts on host objects, update scripts each frame,\r\n * load scenes from files, and render active objects.\r\n *\r\n * @public\r\n */\r\nexport class Engine {\r\n private _builtinsVFS: Nullable<MemoryFS>;\r\n private _scriptingSystem: ScriptingSystem;\r\n private _resourceManager: ResourceManager;\r\n private _enabled: boolean;\r\n private _screen: ScreenAdapter;\r\n protected _activeRenderables: {\r\n renderable: DRef<IRenderable>;\r\n hook: Nullable<IRenderHook>;\r\n }[];\r\n private _loadingScenes: Partial<Record<string, Promise<Nullable<Scene>>>>;\r\n /**\r\n * Creates a new runtime manager.\r\n *\r\n * @param VFS - Optional virtual file system passed to the internal {@link ScriptingSystem}.\r\n * @param scriptsRoot - Optional scripts root path within the VFS. Defaults as in `ScriptingSystem`.\r\n * @param enabled - Whether runtime operations are active. Defaults to `true`.\r\n */\r\n constructor(VFS?: VFS, scriptsRoot?: string, enabled?: boolean) {\r\n VFS = VFS ?? new HttpFS('./');\r\n this._builtinsVFS = null;\r\n this._scriptingSystem = new ScriptingSystem({ VFS, scriptsRoot });\r\n this._resourceManager = new ResourceManager(VFS);\r\n this._enabled = enabled ?? true;\r\n this._activeRenderables = [];\r\n this._loadingScenes = {};\r\n this._screen = new ScreenAdapter();\r\n }\r\n /**\r\n * Exposes the instance of {@link ScriptingSystem}.\r\n */\r\n get scriptingSystem() {\r\n return this._scriptingSystem;\r\n }\r\n /**\r\n * Exposes the virtual file system used by the underlying {@link ScriptingSystem}'s registry.\r\n */\r\n get VFS() {\r\n return this._scriptingSystem.registry.VFS;\r\n }\r\n set VFS(vfs: VFS) {\r\n if (vfs !== this._resourceManager.VFS) {\r\n this._resourceManager.VFS?.close();\r\n this._resourceManager.VFS = vfs;\r\n this._scriptingSystem.registry.VFS = vfs;\r\n this.ensureBuiltinVFS();\r\n }\r\n }\r\n /**\r\n * Exposes the instance of {@link ResourceManager}.\r\n */\r\n get resourceManager() {\r\n return this._resourceManager;\r\n }\r\n /**\r\n * Exposes the active {@link ScreenAdapter}.\r\n */\r\n get screen() {\r\n return this._screen;\r\n }\r\n /** @internal */\r\n async init() {\r\n await this.ensureBuiltinVFS();\r\n }\r\n /**\r\n * Detaches all scripts from all hosts, if enabled.\r\n *\r\n * No-op when `enabled === false`.\r\n */\r\n detachAllScripts() {\r\n if (this._enabled) {\r\n this._scriptingSystem.detachAllScripts();\r\n }\r\n }\r\n /**\r\n * Loads a runtime script class from file\r\n * @param module - file path\r\n * @returns The runtime script class or null\r\n */\r\n async loadRuntimeScriptClass<T extends Host = Host>(\r\n module: string\r\n ): Promise<Nullable<{ url: string; cls: GenericConstructor<RuntimeScript<T>> }>> {\r\n return await this._scriptingSystem.loadRuntimeScriptClass(module);\r\n }\r\n /**\r\n * Attaches a script module to the given host, if enabled.\r\n *\r\n * When disabled, this method resolves to `null` without side effects.\r\n *\r\n * @typeParam T - Host type.\r\n * @param host - Host object to attach the script to.\r\n * @param module - Module identifier to resolve and load.\r\n * @returns The `RuntimeScript<T>` instance, or `null` if disabled or on failure.\r\n */\r\n async attachScript<T extends Host>(\r\n host: Nullable<T>,\r\n module: string,\r\n config?: Nullable<RuntimeScriptConfig>\r\n ) {\r\n return this._enabled ? await this._scriptingSystem.attachScript(host, module, config) : null;\r\n }\r\n /**\r\n * Detaches a script from a host, by module ID or instance, if enabled.\r\n *\r\n * No-op when disabled.\r\n *\r\n * @typeParam T - Host type.\r\n * @param host - Host to detach from.\r\n * @param idOrInstance - Target script by module ID or instance reference.\r\n */\r\n detachScript<T extends Host>(host: T, idOrInstance: string | RuntimeScript<T>) {\r\n if (this._enabled) {\r\n this._scriptingSystem.detachScript(host, idOrInstance);\r\n }\r\n }\r\n /**\r\n * Gets all scripts attached to a host.\r\n *\r\n * Delegates to {@link ScriptingSystem.getScriptObjects}.\r\n *\r\n * @typeParam T - Expected script type.\r\n * @param host - Host object to query.\r\n * @returns Script instances attached to the host, or an empty array.\r\n */\r\n getScriptObjects<T extends RuntimeScript<any>>(host: unknown) {\r\n return this._scriptingSystem.getScriptObjects(host) as T[];\r\n }\r\n /**\r\n * Ticks all attached scripts by calling their `onUpdate` hooks, if enabled.\r\n *\r\n * Delegates to {@link ScriptingSystem.update}. No-op when disabled.\r\n *\r\n * @param deltaTime - Time since last update in Seconds.\r\n * @param elapsedTime - Total elapsed time in Seconds.\r\n */\r\n update(deltaTime: number, elapsedTime: number) {\r\n if (this._enabled) {\r\n this._scriptingSystem.update(deltaTime, elapsedTime);\r\n }\r\n }\r\n async loadSceneFromFile(path: string) {\r\n path = this.VFS.normalizePath(path);\r\n if (!this._loadingScenes[path]) {\r\n this._loadingScenes[path] = this._loadScene(path);\r\n }\r\n return this._loadingScenes[path]!;\r\n }\r\n setRenderable(renderable: Nullable<IRenderable>, layer = 0, hook?: IRenderHook) {\r\n if (!this._activeRenderables[layer]) {\r\n this._activeRenderables[layer] = {\r\n renderable: new DRef<IRenderable>(null),\r\n hook: null\r\n };\r\n }\r\n this._activeRenderables[layer].hook = hook ?? null;\r\n this._activeRenderables[layer].renderable.set(renderable);\r\n }\r\n async readFile<T extends ReadOptions['encoding'] = 'binary'>(path: string, encoding?: T) {\r\n try {\r\n const content = await this.VFS.readFile(path, { encoding: encoding ?? 'binary' });\r\n return content as T extends 'binary' ? ArrayBuffer : string;\r\n } catch (err) {\r\n console.error(`Read file '${path}' failed: ${err}`);\r\n return null;\r\n }\r\n }\r\n async startup(\r\n startupScene?: Nullable<string>,\r\n splashScreen?: Nullable<string>,\r\n startupScript?: Nullable<string>\r\n ) {\r\n const splashScreenLayer = 9999;\r\n if (splashScreen) {\r\n const splashScreenScene = await this.loadSceneFromFile(splashScreen);\r\n if (splashScreenScene) {\r\n this.setRenderable(splashScreenScene, splashScreenLayer);\r\n }\r\n }\r\n if (startupScript) {\r\n const path =\r\n startupScript.toLowerCase().endsWith('.ts') || startupScript.toLowerCase().endsWith('.js')\r\n ? startupScript.slice(0, -3)\r\n : startupScript;\r\n await this.attachScript(null, path);\r\n }\r\n if (startupScene) {\r\n const scene = await this.loadSceneFromFile(startupScene);\r\n this.setRenderable(scene, 0);\r\n }\r\n this.setRenderable(null, splashScreenLayer);\r\n }\r\n render() {\r\n this._activeRenderables.forEach((info) => {\r\n const render = info.hook?.beforeRender\r\n ? (info.hook.beforeRender(info.renderable.get() ?? null) ?? true)\r\n : true;\r\n if (render) {\r\n info.renderable.get()?.render();\r\n }\r\n if (info.hook?.afterRender) {\r\n info.hook.afterRender(info.renderable.get() ?? null);\r\n }\r\n });\r\n }\r\n private async ensureBuiltinVFS() {\r\n if (!this._builtinsVFS) {\r\n this._builtinsVFS = await this.createBuiltinVFS();\r\n }\r\n this.VFS.unmount('/assets/@builtins');\r\n this.VFS.mount('/assets/@builtins', this._builtinsVFS);\r\n }\r\n private async createBuiltinVFS() {\r\n const fs = new MemoryFS();\r\n const shapeClsMap = {\r\n '/primitives/box.zmsh': BoxShape,\r\n '/primitives/sphere.zmsh': SphereShape,\r\n '/primitives/cylinder.zmsh': CylinderShape,\r\n '/primitives/plane.zmsh': PlaneShape,\r\n '/primitives/torus.zmsh': TorusShape,\r\n '/primitives/tetrahedron.zmsh': TetrahedronShape,\r\n '/primitives/capsule.zmsh': CapsuleShape,\r\n '/materials/unlit.zmtl': UnlitMaterial,\r\n '/materials/lambert.zmtl': LambertMaterial,\r\n '/materials/blinnphong.zmtl': BlinnMaterial,\r\n '/materials/pbr_metallic_roughness.zmtl': PBRMetallicRoughnessMaterial,\r\n '/materials/pbr_specular_glossiness.zmtl': PBRSpecularGlossinessMaterial,\r\n '/materials/sprite_std.zmtl': StandardSpriteMaterial\r\n } as const;\r\n for (const [key] of objectEntries(shapeClsMap)) {\r\n const obj = new shapeClsMap[key]();\r\n await this.writeSerializableObject(fs, 'Default', obj, key);\r\n obj.dispose();\r\n }\r\n fs.readOnly = true;\r\n return fs;\r\n }\r\n private async writeSerializableObject(VFS: VFS, type: string, obj: any, path: string) {\r\n try {\r\n const data = await this.resourceManager.serializeObject(obj);\r\n const content = JSON.stringify({ type, data }, null, 2);\r\n await VFS.writeFile(path, content, { encoding: 'utf8', create: true });\r\n } catch (err) {\r\n console.error(`Write file '${path}' failed: ${err}`);\r\n }\r\n }\r\n private async _loadScene(path: string) {\r\n try {\r\n const scene = await this._resourceManager.loadScene(path);\r\n if (scene) {\r\n const sceneScripts =\r\n scene.scripts.length > 0\r\n ? scene.scripts\r\n : scene.script\r\n ? [{ script: scene.script, config: scene.scriptConfig }]\r\n : [];\r\n for (const attachment of sceneScripts) {\r\n if (!attachment.script) {\r\n continue;\r\n }\r\n try {\r\n await this.attachScript(\r\n scene,\r\n attachment.script,\r\n (attachment.config ?? null) as RuntimeScriptConfig | null\r\n );\r\n } catch (err) {\r\n console.error(`Attach script failed: ${err}`);\r\n }\r\n }\r\n const nodes: (typeof scene.rootNode)[] = [];\r\n scene.rootNode.iterate((node) => {\r\n nodes.push(node);\r\n });\r\n const attachTasks = nodes.map(async (node) => {\r\n const attachments =\r\n node.scripts.length > 0\r\n ? node.scripts\r\n : node.script\r\n ? [{ script: node.script, config: node.scriptConfig }]\r\n : [];\r\n for (const attachment of attachments) {\r\n if (!attachment.script) {\r\n continue;\r\n }\r\n try {\r\n await this.attachScript(\r\n node,\r\n attachment.script,\r\n (attachment.config ?? null) as RuntimeScriptConfig | null\r\n );\r\n } catch (err) {\r\n console.error(`Attach script failed: ${err}`);\r\n }\r\n }\r\n });\r\n if (attachTasks.length > 0) {\r\n await Promise.allSettled(attachTasks);\r\n }\r\n }\r\n return scene;\r\n } catch (err) {\r\n console.error(`Load scene from '${path}' failed: ${err}`);\r\n return null;\r\n }\r\n }\r\n}\r\n"],"names":["Engine","_builtinsVFS","_scriptingSystem","_resourceManager","_enabled","_screen","_activeRenderables","_loadingScenes","VFS","scriptsRoot","enabled","HttpFS","ScriptingSystem","ResourceManager","ScreenAdapter","scriptingSystem","registry","vfs","close","ensureBuiltinVFS","resourceManager","screen","init","detachAllScripts","loadRuntimeScriptClass","module","attachScript","host","config","detachScript","idOrInstance","getScriptObjects","update","deltaTime","elapsedTime","loadSceneFromFile","path","normalizePath","_loadScene","setRenderable","renderable","layer","hook","DRef","set","readFile","encoding","content","err","console","error","startup","startupScene","splashScreen","startupScript","splashScreenLayer","splashScreenScene","toLowerCase","endsWith","slice","scene","render","forEach","info","beforeRender","get","afterRender","createBuiltinVFS","unmount","mount","fs","MemoryFS","shapeClsMap","BoxShape","SphereShape","CylinderShape","PlaneShape","TorusShape","TetrahedronShape","CapsuleShape","UnlitMaterial","LambertMaterial","BlinnMaterial","PBRMetallicRoughnessMaterial","PBRSpecularGlossinessMaterial","StandardSpriteMaterial","key","objectEntries","obj","writeSerializableObject","dispose","readOnly","type","data","serializeObject","JSON","stringify","writeFile","create","loadScene","sceneScripts","scripts","length","script","scriptConfig","attachment","nodes","rootNode","iterate","node","push","attachTasks","map","attachments","Promise","allSettled"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"engine.js","sources":["../../src/app/engine.ts"],"sourcesContent":["import type { GenericConstructor, IDisposable, Nullable, ReadOptions } from '@zephyr3d/base';\nimport { MemoryFS, objectEntries } from '@zephyr3d/base';\nimport { DRef } from '@zephyr3d/base';\nimport { HttpFS, type VFS } from '@zephyr3d/base';\nimport { ScriptingSystem } from './scriptingsystem';\nimport type { Host } from './scriptingsystem';\nimport type { RuntimeScript, RuntimeScriptConfig } from './runtimescript';\nimport { ResourceManager } from '../utility/serialization/manager';\nimport type { Scene } from '../scene';\nimport {\n BoxShape,\n CapsuleShape,\n CylinderShape,\n PlaneShape,\n SphereShape,\n TetrahedronShape,\n TorusShape\n} from '../shapes';\nimport {\n BlinnMaterial,\n LambertMaterial,\n PBRMetallicRoughnessMaterial,\n PBRSpecularGlossinessMaterial,\n UnlitMaterial\n} from '../material';\nimport { StandardSpriteMaterial } from '../material/sprite_std';\nimport { ScreenAdapter } from './screen';\nimport { MSDFTextAtlasManager } from '../text/runtime';\n\n/**\n * Interface for objects that can be rendered.\n *\n * @public\n */\nexport interface IRenderable extends IDisposable {\n render(): void;\n}\n\n/**\n * Interface for render hooks to customize rendering behavior.\n *\n * @public\n */\nexport interface IRenderHook {\n // If presents, called before rendering the renderable. Return `false` to skip rendering.\n beforeRender?: (renderable: any) => boolean | void;\n // If presents, called after rendering the renderable.\n afterRender?: (renderable: any) => void;\n}\n\n/**\n * Core engine class managing scripting, serialization, and rendering.\n *\n * Responsibilities:\n * - Manages a {@link ScriptingSystem} for dynamic script attachment and lifecycle.\n * - Manages a {@link ResourceManager} for loading scenes and assets.\n * - Maintains a list of active renderable objects to be rendered each frame.\n * - Provides methods to attach/detach scripts, update scripts, load scenes, and read files.\n * - Supports enabling/disabling of runtime operations.\n *\n * @remarks\n * The engine can be configured with a virtual file system (VFS) and script root path.\n * It exposes methods to manage scripts on host objects, update scripts each frame,\n * load scenes from files, and render active objects.\n *\n * @public\n */\nexport class Engine {\n private _builtinsVFS: Nullable<MemoryFS>;\n private _scriptingSystem: ScriptingSystem;\n private _resourceManager: ResourceManager;\n private _msdfTextAtlasManager: MSDFTextAtlasManager;\n private _enabled: boolean;\n private _screen: ScreenAdapter;\n protected _activeRenderables: {\n renderable: DRef<IRenderable>;\n hook: Nullable<IRenderHook>;\n }[];\n private _loadingScenes: Partial<Record<string, Promise<Nullable<Scene>>>>;\n /**\n * Creates a new runtime manager.\n *\n * @param VFS - Optional virtual file system passed to the internal {@link ScriptingSystem}.\n * @param scriptsRoot - Optional scripts root path within the VFS. Defaults as in `ScriptingSystem`.\n * @param enabled - Whether runtime operations are active. Defaults to `true`.\n */\n constructor(VFS?: VFS, scriptsRoot?: string, enabled?: boolean) {\n VFS = VFS ?? new HttpFS('./');\n this._builtinsVFS = null;\n this._scriptingSystem = new ScriptingSystem({ VFS, scriptsRoot });\n this._resourceManager = new ResourceManager(VFS);\n this._msdfTextAtlasManager = new MSDFTextAtlasManager();\n this._enabled = enabled ?? true;\n this._activeRenderables = [];\n this._loadingScenes = {};\n this._screen = new ScreenAdapter();\n }\n /**\n * Exposes the instance of {@link ScriptingSystem}.\n */\n get scriptingSystem() {\n return this._scriptingSystem;\n }\n /**\n * Exposes the virtual file system used by the underlying {@link ScriptingSystem}'s registry.\n */\n get VFS() {\n return this._scriptingSystem.registry.VFS;\n }\n set VFS(vfs: VFS) {\n if (vfs !== this._resourceManager.VFS) {\n this._resourceManager.VFS?.close();\n this._resourceManager.VFS = vfs;\n this._scriptingSystem.registry.VFS = vfs;\n this.ensureBuiltinVFS();\n }\n }\n /**\n * Exposes the instance of {@link ResourceManager}.\n */\n get resourceManager() {\n return this._resourceManager;\n }\n /**\n * Exposes the shared runtime MSDF text atlas manager.\n */\n get msdfTextAtlasManager() {\n return this._msdfTextAtlasManager;\n }\n /**\n * Releases a loaded font asset from the resource cache and disposes its shared MSDF atlas textures.\n *\n * Existing scene nodes that still reference this font asset are not updated automatically.\n * Call this only after you have stopped using the font, or when you intentionally want it to rebuild later.\n *\n * @param fontAsset - The loaded font asset to release.\n * @returns `true` if either the atlas cache or the font cache had an entry to remove.\n */\n releaseFontAsset(font: string) {\n const fontAsset = this._resourceManager.getFontAsset(font);\n if (!fontAsset) {\n return false;\n }\n const atlasReleased = this._msdfTextAtlasManager.releaseAtlas(fontAsset);\n const fontReleased = this._resourceManager.releaseFontAsset(fontAsset);\n return atlasReleased || fontReleased;\n }\n /**\n * Configures the MSDF atlas for a given font asset, creating or replacing the atlas as needed.\n *\n * This is useful to customize the glyph size, atlas page size, distance range, and padding for MSDF text rendering.\n * Existing scene nodes that reference this font asset will use the updated atlas automatically.\n *\n * @param font - The font asset path to configure the MSDF atlas for.\n * @param pageSize - The size of each atlas page in pixels (e.g., 512, 1024).\n * @param glyphSize - The size of each glyph in pixels (e.g., 32, 64).\n * @param distanceRange - The distance range for MSDF generation. Defaults to 4.\n * @param padding - The padding between glyphs in the atlas in pixels. Defaults to 2.\n * @returns `true` if the atlas was successfully configured, or `false` if the font asset was not found.\n *\n * @remarks\n * The font asset must be loaded and available in the resource manager for the atlas to be configured.\n */\n configureMSDFAtlas(\n font: string,\n pageSize: number,\n glyphSize: number,\n distanceRange?: number,\n padding?: number\n ) {\n const fontAsset = this._resourceManager.getFontAsset(font);\n if (!fontAsset) {\n console.warn(`Font asset '${font}' not found for MSDF atlas configuration.`);\n return false;\n }\n this._msdfTextAtlasManager.configureAtlas(fontAsset, pageSize, glyphSize, distanceRange, padding);\n return true;\n }\n /**\n * Exposes the active {@link ScreenAdapter}.\n */\n get screen() {\n return this._screen;\n }\n /** @internal */\n async init() {\n await this.ensureBuiltinVFS();\n }\n /**\n * Detaches all scripts from all hosts, if enabled.\n *\n * No-op when `enabled === false`.\n */\n detachAllScripts() {\n if (this._enabled) {\n this._scriptingSystem.detachAllScripts();\n }\n }\n /**\n * Loads a runtime script class from file\n * @param module - file path\n * @returns The runtime script class or null\n */\n async loadRuntimeScriptClass<T extends Host = Host>(\n module: string\n ): Promise<Nullable<{ url: string; cls: GenericConstructor<RuntimeScript<T>> }>> {\n return await this._scriptingSystem.loadRuntimeScriptClass(module);\n }\n /**\n * Attaches a script module to the given host, if enabled.\n *\n * When disabled, this method resolves to `null` without side effects.\n *\n * @typeParam T - Host type.\n * @param host - Host object to attach the script to.\n * @param module - Module identifier to resolve and load.\n * @returns The `RuntimeScript<T>` instance, or `null` if disabled or on failure.\n */\n async attachScript<T extends Host>(\n host: Nullable<T>,\n module: string,\n config?: Nullable<RuntimeScriptConfig>\n ) {\n return this._enabled ? await this._scriptingSystem.attachScript(host, module, config) : null;\n }\n /**\n * Detaches a script from a host, by module ID or instance, if enabled.\n *\n * No-op when disabled.\n *\n * @typeParam T - Host type.\n * @param host - Host to detach from.\n * @param idOrInstance - Target script by module ID or instance reference.\n */\n detachScript<T extends Host>(host: T, idOrInstance: string | RuntimeScript<T>) {\n if (this._enabled) {\n this._scriptingSystem.detachScript(host, idOrInstance);\n }\n }\n /**\n * Gets all scripts attached to a host.\n *\n * Delegates to {@link ScriptingSystem.getScriptObjects}.\n *\n * @typeParam T - Expected script type.\n * @param host - Host object to query.\n * @returns Script instances attached to the host, or an empty array.\n */\n getScriptObjects<T extends RuntimeScript<any>>(host: unknown) {\n return this._scriptingSystem.getScriptObjects(host) as T[];\n }\n /**\n * Ticks all attached scripts by calling their `onUpdate` hooks, if enabled.\n *\n * @param deltaTime - Time since last update in Seconds.\n * @param elapsedTime - Total elapsed time in Seconds.\n */\n update(deltaTime: number, elapsedTime: number) {\n if (this._enabled) {\n this._scriptingSystem.update(deltaTime, elapsedTime);\n }\n }\n async loadSceneFromFile(path: string) {\n path = this.VFS.normalizePath(path);\n if (!this._loadingScenes[path]) {\n this._loadingScenes[path] = this._loadScene(path);\n }\n return this._loadingScenes[path]!;\n }\n setRenderable(renderable: Nullable<IRenderable>, layer = 0, hook?: IRenderHook) {\n if (!this._activeRenderables[layer]) {\n this._activeRenderables[layer] = {\n renderable: new DRef<IRenderable>(null),\n hook: null\n };\n }\n this._activeRenderables[layer].hook = hook ?? null;\n this._activeRenderables[layer].renderable.set(renderable);\n }\n async readFile<T extends ReadOptions['encoding'] = 'binary'>(path: string, encoding?: T) {\n try {\n const content = await this.VFS.readFile(path, { encoding: encoding ?? 'binary' });\n return content as T extends 'binary' ? ArrayBuffer : string;\n } catch (err) {\n console.error(`Read file '${path}' failed: ${err}`);\n return null;\n }\n }\n async startup(\n startupScene?: Nullable<string>,\n splashScreen?: Nullable<string>,\n startupScript?: Nullable<string>\n ) {\n const splashScreenLayer = 9999;\n if (splashScreen) {\n const splashScreenScene = await this.loadSceneFromFile(splashScreen);\n if (splashScreenScene) {\n this.setRenderable(splashScreenScene, splashScreenLayer);\n }\n }\n if (startupScript) {\n const path =\n startupScript.toLowerCase().endsWith('.ts') || startupScript.toLowerCase().endsWith('.js')\n ? startupScript.slice(0, -3)\n : startupScript;\n await this.attachScript(null, path);\n }\n if (startupScene) {\n const scene = await this.loadSceneFromFile(startupScene);\n this.setRenderable(scene, 0);\n }\n this.setRenderable(null, splashScreenLayer);\n }\n render() {\n this._activeRenderables.forEach((info) => {\n const render = info.hook?.beforeRender\n ? (info.hook.beforeRender(info.renderable.get() ?? null) ?? true)\n : true;\n if (render) {\n info.renderable.get()?.render();\n }\n if (info.hook?.afterRender) {\n info.hook.afterRender(info.renderable.get() ?? null);\n }\n });\n }\n private async ensureBuiltinVFS() {\n if (!this._builtinsVFS) {\n this._builtinsVFS = await this.createBuiltinVFS();\n }\n this.VFS.unmount('/assets/@builtins');\n this.VFS.mount('/assets/@builtins', this._builtinsVFS);\n }\n private async createBuiltinVFS() {\n const fs = new MemoryFS();\n const shapeClsMap = {\n '/primitives/box.zmsh': BoxShape,\n '/primitives/sphere.zmsh': SphereShape,\n '/primitives/cylinder.zmsh': CylinderShape,\n '/primitives/plane.zmsh': PlaneShape,\n '/primitives/torus.zmsh': TorusShape,\n '/primitives/tetrahedron.zmsh': TetrahedronShape,\n '/primitives/capsule.zmsh': CapsuleShape,\n '/materials/unlit.zmtl': UnlitMaterial,\n '/materials/lambert.zmtl': LambertMaterial,\n '/materials/blinnphong.zmtl': BlinnMaterial,\n '/materials/pbr_metallic_roughness.zmtl': PBRMetallicRoughnessMaterial,\n '/materials/pbr_specular_glossiness.zmtl': PBRSpecularGlossinessMaterial,\n '/materials/sprite_std.zmtl': StandardSpriteMaterial\n } as const;\n for (const [key] of objectEntries(shapeClsMap)) {\n const obj = new shapeClsMap[key]();\n await this.writeSerializableObject(fs, 'Default', obj, key);\n obj.dispose();\n }\n fs.readOnly = true;\n return fs;\n }\n private async writeSerializableObject(VFS: VFS, type: string, obj: any, path: string) {\n try {\n const data = await this.resourceManager.serializeObject(obj);\n const content = JSON.stringify({ type, data }, null, 2);\n await VFS.writeFile(path, content, { encoding: 'utf8', create: true });\n } catch (err) {\n console.error(`Write file '${path}' failed: ${err}`);\n }\n }\n private async _loadScene(path: string) {\n try {\n const scene = await this._resourceManager.loadScene(path);\n if (scene) {\n const sceneScripts =\n scene.scripts.length > 0\n ? scene.scripts\n : scene.script\n ? [{ script: scene.script, config: scene.scriptConfig }]\n : [];\n for (const attachment of sceneScripts) {\n if (!attachment.script) {\n continue;\n }\n try {\n await this.attachScript(\n scene,\n attachment.script,\n (attachment.config ?? null) as RuntimeScriptConfig | null\n );\n } catch (err) {\n console.error(`Attach script failed: ${err}`);\n }\n }\n const nodes: (typeof scene.rootNode)[] = [];\n scene.rootNode.iterate((node) => {\n nodes.push(node);\n });\n const attachTasks = nodes.map(async (node) => {\n const attachments =\n node.scripts.length > 0\n ? node.scripts\n : node.script\n ? [{ script: node.script, config: node.scriptConfig }]\n : [];\n for (const attachment of attachments) {\n if (!attachment.script) {\n continue;\n }\n try {\n await this.attachScript(\n node,\n attachment.script,\n (attachment.config ?? null) as RuntimeScriptConfig | null\n );\n } catch (err) {\n console.error(`Attach script failed: ${err}`);\n }\n }\n });\n if (attachTasks.length > 0) {\n await Promise.allSettled(attachTasks);\n }\n }\n return scene;\n } catch (err) {\n console.error(`Load scene from '${path}' failed: ${err}`);\n return null;\n }\n }\n}\n\nexport { MSDFTextAtlasManager };\n"],"names":["Engine","_builtinsVFS","_scriptingSystem","_resourceManager","_msdfTextAtlasManager","_enabled","_screen","_activeRenderables","_loadingScenes","VFS","scriptsRoot","enabled","HttpFS","ScriptingSystem","ResourceManager","MSDFTextAtlasManager","ScreenAdapter","scriptingSystem","registry","vfs","close","ensureBuiltinVFS","resourceManager","msdfTextAtlasManager","releaseFontAsset","font","fontAsset","getFontAsset","atlasReleased","releaseAtlas","fontReleased","configureMSDFAtlas","pageSize","glyphSize","distanceRange","padding","console","warn","configureAtlas","screen","init","detachAllScripts","loadRuntimeScriptClass","module","attachScript","host","config","detachScript","idOrInstance","getScriptObjects","update","deltaTime","elapsedTime","loadSceneFromFile","path","normalizePath","_loadScene","setRenderable","renderable","layer","hook","DRef","set","readFile","encoding","content","err","error","startup","startupScene","splashScreen","startupScript","splashScreenLayer","splashScreenScene","toLowerCase","endsWith","slice","scene","render","forEach","info","beforeRender","get","afterRender","createBuiltinVFS","unmount","mount","fs","MemoryFS","shapeClsMap","BoxShape","SphereShape","CylinderShape","PlaneShape","TorusShape","TetrahedronShape","CapsuleShape","UnlitMaterial","LambertMaterial","BlinnMaterial","PBRMetallicRoughnessMaterial","PBRSpecularGlossinessMaterial","StandardSpriteMaterial","key","objectEntries","obj","writeSerializableObject","dispose","readOnly","type","data","serializeObject","JSON","stringify","writeFile","create","loadScene","sceneScripts","scripts","length","script","scriptConfig","attachment","nodes","rootNode","iterate","node","push","attachTasks","map","attachments","Promise","allSettled"],"mappings":"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"}
|