@directivegames/genesys.js 3.1.26 → 3.1.27

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.
@@ -6828,7 +6828,7 @@ void mainImage(const in vec4 inputColor, const in vec2 uv, out vec4 outputColor)
6828
6828
  });
6829
6829
  <\/script>
6830
6830
  </body>
6831
- </html>`}};var H6,Y6,Pl=class extends(Y6=Os,H6=bC,Y6){constructor(e){super();this.options=e;l(this,H6,!0);l(this,"name");l(this,"uuid",BC());l(this,"world",null);this.name=eB.generateName(this)}tick(e){}setWorld(e){this.world=e}getPathName(){return`${this.world.getPathName()}.${this.name}`}findPlayerStart(e){return this.world.getFirstActor(da)}generateDebugNode(){return{title:this.name,data:{uuid:this.uuid,...this.options}}}export(e,g){return{class:mg.getClassNameChecked(this),uuid:this.uuid,ctor:e.exportObject(this.options,g)}}serialize(e){e.dumpValue("$uuid",this.uuid),e.dumpProperties(this)}deserialize(e){this.uuid=e.loadValue("$uuid")??this.uuid,e.loadProperties(this)}doBeginPlay(){super.doBeginPlay()}doEndPlay(){super.doEndPlay()}};Pl=sA([dA("GameMode")],Pl);var x6,q6,Vo=class extends(q6=Os,x6=bC,q6){constructor(e){super();this.options=e;l(this,x6,!0);l(this,"postProcessManager",new hf);l(this,"uuid",BC());l(this,"name");l(this,"scene");l(this,"inputManager");l(this,"consoleManager");l(this,"timerSystem");l(this,"tweenManager");l(this,"uiManager");l(this,"gameMode");l(this,"pluginManager");l(this,"lastCameraWarningTime",0);l(this,"netWorld");l(this,"audioListener");l(this,"globalAudioManager");l(this,"globalParticleManager");l(this,"editorData",{});l(this,"isEditorWorld",!1);l(this,"sceneResources",null);l(this,"postProcessConfiguration",null);l(this,"actors",[]);l(this,"playerControllers",[]);l(this,"physicsEngine",null);l(this,"navigationServer",null);l(this,"manifold",null);l(this,"lightmapManager",null);l(this,"navigationMeshVisualization",null);l(this,"navigationServerCreated",!1);l(this,"physicsEngineCreated",!1);l(this,"manifoldCreated",!1);l(this,"lightmapManagerCreated",!1);l(this,"isTicking",!1);l(this,"actorsToRemove",[]);l(this,"hiddenInGameActors",new Set);l(this,"hiddenInGameSceneComponents",new Set);l(this,"isPaused",!1);l(this,"slomo",1);l(this,"gameTime",0);l(this,"overrideCamera",null);l(this,"skyboxComponent",null);l(this,"renderWindowSize",null);l(this,"nextTickFunctions",[]);l(this,"statsDisplay");l(this,"camera",null);l(this,"fallbackCamera");l(this,"onEditorActorAddToWorld");l(this,"onEditorActorRemoveFromWorld");this.netWorld=new Oo(this,e.gameId??"default"),this.name=eB.generateName(this),this.scene=new pi,this.scene.setWorld(this),this.scene.background=new vA(e.backgroundColor),this.actors=[],this.inputManager=new yu({rendererDomElement:e.rendererDomElement,gameContainer:e.gameContainer,world:new WeakRef(this),enableGamepad:e.enableGamepad}),this.timerSystem=new Su({world:this}),this.tweenManager=new K0(this),this.consoleManager=new fu,this.inputManager.addInputHandler(this.consoleManager),this.consoleManager.addCommandHandler(new Ba),this.statsDisplay=new Wu(e.gameContainer),this.uiManager=new uf({container:e.gameContainer}),this.inputManager.addInputHandler(this.uiManager),this.gameMode=e.gameMode??new Pl({}),this.gameMode.setWorld(this),this.audioListener=mC()?null:new wE,this.globalAudioManager=yf.getInstance(),this.globalAudioManager.setWorld(this),this.globalParticleManager=new $u,this.globalParticleManager.setTransient(!0),this.addActors(this.globalParticleManager),this.fallbackCamera=new Jt(75,1,.1,1e3),this.fallbackCamera.position.set(0,5,10),this.fallbackCamera.lookAt(0,0,0),this.pluginManager=new F0(new WeakRef(this))}export(e,g){return{class:mg.getClassNameChecked(this),uuid:this.uuid,ctor:e.exportObject(this.options,g),actors:this.actors.map(t=>e.exportObject(t,g)).filter(t=>!!t),resources:this.sceneResources??void 0,properties:{editorData:this.editorData,postProcessConfiguration:this.postProcessConfiguration}}}serialize(e){e.dumpValue("$uuid",this.uuid),e.dumpValue("actors",this.actors.filter(g=>!!g)),e.dumpValue("resources",this.sceneResources),e.dumpValue("editorData",this.editorData),e.dumpValue("postProcessConfiguration",this.postProcessConfiguration),e.dumpProperties(this)}deserialize(e){this.uuid=e.loadValue("$uuid")??this.uuid,this.sceneResources=e.loadValue("resources",this.sceneResources),this.editorData=e.loadValue("editorData",this.editorData),this.postProcessConfiguration=e.loadValue("postProcessConfiguration",this.postProcessConfiguration);let t=e.loadValue("actors").filter(C=>C&&!this.actors.includes(C));this.addActors(...t),e.loadProperties(this)}get gameContainer(){return this.options.gameContainer}get gameLoop(){return this.options.gameLoop?.deref()??null}getRenderWindowSize(){return this.renderWindowSize}setLightmapResources(e,g){this.sceneResources??={},this.sceneResources.lightmap={metadataPath:e,texturePath:g}}setNavMeshResource(e){this.sceneResources??={},this.sceneResources.navMesh={path:e}}clearLightmapResources(){this.sceneResources&&(this.sceneResources.lightmap=void 0)}clearNavMeshResource(){this.sceneResources&&(this.sceneResources.navMesh=void 0)}getSceneResources(){return this.sceneResources}getPostProcessConfiguration(){return this.postProcessConfiguration}setPostProcessConfiguration(e){this.postProcessConfiguration=e,e&&this.postProcessManager.setConfiguration(e)}updatePostProcessConfiguration(e){if(this.postProcessConfiguration){let g=[...this.postProcessConfiguration.effects];for(let t of e.effects){let C=g.findIndex(o=>o.type===t.type);C>=0?g[C]={...g[C],...t}:g.push(t)}this.postProcessConfiguration={effects:g}}else this.postProcessConfiguration=e;this.postProcessManager.updateConfiguration(e)}addActor(e){return this.addActors(e)}addActors(...e){return Hg(!this.isPlayEnded())?(e.forEach(g=>{if(Hg(!this.actors.includes(g))){if(this.actors.push(g),g.setWorld(this),this.scene.add(g.rootComponent),this.isPlaying()&&g.beginPlay(),g instanceof Ni){if(this.playerControllers.length)throw new Error("Only one player controller is allowed in the world");this.playerControllers.push(g)}this.isEditorWorld&&(g.onEditorAddToWorld(),this.onEditorActorAddToWorld?.(g))}}),this):this}getPhysicsEngine(){return this.physicsEngine}getNavigationServer(){return this.navigationServer}async createNavigationMeshFromScene(){if(!this.navigationServerCreated)throw new Error("[Navigation Server] Navigation server not created");let e=this.getNavigationServer();if(!e){console.error("[Navigation Server] createNavigationMeshFromScene: Navigation server not available");return}let g=[],t=[];for(let s of this.actors)t.push(...s.getComponents(vt));if(t=t.filter(s=>s.getPhysicsOptions()?.motionType==="static"&&!s.options.excludeFromNavigation),t.length>0){await Promise.all(Object.values(Lg.getCachedModels()));for(let s of t)g.push(...s.getAllMeshes())}let C=[];for(let s of this.actors)C.push(...s.getComponents(ti));C=C.filter(s=>s.getPhysicsOptions()?.motionType==="static"&&!s.options.excludeFromNavigation);for(let s of C)g.push(s.getMesh());if(g.length===0){console.warn("[Navigation Server] No meshes found for navigation mesh generation");return}await e.createNavigationMeshFromMeshes(g)?console.log("[Navigation Server] Navigation mesh created successfully"):console.error("[Navigation Server] Failed to create navigation mesh")}async exportNavigationMesh(e){let g=this.getNavigationServer();return g?await g.exportNavigationMesh(e):(console.error("[World] exportNavigationMesh: Navigation server not available"),{success:!1})}async importNavigationMesh(e){let g=this.getNavigationServer();return g?await g.importNavigationMesh(e):(console.error("[World] importNavigationMesh: Navigation server not available"),!1)}async importNavigationMeshFromData(e){let g=this.getNavigationServer();return g?await g.importNavigationMeshFromData(e):(console.error("[World] importNavigationMeshFromData: Navigation server not available"),!1)}clearNavigationMesh(){let e=this.getNavigationServer();if(!e){console.error("[World] clearNavigationMesh: Navigation server not available");return}e.clearNavigationMesh()}getManifold(){return this.manifold}removeActor(e){return this.removeActors(e)}removeActors(...e){return Hg(!this.isPlayEnded())?this.isTicking?(this.actorsToRemove.push(...e),this):(e.forEach(g=>{let t=this.actors.indexOf(g);if(Hg(t!==-1,`${g.getPathName()} not found in world`)&&(this.isPlaying()&&g.endPlay(),this.isEditorWorld&&(g.onEditorRemoveFromWorld(),this.onEditorActorRemoveFromWorld?.(g)),g.setWorld(null),this.actors.splice(t,1),this.scene.remove(g.rootComponent),g instanceof Ni)){let C=this.playerControllers.indexOf(g);C!==-1&&this.playerControllers.splice(C,1)}}),this):this}runInNextTick(e){this.nextTickFunctions.push(e)}tick(e){if(e*=this.slomo,this.playState!=="playing"||this.isPaused||e<=0)return;if(this.gameTime+=e,this.isTicking=!0,this.nextTickFunctions.length>0){let t=[...this.nextTickFunctions];this.nextTickFunctions=[];for(let C of t)try{C()}catch(o){console.error("Error executing next tick function:",o)}}this.timerSystem.tick(e),this.tweenManager.update(e),this.gameMode.tick(e);for(let t of this.actors)t.tickPrePhysics(e);this.physicsEngine&&this.physicsEngine.tick(e);for(let t of this.actors)t.tickPostPhysics(e);this.netWorld.tick(e),this.statsDisplay.tick();let g=this.getActiveCamera();g&&this.audioListener&&this.audioListener.parent!=g&&(g.add(this.audioListener),g.getActor()?.onPreEndPlay.add(t=>{this.audioListener?.removeFromParent()})),this.isTicking=!1,this.removeActors(...this.actorsToRemove),this.actorsToRemove=[]}async createPhysicsEngine(){if(this.physicsEngineCreated)throw new Error("Physics engine already created");this.physicsEngine=await oN(this.options.physicsOptions,this),console.log("Physics engine created:",mg.getClassOrConstructorName(this.physicsEngine)),this.physicsEngineCreated=!0}async createManifold(){if(this.manifoldCreated)throw new Error("Manifold already created");this.options.useManifold&&(this.manifold=new Fl,await this.manifold?.initManifold(),this.manifoldCreated=!0)}async createNavigationServer(){if(this.navigationServerCreated)throw new Error("Navigation server already created");this.navigationServer=await gU(this.options.navigationOptions),console.log("Navigation server created:",this.navigationServer),this.navigationServerCreated=!0}async createLightmapManager(e){if(!(this.lightmapManagerCreated||!Lc))try{if(!e){console.warn("No renderer provided for lightmap manager creation");return}this.lightmapManager=new Fd(this,e,{autoApply:!0,progressiveBaking:!0}),await this.lightmapManager.initialize(),console.log("Lightmap manager created and initialized"),this.lightmapManagerCreated=!0}catch(g){console.warn("Failed to create lightmap manager:",g),this.lightmapManager=null}}getLightmapManager(){return this.lightmapManager}generateDebugNode(){let e=[];e.push(this.gameMode.generateDebugNode());for(let g of this.actors)e.push(g.generateDebugNode());return{title:this.name,children:e,data:{uuid:this.uuid,...this.options}}}getFirstActor(e){return this.actors.find(g=>g instanceof e)}getComponent(e){for(let g of this.actors){let t=g.getComponent(e);if(t)return t}return null}getActors(e=Kg){return this.actors.filter(g=>g instanceof e)}getActorByUuid(e){return this.actors.find(g=>g.uuid===e)}getActorsByPredicate(e){return this.actors.filter(e)}getFirstActorByTag(e){return this.actors.find(g=>g.hasActorTag(e))??null}getActorsByTag(e){return this.actors.filter(g=>g.hasActorTag(e))}getFirstActorByAnyTag(e){return this.actors.find(g=>g.hasAnyActorTag(e))??null}getActorsByAnyTag(e){return this.actors.filter(g=>g.hasAnyActorTag(e))}getFirstActorByAllTags(e){return this.actors.find(g=>g.hasAllActorTags(e))??null}getActorsByAllTags(e){return this.actors.filter(g=>g.hasAllActorTags(e))}getFirstPlayerPawn(){return this.getFirstActor(Ni)?.getPawn()??null}clearWorld(){this.removeActors(...this.actors),this.actors=[],this.scene.remove(...this.scene.children),this.isEditorWorld&&(this.onEditorActorAddToWorld=void 0,this.onEditorActorRemoveFromWorld=void 0)}getPathName(){return this.name}addBox(e){return this.addBasicGeometry({...e,geometry:new Vg(e.width,e.height,e.depth)})}addSphere(e){return this.addBasicGeometry({...e,geometry:new wt(e.radius)})}addCapsule(e){return this.addBasicGeometry({...e,geometry:new uC(e.radius,e.height)})}addCylinder(e){return this.addBasicGeometry({...e,geometry:new Ft(e.radius,e.radius,e.height)})}addCone(e){return this.addBasicGeometry({...e,geometry:new NC(e.radius,e.height)})}addBasicGeometry(e){let g=new Kg({rootComponent:new ti({position:e.position,rotation:e.rotation,scale:e.scale,geometry:e.geometry,material:new Et({color:e.color}),physicsOptions:{enabled:!!e.motionType,motionType:e.motionType}})});return this.addActors(g),g}addAxesHelper(e){let g=new Kg({position:e.position,rotation:e.rotation});return g.rootComponent.add(new _E(e.size)),this.addActors(g),g}asExportedObject(e=!1){return PI.exportObject(this,e)}getGameTime(){return this.gameTime}getActiveCamera(){return this.overrideCamera?this.overrideCamera:this.playerControllers[0]?.getCamera()??null}renderScene(e,g){let t=this.getActiveCamera();t||this.logCameraWarning(),this.renderWindowSize=g;let C=t??this.fallbackCamera;C instanceof Jt&&(C.aspect=g.width/g.height,C.updateProjectionMatrix()),this.postProcessManager.renderScene(e,this.scene,C,g)}logCameraWarning(){let e=Date.now();e-this.lastCameraWarningTime>=1e4&&(console.warn('No camera found. Please add a three.js camera to your pawn or set one using "world.setOverrideCamera(camera)".'),this.lastCameraWarningTime=e)}getOverrideCamera(){return this.overrideCamera}setOverrideCamera(e){this.overrideCamera=e}getSkyboxComponent(){return this.skyboxComponent}setSkyboxComponent(e){if(this.skyboxComponent&&e&&this.skyboxComponent!==e){Hg(!1,"Skybox component already set, cannot set another");return}this.skyboxComponent=e}destroy(){this.isPlaying()&&this.endPlay(),this.scene.setWorld(null),this.lastCameraWarningTime=0,this.uiManager.destroy(),this.inputManager.destroy(),this.physicsEngine&&(this.physicsEngine.destroy(),this.physicsEngine=null),this.consoleManager.removeCommandHandler(this),this.consoleManager.destroy(),this.postProcessManager.destroy(),this.navigationServer?.destroy(),this.navigationMeshVisualization&&(this.scene.remove(this.navigationMeshVisualization),this.navigationMeshVisualization=null),this.hiddenInGameActors.clear(),this.actors=[]}doBeginPlay(){if(!this.physicsEngineCreated)throw new Error("Physics engine not created");this.consoleManager.addCommandHandler(this);for(let e of[...this.actors])e.beginPlay();this.inputManager.beginPlay(),this.timerSystem.beginPlay(),this.gameMode.beginPlay(),this.netWorld.beginPlay()}doEndPlay(){for(let e of this.actors)e.endPlay();this.netWorld.endPlay(),this.inputManager.endPlay(),this.gameMode.endPlay(),this.timerSystem.endPlay(),this.globalAudioManager.endPlay()}describe(e){let g={};this.editorData&&Object.keys(this.editorData).length>0&&(g.info=this.editorData);let t=e?.specifiedActors;return{...g,actorsNumber:this.actors.length,actors:this.actors.map(C=>C.describe({includeComponentsDetails:e?.includeComponentsDetails,omitDescription:t?!t.includes(C.uuid):!1}))}}clearWorldCommand(){return this.clearWorld(),"World cleared"}dumpSG(e="html"){if(e=e.toLowerCase(),e==="html"){let g=ff.dumpHtml(this),t=new Blob([g],{type:"text/html"}),C=URL.createObjectURL(t);return window.open(C,"_blank"),"Scene graph dumped to html"}return"Invalid format"}exportWorld(e){let g=PI.exportObject(this,!!e),t=JSON.stringify(g,null,2),C=new Blob([t],{type:"application/json"}),o=URL.createObjectURL(C);return window.open(o,"_blank"),!0}pause(){return this.isPaused=!this.isPaused,`World paused: ${this.isPaused}`}setSlomoCommand(e){let g=parseFloat(e);return isNaN(g)?"Invalid number":(this.slomo=g,`World slomo set to: ${this.slomo}`)}clearCachedResources(){return Lg.clearCachedResources(),!0}logCachedResources(){return Lg.logCachedResources(),!0}show(e){let g=e.toLowerCase();if(g==="stats")return this.statsDisplay.toggle(),"Stats console toggled";if(g==="navmesh"){let C=this.getNavigationServer();if(!C)return"Navigation server not available";if(this.navigationMeshVisualization)return this.scene.remove(this.navigationMeshVisualization),this.navigationMeshVisualization=null,"Navigation mesh visualization hidden";{let o=C.createDebugVisualization();return o?(o.traverse(s=>{s.raycast=()=>{}}),this.scene.add(o),this.navigationMeshVisualization=o,"Navigation mesh visualization shown"):(console.error("[Navigation Server] show navmesh: Failed to create debug visualization"),"Failed to create debug visualization")}}if(g==="collision"){let C=this.getPhysicsEngine();return C?(C.setDebugRendererEnabled(!C.isDebugRendererEnabled()),"Collision debug visualization "+(C.isDebugRendererEnabled()?"enabled":"disabled")):"Physics engine not available"}let t=[];for(let C of this.actors)t.push(...C.getComponents(ui));if(g==="lighthelper"){for(let C of t)C.showHelper(!C.isHelperVisible());return`Toggled light helpers for ${t.length} lights`}else if(g==="lightcamerahelper"){for(let C of t)C.showCameraHelper(!C.isCameraHelperVisible());return`Toggled light camera helpers for ${t.length} lights`}else return"Invalid helper type. Use: lighthelper, lightcamerahelper, navmesh, or collision"}setActorHiddenInGame(e,g){this.isEditorWorld||(g?(this.hiddenInGameActors.add(e),e.rootComponent.traverse(t=>t.layers.disableAll()),this.postProcessManager.hiddenObjects.add(e.rootComponent)):(this.postProcessManager.hiddenObjects.delete(e.rootComponent),e.rootComponent.traverse(t=>t.layers.enable(0)),this.hiddenInGameActors.delete(e)))}setSceneComponentHiddenInGame(e,g){this.isEditorWorld||(g?(this.hiddenInGameSceneComponents.add(e),e.traverse(t=>t.layers.disableAll()),this.postProcessManager.hiddenObjects.add(e)):(this.postProcessManager.hiddenObjects.delete(e),e.traverse(t=>t.layers.enable(0)),this.hiddenInGameSceneComponents.delete(e)))}setIsEditorWorld(e,g,t){this.isEditorWorld=e,g&&(this.onEditorActorAddToWorld=g),t&&(this.onEditorActorRemoveFromWorld=t)}};sA([zt("clearworld","Clear all actors from the world")],Vo.prototype,"clearWorldCommand",1),sA([zt("dumpsg","Dump scene graph to HTML file (usage: dumpsg [html])")],Vo.prototype,"dumpSG",1),sA([zt("exportworld","Export world data to JSON file (usage: exportworld [includeDefaults])")],Vo.prototype,"exportWorld",1),sA([zt("pause","Toggle world pause state")],Vo.prototype,"pause",1),sA([zt("slomo","Set world slow motion multiplier (usage: slomo <value>)")],Vo.prototype,"setSlomoCommand",1),sA([zt("clearcache","Clear all cached resources")],Vo.prototype,"clearCachedResources",1),sA([zt("logcache","Log all cached resources to console")],Vo.prototype,"logCachedResources",1),sA([zt("show","Show/hide debug visualizations (usage: show <lighthelper | lightcamerahelper | navmesh | collision>)")],Vo.prototype,"show",1),Vo=sA([dA("World")],Vo);var j6=oh(O6(),1);var onA=cs.registerVariable({name:"r.AutoInstancing",default:0,description:"Enable auto instancing on the GenesysWebGLRenderer"}),P6=cs.registerVariable({name:"r.ScreenPercentage",default:100,description:"Screen percentage for the GenesysWebGLRenderer"}),b0=class extends $n{constructor(e){super(e);l(this,"instanceMeshes",new Map);l(this,"tempMatrix",new se);l(this,"tempColor",new vA);l(this,"minInstancingThreshold",100);let g=this.render.bind(this);this.render=(C,o)=>{if(onA.get()){let s=this.autoInstance(C);g(C,o);for(let{objects:n}of s.values())for(let B of n)B.visible=!0}else g(C,o)};let t=this.renderBufferDirect.bind(this);this.renderBufferDirect=(C,o,s,n,B,a)=>{Pi.fixMaterialColorSpace(n),t(C,o,s,n,B,a),cl.addRenderBufferDirect(C,o,s,n,B,a)}}beginRenderFrame(){for(let{mesh:e}of this.instanceMeshes.values())e.visible=!1}endRenderFrame(){for(let[e,{mesh:g}]of this.instanceMeshes.entries())g.visible||(g.dispose(),g.removeFromParent(),this.instanceMeshes.delete(e))}autoInstance(e){let g=new Map;e.traverseVisible(t=>{if(!(t instanceof fA)||t instanceof VC||t.userData.isAutoInstance)return;let C=`${t.geometry.uuid}_${t.material.uuid}_${t.castShadow}_${t.receiveShadow}`;g.has(C)||g.set(C,{geometry:t.geometry,material:t.material,objects:[]}),g.get(C).objects.push(t)});for(let[t,C]of g){let o=0;for(let a of C.objects)a instanceof xi?o+=a.count:o+=1;if(o<this.minInstancingThreshold)continue;let{mesh:s,capacity:n}=this.instanceMeshes.get(t)??{mesh:void 0,capacity:0};if(!s||n<o){s&&(s.dispose(),s.removeFromParent()),s=new xi(C.geometry,C.material,o),s.userData.isAutoInstance=!0,s.frustumCulled=!1;let a=C.objects[0];s.castShadow=a.castShadow,s.receiveShadow=a.receiveShadow,this.instanceMeshes.set(t,{mesh:s,capacity:o}),e.add(s)}s.count!==o&&(s.count=o);let B=0;for(let a of C.objects){if(a instanceof xi)for(let E=0;E<a.count;++E)a.getMatrixAt(E,this.tempMatrix),s.setMatrixAt(B,this.tempMatrix.premultiply(a.matrixWorld)),a.instanceColor&&(a.getColorAt(E,this.tempColor),s.setColorAt(B,this.tempColor)),B+=1;else s.setMatrixAt(B,a.matrixWorld),a.material instanceof wg&&s.instanceColor&&s.setColorAt(B,a.material.color),B+=1;a.visible=!1}s.instanceMatrix.needsUpdate=!0,s.instanceColor&&(s.instanceColor.needsUpdate=!0),s.visible=!0}return g}},wf=class{constructor(A,e){this.container=A;l(this,"renderer");l(this,"abortController",new AbortController);l(this,"xrAnimationLoop",null);this.renderer=new b0(e),this.renderer.shadowMap.enabled=!0,this.renderer.shadowMap.type=LD,this.renderer.toneMapping=$C,window.addEventListener("resize",this.onWindowResize.bind(this),{signal:this.abortController.signal}),this.onWindowResize(),this.container.appendChild(this.renderer.domElement),P6.set(this.renderer.getPixelRatio()*100),P6.onValueChanged.add((g,t)=>{this.renderer.setPixelRatio(t/100)})}destroy(){this.renderer.domElement.remove(),this.abortController.abort(),this.renderer.dispose()}getWindowSize(){return{width:Math.floor(this.container.clientWidth||window.innerWidth),height:Math.floor(this.container.clientHeight||window.innerHeight)}}render(A){this.renderer.beginRenderFrame(),A.renderScene(this.renderer,this.getWindowSize()),this.renderer.endRenderFrame()}enableXR(A="local-floor"){this.renderer.xr.enabled=!0,this.renderer.xr.setReferenceSpaceType(A),console.log(`WebXR enabled with reference space: ${A}`)}disableXR(){this.renderer.xr.enabled=!1,this.xrAnimationLoop&&(this.renderer.setAnimationLoop(null),this.xrAnimationLoop=null)}setupXRAnimationLoop(A){this.xrAnimationLoop=A,this.renderer.setAnimationLoop(this.xrAnimationLoop)}isXREnabled(){return this.renderer.xr.enabled}isXRPresenting(){return this.renderer.xr.isPresenting}onWindowResize(){let A=this.getWindowSize();this.renderer.setSize(A.width,A.height)}};async function ZU(i,A,e={},g={}){let t=document.createElement("button"),C={position:"absolute",bottom:"20px",left:"calc(50% - 50px)",width:"100px",padding:"12px 6px",border:"1px solid #fff",borderRadius:"4px",background:"rgba(0, 0, 0, 0.1)",color:"#fff",font:"normal 13px sans-serif",textAlign:"center",opacity:"0.5",outline:"none",zIndex:"999",cursor:"pointer"};Object.assign(t.style,C,g.styles??{});let o=g.enterText??"ENTER VR",s=g.exitText??"EXIT VR",n=g.notSupportedText??"VR NOT SUPPORTED";t.textContent=o;let{optionalFeatures:B=["local-floor","hand-tracking"],requiredFeatures:a=[],framebufferScaleFactor:E}=e;if(t.onclick=async()=>{if("xr"in navigator&&navigator.xr)try{console.log("Requesting VR session with features:",{optionalFeatures:B,requiredFeatures:a});let Q=await navigator.xr.requestSession("immersive-vr",{optionalFeatures:B,requiredFeatures:a});console.log("VR session started with features:",Q.enabledFeatures),await i.xr.setSession(Q),E!==void 0&&(i.xr.setFramebufferScaleFactor(E),console.log("VR framebuffer scale factor set to:",E)),t.textContent=s,Q.addEventListener("end",()=>{t.textContent=o})}catch(Q){console.error("Failed to start VR session:",Q),t.textContent=n}else console.warn("WebXR not supported"),t.textContent=n},"xr"in navigator&&navigator.xr)try{await navigator.xr.isSessionSupported("immersive-vr")?t.style.opacity="1.0":t.textContent=n}catch(Q){console.warn("Error checking VR support:",Q),t.textContent=n}else t.textContent=n;return A.appendChild(t),t}var pC=class{static random(){return Math.floor(Math.random()*16777215)}};l(pC,"WHITE",16777215),l(pC,"BLACK",0),l(pC,"RED",16711680),l(pC,"GREEN",65280),l(pC,"BLUE",255),l(pC,"YELLOW",16776960),l(pC,"CYAN",65535),l(pC,"MAGENTA",16711935),l(pC,"GRAY",8421504),l(pC,"DARK_GRAY",4210752),l(pC,"LIGHT_GRAY",12632256),l(pC,"ORANGE",16753920),l(pC,"PURPLE",8388736),l(pC,"BROWN",9127187);var uQ=class i{static createPlayerStart(A,e,g){let t=new da({position:e,rotation:g});return t.editorData.displayName="Player Start",A.addActors(t),t}static createDefaultSkybox(A,e=CC.DEFAULT_OPTIONS){let g=new CC(e),t=new Kg({rootComponent:g});return t.editorData.displayName="Skybox",A.addActors(t),g}static createDefaultLighting(A,e=!0){let g=new EC({position:new m(10,50,-10),color:16777215,intensity:1,castShadow:!0,shadowMapSize:2048,shadowBias:0,shadowNormalBias:0,shadowNear:.1,shadowFar:100}),t=new Kg({rootComponent:g});if(t.editorData.displayName="Directional Light",e){let C=new cB({color:16777215,intensity:.5}),o=new Kg({rootComponent:C});return o.editorData.displayName="Ambient Light",A.addActors(t,o),{directionalLight:g,ambientLight:C}}else return A.addActors(t),{directionalLight:g,ambientLight:null}}static createDefaultPawn(A,e){e??=RC.makeVector({up:1.8});let g=new QC({position:e,movementComponent:new fi({...fi.DEFAULT_OPTIONS,characterControllerOptions:null}),camera:new Jt(60,1,.1,2e3)}),t=new Ni;return t.possess(g),A.addActors(g,t),{pawn:g,controller:t}}static createDefaultAnimatedCharacter(A,e){e??=RC.makeVector({up:1.8/2});let g=new Jt(60,1,.1,2e3),t=new Qn({modelUrl:"@engine/assets/character/mannequinG.glb",configUrl:"@engine/assets/character/config/mannequin-anim.json",meshPosition:new m(0,-1.8/2,0),meshRotation:new Pe(0,Math.PI,0),meshScale:new m(1,1,1),position:e,movementComponent:new fi({...fi.DEFAULT_OPTIONS,movementType:"thirdPerson"}),rootComponent:new ti({geometry:i.createDefaultPawnCapsuleGeometry(),material:new Et({color:pC.YELLOW,visible:!1,transparent:!0,opacity:.5}),physicsOptions:{enabled:!0,motionType:"kinematicVelocityBased",collisionProfile:"Character"}}),camera:g});g.position.set(0,1.8*1.3,1.8*2),g.lookAt(0,0,0),t.rootComponent.castShadow=!0;let C=new Ni;return C.possess(t),A.addActors(t,C),{pawn:t,controller:C}}static createDefaultPawnWithPhysics(A,e,g){g??=RC.makeVector({up:1.8/2});let t=new Jt(60,1,.1,2e3),C=new QC({position:g,movementComponent:new fi({...fi.DEFAULT_OPTIONS,movementType:e}),rootComponent:new ti({geometry:i.createDefaultPawnCapsuleGeometry(),material:new Et({color:pC.YELLOW}),physicsOptions:{enabled:!0,motionType:"kinematicVelocityBased",collisionProfile:"Pawn",generateCollisionEvents:!0}}),camera:t});e==="firstPerson"?t.position.set(0,1.8*.4,0):(t.position.set(0,1.8*2,1.8*3),t.lookAt(0,0,0));let o=C.rootComponent;o.castShadow=!0,o.getMesh().visible=e==="thirdPerson";let s=new Ni;return s.possess(C),A.addActors(C,s),{pawn:C,controller:s}}static createDefaultGround(A,e={}){let g=new ti({position:e.position??new m(0,-1.8/2,0),geometry:new Vg(e.size?.x??500,e.size?.y??.1,e.size?.z??500),material:Pi.DefaultMaterial,uvScaleTilesPerUnit:.2,physicsOptions:{enabled:!0,motionType:"static",collisionProfile:"BlockAll"}}),t=new Kg({rootComponent:g});return t.editorData.displayName="Ground",g.receiveShadow=!0,A.addActors(t),t}static createDefaultFog(A,e=ws.DEFAULT_OPTIONS){let g=new ws(e),t=new Kg({rootComponent:g});return t.editorData.displayName="Fog",A.addActors(t),t}static createDefaultEditorScene(A){i.createDefaultLighting(A,!1),i.createDefaultGround(A),i.createPlayerStart(A,new m(0,1.8/2,0)),i.createDefaultSkybox(A),console.log("Default scene created")}static createDefaultPawnCapsuleGeometry(){let A=.9/2;return new uC(A,1.8-A*2)}};var Sf=class Sf{constructor(A,e={}){this.container=A;l(this,"world");l(this,"stats",new j6.default);l(this,"lastTickTimeMS",0);l(this,"renderer");l(this,"destroyed",!1);l(this,"options");l(this,"vrButton",null);l(this,"actorsFromWorldData",[]);l(this,"loadingScreen",null);Lg.clearCachedResources(),this.options={...Sf.DEFAULT_OPTIONS,...e},this.container.style.position="relative";let g={...this.getDefaultRendererOptions(),...this.options.rendererOptions};this.renderer=new wf(this.container,g),this.stats.dom.style.position="absolute",this.stats.dom.style.top="10px",this.stats.dom.style.left="10px",this.container.appendChild(this.stats.dom),this.stats.showPanel(0),this.world=new Vo({...this.getWorldConfiguration(),gameId:this.options.gameId,gameLoop:new WeakRef(this)}),this.options.xrEnabled&&(this.renderer.enableXR(),this.options.vrSessionOptions?.framebufferScaleFactor!==void 0&&(this.renderer.renderer.xr.setFramebufferScaleFactor(this.options.vrSessionOptions.framebufferScaleFactor),console.log("\u{1F3AF} XR framebuffer scale factor set to:",this.options.vrSessionOptions.framebufferScaleFactor))),this.world.consoleManager.addCommandHandler(this)}static get DEFAULT_OPTIONS(){return{backgroundColor:8900331,gravity:new m(0,-9.81,0),xrEnabled:!1}}getWorldConfiguration(){return{rendererDomElement:this.renderer.renderer.domElement,gameContainer:this.container,backgroundColor:this.options.backgroundColor,physicsOptions:{gravity:this.options.gravity,engine:"rapier"},navigationOptions:{engine:"recast-navigation",debug:!1,options:bl.DEFAULT_OPTIONS,generateOnStartUp:!1},useManifold:!1,enableGamepad:!0}}getDefaultRendererOptions(){return{powerPreference:"high-performance",antialias:this.options.xrEnabled}}async start(){this.startLoadingScreen(),await this.world.createPhysicsEngine(),console.log("[GameLoop] waiting for resources (1)..."),await Lg.waitForResources(4294967295),console.log("[GameLoop] loading scene resources..."),await this.loadSceneResources(this.world),console.log("[GameLoop] calling preStart..."),await this.preStart(),await this.world.createNavigationServer(),await this.world.createManifold(),await this.world.createLightmapManager(this.renderer.renderer),this.world.options.navigationOptions.generateOnStartUp&&await this.world.createNavigationMeshFromScene(),console.log("[GameLoop] calling postStart..."),this.postStart(),this.options.xrEnabled&&this.createVRButton().catch(e=>{console.warn("[GameLoop] failed to create VR button:",e)}),console.log("[GameLoop] calling world.beginPlay..."),this.world.beginPlay();let A=e=>{if(this.destroyed)return;if(this.options.xrEnabled||requestAnimationFrame(A),this.stats.begin(),!this.lastTickTimeMS){this.lastTickTimeMS=e,this.stats.end();return}let g=e-this.lastTickTimeMS;this.lastTickTimeMS=e,this.tick({currentTimeMS:e,deltaTimeMS:g}),this.stats.end()};this.options.xrEnabled?this.renderer.setupXRAnimationLoop(A):requestAnimationFrame(A),console.log("[GameLoop] waiting for resources (2)..."),await Lg.waitForResources(4294967295),console.log("[GameLoop] resources loaded"),this.stopLoadingScreen()}destroy(){this.actorsFromWorldData=[],this.world.destroy(),this.renderer.destroy(),this.stats.dom.remove(),this.vrButton&&(this.vrButton.remove(),this.vrButton=null),this.destroyed=!0}setInputEnabled(A){this.world.inputManager.setInputEnabled(A)}async loadWorldData(A){console.log(`[GameLoop] removing ${this.actorsFromWorldData.length} actors before loading the new world`),this.startLoadingScreen(),this.world.removeActors(...this.actorsFromWorldData),this.actorsFromWorldData=[];let e=this.world.getActors();await PI.loadWorld(this.world,A);let g=this.world.getActors();this.actorsFromWorldData=g.filter(t=>!e.includes(t))}async loadWorldDataFromPath(A){console.log(`[GameLoop] loading world data from ${A}`);let e=await Lg.loadJsonObject(A);console.log(`[GameLoop] world data loaded from ${A}, loading...`),await this.loadWorldData(e)}async loadSceneResources(A){let e=A.sceneResources;if(!e){console.log("[GameLoop] No scene resources configured, skipping automatic loading");return}e.lightmap&&await this.loadLightmapFromPaths(e.lightmap.metadataPath,e.lightmap.texturePath),e.navMesh&&await this.loadNavMeshFromPath(e.navMesh.path)}async loadLightmapFromPaths(A,e){if(Lc)try{let g=GC.storageProvider,t=new og(A),C=new og(e),o=await g.downloadFileAsJson(t),s=await g.downloadFileAsBuffer(C),n=this.world.getLightmapManager();n&&(await n.importLightmap(o,s,{throwOnError:!1}),console.log(`[GameLoop] \u2713 Lightmaps loaded from: ${A}`))}catch(g){console.warn(`[GameLoop] \u26A0\uFE0F Could not load lightmaps from: ${A}`,g)}}async loadNavMeshFromPath(A){try{let g=new og(A),C=await GC.storageProvider.downloadFileAsBuffer(g),o=this.world.getNavigationServer();if(o&&await o.importNavigationMeshFromData(C)){console.log(`[GameLoop] \u2713 NavMesh loaded from: ${A}`);return}}catch(g){console.warn(`[GameLoop] \u26A0\uFE0F Could not load NavMesh from: ${A}`,g)}if(this.world.options.navigationOptions.generateOnStartUp)try{console.log("[GameLoop] \u{1F504} Falling back to auto-generation of NavMesh"),await this.world.createNavigationMeshFromScene(),console.log("[GameLoop] \u2713 NavMesh auto-generated from scene geometry")}catch(g){console.error("[GameLoop] \u2717 Failed to auto-generate NavMesh",g)}else console.log("[GameLoop] \u2139\uFE0F NavMesh auto-generation disabled")}getWorld(){return this.world}enableXR(){this.options.xrEnabled=!0,this.renderer.enableXR()}disableXR(){this.options.xrEnabled=!1,this.renderer.disableXR()}async createVRButton(){try{return this.vrButton&&(this.vrButton.remove(),this.vrButton=null),this.vrButton=await ZU(this.renderer.renderer,this.container,this.options.vrSessionOptions??{}),this.vrButton}catch(A){return console.error("[GameLoop] failed to load VRButton:",A),Promise.reject(A)}}isXREnabled(){return this.renderer.isXREnabled()}isXRPresenting(){return this.renderer.isXRPresenting()}async exportNavigationMesh(A){return await this.world.exportNavigationMesh(A)}async importNavigationMesh(A){if(A){let g=this.world.getNavigationServer();return g?await g.importNavigationMeshFromData(A):!1}let e=this.world.sceneResources?.navMesh?.path;return e?(await this.loadNavMeshFromPath(e),!0):(console.error("[GameLoop] importNavigationMesh: No NavMesh data provided and no navMesh configured in scene resources"),!1)}startLoadingScreen(A=null){this.loadingScreen||(this.loadingScreen=A??this.createLoadingScreen(),this.loadingScreen&&(console.trace("[GameLoop] starting loading screen"),this.loadingScreen.start(this.world)))}stopLoadingScreen(){this.loadingScreen&&(console.trace("[GameLoop] stopping loading screen"),this.loadingScreen.stop(),this.loadingScreen=null)}async preStart(){uQ.createDefaultLighting(this.world),uQ.createDefaultPawnWithPhysics(this.world,"thirdPerson"),uQ.createDefaultGround(this.world),uQ.createDefaultSkybox(this.world)}postStart(){}createLoadingScreen(){return null}tick(A){this.world.tick(A.deltaTimeMS/1e3),this.renderer.render(this.world)}loadWorld(A){return this.loadWorldDataFromPath(og.fromString(A)),!0}reload(){let A=new on().exportObject(this.world,!1),e=JSON.stringify(A);return this.world.clearWorld(),PI.loadWorld(this.world,JSON.parse(e)).then(()=>{let g=this.world.getFirstActor(Ni),t=this.world.getFirstActor(QC);g&&t&&g.possess(t),console.dir(A)}),!0}};sA([zt("loadworld","Load world from file path (usage: loadworld <path>)")],Sf.prototype,"loadWorld",1),sA([zt("reload","Reload the current world")],Sf.prototype,"reload",1);var zU=Sf,XU=class{async loadWorldData(A){return Promise.resolve()}async loadWorldDataFromPath(A){return Promise.resolve()}start(){return Promise.resolve()}destroy(){}setInputEnabled(A){}getWorld(){return null}};var Qd=class{static async loadFile(A){if(this.cache.has(A.initialPath))return this.cache.get(A.initialPath);try{A=await In(A);let e=await fetch(`${A.getResolvedPath()}?raw`);if(!e.ok)throw new Error(`Failed to load file: ${A} (${e.status}: ${e.statusText})`);let g=await e.text(),t=await o_(g);return this.cache.set(A.initialPath,t),t}catch(e){throw console.error(`Error loading file ${A}:`,e),e}}static async loadTemplate(A){return this.loadFile(A)}static async loadStyles(A){return this.loadFile(A)}static async loadUIAsset(A,e){let[g,t]=await Promise.all([this.loadTemplate(A),this.loadStyles(e)]);return{template:g,styles:t}}static clearCache(){this.cache.clear()}};l(Qd,"cache",new Map);var $U=class{constructor(){l(this,"container",null);l(this,"isActive",!1)}start(A){this.isActive||(this.createLoadingScreen(A),this.isActive=!0)}stop(){!this.isActive||!this.container||(this.container.style.opacity="0",setTimeout(()=>{this.container&&this.container.parentNode&&this.container.parentNode.removeChild(this.container),this.container=null,this.isActive=!1},300))}createLoadingScreen(A){this.container=document.createElement("div"),this.container.style.cssText=`
6831
+ </html>`}};var H6,Y6,Pl=class extends(Y6=Os,H6=bC,Y6){constructor(e){super();this.options=e;l(this,H6,!0);l(this,"name");l(this,"uuid",BC());l(this,"world",null);this.name=eB.generateName(this)}tick(e){}setWorld(e){this.world=e}getPathName(){return`${this.world.getPathName()}.${this.name}`}findPlayerStart(e){return this.world.getFirstActor(da)}generateDebugNode(){return{title:this.name,data:{uuid:this.uuid,...this.options}}}export(e,g){return{class:mg.getClassNameChecked(this),uuid:this.uuid,ctor:e.exportObject(this.options,g)}}serialize(e){e.dumpValue("$uuid",this.uuid),e.dumpProperties(this)}deserialize(e){this.uuid=e.loadValue("$uuid")??this.uuid,e.loadProperties(this)}doBeginPlay(){super.doBeginPlay()}doEndPlay(){super.doEndPlay()}};Pl=sA([dA("GameMode")],Pl);var x6,q6,Vo=class extends(q6=Os,x6=bC,q6){constructor(e){super();this.options=e;l(this,x6,!0);l(this,"postProcessManager",new hf);l(this,"uuid",BC());l(this,"name");l(this,"scene");l(this,"inputManager");l(this,"consoleManager");l(this,"timerSystem");l(this,"tweenManager");l(this,"uiManager");l(this,"gameMode");l(this,"pluginManager");l(this,"lastCameraWarningTime",0);l(this,"netWorld");l(this,"audioListener");l(this,"globalAudioManager");l(this,"globalParticleManager");l(this,"editorData",{});l(this,"isEditorWorld",!1);l(this,"sceneResources",null);l(this,"postProcessConfiguration",null);l(this,"actors",[]);l(this,"playerControllers",[]);l(this,"physicsEngine",null);l(this,"navigationServer",null);l(this,"manifold",null);l(this,"lightmapManager",null);l(this,"navigationMeshVisualization",null);l(this,"navigationServerCreated",!1);l(this,"physicsEngineCreated",!1);l(this,"manifoldCreated",!1);l(this,"lightmapManagerCreated",!1);l(this,"isTicking",!1);l(this,"actorsToRemove",[]);l(this,"hiddenInGameActors",new Set);l(this,"hiddenInGameSceneComponents",new Set);l(this,"isPaused",!1);l(this,"slomo",1);l(this,"gameTime",0);l(this,"overrideCamera",null);l(this,"skyboxComponent",null);l(this,"renderWindowSize",null);l(this,"nextTickFunctions",[]);l(this,"statsDisplay");l(this,"camera",null);l(this,"fallbackCamera");l(this,"onEditorActorAddToWorld");l(this,"onEditorActorRemoveFromWorld");this.netWorld=new Oo(this,e.gameId??"default"),this.name=eB.generateName(this),this.scene=new pi,this.scene.setWorld(this),this.scene.background=new vA(e.backgroundColor),this.actors=[],this.inputManager=new yu({rendererDomElement:e.rendererDomElement,gameContainer:e.gameContainer,world:new WeakRef(this),enableGamepad:e.enableGamepad}),this.timerSystem=new Su({world:this}),this.tweenManager=new K0(this),this.consoleManager=new fu,this.inputManager.addInputHandler(this.consoleManager),this.consoleManager.addCommandHandler(new Ba),this.statsDisplay=new Wu(e.gameContainer),this.uiManager=new uf({container:e.gameContainer}),this.inputManager.addInputHandler(this.uiManager),this.gameMode=e.gameMode??new Pl({}),this.gameMode.setWorld(this),this.audioListener=mC()?null:new wE,this.globalAudioManager=yf.getInstance(),this.globalAudioManager.setWorld(this),this.globalParticleManager=new $u,this.globalParticleManager.setTransient(!0),this.addActors(this.globalParticleManager),this.fallbackCamera=new Jt(75,1,.1,1e3),this.fallbackCamera.position.set(0,5,10),this.fallbackCamera.lookAt(0,0,0),this.pluginManager=new F0(new WeakRef(this))}export(e,g){return{class:mg.getClassNameChecked(this),uuid:this.uuid,ctor:e.exportObject(this.options,g),actors:this.actors.map(t=>e.exportObject(t,g)).filter(t=>!!t),resources:this.sceneResources??void 0,properties:{editorData:this.editorData,postProcessConfiguration:this.postProcessConfiguration}}}serialize(e){e.dumpValue("$uuid",this.uuid),e.dumpValue("actors",this.actors.filter(g=>!!g)),e.dumpValue("resources",this.sceneResources),e.dumpValue("editorData",this.editorData),e.dumpValue("postProcessConfiguration",this.postProcessConfiguration),e.dumpProperties(this)}deserialize(e){this.uuid=e.loadValue("$uuid")??this.uuid,this.sceneResources=e.loadValue("resources",this.sceneResources),this.editorData=e.loadValue("editorData",this.editorData);let g=e.loadValue("postProcessConfiguration",this.postProcessConfiguration);g&&this.setPostProcessConfiguration(g);let C=e.loadValue("actors").filter(o=>o&&!this.actors.includes(o));this.addActors(...C),e.loadProperties(this)}get gameContainer(){return this.options.gameContainer}get gameLoop(){return this.options.gameLoop?.deref()??null}getRenderWindowSize(){return this.renderWindowSize}setLightmapResources(e,g){this.sceneResources??={},this.sceneResources.lightmap={metadataPath:e,texturePath:g}}setNavMeshResource(e){this.sceneResources??={},this.sceneResources.navMesh={path:e}}clearLightmapResources(){this.sceneResources&&(this.sceneResources.lightmap=void 0)}clearNavMeshResource(){this.sceneResources&&(this.sceneResources.navMesh=void 0)}getSceneResources(){return this.sceneResources}getPostProcessConfiguration(){return this.postProcessConfiguration}setPostProcessConfiguration(e){this.postProcessConfiguration=e,e&&this.postProcessManager.setConfiguration(e)}updatePostProcessConfiguration(e){if(this.postProcessConfiguration){let g=[...this.postProcessConfiguration.effects];for(let t of e.effects){let C=g.findIndex(o=>o.type===t.type);C>=0?g[C]={...g[C],...t}:g.push(t)}this.postProcessConfiguration={effects:g}}else this.postProcessConfiguration=e;this.postProcessManager.updateConfiguration(e)}addActor(e){return this.addActors(e)}addActors(...e){return Hg(!this.isPlayEnded())?(e.forEach(g=>{if(Hg(!this.actors.includes(g))){if(this.actors.push(g),g.setWorld(this),this.scene.add(g.rootComponent),this.isPlaying()&&g.beginPlay(),g instanceof Ni){if(this.playerControllers.length)throw new Error("Only one player controller is allowed in the world");this.playerControllers.push(g)}this.isEditorWorld&&(g.onEditorAddToWorld(),this.onEditorActorAddToWorld?.(g))}}),this):this}getPhysicsEngine(){return this.physicsEngine}getNavigationServer(){return this.navigationServer}async createNavigationMeshFromScene(){if(!this.navigationServerCreated)throw new Error("[Navigation Server] Navigation server not created");let e=this.getNavigationServer();if(!e){console.error("[Navigation Server] createNavigationMeshFromScene: Navigation server not available");return}let g=[],t=[];for(let s of this.actors)t.push(...s.getComponents(vt));if(t=t.filter(s=>s.getPhysicsOptions()?.motionType==="static"&&!s.options.excludeFromNavigation),t.length>0){await Promise.all(Object.values(Lg.getCachedModels()));for(let s of t)g.push(...s.getAllMeshes())}let C=[];for(let s of this.actors)C.push(...s.getComponents(ti));C=C.filter(s=>s.getPhysicsOptions()?.motionType==="static"&&!s.options.excludeFromNavigation);for(let s of C)g.push(s.getMesh());if(g.length===0){console.warn("[Navigation Server] No meshes found for navigation mesh generation");return}await e.createNavigationMeshFromMeshes(g)?console.log("[Navigation Server] Navigation mesh created successfully"):console.error("[Navigation Server] Failed to create navigation mesh")}async exportNavigationMesh(e){let g=this.getNavigationServer();return g?await g.exportNavigationMesh(e):(console.error("[World] exportNavigationMesh: Navigation server not available"),{success:!1})}async importNavigationMesh(e){let g=this.getNavigationServer();return g?await g.importNavigationMesh(e):(console.error("[World] importNavigationMesh: Navigation server not available"),!1)}async importNavigationMeshFromData(e){let g=this.getNavigationServer();return g?await g.importNavigationMeshFromData(e):(console.error("[World] importNavigationMeshFromData: Navigation server not available"),!1)}clearNavigationMesh(){let e=this.getNavigationServer();if(!e){console.error("[World] clearNavigationMesh: Navigation server not available");return}e.clearNavigationMesh()}getManifold(){return this.manifold}removeActor(e){return this.removeActors(e)}removeActors(...e){return Hg(!this.isPlayEnded())?this.isTicking?(this.actorsToRemove.push(...e),this):(e.forEach(g=>{let t=this.actors.indexOf(g);if(Hg(t!==-1,`${g.getPathName()} not found in world`)&&(this.isPlaying()&&g.endPlay(),this.isEditorWorld&&(g.onEditorRemoveFromWorld(),this.onEditorActorRemoveFromWorld?.(g)),g.setWorld(null),this.actors.splice(t,1),this.scene.remove(g.rootComponent),g instanceof Ni)){let C=this.playerControllers.indexOf(g);C!==-1&&this.playerControllers.splice(C,1)}}),this):this}runInNextTick(e){this.nextTickFunctions.push(e)}tick(e){if(e*=this.slomo,this.playState!=="playing"||this.isPaused||e<=0)return;if(this.gameTime+=e,this.isTicking=!0,this.nextTickFunctions.length>0){let t=[...this.nextTickFunctions];this.nextTickFunctions=[];for(let C of t)try{C()}catch(o){console.error("Error executing next tick function:",o)}}this.timerSystem.tick(e),this.tweenManager.update(e),this.gameMode.tick(e);for(let t of this.actors)t.tickPrePhysics(e);this.physicsEngine&&this.physicsEngine.tick(e);for(let t of this.actors)t.tickPostPhysics(e);this.netWorld.tick(e),this.statsDisplay.tick();let g=this.getActiveCamera();g&&this.audioListener&&this.audioListener.parent!=g&&(g.add(this.audioListener),g.getActor()?.onPreEndPlay.add(t=>{this.audioListener?.removeFromParent()})),this.isTicking=!1,this.removeActors(...this.actorsToRemove),this.actorsToRemove=[]}async createPhysicsEngine(){if(this.physicsEngineCreated)throw new Error("Physics engine already created");this.physicsEngine=await oN(this.options.physicsOptions,this),console.log("Physics engine created:",mg.getClassOrConstructorName(this.physicsEngine)),this.physicsEngineCreated=!0}async createManifold(){if(this.manifoldCreated)throw new Error("Manifold already created");this.options.useManifold&&(this.manifold=new Fl,await this.manifold?.initManifold(),this.manifoldCreated=!0)}async createNavigationServer(){if(this.navigationServerCreated)throw new Error("Navigation server already created");this.navigationServer=await gU(this.options.navigationOptions),console.log("Navigation server created:",this.navigationServer),this.navigationServerCreated=!0}async createLightmapManager(e){if(!(this.lightmapManagerCreated||!Lc))try{if(!e){console.warn("No renderer provided for lightmap manager creation");return}this.lightmapManager=new Fd(this,e,{autoApply:!0,progressiveBaking:!0}),await this.lightmapManager.initialize(),console.log("Lightmap manager created and initialized"),this.lightmapManagerCreated=!0}catch(g){console.warn("Failed to create lightmap manager:",g),this.lightmapManager=null}}getLightmapManager(){return this.lightmapManager}generateDebugNode(){let e=[];e.push(this.gameMode.generateDebugNode());for(let g of this.actors)e.push(g.generateDebugNode());return{title:this.name,children:e,data:{uuid:this.uuid,...this.options}}}getFirstActor(e){return this.actors.find(g=>g instanceof e)}getComponent(e){for(let g of this.actors){let t=g.getComponent(e);if(t)return t}return null}getActors(e=Kg){return this.actors.filter(g=>g instanceof e)}getActorByUuid(e){return this.actors.find(g=>g.uuid===e)}getActorsByPredicate(e){return this.actors.filter(e)}getFirstActorByTag(e){return this.actors.find(g=>g.hasActorTag(e))??null}getActorsByTag(e){return this.actors.filter(g=>g.hasActorTag(e))}getFirstActorByAnyTag(e){return this.actors.find(g=>g.hasAnyActorTag(e))??null}getActorsByAnyTag(e){return this.actors.filter(g=>g.hasAnyActorTag(e))}getFirstActorByAllTags(e){return this.actors.find(g=>g.hasAllActorTags(e))??null}getActorsByAllTags(e){return this.actors.filter(g=>g.hasAllActorTags(e))}getFirstPlayerPawn(){return this.getFirstActor(Ni)?.getPawn()??null}clearWorld(){this.removeActors(...this.actors),this.actors=[],this.scene.remove(...this.scene.children),this.isEditorWorld&&(this.onEditorActorAddToWorld=void 0,this.onEditorActorRemoveFromWorld=void 0)}getPathName(){return this.name}addBox(e){return this.addBasicGeometry({...e,geometry:new Vg(e.width,e.height,e.depth)})}addSphere(e){return this.addBasicGeometry({...e,geometry:new wt(e.radius)})}addCapsule(e){return this.addBasicGeometry({...e,geometry:new uC(e.radius,e.height)})}addCylinder(e){return this.addBasicGeometry({...e,geometry:new Ft(e.radius,e.radius,e.height)})}addCone(e){return this.addBasicGeometry({...e,geometry:new NC(e.radius,e.height)})}addBasicGeometry(e){let g=new Kg({rootComponent:new ti({position:e.position,rotation:e.rotation,scale:e.scale,geometry:e.geometry,material:new Et({color:e.color}),physicsOptions:{enabled:!!e.motionType,motionType:e.motionType}})});return this.addActors(g),g}addAxesHelper(e){let g=new Kg({position:e.position,rotation:e.rotation});return g.rootComponent.add(new _E(e.size)),this.addActors(g),g}asExportedObject(e=!1){return PI.exportObject(this,e)}getGameTime(){return this.gameTime}getActiveCamera(){return this.overrideCamera?this.overrideCamera:this.playerControllers[0]?.getCamera()??null}renderScene(e,g){let t=this.getActiveCamera();t||this.logCameraWarning(),this.renderWindowSize=g;let C=t??this.fallbackCamera;C instanceof Jt&&(C.aspect=g.width/g.height,C.updateProjectionMatrix()),this.postProcessManager.renderScene(e,this.scene,C,g)}logCameraWarning(){let e=Date.now();e-this.lastCameraWarningTime>=1e4&&(console.warn('No camera found. Please add a three.js camera to your pawn or set one using "world.setOverrideCamera(camera)".'),this.lastCameraWarningTime=e)}getOverrideCamera(){return this.overrideCamera}setOverrideCamera(e){this.overrideCamera=e}getSkyboxComponent(){return this.skyboxComponent}setSkyboxComponent(e){if(this.skyboxComponent&&e&&this.skyboxComponent!==e){Hg(!1,"Skybox component already set, cannot set another");return}this.skyboxComponent=e}destroy(){this.isPlaying()&&this.endPlay(),this.scene.setWorld(null),this.lastCameraWarningTime=0,this.uiManager.destroy(),this.inputManager.destroy(),this.physicsEngine&&(this.physicsEngine.destroy(),this.physicsEngine=null),this.consoleManager.removeCommandHandler(this),this.consoleManager.destroy(),this.postProcessManager.destroy(),this.navigationServer?.destroy(),this.navigationMeshVisualization&&(this.scene.remove(this.navigationMeshVisualization),this.navigationMeshVisualization=null),this.hiddenInGameActors.clear(),this.actors=[]}doBeginPlay(){if(!this.physicsEngineCreated)throw new Error("Physics engine not created");this.consoleManager.addCommandHandler(this);for(let e of[...this.actors])e.beginPlay();this.inputManager.beginPlay(),this.timerSystem.beginPlay(),this.gameMode.beginPlay(),this.netWorld.beginPlay()}doEndPlay(){for(let e of this.actors)e.endPlay();this.netWorld.endPlay(),this.inputManager.endPlay(),this.gameMode.endPlay(),this.timerSystem.endPlay(),this.globalAudioManager.endPlay()}describe(e){let g={};this.editorData&&Object.keys(this.editorData).length>0&&(g.info=this.editorData);let t=e?.specifiedActors;return{...g,actorsNumber:this.actors.length,actors:this.actors.map(C=>C.describe({includeComponentsDetails:e?.includeComponentsDetails,omitDescription:t?!t.includes(C.uuid):!1}))}}clearWorldCommand(){return this.clearWorld(),"World cleared"}dumpSG(e="html"){if(e=e.toLowerCase(),e==="html"){let g=ff.dumpHtml(this),t=new Blob([g],{type:"text/html"}),C=URL.createObjectURL(t);return window.open(C,"_blank"),"Scene graph dumped to html"}return"Invalid format"}exportWorld(e){let g=PI.exportObject(this,!!e),t=JSON.stringify(g,null,2),C=new Blob([t],{type:"application/json"}),o=URL.createObjectURL(C);return window.open(o,"_blank"),!0}pause(){return this.isPaused=!this.isPaused,`World paused: ${this.isPaused}`}setSlomoCommand(e){let g=parseFloat(e);return isNaN(g)?"Invalid number":(this.slomo=g,`World slomo set to: ${this.slomo}`)}clearCachedResources(){return Lg.clearCachedResources(),!0}logCachedResources(){return Lg.logCachedResources(),!0}show(e){let g=e.toLowerCase();if(g==="stats")return this.statsDisplay.toggle(),"Stats console toggled";if(g==="navmesh"){let C=this.getNavigationServer();if(!C)return"Navigation server not available";if(this.navigationMeshVisualization)return this.scene.remove(this.navigationMeshVisualization),this.navigationMeshVisualization=null,"Navigation mesh visualization hidden";{let o=C.createDebugVisualization();return o?(o.traverse(s=>{s.raycast=()=>{}}),this.scene.add(o),this.navigationMeshVisualization=o,"Navigation mesh visualization shown"):(console.error("[Navigation Server] show navmesh: Failed to create debug visualization"),"Failed to create debug visualization")}}if(g==="collision"){let C=this.getPhysicsEngine();return C?(C.setDebugRendererEnabled(!C.isDebugRendererEnabled()),"Collision debug visualization "+(C.isDebugRendererEnabled()?"enabled":"disabled")):"Physics engine not available"}let t=[];for(let C of this.actors)t.push(...C.getComponents(ui));if(g==="lighthelper"){for(let C of t)C.showHelper(!C.isHelperVisible());return`Toggled light helpers for ${t.length} lights`}else if(g==="lightcamerahelper"){for(let C of t)C.showCameraHelper(!C.isCameraHelperVisible());return`Toggled light camera helpers for ${t.length} lights`}else return"Invalid helper type. Use: lighthelper, lightcamerahelper, navmesh, or collision"}setActorHiddenInGame(e,g){this.isEditorWorld||(g?(this.hiddenInGameActors.add(e),e.rootComponent.traverse(t=>t.layers.disableAll()),this.postProcessManager.hiddenObjects.add(e.rootComponent)):(this.postProcessManager.hiddenObjects.delete(e.rootComponent),e.rootComponent.traverse(t=>t.layers.enable(0)),this.hiddenInGameActors.delete(e)))}setSceneComponentHiddenInGame(e,g){this.isEditorWorld||(g?(this.hiddenInGameSceneComponents.add(e),e.traverse(t=>t.layers.disableAll()),this.postProcessManager.hiddenObjects.add(e)):(this.postProcessManager.hiddenObjects.delete(e),e.traverse(t=>t.layers.enable(0)),this.hiddenInGameSceneComponents.delete(e)))}setIsEditorWorld(e,g,t){this.isEditorWorld=e,g&&(this.onEditorActorAddToWorld=g),t&&(this.onEditorActorRemoveFromWorld=t)}};sA([zt("clearworld","Clear all actors from the world")],Vo.prototype,"clearWorldCommand",1),sA([zt("dumpsg","Dump scene graph to HTML file (usage: dumpsg [html])")],Vo.prototype,"dumpSG",1),sA([zt("exportworld","Export world data to JSON file (usage: exportworld [includeDefaults])")],Vo.prototype,"exportWorld",1),sA([zt("pause","Toggle world pause state")],Vo.prototype,"pause",1),sA([zt("slomo","Set world slow motion multiplier (usage: slomo <value>)")],Vo.prototype,"setSlomoCommand",1),sA([zt("clearcache","Clear all cached resources")],Vo.prototype,"clearCachedResources",1),sA([zt("logcache","Log all cached resources to console")],Vo.prototype,"logCachedResources",1),sA([zt("show","Show/hide debug visualizations (usage: show <lighthelper | lightcamerahelper | navmesh | collision>)")],Vo.prototype,"show",1),Vo=sA([dA("World")],Vo);var j6=oh(O6(),1);var onA=cs.registerVariable({name:"r.AutoInstancing",default:0,description:"Enable auto instancing on the GenesysWebGLRenderer"}),P6=cs.registerVariable({name:"r.ScreenPercentage",default:100,description:"Screen percentage for the GenesysWebGLRenderer"}),b0=class extends $n{constructor(e){super(e);l(this,"instanceMeshes",new Map);l(this,"tempMatrix",new se);l(this,"tempColor",new vA);l(this,"minInstancingThreshold",100);let g=this.render.bind(this);this.render=(C,o)=>{if(onA.get()){let s=this.autoInstance(C);g(C,o);for(let{objects:n}of s.values())for(let B of n)B.visible=!0}else g(C,o)};let t=this.renderBufferDirect.bind(this);this.renderBufferDirect=(C,o,s,n,B,a)=>{Pi.fixMaterialColorSpace(n),t(C,o,s,n,B,a),cl.addRenderBufferDirect(C,o,s,n,B,a)}}beginRenderFrame(){for(let{mesh:e}of this.instanceMeshes.values())e.visible=!1}endRenderFrame(){for(let[e,{mesh:g}]of this.instanceMeshes.entries())g.visible||(g.dispose(),g.removeFromParent(),this.instanceMeshes.delete(e))}autoInstance(e){let g=new Map;e.traverseVisible(t=>{if(!(t instanceof fA)||t instanceof VC||t.userData.isAutoInstance)return;let C=`${t.geometry.uuid}_${t.material.uuid}_${t.castShadow}_${t.receiveShadow}`;g.has(C)||g.set(C,{geometry:t.geometry,material:t.material,objects:[]}),g.get(C).objects.push(t)});for(let[t,C]of g){let o=0;for(let a of C.objects)a instanceof xi?o+=a.count:o+=1;if(o<this.minInstancingThreshold)continue;let{mesh:s,capacity:n}=this.instanceMeshes.get(t)??{mesh:void 0,capacity:0};if(!s||n<o){s&&(s.dispose(),s.removeFromParent()),s=new xi(C.geometry,C.material,o),s.userData.isAutoInstance=!0,s.frustumCulled=!1;let a=C.objects[0];s.castShadow=a.castShadow,s.receiveShadow=a.receiveShadow,this.instanceMeshes.set(t,{mesh:s,capacity:o}),e.add(s)}s.count!==o&&(s.count=o);let B=0;for(let a of C.objects){if(a instanceof xi)for(let E=0;E<a.count;++E)a.getMatrixAt(E,this.tempMatrix),s.setMatrixAt(B,this.tempMatrix.premultiply(a.matrixWorld)),a.instanceColor&&(a.getColorAt(E,this.tempColor),s.setColorAt(B,this.tempColor)),B+=1;else s.setMatrixAt(B,a.matrixWorld),a.material instanceof wg&&s.instanceColor&&s.setColorAt(B,a.material.color),B+=1;a.visible=!1}s.instanceMatrix.needsUpdate=!0,s.instanceColor&&(s.instanceColor.needsUpdate=!0),s.visible=!0}return g}},wf=class{constructor(A,e){this.container=A;l(this,"renderer");l(this,"abortController",new AbortController);l(this,"xrAnimationLoop",null);this.renderer=new b0(e),this.renderer.shadowMap.enabled=!0,this.renderer.shadowMap.type=LD,this.renderer.toneMapping=$C,window.addEventListener("resize",this.onWindowResize.bind(this),{signal:this.abortController.signal}),this.onWindowResize(),this.container.appendChild(this.renderer.domElement),P6.set(this.renderer.getPixelRatio()*100),P6.onValueChanged.add((g,t)=>{this.renderer.setPixelRatio(t/100)})}destroy(){this.renderer.domElement.remove(),this.abortController.abort(),this.renderer.dispose()}getWindowSize(){return{width:Math.floor(this.container.clientWidth||window.innerWidth),height:Math.floor(this.container.clientHeight||window.innerHeight)}}render(A){this.renderer.beginRenderFrame(),A.renderScene(this.renderer,this.getWindowSize()),this.renderer.endRenderFrame()}enableXR(A="local-floor"){this.renderer.xr.enabled=!0,this.renderer.xr.setReferenceSpaceType(A),console.log(`WebXR enabled with reference space: ${A}`)}disableXR(){this.renderer.xr.enabled=!1,this.xrAnimationLoop&&(this.renderer.setAnimationLoop(null),this.xrAnimationLoop=null)}setupXRAnimationLoop(A){this.xrAnimationLoop=A,this.renderer.setAnimationLoop(this.xrAnimationLoop)}isXREnabled(){return this.renderer.xr.enabled}isXRPresenting(){return this.renderer.xr.isPresenting}onWindowResize(){let A=this.getWindowSize();this.renderer.setSize(A.width,A.height)}};async function ZU(i,A,e={},g={}){let t=document.createElement("button"),C={position:"absolute",bottom:"20px",left:"calc(50% - 50px)",width:"100px",padding:"12px 6px",border:"1px solid #fff",borderRadius:"4px",background:"rgba(0, 0, 0, 0.1)",color:"#fff",font:"normal 13px sans-serif",textAlign:"center",opacity:"0.5",outline:"none",zIndex:"999",cursor:"pointer"};Object.assign(t.style,C,g.styles??{});let o=g.enterText??"ENTER VR",s=g.exitText??"EXIT VR",n=g.notSupportedText??"VR NOT SUPPORTED";t.textContent=o;let{optionalFeatures:B=["local-floor","hand-tracking"],requiredFeatures:a=[],framebufferScaleFactor:E}=e;if(t.onclick=async()=>{if("xr"in navigator&&navigator.xr)try{console.log("Requesting VR session with features:",{optionalFeatures:B,requiredFeatures:a});let Q=await navigator.xr.requestSession("immersive-vr",{optionalFeatures:B,requiredFeatures:a});console.log("VR session started with features:",Q.enabledFeatures),await i.xr.setSession(Q),E!==void 0&&(i.xr.setFramebufferScaleFactor(E),console.log("VR framebuffer scale factor set to:",E)),t.textContent=s,Q.addEventListener("end",()=>{t.textContent=o})}catch(Q){console.error("Failed to start VR session:",Q),t.textContent=n}else console.warn("WebXR not supported"),t.textContent=n},"xr"in navigator&&navigator.xr)try{await navigator.xr.isSessionSupported("immersive-vr")?t.style.opacity="1.0":t.textContent=n}catch(Q){console.warn("Error checking VR support:",Q),t.textContent=n}else t.textContent=n;return A.appendChild(t),t}var pC=class{static random(){return Math.floor(Math.random()*16777215)}};l(pC,"WHITE",16777215),l(pC,"BLACK",0),l(pC,"RED",16711680),l(pC,"GREEN",65280),l(pC,"BLUE",255),l(pC,"YELLOW",16776960),l(pC,"CYAN",65535),l(pC,"MAGENTA",16711935),l(pC,"GRAY",8421504),l(pC,"DARK_GRAY",4210752),l(pC,"LIGHT_GRAY",12632256),l(pC,"ORANGE",16753920),l(pC,"PURPLE",8388736),l(pC,"BROWN",9127187);var uQ=class i{static createPlayerStart(A,e,g){let t=new da({position:e,rotation:g});return t.editorData.displayName="Player Start",A.addActors(t),t}static createDefaultSkybox(A,e=CC.DEFAULT_OPTIONS){let g=new CC(e),t=new Kg({rootComponent:g});return t.editorData.displayName="Skybox",A.addActors(t),g}static createDefaultLighting(A,e=!0){let g=new EC({position:new m(10,50,-10),color:16777215,intensity:1,castShadow:!0,shadowMapSize:2048,shadowBias:0,shadowNormalBias:0,shadowNear:.1,shadowFar:100}),t=new Kg({rootComponent:g});if(t.editorData.displayName="Directional Light",e){let C=new cB({color:16777215,intensity:.5}),o=new Kg({rootComponent:C});return o.editorData.displayName="Ambient Light",A.addActors(t,o),{directionalLight:g,ambientLight:C}}else return A.addActors(t),{directionalLight:g,ambientLight:null}}static createDefaultPawn(A,e){e??=RC.makeVector({up:1.8});let g=new QC({position:e,movementComponent:new fi({...fi.DEFAULT_OPTIONS,characterControllerOptions:null}),camera:new Jt(60,1,.1,2e3)}),t=new Ni;return t.possess(g),A.addActors(g,t),{pawn:g,controller:t}}static createDefaultAnimatedCharacter(A,e){e??=RC.makeVector({up:1.8/2});let g=new Jt(60,1,.1,2e3),t=new Qn({modelUrl:"@engine/assets/character/mannequinG.glb",configUrl:"@engine/assets/character/config/mannequin-anim.json",meshPosition:new m(0,-1.8/2,0),meshRotation:new Pe(0,Math.PI,0),meshScale:new m(1,1,1),position:e,movementComponent:new fi({...fi.DEFAULT_OPTIONS,movementType:"thirdPerson"}),rootComponent:new ti({geometry:i.createDefaultPawnCapsuleGeometry(),material:new Et({color:pC.YELLOW,visible:!1,transparent:!0,opacity:.5}),physicsOptions:{enabled:!0,motionType:"kinematicVelocityBased",collisionProfile:"Character"}}),camera:g});g.position.set(0,1.8*1.3,1.8*2),g.lookAt(0,0,0),t.rootComponent.castShadow=!0;let C=new Ni;return C.possess(t),A.addActors(t,C),{pawn:t,controller:C}}static createDefaultPawnWithPhysics(A,e,g){g??=RC.makeVector({up:1.8/2});let t=new Jt(60,1,.1,2e3),C=new QC({position:g,movementComponent:new fi({...fi.DEFAULT_OPTIONS,movementType:e}),rootComponent:new ti({geometry:i.createDefaultPawnCapsuleGeometry(),material:new Et({color:pC.YELLOW}),physicsOptions:{enabled:!0,motionType:"kinematicVelocityBased",collisionProfile:"Pawn",generateCollisionEvents:!0}}),camera:t});e==="firstPerson"?t.position.set(0,1.8*.4,0):(t.position.set(0,1.8*2,1.8*3),t.lookAt(0,0,0));let o=C.rootComponent;o.castShadow=!0,o.getMesh().visible=e==="thirdPerson";let s=new Ni;return s.possess(C),A.addActors(C,s),{pawn:C,controller:s}}static createDefaultGround(A,e={}){let g=new ti({position:e.position??new m(0,-1.8/2,0),geometry:new Vg(e.size?.x??500,e.size?.y??.1,e.size?.z??500),material:Pi.DefaultMaterial,uvScaleTilesPerUnit:.2,physicsOptions:{enabled:!0,motionType:"static",collisionProfile:"BlockAll"}}),t=new Kg({rootComponent:g});return t.editorData.displayName="Ground",g.receiveShadow=!0,A.addActors(t),t}static createDefaultFog(A,e=ws.DEFAULT_OPTIONS){let g=new ws(e),t=new Kg({rootComponent:g});return t.editorData.displayName="Fog",A.addActors(t),t}static createDefaultEditorScene(A){i.createDefaultLighting(A,!1),i.createDefaultGround(A),i.createPlayerStart(A,new m(0,1.8/2,0)),i.createDefaultSkybox(A),console.log("Default scene created")}static createDefaultPawnCapsuleGeometry(){let A=.9/2;return new uC(A,1.8-A*2)}};var Sf=class Sf{constructor(A,e={}){this.container=A;l(this,"world");l(this,"stats",new j6.default);l(this,"lastTickTimeMS",0);l(this,"renderer");l(this,"destroyed",!1);l(this,"options");l(this,"vrButton",null);l(this,"actorsFromWorldData",[]);l(this,"loadingScreen",null);Lg.clearCachedResources(),this.options={...Sf.DEFAULT_OPTIONS,...e},this.container.style.position="relative";let g={...this.getDefaultRendererOptions(),...this.options.rendererOptions};this.renderer=new wf(this.container,g),this.stats.dom.style.position="absolute",this.stats.dom.style.top="10px",this.stats.dom.style.left="10px",this.container.appendChild(this.stats.dom),this.stats.showPanel(0),this.world=new Vo({...this.getWorldConfiguration(),gameId:this.options.gameId,gameLoop:new WeakRef(this)}),this.options.xrEnabled&&(this.renderer.enableXR(),this.options.vrSessionOptions?.framebufferScaleFactor!==void 0&&(this.renderer.renderer.xr.setFramebufferScaleFactor(this.options.vrSessionOptions.framebufferScaleFactor),console.log("\u{1F3AF} XR framebuffer scale factor set to:",this.options.vrSessionOptions.framebufferScaleFactor))),this.world.consoleManager.addCommandHandler(this)}static get DEFAULT_OPTIONS(){return{backgroundColor:8900331,gravity:new m(0,-9.81,0),xrEnabled:!1}}getWorldConfiguration(){return{rendererDomElement:this.renderer.renderer.domElement,gameContainer:this.container,backgroundColor:this.options.backgroundColor,physicsOptions:{gravity:this.options.gravity,engine:"rapier"},navigationOptions:{engine:"recast-navigation",debug:!1,options:bl.DEFAULT_OPTIONS,generateOnStartUp:!1},useManifold:!1,enableGamepad:!0}}getDefaultRendererOptions(){return{powerPreference:"high-performance",antialias:this.options.xrEnabled}}async start(){this.startLoadingScreen(),await this.world.createPhysicsEngine(),console.log("[GameLoop] waiting for resources (1)..."),await Lg.waitForResources(4294967295),console.log("[GameLoop] loading scene resources..."),await this.loadSceneResources(this.world),console.log("[GameLoop] calling preStart..."),await this.preStart(),await this.world.createNavigationServer(),await this.world.createManifold(),await this.world.createLightmapManager(this.renderer.renderer),this.world.options.navigationOptions.generateOnStartUp&&await this.world.createNavigationMeshFromScene(),console.log("[GameLoop] calling postStart..."),this.postStart(),this.options.xrEnabled&&this.createVRButton().catch(e=>{console.warn("[GameLoop] failed to create VR button:",e)}),console.log("[GameLoop] calling world.beginPlay..."),this.world.beginPlay();let A=e=>{if(this.destroyed)return;if(this.options.xrEnabled||requestAnimationFrame(A),this.stats.begin(),!this.lastTickTimeMS){this.lastTickTimeMS=e,this.stats.end();return}let g=e-this.lastTickTimeMS;this.lastTickTimeMS=e,this.tick({currentTimeMS:e,deltaTimeMS:g}),this.stats.end()};this.options.xrEnabled?this.renderer.setupXRAnimationLoop(A):requestAnimationFrame(A),console.log("[GameLoop] waiting for resources (2)..."),await Lg.waitForResources(4294967295),console.log("[GameLoop] resources loaded"),this.stopLoadingScreen()}destroy(){this.actorsFromWorldData=[],this.world.destroy(),this.renderer.destroy(),this.stats.dom.remove(),this.vrButton&&(this.vrButton.remove(),this.vrButton=null),this.destroyed=!0}setInputEnabled(A){this.world.inputManager.setInputEnabled(A)}async loadWorldData(A){console.log(`[GameLoop] removing ${this.actorsFromWorldData.length} actors before loading the new world`),this.startLoadingScreen(),this.world.removeActors(...this.actorsFromWorldData),this.actorsFromWorldData=[];let e=this.world.getActors();await PI.loadWorld(this.world,A);let g=this.world.getActors();this.actorsFromWorldData=g.filter(t=>!e.includes(t))}async loadWorldDataFromPath(A){console.log(`[GameLoop] loading world data from ${A}`);let e=await Lg.loadJsonObject(A);console.log(`[GameLoop] world data loaded from ${A}, loading...`),await this.loadWorldData(e)}async loadSceneResources(A){let e=A.sceneResources;if(!e){console.log("[GameLoop] No scene resources configured, skipping automatic loading");return}e.lightmap&&await this.loadLightmapFromPaths(e.lightmap.metadataPath,e.lightmap.texturePath),e.navMesh&&await this.loadNavMeshFromPath(e.navMesh.path)}async loadLightmapFromPaths(A,e){if(Lc)try{let g=GC.storageProvider,t=new og(A),C=new og(e),o=await g.downloadFileAsJson(t),s=await g.downloadFileAsBuffer(C),n=this.world.getLightmapManager();n&&(await n.importLightmap(o,s,{throwOnError:!1}),console.log(`[GameLoop] \u2713 Lightmaps loaded from: ${A}`))}catch(g){console.warn(`[GameLoop] \u26A0\uFE0F Could not load lightmaps from: ${A}`,g)}}async loadNavMeshFromPath(A){try{let g=new og(A),C=await GC.storageProvider.downloadFileAsBuffer(g),o=this.world.getNavigationServer();if(o&&await o.importNavigationMeshFromData(C)){console.log(`[GameLoop] \u2713 NavMesh loaded from: ${A}`);return}}catch(g){console.warn(`[GameLoop] \u26A0\uFE0F Could not load NavMesh from: ${A}`,g)}if(this.world.options.navigationOptions.generateOnStartUp)try{console.log("[GameLoop] \u{1F504} Falling back to auto-generation of NavMesh"),await this.world.createNavigationMeshFromScene(),console.log("[GameLoop] \u2713 NavMesh auto-generated from scene geometry")}catch(g){console.error("[GameLoop] \u2717 Failed to auto-generate NavMesh",g)}else console.log("[GameLoop] \u2139\uFE0F NavMesh auto-generation disabled")}getWorld(){return this.world}enableXR(){this.options.xrEnabled=!0,this.renderer.enableXR()}disableXR(){this.options.xrEnabled=!1,this.renderer.disableXR()}async createVRButton(){try{return this.vrButton&&(this.vrButton.remove(),this.vrButton=null),this.vrButton=await ZU(this.renderer.renderer,this.container,this.options.vrSessionOptions??{}),this.vrButton}catch(A){return console.error("[GameLoop] failed to load VRButton:",A),Promise.reject(A)}}isXREnabled(){return this.renderer.isXREnabled()}isXRPresenting(){return this.renderer.isXRPresenting()}async exportNavigationMesh(A){return await this.world.exportNavigationMesh(A)}async importNavigationMesh(A){if(A){let g=this.world.getNavigationServer();return g?await g.importNavigationMeshFromData(A):!1}let e=this.world.sceneResources?.navMesh?.path;return e?(await this.loadNavMeshFromPath(e),!0):(console.error("[GameLoop] importNavigationMesh: No NavMesh data provided and no navMesh configured in scene resources"),!1)}startLoadingScreen(A=null){this.loadingScreen||(this.loadingScreen=A??this.createLoadingScreen(),this.loadingScreen&&(console.trace("[GameLoop] starting loading screen"),this.loadingScreen.start(this.world)))}stopLoadingScreen(){this.loadingScreen&&(console.trace("[GameLoop] stopping loading screen"),this.loadingScreen.stop(),this.loadingScreen=null)}async preStart(){uQ.createDefaultLighting(this.world),uQ.createDefaultPawnWithPhysics(this.world,"thirdPerson"),uQ.createDefaultGround(this.world),uQ.createDefaultSkybox(this.world)}postStart(){}createLoadingScreen(){return null}tick(A){this.world.tick(A.deltaTimeMS/1e3),this.renderer.render(this.world)}loadWorld(A){return this.loadWorldDataFromPath(og.fromString(A)),!0}reload(){let A=new on().exportObject(this.world,!1),e=JSON.stringify(A);return this.world.clearWorld(),PI.loadWorld(this.world,JSON.parse(e)).then(()=>{let g=this.world.getFirstActor(Ni),t=this.world.getFirstActor(QC);g&&t&&g.possess(t),console.dir(A)}),!0}};sA([zt("loadworld","Load world from file path (usage: loadworld <path>)")],Sf.prototype,"loadWorld",1),sA([zt("reload","Reload the current world")],Sf.prototype,"reload",1);var zU=Sf,XU=class{async loadWorldData(A){return Promise.resolve()}async loadWorldDataFromPath(A){return Promise.resolve()}start(){return Promise.resolve()}destroy(){}setInputEnabled(A){}getWorld(){return null}};var Qd=class{static async loadFile(A){if(this.cache.has(A.initialPath))return this.cache.get(A.initialPath);try{A=await In(A);let e=await fetch(`${A.getResolvedPath()}?raw`);if(!e.ok)throw new Error(`Failed to load file: ${A} (${e.status}: ${e.statusText})`);let g=await e.text(),t=await o_(g);return this.cache.set(A.initialPath,t),t}catch(e){throw console.error(`Error loading file ${A}:`,e),e}}static async loadTemplate(A){return this.loadFile(A)}static async loadStyles(A){return this.loadFile(A)}static async loadUIAsset(A,e){let[g,t]=await Promise.all([this.loadTemplate(A),this.loadStyles(e)]);return{template:g,styles:t}}static clearCache(){this.cache.clear()}};l(Qd,"cache",new Map);var $U=class{constructor(){l(this,"container",null);l(this,"isActive",!1)}start(A){this.isActive||(this.createLoadingScreen(A),this.isActive=!0)}stop(){!this.isActive||!this.container||(this.container.style.opacity="0",setTimeout(()=>{this.container&&this.container.parentNode&&this.container.parentNode.removeChild(this.container),this.container=null,this.isActive=!1},300))}createLoadingScreen(A){this.container=document.createElement("div"),this.container.style.cssText=`
6832
6832
  position: absolute;
6833
6833
  top: 0;
6834
6834
  left: 0;
@@ -438,7 +438,10 @@ let World = class World extends Playable {
438
438
  this.uuid = loader.loadValue('$uuid') ?? this.uuid;
439
439
  this.sceneResources = loader.loadValue('resources', this.sceneResources);
440
440
  this.editorData = loader.loadValue('editorData', this.editorData);
441
- this.postProcessConfiguration = loader.loadValue('postProcessConfiguration', this.postProcessConfiguration);
441
+ const loadedPostProcessConfig = loader.loadValue('postProcessConfiguration', this.postProcessConfiguration);
442
+ if (loadedPostProcessConfig) {
443
+ this.setPostProcessConfiguration(loadedPostProcessConfig);
444
+ }
442
445
  // I could do,
443
446
  // ```
444
447
  // const actors = [...this.actors];
@@ -1464,4 +1467,4 @@ World = __decorate([
1464
1467
  __metadata("design:paramtypes", [Object])
1465
1468
  ], World);
1466
1469
  export { World };
1467
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV29ybGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZ2FtZS9Xb3JsZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFFL0IsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDM0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzVFLE9BQU8sRUFBaUMsa0JBQWtCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNwRyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxNQUFN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
1470
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV29ybGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZ2FtZS9Xb3JsZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFFL0IsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDM0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzVFLE9BQU8sRUFBaUMsa0JBQWtCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNwRyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxNQUFN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
package/package.json CHANGED
@@ -1,10 +1,13 @@
1
1
  {
2
2
  "name": "@directivegames/genesys.js",
3
- "version": "3.1.26",
3
+ "version": "3.1.27",
4
4
  "description": "Mini game engine built on top of three.js",
5
5
  "license": "UNLICENSED",
6
6
  "main": "./dist/src/index.js",
7
7
  "type": "module",
8
+ "publishConfig": {
9
+ "access": "public"
10
+ },
8
11
  "files": [
9
12
  "dist",
10
13
  "src",
package/src/game/World.ts CHANGED
@@ -243,7 +243,10 @@ export class World extends Playable implements ISceneGraphDebugNodeGenerator, IS
243
243
 
244
244
  this.sceneResources = loader.loadValue('resources', this.sceneResources);
245
245
  this.editorData = loader.loadValue('editorData', this.editorData);
246
- this.postProcessConfiguration = loader.loadValue('postProcessConfiguration', this.postProcessConfiguration);
246
+ const loadedPostProcessConfig = loader.loadValue('postProcessConfiguration', this.postProcessConfiguration);
247
+ if (loadedPostProcessConfig) {
248
+ this.setPostProcessConfiguration(loadedPostProcessConfig);
249
+ }
247
250
 
248
251
  // I could do,
249
252
  // ```