@luminocity/lemonate-engine 15.2.2 → 15.2.3
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/engine.min.js +302 -0
- package/dist/player.zip +302 -0
- package/package.json +6 -2
- package/dist/Builder.js +0 -93
- package/dist/Builder.js.map +0 -1
- package/dist/Canvas.js +0 -109
- package/dist/Canvas.js.map +0 -1
- package/dist/Controllers.js +0 -97
- package/dist/Controllers.js.map +0 -1
- package/dist/EditorScene.js +0 -372
- package/dist/EditorScene.js.map +0 -1
- package/dist/Engine.js +0 -1576
- package/dist/Engine.js.map +0 -1
- package/dist/LoadingManager.js +0 -1195
- package/dist/LoadingManager.js.map +0 -1
- package/dist/LoadingState.js +0 -37
- package/dist/LoadingState.js.map +0 -1
- package/dist/Logger.js +0 -141
- package/dist/Logger.js.map +0 -1
- package/dist/Player.js +0 -470
- package/dist/Player.js.map +0 -1
- package/dist/Preview.js +0 -166
- package/dist/Preview.js.map +0 -1
- package/dist/RenderOptions.js +0 -59
- package/dist/RenderOptions.js.map +0 -1
- package/dist/RenderPassInfo.js +0 -133
- package/dist/RenderPassInfo.js.map +0 -1
- package/dist/RenderView.js +0 -459
- package/dist/RenderView.js.map +0 -1
- package/dist/Renderer.js +0 -1867
- package/dist/Renderer.js.map +0 -1
- package/dist/SceneGraph.js +0 -798
- package/dist/SceneGraph.js.map +0 -1
- package/dist/SceneGraphCollection.js +0 -614
- package/dist/SceneGraphCollection.js.map +0 -1
- package/dist/Shortcuts.js +0 -259
- package/dist/Shortcuts.js.map +0 -1
- package/dist/Tools.js +0 -500
- package/dist/Tools.js.map +0 -1
- package/dist/Variables.js +0 -243
- package/dist/Variables.js.map +0 -1
- package/dist/helpers/ArrowHelper.js +0 -104
- package/dist/helpers/ArrowHelper.js.map +0 -1
- package/dist/helpers/BoxHelper.js +0 -112
- package/dist/helpers/BoxHelper.js.map +0 -1
- package/dist/helpers/CameraHelper.js +0 -237
- package/dist/helpers/CameraHelper.js.map +0 -1
- package/dist/helpers/FaceNormalsHelper.js +0 -85
- package/dist/helpers/FaceNormalsHelper.js.map +0 -1
- package/dist/helpers/MeshHelper.js +0 -92
- package/dist/helpers/MeshHelper.js.map +0 -1
- package/dist/helpers/MultiGridHelper.js +0 -61
- package/dist/helpers/MultiGridHelper.js.map +0 -1
- package/dist/helpers/ParticlesHelper.js +0 -245
- package/dist/helpers/ParticlesHelper.js.map +0 -1
- package/dist/helpers/PointHelper.js +0 -85
- package/dist/helpers/PointHelper.js.map +0 -1
- package/dist/helpers/SphereHelper.js +0 -62
- package/dist/helpers/SphereHelper.js.map +0 -1
- package/dist/helpers/VertexNormalsHelper.js +0 -75
- package/dist/helpers/VertexNormalsHelper.js.map +0 -1
- package/dist/helpers/ViewHelper.js +0 -252
- package/dist/helpers/ViewHelper.js.map +0 -1
- package/dist/helpers/lighthelpers/DirectionalLightHelper.js +0 -136
- package/dist/helpers/lighthelpers/DirectionalLightHelper.js.map +0 -1
- package/dist/helpers/lighthelpers/HemisphereLightHelper.js +0 -124
- package/dist/helpers/lighthelpers/HemisphereLightHelper.js.map +0 -1
- package/dist/helpers/lighthelpers/PointLightHelper.js +0 -133
- package/dist/helpers/lighthelpers/PointLightHelper.js.map +0 -1
- package/dist/helpers/lighthelpers/SpotLightHelper.js +0 -123
- package/dist/helpers/lighthelpers/SpotLightHelper.js.map +0 -1
- package/dist/index.js +0 -40
- package/dist/index.js.map +0 -1
- package/dist/items/AudioCollectionItem.js +0 -230
- package/dist/items/AudioCollectionItem.js.map +0 -1
- package/dist/items/AudioItem.js +0 -75
- package/dist/items/AudioItem.js.map +0 -1
- package/dist/items/BackgroundShaderItem.js +0 -239
- package/dist/items/BackgroundShaderItem.js.map +0 -1
- package/dist/items/CanvasTextureItem.js +0 -194
- package/dist/items/CanvasTextureItem.js.map +0 -1
- package/dist/items/CompositionItem.js +0 -110
- package/dist/items/CompositionItem.js.map +0 -1
- package/dist/items/FontItem.js +0 -135
- package/dist/items/FontItem.js.map +0 -1
- package/dist/items/GaussianSplatsItem.js +0 -103
- package/dist/items/GaussianSplatsItem.js.map +0 -1
- package/dist/items/GridMapItem.js +0 -202
- package/dist/items/GridMapItem.js.map +0 -1
- package/dist/items/ImageItem.js +0 -255
- package/dist/items/ImageItem.js.map +0 -1
- package/dist/items/Item.js +0 -739
- package/dist/items/Item.js.map +0 -1
- package/dist/items/MaterialCollectionItem.js +0 -216
- package/dist/items/MaterialCollectionItem.js.map +0 -1
- package/dist/items/MaterialItem.js +0 -1762
- package/dist/items/MaterialItem.js.map +0 -1
- package/dist/items/MeshCollectionItem.js +0 -258
- package/dist/items/MeshCollectionItem.js.map +0 -1
- package/dist/items/MeshItem.js +0 -274
- package/dist/items/MeshItem.js.map +0 -1
- package/dist/items/ParticlesItem.js +0 -187
- package/dist/items/ParticlesItem.js.map +0 -1
- package/dist/items/PixelShaderItem.js +0 -42
- package/dist/items/PixelShaderItem.js.map +0 -1
- package/dist/items/PointsItem.js +0 -122
- package/dist/items/PointsItem.js.map +0 -1
- package/dist/items/PrefabItem.js +0 -140
- package/dist/items/PrefabItem.js.map +0 -1
- package/dist/items/ProjectItem.js +0 -857
- package/dist/items/ProjectItem.js.map +0 -1
- package/dist/items/SceneItem.js +0 -443
- package/dist/items/SceneItem.js.map +0 -1
- package/dist/items/ScriptItem.js +0 -159
- package/dist/items/ScriptItem.js.map +0 -1
- package/dist/items/VariableSetItem.js +0 -208
- package/dist/items/VariableSetItem.js.map +0 -1
- package/dist/items/VertexShaderItem.js +0 -42
- package/dist/items/VertexShaderItem.js.map +0 -1
- package/dist/items/VideoItem.js +0 -152
- package/dist/items/VideoItem.js.map +0 -1
- package/dist/items/base/ImageOwningItem.js +0 -205
- package/dist/items/base/ImageOwningItem.js.map +0 -1
- package/dist/items/base/MeshBase.js +0 -342
- package/dist/items/base/MeshBase.js.map +0 -1
- package/dist/items/base/ShaderBase.js +0 -115
- package/dist/items/base/ShaderBase.js.map +0 -1
- package/dist/items/helpers/ListEntry.js +0 -113
- package/dist/items/helpers/ListEntry.js.map +0 -1
- package/dist/items/helpers/ListField.js +0 -210
- package/dist/items/helpers/ListField.js.map +0 -1
- package/dist/items/helpers/MappingSetup.js +0 -126
- package/dist/items/helpers/MappingSetup.js.map +0 -1
- package/dist/json/packageVersionInfo.json +0 -6
- package/dist/json/shortcuts.json +0 -37
- package/dist/renderers/ForwardRenderer.js +0 -50
- package/dist/renderers/ForwardRenderer.js.map +0 -1
- package/dist/renderers/RendererBase.js +0 -38
- package/dist/renderers/RendererBase.js.map +0 -1
- package/dist/scenegraph/SgAudio.js +0 -286
- package/dist/scenegraph/SgAudio.js.map +0 -1
- package/dist/scenegraph/SgAudioListener.js +0 -64
- package/dist/scenegraph/SgAudioListener.js.map +0 -1
- package/dist/scenegraph/SgBillboard.js +0 -150
- package/dist/scenegraph/SgBillboard.js.map +0 -1
- package/dist/scenegraph/SgBox.js +0 -54
- package/dist/scenegraph/SgBox.js.map +0 -1
- package/dist/scenegraph/SgCamera.js +0 -219
- package/dist/scenegraph/SgCamera.js.map +0 -1
- package/dist/scenegraph/SgCircleShadow.js +0 -105
- package/dist/scenegraph/SgCircleShadow.js.map +0 -1
- package/dist/scenegraph/SgCone.js +0 -61
- package/dist/scenegraph/SgCone.js.map +0 -1
- package/dist/scenegraph/SgCylinder.js +0 -62
- package/dist/scenegraph/SgCylinder.js.map +0 -1
- package/dist/scenegraph/SgGaussianSplats.js +0 -103
- package/dist/scenegraph/SgGaussianSplats.js.map +0 -1
- package/dist/scenegraph/SgGridMap.js +0 -112
- package/dist/scenegraph/SgGridMap.js.map +0 -1
- package/dist/scenegraph/SgGroup.js +0 -40
- package/dist/scenegraph/SgGroup.js.map +0 -1
- package/dist/scenegraph/SgItem.js +0 -1427
- package/dist/scenegraph/SgItem.js.map +0 -1
- package/dist/scenegraph/SgItemScript.js +0 -117
- package/dist/scenegraph/SgItemScript.js.map +0 -1
- package/dist/scenegraph/SgLightsource.js +0 -319
- package/dist/scenegraph/SgLightsource.js.map +0 -1
- package/dist/scenegraph/SgLod.js +0 -82
- package/dist/scenegraph/SgLod.js.map +0 -1
- package/dist/scenegraph/SgMesh.js +0 -662
- package/dist/scenegraph/SgMesh.js.map +0 -1
- package/dist/scenegraph/SgNavMesh.js +0 -503
- package/dist/scenegraph/SgNavMesh.js.map +0 -1
- package/dist/scenegraph/SgParticles.js +0 -796
- package/dist/scenegraph/SgParticles.js.map +0 -1
- package/dist/scenegraph/SgPhysicsItem.js +0 -806
- package/dist/scenegraph/SgPhysicsItem.js.map +0 -1
- package/dist/scenegraph/SgPhysicsSubItem.js +0 -449
- package/dist/scenegraph/SgPhysicsSubItem.js.map +0 -1
- package/dist/scenegraph/SgPlane.js +0 -47
- package/dist/scenegraph/SgPlane.js.map +0 -1
- package/dist/scenegraph/SgPoints.js +0 -143
- package/dist/scenegraph/SgPoints.js.map +0 -1
- package/dist/scenegraph/SgPositionalAudio.js +0 -93
- package/dist/scenegraph/SgPositionalAudio.js.map +0 -1
- package/dist/scenegraph/SgPrefab.js +0 -153
- package/dist/scenegraph/SgPrefab.js.map +0 -1
- package/dist/scenegraph/SgProceduralGeometryItem.js +0 -146
- package/dist/scenegraph/SgProceduralGeometryItem.js.map +0 -1
- package/dist/scenegraph/SgResourceOwner.js +0 -127
- package/dist/scenegraph/SgResourceOwner.js.map +0 -1
- package/dist/scenegraph/SgRibbon.js +0 -107
- package/dist/scenegraph/SgRibbon.js.map +0 -1
- package/dist/scenegraph/SgRing.js +0 -49
- package/dist/scenegraph/SgRing.js.map +0 -1
- package/dist/scenegraph/SgRoot.js +0 -87
- package/dist/scenegraph/SgRoot.js.map +0 -1
- package/dist/scenegraph/SgScriptedMesh.js +0 -213
- package/dist/scenegraph/SgScriptedMesh.js.map +0 -1
- package/dist/scenegraph/SgSky.js +0 -126
- package/dist/scenegraph/SgSky.js.map +0 -1
- package/dist/scenegraph/SgSphere.js +0 -59
- package/dist/scenegraph/SgSphere.js.map +0 -1
- package/dist/scenegraph/SgText.js +0 -182
- package/dist/scenegraph/SgText.js.map +0 -1
- package/dist/scenegraph/SgTorus.js +0 -48
- package/dist/scenegraph/SgTorus.js.map +0 -1
- package/dist/scenegraph/SgVehicle.js +0 -370
- package/dist/scenegraph/SgVehicle.js.map +0 -1
- package/dist/subsystems/AudioSystem.js +0 -128
- package/dist/subsystems/AudioSystem.js.map +0 -1
- package/dist/subsystems/Billboard.js +0 -190
- package/dist/subsystems/Billboard.js.map +0 -1
- package/dist/subsystems/FontLoader.js +0 -161
- package/dist/subsystems/FontLoader.js.map +0 -1
- package/dist/subsystems/Physics.js +0 -1079
- package/dist/subsystems/Physics.js.map +0 -1
- package/dist/subsystems/Ribbons.js +0 -179
- package/dist/subsystems/Ribbons.js.map +0 -1
- package/dist/subsystems/gridmap/GridMapBuilder.js +0 -430
- package/dist/subsystems/gridmap/GridMapBuilder.js.map +0 -1
- package/dist/subsystems/imgui/ImGui.js +0 -742
- package/dist/subsystems/imgui/ImGui.js.map +0 -1
- package/dist/subsystems/importer/Converter.js +0 -199
- package/dist/subsystems/importer/Converter.js.map +0 -1
- package/dist/subsystems/importer/ImageConverter.js +0 -77
- package/dist/subsystems/importer/ImageConverter.js.map +0 -1
- package/dist/subsystems/importer/Importer.js +0 -381
- package/dist/subsystems/importer/Importer.js.map +0 -1
- package/dist/subsystems/importer/MeshConverter.js +0 -595
- package/dist/subsystems/importer/MeshConverter.js.map +0 -1
- package/dist/subsystems/particlesystem/CurlNoiseTexturePreview.js +0 -127
- package/dist/subsystems/particlesystem/CurlNoiseTexturePreview.js.map +0 -1
- package/dist/subsystems/particlesystem/Emitters/CircleEmitter.js +0 -135
- package/dist/subsystems/particlesystem/Emitters/CircleEmitter.js.map +0 -1
- package/dist/subsystems/particlesystem/Emitters/ConeEmitter.js +0 -192
- package/dist/subsystems/particlesystem/Emitters/ConeEmitter.js.map +0 -1
- package/dist/subsystems/particlesystem/Emitters/CubeEmitter.js +0 -157
- package/dist/subsystems/particlesystem/Emitters/CubeEmitter.js.map +0 -1
- package/dist/subsystems/particlesystem/Emitters/EdgeEmitter.js +0 -133
- package/dist/subsystems/particlesystem/Emitters/EdgeEmitter.js.map +0 -1
- package/dist/subsystems/particlesystem/Emitters/Emitter.js +0 -107
- package/dist/subsystems/particlesystem/Emitters/Emitter.js.map +0 -1
- package/dist/subsystems/particlesystem/Emitters/HemiSphereEmitter.js +0 -142
- package/dist/subsystems/particlesystem/Emitters/HemiSphereEmitter.js.map +0 -1
- package/dist/subsystems/particlesystem/Emitters/MeshEmitter.js +0 -56
- package/dist/subsystems/particlesystem/Emitters/MeshEmitter.js.map +0 -1
- package/dist/subsystems/particlesystem/Emitters/SphereEmitter.js +0 -142
- package/dist/subsystems/particlesystem/Emitters/SphereEmitter.js.map +0 -1
- package/dist/subsystems/particlesystem/Emitters/TorusEmitter.js +0 -159
- package/dist/subsystems/particlesystem/Emitters/TorusEmitter.js.map +0 -1
- package/dist/subsystems/particlesystem/ParticleSystem.js +0 -706
- package/dist/subsystems/particlesystem/ParticleSystem.js.map +0 -1
- package/dist/subsystems/particlesystem/Simulation.js +0 -475
- package/dist/subsystems/particlesystem/Simulation.js.map +0 -1
- package/dist/subsystems/particlesystem/Visualization.js +0 -518
- package/dist/subsystems/particlesystem/Visualization.js.map +0 -1
- package/dist/subsystems/particlesystem/shaders/noise/CurlNoiseTexturePreviewShader.js +0 -56
- package/dist/subsystems/particlesystem/shaders/noise/CurlNoiseTexturePreviewShader.js.map +0 -1
- package/dist/subsystems/particlesystem/utils.js +0 -115
- package/dist/subsystems/particlesystem/utils.js.map +0 -1
- package/dist/subsystems/scripting/ScriptEngine.js +0 -1074
- package/dist/subsystems/scripting/ScriptEngine.js.map +0 -1
- package/dist/subsystems/scripting/ScriptRunner.js +0 -153
- package/dist/subsystems/scripting/ScriptRunner.js.map +0 -1
- package/dist/subsystems/scripting/ScriptRuntime.js +0 -244
- package/dist/subsystems/scripting/ScriptRuntime.js.map +0 -1
- package/dist/subsystems/scripting/runtime/RtAudio.js +0 -37
- package/dist/subsystems/scripting/runtime/RtAudio.js.map +0 -1
- package/dist/subsystems/scripting/runtime/RtBase.js +0 -117
- package/dist/subsystems/scripting/runtime/RtBase.js.map +0 -1
- package/dist/subsystems/scripting/runtime/RtCanvas.js +0 -326
- package/dist/subsystems/scripting/runtime/RtCanvas.js.map +0 -1
- package/dist/subsystems/scripting/runtime/RtComposer.js +0 -58
- package/dist/subsystems/scripting/runtime/RtComposer.js.map +0 -1
- package/dist/subsystems/scripting/runtime/RtConsole.js +0 -51
- package/dist/subsystems/scripting/runtime/RtConsole.js.map +0 -1
- package/dist/subsystems/scripting/runtime/RtControllers.js +0 -52
- package/dist/subsystems/scripting/runtime/RtControllers.js.map +0 -1
- package/dist/subsystems/scripting/runtime/RtEvents.js +0 -46
- package/dist/subsystems/scripting/runtime/RtEvents.js.map +0 -1
- package/dist/subsystems/scripting/runtime/RtImGui.js +0 -410
- package/dist/subsystems/scripting/runtime/RtImGui.js.map +0 -1
- package/dist/subsystems/scripting/runtime/RtItem.js +0 -297
- package/dist/subsystems/scripting/runtime/RtItem.js.map +0 -1
- package/dist/subsystems/scripting/runtime/RtLoader.js +0 -77
- package/dist/subsystems/scripting/runtime/RtLoader.js.map +0 -1
- package/dist/subsystems/scripting/runtime/RtObject.js +0 -34
- package/dist/subsystems/scripting/runtime/RtObject.js.map +0 -1
- package/dist/subsystems/scripting/runtime/RtPhysics.js +0 -69
- package/dist/subsystems/scripting/runtime/RtPhysics.js.map +0 -1
- package/dist/subsystems/scripting/runtime/RtPointer.js +0 -45
- package/dist/subsystems/scripting/runtime/RtPointer.js.map +0 -1
- package/dist/subsystems/scripting/runtime/RtProject.js +0 -66
- package/dist/subsystems/scripting/runtime/RtProject.js.map +0 -1
- package/dist/subsystems/scripting/runtime/RtRenderer.js +0 -138
- package/dist/subsystems/scripting/runtime/RtRenderer.js.map +0 -1
- package/dist/subsystems/scripting/runtime/RtSceneEntry.js +0 -67
- package/dist/subsystems/scripting/runtime/RtSceneEntry.js.map +0 -1
- package/dist/subsystems/scripting/runtime/RtSceneObject.js +0 -666
- package/dist/subsystems/scripting/runtime/RtSceneObject.js.map +0 -1
- package/dist/subsystems/scripting/runtime/RtStorage.js +0 -64
- package/dist/subsystems/scripting/runtime/RtStorage.js.map +0 -1
- package/dist/subsystems/scripting/runtime/RtSystem.js +0 -85
- package/dist/subsystems/scripting/runtime/RtSystem.js.map +0 -1
- package/dist/subsystems/scripting/runtime/RtTools.js +0 -37
- package/dist/subsystems/scripting/runtime/RtTools.js.map +0 -1
- package/dist/subsystems/scripting/runtime/RtVariables.js +0 -57
- package/dist/subsystems/scripting/runtime/RtVariables.js.map +0 -1
- package/dist/subsystems/scripting/runtime/items/RtCanvasTexture.js +0 -101
- package/dist/subsystems/scripting/runtime/items/RtCanvasTexture.js.map +0 -1
- package/dist/subsystems/scripting/runtime/items/RtMaterial.js +0 -34
- package/dist/subsystems/scripting/runtime/items/RtMaterial.js.map +0 -1
- package/dist/subsystems/scripting/runtime/items/RtMesh.js +0 -34
- package/dist/subsystems/scripting/runtime/items/RtMesh.js.map +0 -1
- package/dist/subsystems/scripting/runtime/items/RtTexture.js +0 -34
- package/dist/subsystems/scripting/runtime/items/RtTexture.js.map +0 -1
- package/dist/subsystems/scripting/runtime/items/RtVideo.js +0 -56
- package/dist/subsystems/scripting/runtime/items/RtVideo.js.map +0 -1
- package/dist/subsystems/scripting/runtime/sceneobjects/RtSgAudio.js +0 -59
- package/dist/subsystems/scripting/runtime/sceneobjects/RtSgAudio.js.map +0 -1
- package/dist/subsystems/scripting/runtime/sceneobjects/RtSgCamera.js +0 -134
- package/dist/subsystems/scripting/runtime/sceneobjects/RtSgCamera.js.map +0 -1
- package/dist/subsystems/scripting/runtime/sceneobjects/RtSgMesh.js +0 -99
- package/dist/subsystems/scripting/runtime/sceneobjects/RtSgMesh.js.map +0 -1
- package/dist/subsystems/scripting/runtime/sceneobjects/RtSgNavMesh.js +0 -114
- package/dist/subsystems/scripting/runtime/sceneobjects/RtSgNavMesh.js.map +0 -1
- package/dist/subsystems/scripting/runtime/sceneobjects/RtSgParticles.js +0 -576
- package/dist/subsystems/scripting/runtime/sceneobjects/RtSgParticles.js.map +0 -1
- package/dist/subsystems/scripting/runtime/sceneobjects/RtSgPositionalAudio.js +0 -56
- package/dist/subsystems/scripting/runtime/sceneobjects/RtSgPositionalAudio.js.map +0 -1
- package/dist/subsystems/scripting/runtime/sceneobjects/RtSgRibbon.js +0 -42
- package/dist/subsystems/scripting/runtime/sceneobjects/RtSgRibbon.js.map +0 -1
- package/dist/subsystems/scripting/runtime/sceneobjects/RtSgScriptedMesh.js +0 -65
- package/dist/subsystems/scripting/runtime/sceneobjects/RtSgScriptedMesh.js.map +0 -1
- package/dist/subsystems/scripting/runtime/sceneobjects/RtSgVehicle.js +0 -60
- package/dist/subsystems/scripting/runtime/sceneobjects/RtSgVehicle.js.map +0 -1
- package/dist/tools/AsyncInterval.js +0 -55
- package/dist/tools/AsyncInterval.js.map +0 -1
- package/dist/tools/Converters.js +0 -41
- package/dist/tools/Converters.js.map +0 -1
- package/dist/tools/DebugTools.js +0 -91
- package/dist/tools/DebugTools.js.map +0 -1
- package/dist/tools/FontTools.js +0 -43
- package/dist/tools/FontTools.js.map +0 -1
- package/dist/tools/FsShader.js +0 -112
- package/dist/tools/FsShader.js.map +0 -1
- package/dist/tools/GeometryTools.js +0 -373
- package/dist/tools/GeometryTools.js.map +0 -1
- package/dist/tools/ItemTools.js +0 -139
- package/dist/tools/ItemTools.js.map +0 -1
- package/dist/tools/MathHelpers.js +0 -125
- package/dist/tools/MathHelpers.js.map +0 -1
- package/dist/tools/Profiler.js +0 -174
- package/dist/tools/Profiler.js.map +0 -1
- package/dist/tools/Random.js +0 -48
- package/dist/tools/Random.js.map +0 -1
- package/dist/tools/RtDebugger.js +0 -84
- package/dist/tools/RtDebugger.js.map +0 -1
- package/dist/tools/StringExtensions.js +0 -72
- package/dist/tools/StringExtensions.js.map +0 -1
- package/dist/tools/TextureTools.js +0 -444
- package/dist/tools/TextureTools.js.map +0 -1
- package/dist/tools/Timer.js +0 -52
- package/dist/tools/Timer.js.map +0 -1
- package/dist/tools/audioVisualizers/WavyAudioVisualizer.js +0 -59
- package/dist/tools/audioVisualizers/WavyAudioVisualizer.js.map +0 -1
- /package/dist/renderers/{forwardrenderer.d.ts → ForwardRenderer.d.ts} +0 -0
- /package/dist/subsystems/imgui/{imgui.d.ts → ImGui.d.ts} +0 -0
- /package/dist/subsystems/importer/{imageconverter.d.ts → ImageConverter.d.ts} +0 -0
- /package/dist/subsystems/scripting/{scriptrunner.d.ts → ScriptRunner.d.ts} +0 -0
- /package/dist/subsystems/scripting/{scriptruntime.d.ts → ScriptRuntime.d.ts} +0 -0
- /package/dist/subsystems/scripting/runtime/{rtAudio.d.ts → RtAudio.d.ts} +0 -0
- /package/dist/subsystems/scripting/runtime/{rtComposer.d.ts → RtComposer.d.ts} +0 -0
- /package/dist/subsystems/scripting/runtime/{rtObject.d.ts → RtObject.d.ts} +0 -0
package/dist/LoadingManager.js
DELETED
|
@@ -1,1195 +0,0 @@
|
|
|
1
|
-
// -----------------------------------------------------------------------------------------------------------
|
|
2
|
-
// __ ______ __ __ ______ __ __ ______ ______ ______
|
|
3
|
-
// /\ \ /\ ___\ /\ "-./ \ /\ __ \ /\ "-.\ \ /\ __ \ /\__ _\ /\ ___\
|
|
4
|
-
// \ \ \____ \ \ __\ \ \ \-./\ \ \ \ \/\ \ \ \ \-. \ \ \ __ \ \/_/\ \/ \ \ __\
|
|
5
|
-
// \ \_____\ \ \_____\ \ \_\ \ \_\ \ \_____\ \ \_\\"\_\ \ \_\ \_\ \ \_\ \ \_____\
|
|
6
|
-
// \/_____/ \/_____/ \/_/ \/_/ \/_____/ \/_/ \/_/ \/_/\/_/ \/_/ \/_____/
|
|
7
|
-
//
|
|
8
|
-
//
|
|
9
|
-
// Copyright 2023- Luminocity AG
|
|
10
|
-
//
|
|
11
|
-
// "The cake is a lie." - Portal (2007)
|
|
12
|
-
//
|
|
13
|
-
// Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
|
14
|
-
// and associated documentation files (the “Software”), to deal in the Software without restriction,
|
|
15
|
-
// including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
16
|
-
// and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
|
|
17
|
-
// subject to the following conditions:
|
|
18
|
-
//
|
|
19
|
-
// The above copyright notice and this permission notice shall be included in all copies or substantial
|
|
20
|
-
// portions of the Software.
|
|
21
|
-
//
|
|
22
|
-
// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
|
|
23
|
-
// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
24
|
-
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
25
|
-
// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
26
|
-
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
27
|
-
// -----------------------------------------------------------------------------------------------------------
|
|
28
|
-
import lodash from 'lodash';
|
|
29
|
-
import { AudioItem } from "./items/AudioItem";
|
|
30
|
-
import { AudioCollectionItem } from './items/AudioCollectionItem';
|
|
31
|
-
import { BackgroundShaderItem } from "./items/BackgroundShaderItem";
|
|
32
|
-
import { CanvasTextureItem } from "./items/CanvasTextureItem";
|
|
33
|
-
import { CompositionItem } from './items/CompositionItem';
|
|
34
|
-
import { FontItem } from "./items/FontItem";
|
|
35
|
-
import { GaussianSplatsItem } from './items/GaussianSplatsItem';
|
|
36
|
-
import { GridMapItem } from "./items/GridMapItem";
|
|
37
|
-
import { MaterialItem } from "./items/MaterialItem";
|
|
38
|
-
import { MaterialCollectionItem } from "./items/MaterialCollectionItem";
|
|
39
|
-
import { MeshItem } from "./items/MeshItem";
|
|
40
|
-
import { MeshCollectionItem } from "./items/MeshCollectionItem";
|
|
41
|
-
import { ParticlesItem } from "./items/ParticlesItem";
|
|
42
|
-
import { PixelShaderItem } from "./items/PixelShaderItem";
|
|
43
|
-
import { PointsItem } from "./items/PointsItem";
|
|
44
|
-
import { PrefabItem } from "./items/PrefabItem";
|
|
45
|
-
import { ProjectItem } from './items/ProjectItem';
|
|
46
|
-
import { SceneItem } from "./items/SceneItem";
|
|
47
|
-
import { ScriptItem } from "./items/ScriptItem";
|
|
48
|
-
import { ImageItem } from "./items/ImageItem";
|
|
49
|
-
import { VariableSetItem } from './items/VariableSetItem';
|
|
50
|
-
import { VertexShaderItem } from "./items/VertexShaderItem";
|
|
51
|
-
import { VideoItem } from "./items/VideoItem";
|
|
52
|
-
import { ItemState, itemStateToString } from "./items/Item";
|
|
53
|
-
import tools from "./Tools.js";
|
|
54
|
-
import { LoadingState } from "./LoadingState.js";
|
|
55
|
-
// Once all references to an object are removed, it can be destroyed and removed from memory. In many cases it
|
|
56
|
-
// is more than possible that it will be instanced again within short period of time. So define a period of time
|
|
57
|
-
// where deleted objects will be kept until garbage collected
|
|
58
|
-
const DELETION_GRACE_PERIOD_MS = 10000;
|
|
59
|
-
// This is the maximum time we accept a create() method to take before we output a warning. anything time consuming
|
|
60
|
-
// like loading resources should be done in load() not in create()
|
|
61
|
-
const MAX_ACCEPTABLE_CREATE_TIME_MS = 10;
|
|
62
|
-
export class LoadingManager {
|
|
63
|
-
gpuRamQuota;
|
|
64
|
-
renderer;
|
|
65
|
-
engine;
|
|
66
|
-
debugMode;
|
|
67
|
-
deletionGracePeriodMs = DELETION_GRACE_PERIOD_MS;
|
|
68
|
-
startTime = new Date();
|
|
69
|
-
endTime;
|
|
70
|
-
totalTime;
|
|
71
|
-
// Ready defines the moment, the scene is fully renderable in at least the lowest LOD
|
|
72
|
-
readyTime;
|
|
73
|
-
secondsToReady;
|
|
74
|
-
// Finished defines the moment all resources of the scene are fully ready and we can render in full quality
|
|
75
|
-
finishedTime;
|
|
76
|
-
secondsToFinished;
|
|
77
|
-
active = true;
|
|
78
|
-
// This map keeps track of what state changes should resolve which Promises.
|
|
79
|
-
waitForStateMap = new Map();
|
|
80
|
-
itemsToLoad = [];
|
|
81
|
-
itemsMap = new Map();
|
|
82
|
-
itemsTypeMap = new Map();
|
|
83
|
-
itemsByTypeMap = new Map();
|
|
84
|
-
_removeEvents;
|
|
85
|
-
_intervalHandle;
|
|
86
|
-
_clearIntervalHandle;
|
|
87
|
-
constructor(renderer, engine, debugMode, gpuRamQuota) {
|
|
88
|
-
gpuRamQuota = gpuRamQuota === undefined ? 512 : gpuRamQuota;
|
|
89
|
-
tools.assert(renderer, "LoadingManager: renderer must be set in NkLoadingManager");
|
|
90
|
-
tools.assert(engine, "LoadingManager: engine must be set in NkLoadingManager");
|
|
91
|
-
this.debugMode = debugMode || false;
|
|
92
|
-
this.renderer = renderer;
|
|
93
|
-
this.engine = engine;
|
|
94
|
-
this.gpuRamQuota = gpuRamQuota * 1024 * 1024;
|
|
95
|
-
this.reset();
|
|
96
|
-
const _refreshReadyState = lodash.debounce(() => {
|
|
97
|
-
function printState(arr, level) {
|
|
98
|
-
const padding = "".padEnd(level, " ");
|
|
99
|
-
for (const info of arr) {
|
|
100
|
-
console.log(padding, info.item.item.name, "TYPE:" + info.item.item.type, "OWN:" + itemStateToString(info.ownState), "ACU:" + itemStateToString(info.state));
|
|
101
|
-
printState(info.children, ++level);
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
const info = [];
|
|
105
|
-
const state = this.engine.getReadyState(info);
|
|
106
|
-
if (this.debugMode) {
|
|
107
|
-
console.log("Loading manager debug output --------------------------------------------------");
|
|
108
|
-
console.log("Final state: " + itemStateToString(state));
|
|
109
|
-
printState(info, 0);
|
|
110
|
-
console.log("-------------------------------------------------------------------------------");
|
|
111
|
-
}
|
|
112
|
-
if (state === ItemState.Alive) {
|
|
113
|
-
this._ready();
|
|
114
|
-
}
|
|
115
|
-
else if (state === ItemState.Finished) {
|
|
116
|
-
this._finished();
|
|
117
|
-
}
|
|
118
|
-
}, 10);
|
|
119
|
-
this.engine.eventBus.$on('item:stateChanged', _refreshReadyState);
|
|
120
|
-
this.engine.eventBus.$on('item:contentUpdated', _refreshReadyState);
|
|
121
|
-
this.engine.eventBus.$on('item:rename', (data) => this._handleRename(data), this);
|
|
122
|
-
this.engine.eventBus.$on('item:stateChanged', (data) => {
|
|
123
|
-
const itemID = data.item.item._id;
|
|
124
|
-
// If this item just finished loading and there are promises waiting for it, resolve them.
|
|
125
|
-
const funcs = this.waitForStateMap.get(itemID);
|
|
126
|
-
if (funcs && data.item.state === ItemState.Finished) {
|
|
127
|
-
for (const resolveFunc of funcs) {
|
|
128
|
-
resolveFunc();
|
|
129
|
-
}
|
|
130
|
-
this.waitForStateMap.delete(itemID);
|
|
131
|
-
}
|
|
132
|
-
});
|
|
133
|
-
this._removeEvents = () => {
|
|
134
|
-
this.engine.eventBus.$off('item:stateChanged', _refreshReadyState);
|
|
135
|
-
this.engine.eventBus.$off('item:contentUpdated', _refreshReadyState);
|
|
136
|
-
this.engine.eventBus.$offByOwner('item:rename', this);
|
|
137
|
-
};
|
|
138
|
-
}
|
|
139
|
-
setDeletionGracePeriod(ms) {
|
|
140
|
-
tools.assert(ms >= 0, "Deletion grace period needs to be >= 0");
|
|
141
|
-
this.deletionGracePeriodMs = ms;
|
|
142
|
-
}
|
|
143
|
-
dispose() {
|
|
144
|
-
if (this._intervalHandle) {
|
|
145
|
-
clearInterval(this._intervalHandle);
|
|
146
|
-
this._intervalHandle = null;
|
|
147
|
-
}
|
|
148
|
-
if (this._clearIntervalHandle) {
|
|
149
|
-
clearInterval(this._clearIntervalHandle);
|
|
150
|
-
this._clearIntervalHandle = null;
|
|
151
|
-
}
|
|
152
|
-
this._removeEvents();
|
|
153
|
-
}
|
|
154
|
-
run() {
|
|
155
|
-
const _this = this;
|
|
156
|
-
this._intervalHandle = setInterval(function () {
|
|
157
|
-
_this._run();
|
|
158
|
-
}, 50);
|
|
159
|
-
this._clearIntervalHandle = setInterval(function () {
|
|
160
|
-
_this._clearUnusedItemInstances();
|
|
161
|
-
}, 1000);
|
|
162
|
-
}
|
|
163
|
-
getItems() {
|
|
164
|
-
return this.itemsToLoad;
|
|
165
|
-
}
|
|
166
|
-
/**
|
|
167
|
-
* Returns a list of item instances if they have a render method and also are referenced
|
|
168
|
-
* @return {*[]}
|
|
169
|
-
*/
|
|
170
|
-
getRenderableItemInstances() {
|
|
171
|
-
const result = [];
|
|
172
|
-
for (const entry of this.itemsToLoad) {
|
|
173
|
-
if (entry.references.size && entry.itemInstance && typeof entry.itemInstance.render === 'function') {
|
|
174
|
-
result.push(entry.itemInstance);
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
return result;
|
|
178
|
-
}
|
|
179
|
-
/**
|
|
180
|
-
* Checks if an item instance exists and if so, returns it and adds a reference
|
|
181
|
-
* @param itemId
|
|
182
|
-
* @param referenceId
|
|
183
|
-
* @returns {null|*}
|
|
184
|
-
* @private
|
|
185
|
-
*/
|
|
186
|
-
_getItemInstance(itemId, referenceId) {
|
|
187
|
-
tools.assert(typeof referenceId === 'string' && referenceId !== "", "LoadingManager: Cannot request a resource from loading manager without a valid reference ID");
|
|
188
|
-
let entry = this.itemsMap.get(itemId);
|
|
189
|
-
if (!entry)
|
|
190
|
-
return undefined;
|
|
191
|
-
if (referenceId) {
|
|
192
|
-
entry.references.set(referenceId, true);
|
|
193
|
-
entry.unusedSince = undefined;
|
|
194
|
-
this.engine.eventBus.$emit('loadingManager:updated');
|
|
195
|
-
}
|
|
196
|
-
return entry.itemInstance;
|
|
197
|
-
}
|
|
198
|
-
/**
|
|
199
|
-
* Sets an item instance and adds its first reference
|
|
200
|
-
* @param id
|
|
201
|
-
* @param itemInstance
|
|
202
|
-
* @param referenceId
|
|
203
|
-
* @param isPrivate a private reference of an item is owned by exactly a single owner and cannot be shared.
|
|
204
|
-
* @private
|
|
205
|
-
*/
|
|
206
|
-
_setItemInstance(id, itemInstance, referenceId, isPrivate = false) {
|
|
207
|
-
let entry = this.itemsMap.get(id);
|
|
208
|
-
if (entry) {
|
|
209
|
-
if (!isPrivate) {
|
|
210
|
-
if (referenceId)
|
|
211
|
-
entry.references.set(referenceId, true);
|
|
212
|
-
if (entry.itemInstance) {
|
|
213
|
-
console.error("Setting item instance reference although one is set already!", id);
|
|
214
|
-
}
|
|
215
|
-
entry.itemInstance = itemInstance;
|
|
216
|
-
}
|
|
217
|
-
else {
|
|
218
|
-
if (entry.itemPrivateInstances.has(referenceId)) {
|
|
219
|
-
console.error("For this reference ID we already have an item instance. Cannot have two!");
|
|
220
|
-
}
|
|
221
|
-
entry.itemPrivateInstances.set(referenceId, itemInstance);
|
|
222
|
-
}
|
|
223
|
-
// In case the item was a composition, we need to update the editor output options.
|
|
224
|
-
if (itemInstance instanceof CompositionItem)
|
|
225
|
-
this.engine.renderer.updateEditorOutputOptions();
|
|
226
|
-
this.engine.eventBus.$emit('loadingManager:updated');
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
/**
|
|
230
|
-
* Unload a resource. If it has more references, only the reference is removed, otherwise it is
|
|
231
|
-
* destroyed for everyone
|
|
232
|
-
* @param referenceId
|
|
233
|
-
* @param itemInstance
|
|
234
|
-
*/
|
|
235
|
-
unload(referenceId, itemInstance) {
|
|
236
|
-
tools.assert(itemInstance, "LoadingManager: Item instance not passed to method.");
|
|
237
|
-
tools.assert(typeof referenceId === 'string' && referenceId !== "", "LoadingManager: Cannot unload a resource from loading manager without a valid reference ID");
|
|
238
|
-
const id = itemInstance.getId();
|
|
239
|
-
let entry = this.itemsMap.get(id);
|
|
240
|
-
if (!entry)
|
|
241
|
-
return;
|
|
242
|
-
if (entry.references.has(referenceId)) {
|
|
243
|
-
entry.references.delete(referenceId);
|
|
244
|
-
}
|
|
245
|
-
else if (entry.itemPrivateInstances.has(referenceId)) {
|
|
246
|
-
const itemInstance = entry.itemPrivateInstances.get(referenceId);
|
|
247
|
-
try {
|
|
248
|
-
const p = itemInstance.destroy(false, true);
|
|
249
|
-
if (p && p.then) {
|
|
250
|
-
p.catch((err) => {
|
|
251
|
-
console.error(`LoadingManager: Error while destroying private item instance of ${id}`, err);
|
|
252
|
-
});
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
catch (err) {
|
|
256
|
-
console.error(`LoadingManager: Error while destroying private item instance of ${id}`, err);
|
|
257
|
-
}
|
|
258
|
-
entry.itemPrivateInstances.delete(referenceId);
|
|
259
|
-
}
|
|
260
|
-
else {
|
|
261
|
-
console.warn(`LoadingManager: Object with ID ${referenceId} tried to remove reference from item ${id} but does not have one.`);
|
|
262
|
-
}
|
|
263
|
-
if (!entry.references.size && !entry.itemPrivateInstances.size) {
|
|
264
|
-
entry.unusedSince = new Date();
|
|
265
|
-
}
|
|
266
|
-
this.engine.eventBus.$emit('loadingManager:updated');
|
|
267
|
-
}
|
|
268
|
-
typeNameToType(name) {
|
|
269
|
-
switch (name) {
|
|
270
|
-
case "Texture": return ImageItem;
|
|
271
|
-
case "Material": return MaterialItem;
|
|
272
|
-
case "CanvasTexture": return CanvasTextureItem;
|
|
273
|
-
case "Mesh": return MeshItem;
|
|
274
|
-
default:
|
|
275
|
-
throw new Error("Item type not known: " + name);
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
async create(referenceId, typeName, attributes = {}) {
|
|
279
|
-
attributes = attributes || {};
|
|
280
|
-
const ItemType = this.typeNameToType(typeName);
|
|
281
|
-
const item = {
|
|
282
|
-
_id: tools.createGeneratedItemId(),
|
|
283
|
-
name: `Generated ${typeName}`,
|
|
284
|
-
type: typeName,
|
|
285
|
-
attributes: attributes,
|
|
286
|
-
links: [],
|
|
287
|
-
fields: [],
|
|
288
|
-
fieldInstances: [],
|
|
289
|
-
userFieldInstances: []
|
|
290
|
-
};
|
|
291
|
-
return this.load(referenceId, item, ItemType, null, attributes);
|
|
292
|
-
}
|
|
293
|
-
get(id, referenceId) {
|
|
294
|
-
return this._getItemInstance(id, referenceId);
|
|
295
|
-
}
|
|
296
|
-
/**
|
|
297
|
-
* This function returns an item instance by item ID but will not add a new reference to it.
|
|
298
|
-
* This means that this item reference could become invalid at any time without notice and should
|
|
299
|
-
* only be used to retrieve an item for immediate use and then toss the reference as it might not
|
|
300
|
-
* survive long.
|
|
301
|
-
* @param itemId
|
|
302
|
-
* @returns {null|*|null}
|
|
303
|
-
*/
|
|
304
|
-
getWeakItemInstance(itemId) {
|
|
305
|
-
let entry = this.itemsMap.get(itemId);
|
|
306
|
-
if (!entry)
|
|
307
|
-
return null;
|
|
308
|
-
return entry.itemInstance;
|
|
309
|
-
}
|
|
310
|
-
async load(referenceId, item, ItemType, options, attributes) {
|
|
311
|
-
options = options || {};
|
|
312
|
-
// in case the item is a package, use its contents, not the item itself
|
|
313
|
-
if (item.type === "Package") {
|
|
314
|
-
item = item.packageContent;
|
|
315
|
-
}
|
|
316
|
-
// If the item should be recreated, don't return an already existing instance.
|
|
317
|
-
if (!options.recreate) {
|
|
318
|
-
const instance = this._getItemInstance(item._id, referenceId);
|
|
319
|
-
// Because add the item instance is set before creating the item,
|
|
320
|
-
// we need to also check if the item has already
|
|
321
|
-
// been created before returning its instance.
|
|
322
|
-
if (instance && instance.state !== ItemState.None) {
|
|
323
|
-
if (options.waitUntilFinished && instance.state !== ItemState.Finished) {
|
|
324
|
-
await this._waitFor(instance, item._id);
|
|
325
|
-
}
|
|
326
|
-
return instance;
|
|
327
|
-
}
|
|
328
|
-
}
|
|
329
|
-
else {
|
|
330
|
-
// We want the item instance recreated. But for that to work and to be a true
|
|
331
|
-
// independant object of its own, the item model below has to be cloned, otherwise
|
|
332
|
-
// both will work on the same fields, blocks, etc.
|
|
333
|
-
item = this.engine.itemRepo.createNewItemInstance(item._id);
|
|
334
|
-
}
|
|
335
|
-
// add the item to the maps
|
|
336
|
-
this.addItem(item);
|
|
337
|
-
// create the new item instance
|
|
338
|
-
let itemObject;
|
|
339
|
-
if (Array.isArray(ItemType)) {
|
|
340
|
-
for (const Type of ItemType) {
|
|
341
|
-
if (item.type === Type.name) {
|
|
342
|
-
itemObject = new Type.type(item, this.engine, this.renderer, options.lodMode);
|
|
343
|
-
}
|
|
344
|
-
}
|
|
345
|
-
if (!itemObject)
|
|
346
|
-
throw "Fitting item type not found!";
|
|
347
|
-
}
|
|
348
|
-
else {
|
|
349
|
-
// @ts-ignore
|
|
350
|
-
itemObject = new ItemType(item, this.engine, this.renderer, options.lodMode);
|
|
351
|
-
}
|
|
352
|
-
// make sure it is filled with all required field instances and make sure the default are set if something is missing
|
|
353
|
-
itemObject.setFieldInstanceDefaults();
|
|
354
|
-
if (attributes) {
|
|
355
|
-
itemObject.setFieldAndLinkValues(attributes);
|
|
356
|
-
}
|
|
357
|
-
// store the item instance
|
|
358
|
-
const isPrivate = options.recreate; // if we force recreate the item, this is now a privately owned instance.
|
|
359
|
-
this._setItemInstance(item._id, itemObject, referenceId, isPrivate);
|
|
360
|
-
// Create the item and time it. It should not take too long, anything expensive has to be done
|
|
361
|
-
// in load() not in create() so execution is not blocked unnecessarily
|
|
362
|
-
const startTime = Date.now();
|
|
363
|
-
const instance = await itemObject.create(options);
|
|
364
|
-
const endTime = Date.now();
|
|
365
|
-
const duration = Math.floor(endTime - startTime);
|
|
366
|
-
if (this.debugMode) {
|
|
367
|
-
if (duration > MAX_ACCEPTABLE_CREATE_TIME_MS) {
|
|
368
|
-
console.warn(`Creating ${itemObject.getType()} ${itemObject.getName()} took too long: ${duration}ms`);
|
|
369
|
-
}
|
|
370
|
-
else {
|
|
371
|
-
console.log(`Creating ${itemObject.getType()} ${itemObject.getName()} took: ${duration}ms`);
|
|
372
|
-
}
|
|
373
|
-
}
|
|
374
|
-
// Now load the item (if needed) asynchronously, we do not want to wait for it except in the case below
|
|
375
|
-
itemObject.load(options).catch(function (error) {
|
|
376
|
-
console.error(error);
|
|
377
|
-
console.error(`Error loading ${ItemType.constructor.name} ${item._id}`);
|
|
378
|
-
});
|
|
379
|
-
if (options.waitUntilFinished) {
|
|
380
|
-
// When the waitUntilFinished option is set, we additionally wait
|
|
381
|
-
// until the items state changes to Finished before returning.
|
|
382
|
-
await this._waitFor(instance, item._id);
|
|
383
|
-
}
|
|
384
|
-
return instance;
|
|
385
|
-
}
|
|
386
|
-
/**
|
|
387
|
-
* Wait for the instance to be finished loading.
|
|
388
|
-
* @param instance Item instance
|
|
389
|
-
* @param itemId Item ID
|
|
390
|
-
* @return {Promise<void>}
|
|
391
|
-
* @private
|
|
392
|
-
*/
|
|
393
|
-
async _waitFor(instance, itemId) {
|
|
394
|
-
if (instance.state === ItemState.Finished)
|
|
395
|
-
return;
|
|
396
|
-
const waitingPromises = this.waitForStateMap.get(itemId) || [];
|
|
397
|
-
const promise = new Promise((resolve) => waitingPromises.push(resolve));
|
|
398
|
-
// Add this promise to the list of promises that should be resolved
|
|
399
|
-
// when the item is finished.
|
|
400
|
-
this.waitForStateMap.set(itemId, waitingPromises);
|
|
401
|
-
await promise;
|
|
402
|
-
}
|
|
403
|
-
/**
|
|
404
|
-
* Load a texture. If the texture is an environment map, enable the param. the noCache parameter will cause
|
|
405
|
-
* the texture to be recreated in any case and not used from the resources and also loading manager will
|
|
406
|
-
* not store the resulting item. This should only be used if the intention is to modify the texture after loading
|
|
407
|
-
* because then it should be treated separately and not be reused.
|
|
408
|
-
* @param referenceId the reference id of the item that wants to load this
|
|
409
|
-
* @param item
|
|
410
|
-
* @param options
|
|
411
|
-
* @returns {Promise<ImageItem|*>}
|
|
412
|
-
*/
|
|
413
|
-
async loadTexture(referenceId, item, options) {
|
|
414
|
-
//@ts-ignore
|
|
415
|
-
return this.load(referenceId, item, ImageItem, options);
|
|
416
|
-
}
|
|
417
|
-
/**
|
|
418
|
-
* Load a texture or composition.
|
|
419
|
-
* @param referenceId
|
|
420
|
-
* @param item
|
|
421
|
-
* @param options
|
|
422
|
-
* @return {Promise<*>}
|
|
423
|
-
*/
|
|
424
|
-
async loadTextureOrComposition(referenceId, item, options = {}) {
|
|
425
|
-
options.renderToTexture = true;
|
|
426
|
-
const loadableTypes = [
|
|
427
|
-
{ name: "Image", type: ImageItem },
|
|
428
|
-
{ name: "Composition", type: CompositionItem }
|
|
429
|
-
];
|
|
430
|
-
//@ts-ignore
|
|
431
|
-
return this.load(referenceId, item, loadableTypes, options);
|
|
432
|
-
}
|
|
433
|
-
/**
|
|
434
|
-
* Load a texture, composition or video.
|
|
435
|
-
* @param referenceId
|
|
436
|
-
* @param item
|
|
437
|
-
* @param options
|
|
438
|
-
* @return {Promise<*>}
|
|
439
|
-
*/
|
|
440
|
-
async loadTextureCompositionOrVideo(referenceId, item, options = {}) {
|
|
441
|
-
options.renderToTexture = true;
|
|
442
|
-
const loadableTypes = [
|
|
443
|
-
{ name: "Image", type: ImageItem },
|
|
444
|
-
{ name: "Composition", type: CompositionItem },
|
|
445
|
-
{ name: "Video", type: VideoItem }
|
|
446
|
-
];
|
|
447
|
-
//@ts-ignore
|
|
448
|
-
return this.load(referenceId, item, loadableTypes, options);
|
|
449
|
-
}
|
|
450
|
-
/**
|
|
451
|
-
* Load a shader and store it in the loading manager
|
|
452
|
-
* @param referenceId the reference id of the item that wants to load this
|
|
453
|
-
* @param item
|
|
454
|
-
* @returns {Promise<Backgroundshader|*>}
|
|
455
|
-
*/
|
|
456
|
-
async loadBackgroundShader(referenceId, item, options = {}) {
|
|
457
|
-
//@ts-ignore
|
|
458
|
-
return this.load(referenceId, item, BackgroundShaderItem, options);
|
|
459
|
-
}
|
|
460
|
-
/**
|
|
461
|
-
* Load a shader and store it in the loading manager
|
|
462
|
-
* @param referenceId the reference id of the item that wants to load this
|
|
463
|
-
* @param item
|
|
464
|
-
* @returns {Promise<Backgroundshader|*>}
|
|
465
|
-
*/
|
|
466
|
-
async loadPixelShader(referenceId, item, options = {}) {
|
|
467
|
-
//@ts-ignore
|
|
468
|
-
return this.load(referenceId, item, PixelShaderItem, options);
|
|
469
|
-
}
|
|
470
|
-
/**
|
|
471
|
-
* Load a shader and store it in the loading manager
|
|
472
|
-
* @param referenceId the reference id of the item that wants to load this
|
|
473
|
-
* @param item
|
|
474
|
-
* @returns {Promise<Backgroundshader|*>}
|
|
475
|
-
*/
|
|
476
|
-
async loadVertexShader(referenceId, item, options = {}) {
|
|
477
|
-
//@ts-ignore
|
|
478
|
-
return this.load(referenceId, item, VertexShaderItem, options);
|
|
479
|
-
}
|
|
480
|
-
/**
|
|
481
|
-
* Load a composition item and store it in the loading manager
|
|
482
|
-
* @param referenceId the reference id of the item that wants to load this
|
|
483
|
-
* @param item
|
|
484
|
-
* @returns {Promise<PostFX|*>}
|
|
485
|
-
*/
|
|
486
|
-
async loadComposition(referenceId, item, options = {}) {
|
|
487
|
-
//@ts-ignore
|
|
488
|
-
return this.load(referenceId, item, CompositionItem, options);
|
|
489
|
-
}
|
|
490
|
-
/**
|
|
491
|
-
* Load a material and store it in the loading manager
|
|
492
|
-
* @param referenceId the reference id of the item that wants to load this
|
|
493
|
-
* @param item
|
|
494
|
-
* @returns {Promise<Material|*>}
|
|
495
|
-
*/
|
|
496
|
-
async loadMaterial(referenceId, item, options = {}) {
|
|
497
|
-
//@ts-ignore
|
|
498
|
-
return this.load(referenceId, item, MaterialItem, options);
|
|
499
|
-
}
|
|
500
|
-
/**
|
|
501
|
-
* Load a material collection and store it in the loading manager
|
|
502
|
-
* @param referenceId the reference id of the item that wants to load this
|
|
503
|
-
* @param item
|
|
504
|
-
* @returns {Promise<Material|*>}
|
|
505
|
-
*/
|
|
506
|
-
async loadMaterialCollection(referenceId, item, options = {}) {
|
|
507
|
-
//@ts-ignore
|
|
508
|
-
return this.load(referenceId, item, MaterialCollectionItem, options);
|
|
509
|
-
}
|
|
510
|
-
/**
|
|
511
|
-
* Load a mesh and store it in the loading manager
|
|
512
|
-
* @param referenceId the reference id of the item that wants to load this
|
|
513
|
-
* @param item
|
|
514
|
-
* @param options
|
|
515
|
-
* @returns {Promise<MeshItem|*>}
|
|
516
|
-
*/
|
|
517
|
-
async loadMesh(referenceId, item, options = {}) {
|
|
518
|
-
//@ts-ignore
|
|
519
|
-
return this.load(referenceId, item, MeshItem, options);
|
|
520
|
-
}
|
|
521
|
-
;
|
|
522
|
-
/**
|
|
523
|
-
* Load a mesh collection and store it in the loading manager
|
|
524
|
-
* @param referenceId
|
|
525
|
-
* @param item
|
|
526
|
-
* @param options
|
|
527
|
-
* @returns {Promise<void>}
|
|
528
|
-
*/
|
|
529
|
-
async loadMeshCollection(referenceId, item, options = {}) {
|
|
530
|
-
//@ts-ignore
|
|
531
|
-
return this.load(referenceId, item, MeshCollectionItem, options);
|
|
532
|
-
}
|
|
533
|
-
/**
|
|
534
|
-
* Load a gridmap and store it in the loading manager
|
|
535
|
-
* @param referenceId the reference id of the item that wants to load this
|
|
536
|
-
* @param item
|
|
537
|
-
* @param options
|
|
538
|
-
* @returns {Promise<MeshItem|*>}
|
|
539
|
-
*/
|
|
540
|
-
async loadGridMap(referenceId, item, options = {}) {
|
|
541
|
-
//@ts-ignore
|
|
542
|
-
return this.load(referenceId, item, GridMapItem, options);
|
|
543
|
-
}
|
|
544
|
-
;
|
|
545
|
-
/**
|
|
546
|
-
* Load a gaussian splats item and store it in the loading manager
|
|
547
|
-
* @param referenceId the reference id of the item that wants to load this
|
|
548
|
-
* @param item
|
|
549
|
-
* @return {Promise<void>}
|
|
550
|
-
*/
|
|
551
|
-
async loadGaussianSplats(referenceId, item, options = {}) {
|
|
552
|
-
//@ts-ignore
|
|
553
|
-
return this.load(referenceId, item, GaussianSplatsItem, options);
|
|
554
|
-
}
|
|
555
|
-
/**
|
|
556
|
-
* Load a Font and store it in the loading manager
|
|
557
|
-
* @param referenceId the reference id of the item that wants to load this
|
|
558
|
-
* @param item
|
|
559
|
-
* @returns {Promise<FontItem|*>}
|
|
560
|
-
*/
|
|
561
|
-
async loadFont(referenceId, item, options = {}) {
|
|
562
|
-
//@ts-ignore
|
|
563
|
-
return this.load(referenceId, item, FontItem, options);
|
|
564
|
-
}
|
|
565
|
-
;
|
|
566
|
-
/**
|
|
567
|
-
* Load a Font and store it in the loading manager
|
|
568
|
-
* @param referenceId the reference id of the item that wants to load this
|
|
569
|
-
* @param item
|
|
570
|
-
* @returns {Promise<FontItem|*>}
|
|
571
|
-
*/
|
|
572
|
-
async loadParticles(referenceId, item, options = {}) {
|
|
573
|
-
//@ts-ignore
|
|
574
|
-
return this.load(referenceId, item, ParticlesItem, options);
|
|
575
|
-
}
|
|
576
|
-
;
|
|
577
|
-
/**
|
|
578
|
-
* Load a point cloud and store it in the loading manager
|
|
579
|
-
* @param referenceId the reference id of the item that wants to load this
|
|
580
|
-
* @param item
|
|
581
|
-
* @param options
|
|
582
|
-
* @returns {Promise<PointsItem|*>}
|
|
583
|
-
*/
|
|
584
|
-
async loadPoints(referenceId, item, options = {}) {
|
|
585
|
-
//@ts-ignore
|
|
586
|
-
return this.load(referenceId, item, PointsItem, options);
|
|
587
|
-
}
|
|
588
|
-
;
|
|
589
|
-
/**
|
|
590
|
-
* Load a scene and store it in the loading manager
|
|
591
|
-
* @param referenceId the reference id of the item that wants to load this
|
|
592
|
-
* @param item
|
|
593
|
-
* @param options
|
|
594
|
-
* @returns {Promise<SceneItem|*>}
|
|
595
|
-
*/
|
|
596
|
-
async loadScene(referenceId, item, options = {}) {
|
|
597
|
-
//@ts-ignore
|
|
598
|
-
return this.load(referenceId, item, SceneItem, options);
|
|
599
|
-
}
|
|
600
|
-
;
|
|
601
|
-
/**
|
|
602
|
-
* Load a prefab and store it in the loading manager
|
|
603
|
-
* @param referenceId the reference id of the item that wants to load this
|
|
604
|
-
* @param item
|
|
605
|
-
* @param options
|
|
606
|
-
* @returns {Promise<SceneItem|*>}
|
|
607
|
-
*/
|
|
608
|
-
async loadPrefab(referenceId, item, options = {}) {
|
|
609
|
-
//@ts-ignore
|
|
610
|
-
return this.load(referenceId, item, PrefabItem, options);
|
|
611
|
-
}
|
|
612
|
-
;
|
|
613
|
-
/**
|
|
614
|
-
* Load a scene or a prefab
|
|
615
|
-
* @param referenceId
|
|
616
|
-
* @param item
|
|
617
|
-
* @param options
|
|
618
|
-
* @return {Promise<*>}
|
|
619
|
-
*/
|
|
620
|
-
async loadSceneOrPrefab(referenceId, item, options = {}) {
|
|
621
|
-
const loadableTypes = [
|
|
622
|
-
{ name: "Prefab", type: PrefabItem },
|
|
623
|
-
{ name: "Scene", type: SceneItem }
|
|
624
|
-
];
|
|
625
|
-
//@ts-ignore
|
|
626
|
-
return this.load(referenceId, item, loadableTypes, options);
|
|
627
|
-
}
|
|
628
|
-
/**
|
|
629
|
-
* Load a project and store it in the loading manager
|
|
630
|
-
* @param referenceId the reference id of the item that wants to load this
|
|
631
|
-
* @param item
|
|
632
|
-
* @param options
|
|
633
|
-
* @returns {Promise<SceneItem|*>}
|
|
634
|
-
*/
|
|
635
|
-
async loadProject(referenceId, item, options = {}) {
|
|
636
|
-
//@ts-ignore
|
|
637
|
-
return this.load(referenceId, item, ProjectItem, options);
|
|
638
|
-
}
|
|
639
|
-
;
|
|
640
|
-
/**
|
|
641
|
-
* Load an audio file and store it in the loading manager
|
|
642
|
-
* @param referenceId
|
|
643
|
-
* @param item
|
|
644
|
-
* @returns {Promise<void>}
|
|
645
|
-
*/
|
|
646
|
-
async loadAudio(referenceId, item, options = {}) {
|
|
647
|
-
//@ts-ignore
|
|
648
|
-
return this.load(referenceId, item, AudioItem, options);
|
|
649
|
-
}
|
|
650
|
-
/**
|
|
651
|
-
* Load an audio collection and store it in the loading manager
|
|
652
|
-
* @param referenceId
|
|
653
|
-
* @param item
|
|
654
|
-
* @returns {Promise<void>}
|
|
655
|
-
*/
|
|
656
|
-
async loadAudioCollection(referenceId, item, options = {}) {
|
|
657
|
-
//@ts-ignore
|
|
658
|
-
return this.load(referenceId, item, AudioCollectionItem, options);
|
|
659
|
-
}
|
|
660
|
-
/**
|
|
661
|
-
* Load a script and store it in the loading manager
|
|
662
|
-
* @param referenceId
|
|
663
|
-
* @param item
|
|
664
|
-
* @return {Promise<void>}
|
|
665
|
-
*/
|
|
666
|
-
async loadScript(referenceId, item, options = {}) {
|
|
667
|
-
//@ts-ignore
|
|
668
|
-
return this.load(referenceId, item, ScriptItem, options);
|
|
669
|
-
}
|
|
670
|
-
/**
|
|
671
|
-
* Load a variable set and store it in the loading manager
|
|
672
|
-
* @param referenceId the reference id of the item that wants to load this
|
|
673
|
-
* @param item
|
|
674
|
-
* @returns {Promise<SceneItem|*>}
|
|
675
|
-
*/
|
|
676
|
-
async loadVariableSet(referenceId, item, options = {}) {
|
|
677
|
-
//@ts-ignore
|
|
678
|
-
return this.load(referenceId, item, VariableSetItem, options);
|
|
679
|
-
}
|
|
680
|
-
;
|
|
681
|
-
/**
|
|
682
|
-
* Load a package and store it in the loading manager. Returns the created scenegraph with the package at the root.
|
|
683
|
-
* @param referenceId the reference id of the item that wants to load this
|
|
684
|
-
* @param packageItem
|
|
685
|
-
* @returns {Promise<SceneGraph>}
|
|
686
|
-
*/
|
|
687
|
-
/*async loadPackage(referenceId: string, packageItem: PreparedItem) {
|
|
688
|
-
let item = packageItem.packageContent!;
|
|
689
|
-
|
|
690
|
-
const instance = this._getItemInstance(packageItem._id, referenceId);
|
|
691
|
-
if (instance)
|
|
692
|
-
return instance;
|
|
693
|
-
|
|
694
|
-
this.addItem(item);
|
|
695
|
-
|
|
696
|
-
if (packageItem.packageType === "Scene") {
|
|
697
|
-
// Create a new scene from the package and return its scenegraph.
|
|
698
|
-
const scene = new Scene(item, this.engine, this.renderer);
|
|
699
|
-
this._setItemInstance(item._id, scene, referenceId);
|
|
700
|
-
const s = await scene.create(false);
|
|
701
|
-
return s.getSceneGraph();
|
|
702
|
-
} else if (packageItem.packageType === "Mesh") {
|
|
703
|
-
// Create a new scenegraph and a mesh item.
|
|
704
|
-
await this.engine.createSceneGraph(item);
|
|
705
|
-
const mesh = new Mesh(item, this.engine, this.renderer);
|
|
706
|
-
this._setItemInstance(item._id, mesh, referenceId);
|
|
707
|
-
|
|
708
|
-
// Add the mesh to the scenegraph.
|
|
709
|
-
const meshItem = await mesh.create();
|
|
710
|
-
this.engine.scene.add(meshItem.getObject());
|
|
711
|
-
|
|
712
|
-
return this.engine.sceneGraph;
|
|
713
|
-
} else {
|
|
714
|
-
throw new Error("Unsupported package type.");
|
|
715
|
-
}
|
|
716
|
-
}*/
|
|
717
|
-
setGpuRamQuota(value) {
|
|
718
|
-
this.gpuRamQuota = value;
|
|
719
|
-
}
|
|
720
|
-
done() {
|
|
721
|
-
this.active = false;
|
|
722
|
-
this.printReport();
|
|
723
|
-
}
|
|
724
|
-
isActive() {
|
|
725
|
-
return this.active;
|
|
726
|
-
}
|
|
727
|
-
reset() {
|
|
728
|
-
this.itemsToLoad = [];
|
|
729
|
-
this.itemsMap = new Map();
|
|
730
|
-
this.itemsByTypeMap = new Map();
|
|
731
|
-
this.itemsTypeMap = new Map();
|
|
732
|
-
this.startTime = new Date();
|
|
733
|
-
}
|
|
734
|
-
async play() {
|
|
735
|
-
const promises = [];
|
|
736
|
-
for (const entry of this.itemsMap.values()) {
|
|
737
|
-
if (entry.itemInstance) {
|
|
738
|
-
promises.push(entry.itemInstance.play());
|
|
739
|
-
}
|
|
740
|
-
}
|
|
741
|
-
await Promise.all(promises).catch(function (err) {
|
|
742
|
-
console.error(err);
|
|
743
|
-
});
|
|
744
|
-
}
|
|
745
|
-
async stop() {
|
|
746
|
-
const promises = [];
|
|
747
|
-
for (const entry of this.itemsMap.values()) {
|
|
748
|
-
if (entry.itemInstance) {
|
|
749
|
-
promises.push(entry.itemInstance.stop());
|
|
750
|
-
}
|
|
751
|
-
}
|
|
752
|
-
await Promise.all(promises).catch(function (err) {
|
|
753
|
-
console.error(err);
|
|
754
|
-
});
|
|
755
|
-
}
|
|
756
|
-
getItemInstance(itemId, itemType) {
|
|
757
|
-
const entry = this.itemsMap.get(itemId);
|
|
758
|
-
if (!entry)
|
|
759
|
-
return null;
|
|
760
|
-
if (itemType !== undefined) {
|
|
761
|
-
if (entry.item.type !== itemType)
|
|
762
|
-
return null;
|
|
763
|
-
}
|
|
764
|
-
return entry.itemInstance;
|
|
765
|
-
}
|
|
766
|
-
getAllItemInstances() {
|
|
767
|
-
const arr = [];
|
|
768
|
-
for (const entry of this.itemsMap.values()) {
|
|
769
|
-
if (entry.itemInstance)
|
|
770
|
-
arr.push(entry.itemInstance);
|
|
771
|
-
}
|
|
772
|
-
return arr;
|
|
773
|
-
}
|
|
774
|
-
getItemsOfType(type) {
|
|
775
|
-
const map = this._getItemMapForType(type);
|
|
776
|
-
return Array.from(map.values());
|
|
777
|
-
}
|
|
778
|
-
getItemInstancesOfType(type) {
|
|
779
|
-
const map = this._getItemMapForType(type);
|
|
780
|
-
const arr = [];
|
|
781
|
-
for (const entry of map.values()) {
|
|
782
|
-
if (entry.itemInstance)
|
|
783
|
-
arr.push(entry.itemInstance);
|
|
784
|
-
}
|
|
785
|
-
return arr;
|
|
786
|
-
}
|
|
787
|
-
getGpuRamQuotaLeft() {
|
|
788
|
-
return this.gpuRamQuota - this.getTotalGpuRamUsage();
|
|
789
|
-
}
|
|
790
|
-
getSecondsToReady() {
|
|
791
|
-
return this.secondsToReady;
|
|
792
|
-
}
|
|
793
|
-
getSecondsToFinished() {
|
|
794
|
-
return this.secondsToFinished;
|
|
795
|
-
}
|
|
796
|
-
getProgressPercent() {
|
|
797
|
-
let total = 0;
|
|
798
|
-
for (const entry of this.itemsToLoad) {
|
|
799
|
-
total += entry.progressPercent;
|
|
800
|
-
}
|
|
801
|
-
return total / this.itemsToLoad.length;
|
|
802
|
-
}
|
|
803
|
-
getProgressBytes() {
|
|
804
|
-
let total = 0;
|
|
805
|
-
let loaded = 0;
|
|
806
|
-
for (const entry of this.itemsToLoad) {
|
|
807
|
-
total += entry.bytesTotal;
|
|
808
|
-
loaded += entry.bytesLoaded;
|
|
809
|
-
}
|
|
810
|
-
//console.log(`[DOWNLOAD] manager: ${loaded} of ${total}`);
|
|
811
|
-
return {
|
|
812
|
-
total, loaded
|
|
813
|
-
};
|
|
814
|
-
}
|
|
815
|
-
initFromItem(item) {
|
|
816
|
-
this._initFromItem(item);
|
|
817
|
-
this.itemsToLoad.sort(function (a, b) {
|
|
818
|
-
return a.item.name.localeCompare(b.item.name);
|
|
819
|
-
});
|
|
820
|
-
this.run();
|
|
821
|
-
}
|
|
822
|
-
_initFromItem(item) {
|
|
823
|
-
this.addItem(item);
|
|
824
|
-
this._initFromFields(item.fieldInstances);
|
|
825
|
-
}
|
|
826
|
-
_initFromFields(fields) {
|
|
827
|
-
if (Array.isArray(fields)) {
|
|
828
|
-
for (const field of fields) {
|
|
829
|
-
if (field.type === "Link" && field.value && typeof field.value === 'object' && field.loadingManagerRule !== "ignore") {
|
|
830
|
-
this._initFromItem(field.value);
|
|
831
|
-
}
|
|
832
|
-
if (field.blocks && field.blocks.length) {
|
|
833
|
-
this._initFromBlocks(field.blocks);
|
|
834
|
-
}
|
|
835
|
-
}
|
|
836
|
-
}
|
|
837
|
-
}
|
|
838
|
-
_initFromBlocks(blocks) {
|
|
839
|
-
if (Array.isArray(blocks)) {
|
|
840
|
-
for (const block of blocks) {
|
|
841
|
-
if (block.fields && block.fields.length) {
|
|
842
|
-
this._initFromFields(block.fields);
|
|
843
|
-
}
|
|
844
|
-
if (block.blocks && block.blocks.length) {
|
|
845
|
-
this._initFromBlocks(block.blocks);
|
|
846
|
-
}
|
|
847
|
-
}
|
|
848
|
-
}
|
|
849
|
-
}
|
|
850
|
-
removeItem(id) {
|
|
851
|
-
if (!this.itemsMap.has(id)) {
|
|
852
|
-
console.warn(`LoadingManager: Tried to remove item ${id} but it is not in map.`);
|
|
853
|
-
return;
|
|
854
|
-
}
|
|
855
|
-
// Get the type of the item and remove that type from the list
|
|
856
|
-
const type = this.itemsTypeMap.get(id);
|
|
857
|
-
this.itemsTypeMap.delete(id);
|
|
858
|
-
// Get the item from the item type map and delete it
|
|
859
|
-
const arr = this._getItemMapForType(type);
|
|
860
|
-
arr.delete(id);
|
|
861
|
-
// Now delete from the main map and remove from the items to load
|
|
862
|
-
this.itemsMap.delete(id);
|
|
863
|
-
this.itemsToLoad.removeByFilterFunc(x => x.id === id);
|
|
864
|
-
}
|
|
865
|
-
addItem(item, alternateItemId) {
|
|
866
|
-
const id = alternateItemId || item._id;
|
|
867
|
-
if (this.itemsMap.has(id))
|
|
868
|
-
return;
|
|
869
|
-
const entry = {
|
|
870
|
-
id: id,
|
|
871
|
-
url: undefined,
|
|
872
|
-
objectUrl: undefined,
|
|
873
|
-
item: item,
|
|
874
|
-
itemInstance: undefined,
|
|
875
|
-
itemPrivateInstances: new Map(), // instances owned by a single reference, like prefabs or scenes.
|
|
876
|
-
progressPercent: 0,
|
|
877
|
-
bytesTotal: item.filesize || 0,
|
|
878
|
-
bytesLoaded: 0,
|
|
879
|
-
state: 0,
|
|
880
|
-
gpuRamUsage: 0,
|
|
881
|
-
projectedGpuRamUsage: 0,
|
|
882
|
-
readyForUse: false,
|
|
883
|
-
readyForLodIncrease: false,
|
|
884
|
-
references: new Map(),
|
|
885
|
-
unusedSince: undefined
|
|
886
|
-
};
|
|
887
|
-
this.itemsToLoad.push(entry);
|
|
888
|
-
this.itemsMap.set(id, entry);
|
|
889
|
-
this.itemsTypeMap.set(id, item.type);
|
|
890
|
-
const typeMap = this._getItemMapForType(item.type);
|
|
891
|
-
typeMap.set(id, entry);
|
|
892
|
-
}
|
|
893
|
-
_clearUnusedItemInstances() {
|
|
894
|
-
const entriesToClear = [];
|
|
895
|
-
const now = new Date();
|
|
896
|
-
for (const entry of this.itemsMap.values()) {
|
|
897
|
-
if (entry.unusedSince) {
|
|
898
|
-
const diff = now.valueOf() - entry.unusedSince.valueOf();
|
|
899
|
-
if (diff > this.deletionGracePeriodMs) {
|
|
900
|
-
entriesToClear.push(entry);
|
|
901
|
-
}
|
|
902
|
-
}
|
|
903
|
-
}
|
|
904
|
-
let refreshEditorOutputOptions = false;
|
|
905
|
-
for (const entry of entriesToClear) {
|
|
906
|
-
// In case the item was a composition, we need to update the editor output options.
|
|
907
|
-
if (entry.itemInstance instanceof CompositionItem)
|
|
908
|
-
refreshEditorOutputOptions = true;
|
|
909
|
-
if (entry.itemInstance) {
|
|
910
|
-
try {
|
|
911
|
-
const p = entry.itemInstance.destroy(false, true);
|
|
912
|
-
if (p && p.catch) {
|
|
913
|
-
p.catch((err) => {
|
|
914
|
-
console.error(`LoadingManager: Error while destroying item instance of ${entry.id}`, err);
|
|
915
|
-
});
|
|
916
|
-
}
|
|
917
|
-
}
|
|
918
|
-
catch (err) {
|
|
919
|
-
console.error(`LoadingManager: Error while destroying item instance of ${entry.id}`, err);
|
|
920
|
-
}
|
|
921
|
-
}
|
|
922
|
-
entry.itemInstance = undefined;
|
|
923
|
-
this.removeItem(entry.id);
|
|
924
|
-
}
|
|
925
|
-
if (refreshEditorOutputOptions)
|
|
926
|
-
this.engine.renderer.updateEditorOutputOptions();
|
|
927
|
-
if (entriesToClear.length)
|
|
928
|
-
this.engine.eventBus.$emit('loadingManager:updated');
|
|
929
|
-
}
|
|
930
|
-
_getItemMapForType(type) {
|
|
931
|
-
let map = this.itemsByTypeMap.get(type);
|
|
932
|
-
if (map)
|
|
933
|
-
return map;
|
|
934
|
-
map = new Map();
|
|
935
|
-
this.itemsByTypeMap.set(type, map);
|
|
936
|
-
return map;
|
|
937
|
-
}
|
|
938
|
-
discard(id) {
|
|
939
|
-
if (this.itemsMap.has(id)) {
|
|
940
|
-
this.itemsMap.delete(id);
|
|
941
|
-
for (let i = 0; i < this.itemsToLoad.length; i++) {
|
|
942
|
-
if (this.itemsToLoad[i].id === id) {
|
|
943
|
-
this.itemsToLoad.splice(i, 1);
|
|
944
|
-
return;
|
|
945
|
-
}
|
|
946
|
-
}
|
|
947
|
-
}
|
|
948
|
-
}
|
|
949
|
-
getItemCountToLoad() {
|
|
950
|
-
let count = 0;
|
|
951
|
-
for (const entry of this.itemsToLoad) {
|
|
952
|
-
if (entry.state !== LoadingState.DONE)
|
|
953
|
-
count++;
|
|
954
|
-
}
|
|
955
|
-
return count;
|
|
956
|
-
}
|
|
957
|
-
getIdByUrl(url) {
|
|
958
|
-
for (const entry of this.itemsToLoad) {
|
|
959
|
-
if (entry.url === url)
|
|
960
|
-
return entry.id;
|
|
961
|
-
}
|
|
962
|
-
return null;
|
|
963
|
-
}
|
|
964
|
-
getIdByObjectUrl(objectUrl) {
|
|
965
|
-
for (const entry of this.itemsToLoad) {
|
|
966
|
-
if (entry.objectUrl === objectUrl)
|
|
967
|
-
return entry.id;
|
|
968
|
-
}
|
|
969
|
-
return null;
|
|
970
|
-
}
|
|
971
|
-
setUrl(id, url) {
|
|
972
|
-
let entry = this.itemsMap.get(id);
|
|
973
|
-
if (entry) {
|
|
974
|
-
entry.url = url;
|
|
975
|
-
}
|
|
976
|
-
}
|
|
977
|
-
setObjectReady(id) {
|
|
978
|
-
let entry = this.itemsMap.get(id);
|
|
979
|
-
if (entry && entry.itemInstance) {
|
|
980
|
-
entry.readyForLodIncrease = entry.itemInstance.hasMoreLodLevels();
|
|
981
|
-
if (!entry.readyForLodIncrease)
|
|
982
|
-
entry.itemInstance.markFinished();
|
|
983
|
-
}
|
|
984
|
-
}
|
|
985
|
-
setObjectUrl(id, objectUrl) {
|
|
986
|
-
let entry = this.itemsMap.get(id);
|
|
987
|
-
if (entry) {
|
|
988
|
-
entry.objectUrl = objectUrl;
|
|
989
|
-
}
|
|
990
|
-
}
|
|
991
|
-
isAllReadyForUse() {
|
|
992
|
-
return this.secondsToReady !== undefined;
|
|
993
|
-
}
|
|
994
|
-
isAllFinishedForUse() {
|
|
995
|
-
return this.secondsToFinished !== undefined;
|
|
996
|
-
}
|
|
997
|
-
getGpuRamQuota() {
|
|
998
|
-
return this.gpuRamQuota;
|
|
999
|
-
}
|
|
1000
|
-
getTotalGpuRamUsage() {
|
|
1001
|
-
let sum = 0;
|
|
1002
|
-
for (const entry of this.itemsToLoad) {
|
|
1003
|
-
if (entry.projectedGpuRamUsage)
|
|
1004
|
-
sum += entry.projectedGpuRamUsage;
|
|
1005
|
-
else if (entry.gpuRamUsage)
|
|
1006
|
-
sum += entry.gpuRamUsage;
|
|
1007
|
-
}
|
|
1008
|
-
return sum;
|
|
1009
|
-
}
|
|
1010
|
-
getTotalFilesize() {
|
|
1011
|
-
let sum = 0;
|
|
1012
|
-
for (const entry of this.itemsToLoad) {
|
|
1013
|
-
sum += entry.item.filesize ? entry.item.filesize : 0;
|
|
1014
|
-
}
|
|
1015
|
-
return sum;
|
|
1016
|
-
}
|
|
1017
|
-
updateInfo(id) {
|
|
1018
|
-
let entry = this.itemsMap.get(id);
|
|
1019
|
-
if (entry && entry.itemInstance) {
|
|
1020
|
-
entry.gpuRamUsage = entry.itemInstance.getGpuMemUsage();
|
|
1021
|
-
entry.readyForUse = entry.itemInstance.isReadyForUse();
|
|
1022
|
-
if (entry.projectedGpuRamUsage < entry.gpuRamUsage)
|
|
1023
|
-
entry.projectedGpuRamUsage = entry.gpuRamUsage;
|
|
1024
|
-
}
|
|
1025
|
-
}
|
|
1026
|
-
setProgress(id, state, progress) {
|
|
1027
|
-
let entry = this.itemsMap.get(id);
|
|
1028
|
-
if (entry) {
|
|
1029
|
-
const stateChanged = entry.state !== state;
|
|
1030
|
-
let gpuMemUsage = 0;
|
|
1031
|
-
let isReadyForUse = true;
|
|
1032
|
-
let instances = [entry.itemInstance, ...entry.itemPrivateInstances.values()];
|
|
1033
|
-
for (const instance of instances) {
|
|
1034
|
-
if (instance) {
|
|
1035
|
-
gpuMemUsage += instance.getGpuMemUsage();
|
|
1036
|
-
if (!instance.isReadyForUse())
|
|
1037
|
-
isReadyForUse = false;
|
|
1038
|
-
}
|
|
1039
|
-
}
|
|
1040
|
-
entry.state = state;
|
|
1041
|
-
entry.gpuRamUsage = gpuMemUsage;
|
|
1042
|
-
entry.readyForUse = isReadyForUse;
|
|
1043
|
-
switch (state) {
|
|
1044
|
-
case LoadingState.NONE:
|
|
1045
|
-
entry.progressPercent = 0;
|
|
1046
|
-
break;
|
|
1047
|
-
case LoadingState.LOADING:
|
|
1048
|
-
entry.progressPercent = progress || 0;
|
|
1049
|
-
entry.bytesLoaded = entry.progressPercent / 100 * entry.bytesTotal;
|
|
1050
|
-
if (stateChanged)
|
|
1051
|
-
entry.startedLoading = new Date();
|
|
1052
|
-
break;
|
|
1053
|
-
case LoadingState.LOADED:
|
|
1054
|
-
entry.progressPercent = 100;
|
|
1055
|
-
entry.bytesLoaded = entry.bytesTotal;
|
|
1056
|
-
if (stateChanged) {
|
|
1057
|
-
entry.startedLoading = entry.startedLoading || new Date();
|
|
1058
|
-
entry.finishedLoading = new Date();
|
|
1059
|
-
entry.loadingTimeMs = entry.finishedLoading.valueOf() - entry.startedLoading.valueOf();
|
|
1060
|
-
}
|
|
1061
|
-
break;
|
|
1062
|
-
case LoadingState.IMPORTING:
|
|
1063
|
-
entry.progressPercent = 100;
|
|
1064
|
-
entry.bytesLoaded = entry.bytesTotal;
|
|
1065
|
-
if (stateChanged)
|
|
1066
|
-
entry.startedImporting = new Date();
|
|
1067
|
-
break;
|
|
1068
|
-
case LoadingState.DONE:
|
|
1069
|
-
entry.progressPercent = 100;
|
|
1070
|
-
entry.bytesLoaded = entry.bytesTotal;
|
|
1071
|
-
if (stateChanged) {
|
|
1072
|
-
entry.startedImporting = entry.startedImporting || new Date();
|
|
1073
|
-
entry.finishedImporting = new Date();
|
|
1074
|
-
entry.importTimeMs = entry.finishedImporting.valueOf() - entry.startedImporting.valueOf();
|
|
1075
|
-
}
|
|
1076
|
-
break;
|
|
1077
|
-
}
|
|
1078
|
-
const countRemaining = this.getItemCountToLoad();
|
|
1079
|
-
const stateString = this.getStateString(state);
|
|
1080
|
-
if (this.debugMode)
|
|
1081
|
-
console.log(entry.item.name + "(" + entry.item.type + "): " + stateString + " - Remaining: " + countRemaining);
|
|
1082
|
-
}
|
|
1083
|
-
else {
|
|
1084
|
-
console.error("Trying to set progress on unknown item!", id, state, progress);
|
|
1085
|
-
}
|
|
1086
|
-
}
|
|
1087
|
-
getStateString(state) {
|
|
1088
|
-
switch (state) {
|
|
1089
|
-
case LoadingState.NONE: return "NONE";
|
|
1090
|
-
case LoadingState.LOADING: return "LOADING";
|
|
1091
|
-
case LoadingState.LOADED: return "LOADED";
|
|
1092
|
-
case LoadingState.IMPORTING: return "IMPORTING";
|
|
1093
|
-
case LoadingState.DONE: return "DONE";
|
|
1094
|
-
}
|
|
1095
|
-
return `unknown(${state})`;
|
|
1096
|
-
}
|
|
1097
|
-
printReport() {
|
|
1098
|
-
this.endTime = new Date();
|
|
1099
|
-
this.totalTime = this.endTime.valueOf() - this.startTime.valueOf();
|
|
1100
|
-
const itemCountToLoad = this.getItemCountToLoad();
|
|
1101
|
-
console.log("Loading manager report:");
|
|
1102
|
-
console.log("------------------------------------");
|
|
1103
|
-
let loadedSize = 0;
|
|
1104
|
-
let accumulatedTime = 0;
|
|
1105
|
-
for (const entry of this.itemsToLoad) {
|
|
1106
|
-
const state = this.getStateString(entry.state);
|
|
1107
|
-
loadedSize += entry.item.filesize || 0;
|
|
1108
|
-
const time = (entry.loadingTimeMs || 0) + (entry.importTimeMs || 0);
|
|
1109
|
-
accumulatedTime += time;
|
|
1110
|
-
console.log(`${entry.item.name} (${entry.item.type}) of size ${entry.item.filesize}: ${state} (time: ${time}ms)`);
|
|
1111
|
-
}
|
|
1112
|
-
const mb = Math.floor(loadedSize * 100 / 1024 / 1024) / 100;
|
|
1113
|
-
console.log("------------------------------------");
|
|
1114
|
-
console.log("Items in list :" + this.itemsToLoad.length);
|
|
1115
|
-
console.log("Items remaining to load :" + itemCountToLoad);
|
|
1116
|
-
console.log("Total filesize :" + mb + " MiB");
|
|
1117
|
-
console.log("Accumulated time :" + accumulatedTime + " ms");
|
|
1118
|
-
console.log("Total time :" + this.totalTime + " ms");
|
|
1119
|
-
console.log("------------------------------------");
|
|
1120
|
-
}
|
|
1121
|
-
_handleRename({ id, newName }) {
|
|
1122
|
-
for (const entry of this.itemsToLoad) {
|
|
1123
|
-
if (entry.id === id) {
|
|
1124
|
-
entry.item.name = newName;
|
|
1125
|
-
this.engine.eventBus.$emit('loadingManager:updated');
|
|
1126
|
-
return;
|
|
1127
|
-
}
|
|
1128
|
-
}
|
|
1129
|
-
}
|
|
1130
|
-
_markAllReadyItemsAsFinished() {
|
|
1131
|
-
for (const entry of this.itemsToLoad) {
|
|
1132
|
-
if (entry.itemInstance && entry.readyForLodIncrease) {
|
|
1133
|
-
entry.readyForLodIncrease = false;
|
|
1134
|
-
entry.itemInstance.markFinished();
|
|
1135
|
-
}
|
|
1136
|
-
}
|
|
1137
|
-
}
|
|
1138
|
-
_run() {
|
|
1139
|
-
this._increaseLods();
|
|
1140
|
-
}
|
|
1141
|
-
_increaseLods() {
|
|
1142
|
-
// We will not increase any LOD levels unless all objects are at least loaded in their lowest LOD
|
|
1143
|
-
if (!this.readyTime)
|
|
1144
|
-
return;
|
|
1145
|
-
let gpuMemQuotaLeft = this.getGpuRamQuotaLeft();
|
|
1146
|
-
if (gpuMemQuotaLeft <= 0) {
|
|
1147
|
-
this._markAllReadyItemsAsFinished();
|
|
1148
|
-
return;
|
|
1149
|
-
}
|
|
1150
|
-
for (const entry of this.itemsToLoad) {
|
|
1151
|
-
if (entry.itemInstance && entry.readyForLodIncrease) {
|
|
1152
|
-
try {
|
|
1153
|
-
const memUsage = entry.itemInstance.getNextLodLevelGpuMemUsage();
|
|
1154
|
-
if (gpuMemQuotaLeft >= memUsage) {
|
|
1155
|
-
if (this.debugMode)
|
|
1156
|
-
console.log(`Increasing LOD of ${entry.item.name} to ${entry.itemInstance.activeLodLevel}`);
|
|
1157
|
-
gpuMemQuotaLeft -= memUsage;
|
|
1158
|
-
entry.projectedGpuRamUsage = memUsage;
|
|
1159
|
-
entry.readyForLodIncrease = false;
|
|
1160
|
-
entry.itemInstance.increaseLodLevel();
|
|
1161
|
-
}
|
|
1162
|
-
else {
|
|
1163
|
-
entry.readyForLodIncrease = false;
|
|
1164
|
-
entry.itemInstance.markFinished();
|
|
1165
|
-
}
|
|
1166
|
-
}
|
|
1167
|
-
catch (err) {
|
|
1168
|
-
console.error(err);
|
|
1169
|
-
}
|
|
1170
|
-
}
|
|
1171
|
-
}
|
|
1172
|
-
}
|
|
1173
|
-
_ready() {
|
|
1174
|
-
if (!this.readyTime) {
|
|
1175
|
-
this.readyTime = new Date();
|
|
1176
|
-
this.secondsToReady = (this.readyTime.valueOf() - this.startTime.valueOf()) / 1000;
|
|
1177
|
-
console.log("[TIMING] Seconds to ready: " + this.secondsToReady);
|
|
1178
|
-
this.engine.eventBus.$emit('loadingManager:readyForUse');
|
|
1179
|
-
}
|
|
1180
|
-
}
|
|
1181
|
-
_finished() {
|
|
1182
|
-
this._ready();
|
|
1183
|
-
if (!this.finishedTime) {
|
|
1184
|
-
if (!this.readyTime) {
|
|
1185
|
-
this.readyTime = new Date();
|
|
1186
|
-
this.secondsToReady = (this.readyTime.valueOf() - this.startTime.valueOf()) / 1000;
|
|
1187
|
-
}
|
|
1188
|
-
this.finishedTime = new Date();
|
|
1189
|
-
this.secondsToFinished = (this.finishedTime.valueOf() - this.startTime.valueOf()) / 1000;
|
|
1190
|
-
console.log("[TIMING] Seconds to finished: " + this.secondsToFinished);
|
|
1191
|
-
this.engine.eventBus.$emit('loadingManager:finishedForUse');
|
|
1192
|
-
}
|
|
1193
|
-
}
|
|
1194
|
-
}
|
|
1195
|
-
//# sourceMappingURL=LoadingManager.js.map
|