@directivegames/genesys.js 3.1.25 → 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.
package/dist/genesys.min.mjs
CHANGED
|
@@ -5086,7 +5086,7 @@ void main() {
|
|
|
5086
5086
|
Session ID: ${this.gameSession?.getDescription().sessionId}<br/>
|
|
5087
5087
|
Client ID: ${this.clientId}<br/>
|
|
5088
5088
|
</div>
|
|
5089
|
-
`;this.statsUIElement.setHTML(e)}doBeginPlay(){this.world.consoleManager.addCommandHandler(this)}doEndPlay(){this.gameSessionManager=null,this.gameSession=null,this.localNetObjects.clear(),this.remoteNetObjects.clear(),this.localRelevantNetObjectsInSession.clear(),this.addToSessionQueue.clear(),this.deleteFromSessionQueue.clear(),this.pendingNetObjects.clear(),this.sessionClients={},this.lastReplicatedStates.clear(),this.remoteObjectCreationRequests.clear(),this.destroyStatsUI(),this.world.consoleManager.removeCommandHandler(this),this.heartbeatTimer&&(clearInterval(this.heartbeatTimer),this.heartbeatTimer=null),this.pingTimer&&(clearInterval(this.pingTimer),this.pingTimer=null)}isClientInactive(e){let g=this.sessionClients[e];return g?Date.now()-g.lastHeartBeatTime>30*1e3:!1}};sA([zt("dumpnetobjects","Dump all net objects to console")],Co.prototype,"dumpNetObjects",1),sA([zt("setmemorysession","Set memory session manager")],Co.prototype,"setMemorySessionManager",1),sA([zt("setwebsocketsession","Set WebSocket session manager (usage: setwebsocketsession [url])")],Co.prototype,"setWebSocketSessionManager",1),sA([zt("joinorcreatewebsocket","Join or create WebSocket session (usage: joinorcreatewebsocket [url])")],Co.prototype,"joinOrCreateWebSocketSession",1),sA([zt("createsession","Create a new session (usage: createsession [name])")],Co.prototype,"createSessionCommand",1),sA([zt("joinsession","Join a session by ID (usage: joinsession <sessionId>)")],Co.prototype,"joinSessionCommand",1),sA([zt("joinfirstsession","Join the first available session")],Co.prototype,"joinFirstSessionCommand",1),sA([zt("listsessions","List all available sessions")],Co.prototype,"listSessionsCommand",1),sA([zt("togglemovementprediction","Toggle movement prediction (usage: togglemovementprediction <true | false>)")],Co.prototype,"toggleMovementPrediction",1),sA([zt("setmovementlerpalpha","Set movement prediction lerp alpha (usage: setmovementlerpalpha <value>)")],Co.prototype,"setMovementLerpAlpha",1),sA([zt("stat","Toggle network statistics display (usage: stat net)")],Co.prototype,"stat",1);var Oo=Co;var oo=Symbol("IAsyncLoadable"),JC=class{constructor(){l(this,"_promise",null);l(this,"_runningTask",null)}runTask(A){let e=A;return this._runningTask=e,this._promise=(async()=>{await A(),this._runningTask===e&&(this._promise=null)})(),this._promise}isRunning(){return this._promise!==null}async waitUntilComplete(){this._promise&&await this._promise}};function M5(i){return i&&i[oo]===!0}var G5,R5,Kg=class extends(R5=Os,G5=bC,R5){constructor(e={}){super();this.options=e;l(this,G5,!0);l(this,"editorData",{});l(this,"uuid",BC());l(this,"name");l(this,"_rootComponent");l(this,"world",null);l(this,"lifeSpan",0);l(this,"remoteNetClientId",null);l(this,"remoteNetDeviceId",null);l(this,"netRelevant",!1);l(this,"movementPredictor",null);l(this,"prefabName",null);l(this,"prefabData",null);l(this,"prefabInheritanceChain",null);l(this,"ctorArgOptions");l(this,"$prefab",null);l(this,"transient",!1);l(this,"actorTags",[]);l(this,"hiddenInGame",!1);l(this,"editorOnly",!1);l(this,"onAddedToWorld",new oe);l(this,"onTickPrePhysics",new oe);l(this,"onTickPostPhysics",new oe);l(this,"onBeginPlay",new oe);l(this,"onEndPlay",new oe);l(this,"onPreEndPlay",new oe);l(this,"onClicked",new oe);l(this,"onCollideWith",new oe);l(this,"onOverlapWith",new oe);l(this,"onStopCollidingWith",new oe);l(this,"onStopOverlappingWith",new oe);this.ctorArgOptions=e,e={...Kg.DEFAULT_OPTIONS,...e},this.name=eB.generateName(this),this.actorTags=e.actorTags?[...e.actorTags]:[];let g=e.rootComponent;g&&!Hg(g.getActor()===null)&&(g=void 0),g?(this._rootComponent=g,e.position&&this.rootComponent.position.copy(e.position),e.rotation&&this.rootComponent.rotation.copy(e.rotation),e.scale&&this.rootComponent.scale.copy(e.scale)):this._rootComponent=new $A({position:e.position,rotation:e.rotation,scale:e.scale}),this.rootComponent.setActor(this);for(let C of e.sceneComponents??[])C instanceof $A?this.rootComponent.add(C):console.trace(`${C} is not a SceneComponent`);this.rootComponent.updateMatrixWorld(!0);let t=e.prefabName;t&&(this.prefabName=t)}static get DEFAULT_OPTIONS(){return{actorTags:[]}}getPrefabName(){return this.prefabName??this.$prefab?.$path??null}getPrefabData(){return this.prefabData}getPrefabInheritanceChain(){return this.prefabInheritanceChain}setPrefab(e,g,t){return this.prefabName=e,this.prefabData=g,this.prefabInheritanceChain=t??null,this}clearPrefab(){return this.prefabName=null,this.prefabData=null,this.prefabInheritanceChain=null,this}getActorTags(){return[...this.actorTags]}setActorTags(e){return this.actorTags=[...e],this}addActorTag(e){return this.actorTags.includes(e)||this.actorTags.push(e),this}removeActorTag(e){let g=this.actorTags.indexOf(e);return g!==-1&&this.actorTags.splice(g,1),this}hasActorTag(e){return this.actorTags.includes(e)}hasAnyActorTag(e){return e.some(g=>this.actorTags.includes(g))}hasAllActorTags(e){return e.every(g=>this.actorTags.includes(g))}setTransient(e){this.transient=e}isTransient(){return this.transient}static async spawnPrefabActor(e,g,t={},C){let o=t[e];return WE(o)?await PI.loadActor({ctor:{position:g?.position,rotation:g?.rotation,scale:g?.scale},prefabName:e},t,C):Ql(e,t,{ctorArgsOverrides:{position:g?.position,rotation:g?.rotation,scale:g?.scale}})}getDefaultOptions(){return this.constructor.DEFAULT_OPTIONS}export(e,g){let t={editorData:this.editorData,actorTags:this.actorTags?.length>0?[...this.actorTags]:void 0,hiddenInGame:this.hiddenInGame?!0:void 0,editorOnly:this.editorOnly?!0:void 0},C=Il(this.constructor);for(let s of Object.keys(C))s in this&&(t[s]=this[s]);let o={uuid:this.uuid,class:mg.getClassNameChecked(this),properties:t};return o.ctor=e.exportObject({...this.getExportedConstructor(),rootComponent:this.rootComponent},g),o.prefabName=this.prefabName??void 0,this.prefabData?.parentPrefabName&&(o.parentPrefabName=this.prefabData.parentPrefabName),o}clicked(e){this.onClicked.invoke(this,e)}get rootComponent(){return this._rootComponent}setRootComponent(e,g){if(!Hg(!this.isPlayEnded()))return this;if(!Hg(e.getActor()===null))return this;g&&(e.position.copy(this.rootComponent.position),e.rotation.copy(this.rootComponent.rotation),e.scale.copy(this.rootComponent.scale));let t=this.rootComponent;return t.removeFromParent(),t.setActor(null),this._rootComponent=e,this.rootComponent.setActor(this),this.rootComponent.updateMatrixWorld(!0),this.isPlaying()&&this.rootComponent.beginPlay(),this.world&&this.world.scene.add(e),this}collapseRootComponent(){if(Hg(this.getPlayState()==="notStarted")&&mg.getClassOrConstructorName(this.rootComponent)==="SceneComponent"&&this.rootComponent.children.length===1){let e=this.rootComponent.children[0];if(Hg(e instanceof $A))return e.removeFromParent(),this.setRootComponent(e,!0),!0}return!1}setWorld(e){Hg(!this.world||!e)&&(this.world=e,e&&this.onAddedToWorld.invoke(this,e))}getWorld(){return this.world}tickPrePhysics(e){if(this.lifeSpan>0&&(this.lifeSpan-=e,this.lifeSpan<=0)){this.destroy();return}if(this.movementPredictor){let g=this.movementPredictor.predictCurrentTransform();if(g){let t=iC.lerpTransform({position:this.rootComponent.position,rotation:this.rootComponent.quaternion,scale:this.rootComponent.scale},g,iC.LerpAlpha);this.setWorldTransform({position:t.position,rotation:new Pe().setFromQuaternion(t.rotation),scale:t.scale})}}this.rootComponent.tickPrePhysics(e),this.onTickPrePhysics.invoke(this,e)}tickPostPhysics(e){this.rootComponent.tickPostPhysics(e),this.onTickPostPhysics.invoke(this,e),this.movementPredictor&&this.movementPredictor.addLocalTransform({timestamp:iC.currentTime(),position:this.rootComponent.position.clone(),rotation:this.rootComponent.quaternion.clone(),scale:this.rootComponent.scale.clone()})}forwardDirection(){return new m(0,0,-1).applyQuaternion(this.rootComponent.quaternion).normalize()}rightDirection(){return new m(1,0,0).applyQuaternion(this.rootComponent.quaternion).normalize()}upDirection(){return new m(0,1,0).applyQuaternion(this.rootComponent.quaternion).normalize()}getPhysicsEngine(){return this.world?this.world.getPhysicsEngine():null}setHidden(e){return this.isHidden()!==e&&this.rootComponent.setHidden(e,!0),this}isHidden(){return this.rootComponent.isHidden()}replacePhysicsOptions(e,g=!1){return this.rootComponent.replacePhysicsOptions(e,g),this}overridePhysicsOptions(e,g=!1){return this.rootComponent.overridePhysicsOptions(e,g),this}setPhysicsEnabled(e,g=!1){return this.rootComponent.setPhysicsEnabled(e,g),this}isPhysicsEnabled(){return this.rootComponent instanceof _g&&this.rootComponent.isPhysicsEnabled()}generateDebugNode(){let e=[];return e.push(this.rootComponent.generateDebugNode()),{title:this.name,children:e,data:{uuid:this.uuid}}}getLifeSpan(){return this.lifeSpan}setLifeSpan(e){return this.lifeSpan=e,this}addComponent(e){return this.addComponents(e)}addComponents(...e){return e.forEach(g=>{this.rootComponent.add(g)}),this}getComponent(e=$A){return this.rootComponent.getComponent(e)}getComponents(e=$A){return this.rootComponent.getComponents(e)}getPathName(){return this.world?`${this.world.getPathName()}.${this.name}`:this.name}destroy(){this.world&&this.world.removeActors(this)}handleDeath(e){this.destroy()}asExportedObject(e=!1){return PI.exportObject(this,e)}asExportedPrefabData(){return PI.exportAsPrefab(this)}setWorldTransform(e){this.rootComponent.setWorldTransform(e)}setWorldPosition(e){this.setWorldTransform({position:e})}setWorldRotation(e){this.setWorldTransform({rotation:e})}setWorldScale(e){this.setWorldTransform({scale:e})}setWorldQuaternion(e){this.setWorldTransform({rotation:new Pe().setFromQuaternion(e)})}getWorldPosition(){return this.rootComponent.getWorldPosition()}getWorldRotation(){return this.rootComponent.getWorldRotation()}getWorldScale(){return this.rootComponent.getWorldScale()}getWorldQuaternion(){return this.rootComponent.getWorldQuaternion()}getWorldTransform(){return this.rootComponent.getWorldTransform()}setNetRelevant(e){this.netRelevant=e}isNetRelevant(){return this.netRelevant}getNetObjectId(){return`${mg.getClassOrConstructorName(this)}'${this.uuid}'`}setRemoteNetClientId(e){this.remoteNetClientId=e}setRemoteNetDeviceId(e){this.remoteNetDeviceId=e}getNetDeviceId(){return this.remoteNetDeviceId??Oo.getDeviceId()}getNetClientId(){if(this.remoteNetClientId)return this.remoteNetClientId;let e=this.getWorld()?.netWorld;if(!e)throw new Error("Failed to get net world when getting net client id");return e.clientId}consumeLocalDynamicState(){return!1}getNetConstructionData(){return this.asExportedObject()}getNetDynamicState(e){let g=e||null,t=g?.position,C=g?.rotation,o=g?.scale,s=this.rootComponent.position.toArray(),n=this.rootComponent.rotation.toArray(),B=this.rootComponent.scale.toArray();return g&&Oo.isVectorNearlyEqual(t,s)&&Oo.isVectorNearlyEqual(C,n)&&Oo.isVectorNearlyEqual(o,B)?null:{position:s,rotation:n,scale:B,timestamp:iC.currentTime()}}setNetDynamicState(e){let{position:g,rotation:t,scale:C,timestamp:o}=e;this.movementPredictor??=new iC,this.movementPredictor.addRemoteTransform({timestamp:o,position:new m(g[0],g[1],g[2]),rotation:new qA().setFromEuler(new Pe(t[0],t[1],t[2])),scale:new m(C[0],C[1],C[2])})}setOverrideMaterial(e){return this.rootComponent.setOverrideMaterial(e,!0),this}getExportedConstructor(){let e=this.rootComponent.isTransient();return{...this.options,position:e?this.getWorldPosition():void 0,rotation:e?this.getWorldRotation():void 0,scale:e?this.getWorldScale():void 0,sceneComponents:void 0,__isDeserializing:void 0,prefabName:void 0}}doBeginPlay(){this.rootComponent.beginPlay(),this.onBeginPlay.invoke(this),this.getWorld()?.netWorld.addNetObject(this),this.isHiddenInGame()&&this.getWorld()?.setActorHiddenInGame(this,!0)}doPreEndPlay(){this.onPreEndPlay.invoke(this)}doEndPlay(){this.isHiddenInGame()&&this.getWorld()?.setActorHiddenInGame(this,!1),this.getWorld()?.netWorld.removeNetObject(this),this.rootComponent.endPlay(),this.onEndPlay.invoke(this),this.world=null}calcBoundingBox(){this.rootComponent.updateMatrixWorld(!0);let e=this.getComponents($A);for(let g of e)g.calcBoundingBox();return this.getBoundingBox()}getBoundingBox(){let e=new ug,g=this.getComponents($A);for(let t of g){let C=t.boundingBox;C&&e.union(C)}return e}describe(e){if(e?.omitDescription){let o={name:this.name,uuid:this.uuid};return this.editorData?.displayName&&(o.displayName=this.editorData.displayName),o}let g={name:this.name,uuid:this.uuid,className:mg.getClassName(this)??this.constructor.name,position:Ps.dumpPosition(this.getWorldPosition()),rotation:Ps.dumpRotation(this.getWorldRotation()),scale:Ps.dumpScale(this.getWorldScale())};this.editorData?.displayName&&(g.displayName=this.editorData.displayName),this.editorData?.description&&(g.description=this.editorData.description),this.calcBoundingBox(),this.getBoundingBox().isEmpty()||(g.boundingBox=Ps.dumpBoundingBox(this.getBoundingBox()));let C=o=>{let s=o.describe({recalculateBounds:!1,includeDetails:e?.includeComponentsDetails});if(o.children&&o.children.length>0){let n=o.children.map(C).filter(B=>B&&Object.keys(B).length>0);n.length>0&&(s.children=n)}return s};return g.rootComponent=C(this.rootComponent),g}isHiddenInGame(){return this.hiddenInGame}setHiddenInGame(e){this.hiddenInGame=e,this.world&&this.world.setActorHiddenInGame(this,e)}isEditorOnly(){return this.editorOnly}setEditorOnly(e){this.editorOnly=e}getCamera(){return this.getComponent(lo)??null}getPlayerController(){return null}isPlayerControlled(){return!!this.getPlayerController()}async waitForComponentsToLoad(){let t=this.getComponents($A).filter(C=>M5(C)).map(C=>C.waitForLoad());await Promise.all(t)}serialize(e){e.dumpValue("rootComponent",this.rootComponent,"_rootComponent"),e.dumpProperties(this),this.isEditorOnly()&&e.markEditorOnly()}deserialize(e){let g=e.loadValue("rootComponent",this.rootComponent);g&&g!==this.rootComponent&&this.setRootComponent(g,!1),e.loadProperties(this)}onEditorPropertyChanged(e,g,t){e==="actorTags"&&this.setActorTags(g)}onEditorSelectedChanged(e,g){this.getComponents($A).forEach(t=>t.onEditorSelectedChanged(e,g))}onEditorAddToWorld(){this.getComponents($A).forEach(e=>e.onEditorAddToWorld())}onEditorRemoveFromWorld(){this.getComponents($A).forEach(e=>e.onEditorRemoveFromWorld())}getConfigurationWarnings(){return[]}getEditorClassIcon(){return"Icon_Actor"}};l(Kg,"EDITOR_CLASS_META",{actorTags:{isTagProperty:!0}}),sA([KC({editorOnly:!0,hidden:!0})],Kg.prototype,"editorData",2),sA([KC({transientOnPrefab:!0,readonly:!0})],Kg.prototype,"uuid",2),sA([KC({ctorArg:"ctorArgOnly"})],Kg.prototype,"ctorArgOptions",2),sA([KC({default:!1,category:"Advanced"})],Kg.prototype,"hiddenInGame",2),sA([KC({default:!1,category:"Advanced"})],Kg.prototype,"editorOnly",2),Kg=sA([dA("Actor")],Kg);var k5,_5,vt=class extends(_5=_g,k5=oo,_5){constructor(e={}){super(e);l(this,k5,!0);l(this,"onMeshLoaded",new oe);l(this,"model",null);l(this,"gltf",null);l(this,"_asyncTaskWorker",new JC);this.options.modelUrl&&this.loadModel(og.fromString(this.options.modelUrl))}static get DEFAULT_OPTIONS(){return{..._g.DEFAULT_OPTIONS,modelUrl:void 0,material:void 0,materials:void 0,excludeFromNavigation:!1,useDynamicMaterials:!1}}async waitForLoad(){await this._asyncTaskWorker.waitUntilComplete()}isLoading(){return this._asyncTaskWorker.isRunning()}async loadModel(e){await this._asyncTaskWorker.runTask(async()=>{this.options.modelUrl=e.initialPath;let g=await Lg.loadModel(e);g&&(this.model?.removeFromParent(),this.gltf=g,this.model=A_(g.scene),Lc&&this.deepCloneGeometries(this.model),mC()||(this.options.material?await this.setMaterial(this.options.material):this.options.materials&&await this.setMaterials(this.options.materials)),this.add(this.model),this.updateMatrixWorld(!0),this.gltf=g,this.refreshPhysics(),this.model.traverse(t=>{t instanceof fA&&this.bindObject3DProperties(t,["castShadow","receiveShadow"])}),this.options.useDynamicMaterials&&this.getActor()?.isPlaying()&&this.cloneMaterials(),this.onMeshLoaded.invoke(this,this.model))})}deepCloneGeometries(e){e.traverse(g=>{g instanceof fA&&g.geometry&&(g.geometry=g.geometry.clone())})}cloneMaterials(){this.model&&this.model.traverse(e=>{e instanceof fA&&e.material&&(Array.isArray(e.material)?e.material=e.material.map(g=>g.clone()):e.material=e.material.clone())})}refreshPhysics(){if(this.getActor()?.isPlaying()&&this.isPhysicsEnabled()){let g=this.getPhysicsEngine();g&&(g.removeComponent(this),this.motionType=g.addComponent(this)??null)}}async setMaterial(e){if(typeof e=="string"&&(this.options.material=e,!e&&!e&&typeof this.options.modelUrl=="string")){await this.loadModel(og.fromString(this.options.modelUrl));return}let g=await Lg.loadGenericMaterial(e);if(g){let t=this.getAllMeshes();for(let C of t)C.material=g}}async setMaterials(e){this.options.materials=e;let g=this.getAllMeshes();(await Promise.all(e.map(C=>Lg.loadGenericMaterial(C)))).forEach((C,o)=>{C&&o<g.length&&(g[o].material=C)})}getMaterialBySlot(e){let g=this.getAllMeshes();return e<0||e>=g.length?null:g[e].material}async setMaterialBySlot(e,g){let t=this.getAllMeshes();if(e<0||e>=t.length){console.warn(`GLTFMeshComponent: Invalid slot index ${e}. Valid range is 0-${t.length-1}`);return}let C=await Lg.loadGenericMaterial(g);C&&(t[e].material=C)}getModel(){return this.model}getModelTemplate(){return this.gltf?.scene??null}getGLTF(){return this.gltf}getAnimations(){return this.gltf?.animations??[]}getSkinnedMeshData(){return this.model?this.getAllSkinnedMeshes()[0]??null:null}getAllSkinnedMeshes(){if(!this.model)return[];let e=[];for(let g of this.getAllMeshes())g instanceof VC&&g.skeleton&&g.skeleton.bones&&g.skeleton.bones.length>0&&e.push({skinnedMesh:g,skeleton:g.skeleton});return e}getMesh(){return this.getAllMeshes()[0]??null}getAllMeshes(){let e=[];return this.model?.traverse(g=>{g instanceof fA&&e.push(g)}),e}isModelLoaded(){return!!this.model}onEditorPropertyChanged(e,g,t){super.onEditorPropertyChanged(e,g,t),e==="modelUrl"?this.loadModel(og.fromString(g)):e==="material"?this.setMaterial(g):e.startsWith("materials")&&!this.options.material&&this.options.materials&&this.setMaterials(this.options.materials)}calcBoundingBox(){console.log("Calculating bounding box for GLTFMeshComponent",this.getActor()?.editorData?.displayName),this._boundingBox=vt.calcBoundingBoxFromGLTFModel(this.getModel(),this.getActor()?.editorData?.displayName)}static calcBoundingBoxFromGLTF(e){return!e||!e.scene?(console.warn("GLTFMeshComponent: No GLTF scene available to calculate bounding box. Has the model finished loading?"),new ug):vt.calcBoundingBoxFromGLTFModel(e.scene)}static calcBoundingBoxFromGLTFModel(e,g){if(!e)return console.warn("GLTFMeshComponent: No GLTF scene available to calculate bounding box. Has the model finished loading?",g),new ug;let t=new ug;return e.traverse(C=>{if(C instanceof fA){C.updateMatrixWorld(!0),C.geometry.computeBoundingBox();let o=new ug;o.copy(C.geometry.boundingBox),o.applyMatrix4(C.matrixWorld),t.union(o)}}),t}describe(e){let g=super.describe(e);return e?.includeDetails&&(g.modelUrl=this.options.modelUrl,g.material=this.options.material,g.materials=this.options.materials,g.useDynamicMaterials=this.options.useDynamicMaterials),g}getEditorClassIcon(){return"Icon_GLTFMesh"}};l(vt,"EDITOR_CLASS_META",{..._g.EDITOR_CLASS_META,modelUrl:{type:["model"]},material:{type:["material"]},materials:{array:{child:{type:["material"]}}}}),vt=sA([dA("GLTFMeshComponent")],vt);var nB=class extends Kg{static get DEFAULT_OPTIONS(){return{...Kg.DEFAULT_OPTIONS,modelUrl:void 0,material:void 0,physicsOptions:void 0}}constructor(A){let e={...A,rootComponent:void 0},g=A.rootComponent;g&&g instanceof $A&&(e.position=g.position.clone(),e.rotation=g.rotation.clone(),e.scale=g.scale.clone(),g instanceof vt&&(e.modelUrl=g.options.modelUrl,e.material=g.options.material,e.physicsOptions=g.options.physicsOptions)),super(e);let t=new vt({modelUrl:e.modelUrl,material:e.material,physicsOptions:e.physicsOptions});this.setRootComponent(t,!1)}setRootComponent(A,e){return super.setRootComponent(A,e),A instanceof vt||console.error("GLTFMeshActor can only have GLTFMeshComponent as root"),this}getMeshComponent(){return this.getComponent(vt)}async waitForLoad(){let A=this.getMeshComponent();A&&await A.waitForLoad()}getEditorClassIcon(){return"Icon_GLTFMesh"}};l(nB,"EDITOR_CLASS_META",{...Kg.EDITOR_CLASS_META,modelUrl:{type:["model"]},material:{type:["material"]}}),nB=sA([dA("GLTFMeshActor")],nB);var DoA=Object.defineProperty,uoA=(i,A,e)=>A in i?DoA(i,A,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[A]=e,LC=(i,A,e)=>uoA(i,typeof A!="symbol"?A+"":A,e),N5=i=>{let A,e=new Set,g=(s,n)=>{let B=typeof s=="function"?s(A):s;if(!Object.is(B,A)){let a=A;A=n??(typeof B!="object"||B===null)?B:Object.assign({},A,B),e.forEach(E=>E(A,a))}},t=()=>A,C={setState:g,getState:t,getInitialState:()=>o,subscribe:s=>(e.add(s),()=>e.delete(s))},o=A=i(g,t,C);return C},yoA=(i=>i?N5(i):N5),$p=yoA((i,A)=>({emitters:{},shouldEmit:!0,registerEmitter:(e,g)=>{if(A().emitters[e]){console.warn(`Emitter ${e} already exists`);return}i(t=>(t.emitters[e]=g,t))},unregisterEmitter:e=>{i(g=>(delete g.emitters[e],g))},emit:(e,g,t)=>{let C=A().emitters[e];if(!C){console.warn(`Emitter ${e} not found`);return}C(g,t)}})),ZE=new m,zE=new qA,U5=new Pe,XE=new Pe,F5=new m,AQ=class extends de{constructor(A,e={},g,t=!1,C=!0){super(),LC(this,"settings"),LC(this,"emitted",0),LC(this,"elapsedTime",0),LC(this,"currentTime",0),LC(this,"shouldEmit"),LC(this,"emitterName"),LC(this,"localDirection"),LC(this,"store"),this.emitterName=A,this.localDirection=t,this.shouldEmit=C,this.store=g||$p.getState(),this.settings={duration:e.duration??1,nbParticles:e.nbParticles??1e3,spawnMode:e.spawnMode??"time",loop:e.loop??!1,delay:e.delay??0,colorStart:e.colorStart??["white","skyblue"],colorEnd:e.colorEnd??[],particlesLifetime:e.particlesLifetime??[.1,1],speed:e.speed??[5,20],size:e.size??[.1,1],startPositionMin:e.startPositionMin??[-1,-1,-1],startPositionMax:e.startPositionMax??[1,1,1],startRotationMin:e.startRotationMin??[0,0,0],startRotationMax:e.startRotationMax??[0,0,0],rotationSpeedMin:e.rotationSpeedMin??[0,0,0],rotationSpeedMax:e.rotationSpeedMax??[0,0,0],directionMin:e.directionMin??[0,0,0],directionMax:e.directionMax??[0,0,0]}}randFloat(A,e){return Math.random()*(e-A)+A}randInt(A,e){return Math.floor(Math.random()*(e-A+1))+A}stopEmitting(){this.shouldEmit=!1}startEmitting(A=!1){A&&(this.emitted=0,this.elapsedTime=0),this.shouldEmit=!0}emitAtPos(A,e=!1){if(this.settings.spawnMode!=="burst"){console.error("This function is meant to be used with burst spawn mode only.");return}let g=this.settings.nbParticles-this.emitted;e&&(this.emitted=0,this.elapsedTime=0),A&&this.position.copy(A),this.updateWorldMatrix(!0,!0),this.matrixWorld.decompose(ZE,zE,F5),U5.setFromQuaternion(zE),XE.setFromQuaternion(zE),this.store.emit(this.emitterName,g,()=>{var t;let C=this.randFloat(this.settings.size[0],this.settings.size[1]),o=this.settings.colorStart[this.randInt(0,this.settings.colorStart.length-1)],s=new m(this.randFloat(this.settings.directionMin[0],this.settings.directionMax[0]),this.randFloat(this.settings.directionMin[1],this.settings.directionMax[1]),this.randFloat(this.settings.directionMin[2],this.settings.directionMax[2]));return this.localDirection&&s.applyQuaternion(zE),{position:[ZE.x+this.randFloat(this.settings.startPositionMin[0],this.settings.startPositionMax[0]),ZE.y+this.randFloat(this.settings.startPositionMin[1],this.settings.startPositionMax[1]),ZE.z+this.randFloat(this.settings.startPositionMin[2],this.settings.startPositionMax[2])],direction:[s.x,s.y,s.z],scale:[C,C,C],rotation:[XE.x+this.randFloat(this.settings.startRotationMin[0],this.settings.startRotationMax[0]),XE.y+this.randFloat(this.settings.startRotationMin[1],this.settings.startRotationMax[1]),XE.z+this.randFloat(this.settings.startRotationMin[2],this.settings.startRotationMax[2])],rotationSpeed:[this.randFloat(this.settings.rotationSpeedMin[0],this.settings.rotationSpeedMax[0]),this.randFloat(this.settings.rotationSpeedMin[1],this.settings.rotationSpeedMax[1]),this.randFloat(this.settings.rotationSpeedMin[2],this.settings.rotationSpeedMax[2])],lifetime:[this.currentTime,this.randFloat(this.settings.particlesLifetime[0],this.settings.particlesLifetime[1])],colorStart:o,colorEnd:(t=this.settings.colorEnd)!=null&&t.length?this.settings.colorEnd[this.randInt(0,this.settings.colorEnd.length-1)]:o,speed:[this.randFloat(this.settings.speed[0],this.settings.speed[1])]}})}update(A,e){if(this.currentTime=A,this.emitted<this.settings.nbParticles||this.settings.loop){if(!this.shouldEmit)return;let g=(this.settings.spawnMode==="burst"?this.settings.nbParticles:Math.max(0,Math.floor((this.elapsedTime-this.settings.delay)/this.settings.duration*this.settings.nbParticles)))-this.emitted;g>0&&this.elapsedTime>=this.settings.delay&&(this.updateWorldMatrix(!0,!0),this.matrixWorld.decompose(ZE,zE,F5),U5.setFromQuaternion(zE),XE.setFromQuaternion(zE),this.store.emit(this.emitterName,g,()=>{var t;let C=this.randFloat(this.settings.size[0],this.settings.size[1]),o=this.settings.colorStart[this.randInt(0,this.settings.colorStart.length-1)],s=new m(this.randFloat(this.settings.directionMin[0],this.settings.directionMax[0]),this.randFloat(this.settings.directionMin[1],this.settings.directionMax[1]),this.randFloat(this.settings.directionMin[2],this.settings.directionMax[2]));return this.localDirection&&s.applyQuaternion(zE),{position:[ZE.x+this.randFloat(this.settings.startPositionMin[0],this.settings.startPositionMax[0]),ZE.y+this.randFloat(this.settings.startPositionMin[1],this.settings.startPositionMax[1]),ZE.z+this.randFloat(this.settings.startPositionMin[2],this.settings.startPositionMax[2])],direction:[s.x,s.y,s.z],scale:[C,C,C],rotation:[XE.x+this.randFloat(this.settings.startRotationMin[0],this.settings.startRotationMax[0]),XE.y+this.randFloat(this.settings.startRotationMin[1],this.settings.startRotationMax[1]),XE.z+this.randFloat(this.settings.startRotationMin[2],this.settings.startRotationMax[2])],rotationSpeed:[this.randFloat(this.settings.rotationSpeedMin[0],this.settings.rotationSpeedMax[0]),this.randFloat(this.settings.rotationSpeedMin[1],this.settings.rotationSpeedMax[1]),this.randFloat(this.settings.rotationSpeedMin[2],this.settings.rotationSpeedMax[2])],lifetime:[A,this.randFloat(this.settings.particlesLifetime[0],this.settings.particlesLifetime[1])],colorStart:o,colorEnd:(t=this.settings.colorEnd)!=null&&t.length?this.settings.colorEnd[this.randInt(0,this.settings.colorEnd.length-1)]:o,speed:[this.randFloat(this.settings.speed[0],this.settings.speed[1])]}}),this.emitted+=g)}this.elapsedTime+=e}updateSettings(A){Object.assign(this.settings,A)}restart(){this.emitted=0,this.elapsedTime=0}},foA=`
|
|
5089
|
+
`;this.statsUIElement.setHTML(e)}doBeginPlay(){this.world.consoleManager.addCommandHandler(this)}doEndPlay(){this.gameSessionManager=null,this.gameSession=null,this.localNetObjects.clear(),this.remoteNetObjects.clear(),this.localRelevantNetObjectsInSession.clear(),this.addToSessionQueue.clear(),this.deleteFromSessionQueue.clear(),this.pendingNetObjects.clear(),this.sessionClients={},this.lastReplicatedStates.clear(),this.remoteObjectCreationRequests.clear(),this.destroyStatsUI(),this.world.consoleManager.removeCommandHandler(this),this.heartbeatTimer&&(clearInterval(this.heartbeatTimer),this.heartbeatTimer=null),this.pingTimer&&(clearInterval(this.pingTimer),this.pingTimer=null)}isClientInactive(e){let g=this.sessionClients[e];return g?Date.now()-g.lastHeartBeatTime>30*1e3:!1}};sA([zt("dumpnetobjects","Dump all net objects to console")],Co.prototype,"dumpNetObjects",1),sA([zt("setmemorysession","Set memory session manager")],Co.prototype,"setMemorySessionManager",1),sA([zt("setwebsocketsession","Set WebSocket session manager (usage: setwebsocketsession [url])")],Co.prototype,"setWebSocketSessionManager",1),sA([zt("joinorcreatewebsocket","Join or create WebSocket session (usage: joinorcreatewebsocket [url])")],Co.prototype,"joinOrCreateWebSocketSession",1),sA([zt("createsession","Create a new session (usage: createsession [name])")],Co.prototype,"createSessionCommand",1),sA([zt("joinsession","Join a session by ID (usage: joinsession <sessionId>)")],Co.prototype,"joinSessionCommand",1),sA([zt("joinfirstsession","Join the first available session")],Co.prototype,"joinFirstSessionCommand",1),sA([zt("listsessions","List all available sessions")],Co.prototype,"listSessionsCommand",1),sA([zt("togglemovementprediction","Toggle movement prediction (usage: togglemovementprediction <true | false>)")],Co.prototype,"toggleMovementPrediction",1),sA([zt("setmovementlerpalpha","Set movement prediction lerp alpha (usage: setmovementlerpalpha <value>)")],Co.prototype,"setMovementLerpAlpha",1),sA([zt("stat","Toggle network statistics display (usage: stat net)")],Co.prototype,"stat",1);var Oo=Co;var oo=Symbol("IAsyncLoadable"),JC=class{constructor(){l(this,"_promise",null);l(this,"_runningTask",null)}runTask(A){let e=A;return this._runningTask=e,this._promise=(async()=>{await A(),this._runningTask===e&&(this._promise=null)})(),this._promise}isRunning(){return this._promise!==null}async waitUntilComplete(){this._promise&&await this._promise}};function M5(i){return i&&i[oo]===!0}var G5,R5,Kg=class extends(R5=Os,G5=bC,R5){constructor(e={}){super();this.options=e;l(this,G5,!0);l(this,"editorData",{});l(this,"uuid",BC());l(this,"name");l(this,"_rootComponent");l(this,"world",null);l(this,"lifeSpan",0);l(this,"remoteNetClientId",null);l(this,"remoteNetDeviceId",null);l(this,"netRelevant",!1);l(this,"movementPredictor",null);l(this,"prefabName",null);l(this,"prefabData",null);l(this,"prefabInheritanceChain",null);l(this,"ctorArgOptions");l(this,"$prefab",null);l(this,"transient",!1);l(this,"actorTags",[]);l(this,"hiddenInGame",!1);l(this,"editorOnly",!1);l(this,"onAddedToWorld",new oe);l(this,"onTickPrePhysics",new oe);l(this,"onTickPostPhysics",new oe);l(this,"onBeginPlay",new oe);l(this,"onEndPlay",new oe);l(this,"onPreEndPlay",new oe);l(this,"onClicked",new oe);l(this,"onCollideWith",new oe);l(this,"onOverlapWith",new oe);l(this,"onStopCollidingWith",new oe);l(this,"onStopOverlappingWith",new oe);this.ctorArgOptions=e,e={...Kg.DEFAULT_OPTIONS,...e},this.name=eB.generateName(this),this.actorTags=e.actorTags?[...e.actorTags]:[];let g=e.rootComponent;g&&!Hg(g.getActor()===null)&&(g=void 0),g?(this._rootComponent=g,e.position&&this.rootComponent.position.copy(e.position),e.rotation&&this.rootComponent.rotation.copy(e.rotation),e.scale&&this.rootComponent.scale.copy(e.scale)):this._rootComponent=new $A({position:e.position,rotation:e.rotation,scale:e.scale}),this.rootComponent.setActor(this);for(let C of e.sceneComponents??[])C instanceof $A?this.rootComponent.add(C):console.trace(`${C} is not a SceneComponent`);this.rootComponent.updateMatrixWorld(!0);let t=e.prefabName;t&&(this.prefabName=t)}static get DEFAULT_OPTIONS(){return{actorTags:[]}}getPrefabName(){return this.prefabName??this.$prefab?.$path??null}getPrefabData(){return this.prefabData}getPrefabInheritanceChain(){return this.prefabInheritanceChain}setPrefab(e,g,t){return this.prefabName=e,this.prefabData=g,this.prefabInheritanceChain=t??null,this}clearPrefab(){return this.prefabName=null,this.prefabData=null,this.prefabInheritanceChain=null,this}getActorTags(){return[...this.actorTags]}setActorTags(e){return this.actorTags=[...e],this}addActorTag(e){return this.actorTags.includes(e)||this.actorTags.push(e),this}removeActorTag(e){let g=this.actorTags.indexOf(e);return g!==-1&&this.actorTags.splice(g,1),this}hasActorTag(e){return this.actorTags.includes(e)}hasAnyActorTag(e){return e.some(g=>this.actorTags.includes(g))}hasAllActorTags(e){return e.every(g=>this.actorTags.includes(g))}setTransient(e){this.transient=e}isTransient(){return this.transient}static async spawnPrefabActor(e,g,t={},C){let o=t[e];return WE(o)?await PI.loadActor({ctor:{position:g?.position,rotation:g?.rotation,scale:g?.scale},prefabName:e},t,C):Ql(e,t,{ctorArgsOverrides:{position:g?.position,rotation:g?.rotation,scale:g?.scale}})}getDefaultOptions(){return this.constructor.DEFAULT_OPTIONS}export(e,g){let t={editorData:this.editorData,actorTags:this.actorTags?.length>0?[...this.actorTags]:void 0,hiddenInGame:this.hiddenInGame?!0:void 0,editorOnly:this.editorOnly?!0:void 0},C=Il(this.constructor);for(let s of Object.keys(C))s in this&&(t[s]=this[s]);let o={uuid:this.uuid,class:mg.getClassNameChecked(this),properties:t};return o.ctor=e.exportObject({...this.getExportedConstructor(),rootComponent:this.rootComponent},g),o.prefabName=this.prefabName??void 0,this.prefabData?.parentPrefabName&&(o.parentPrefabName=this.prefabData.parentPrefabName),o}clicked(e){this.onClicked.invoke(this,e)}get rootComponent(){return this._rootComponent}setRootComponent(e,g){if(!Hg(!this.isPlayEnded()))return this;if(!Hg(e.getActor()===null))return this;g&&(e.position.copy(this.rootComponent.position),e.rotation.copy(this.rootComponent.rotation),e.scale.copy(this.rootComponent.scale));let t=this.rootComponent;return t.removeFromParent(),t.setActor(null),this._rootComponent=e,this.rootComponent.setActor(this),this.rootComponent.updateMatrixWorld(!0),this.isPlaying()&&this.rootComponent.beginPlay(),this.world&&this.world.scene.add(e),this}collapseRootComponent(){if(Hg(this.getPlayState()==="notStarted")&&mg.getClassOrConstructorName(this.rootComponent)==="SceneComponent"&&this.rootComponent.children.length===1){let e=this.rootComponent.children[0];if(Hg(e instanceof $A))return e.removeFromParent(),this.setRootComponent(e,!0),!0}return!1}setWorld(e){Hg(!this.world||!e)&&(this.world=e,e&&this.onAddedToWorld.invoke(this,e))}getWorld(){return this.world}tickPrePhysics(e){if(this.lifeSpan>0&&(this.lifeSpan-=e,this.lifeSpan<=0)){this.destroy();return}if(this.movementPredictor){let g=this.movementPredictor.predictCurrentTransform();if(g){let t=iC.lerpTransform({position:this.rootComponent.position,rotation:this.rootComponent.quaternion,scale:this.rootComponent.scale},g,iC.LerpAlpha);this.setWorldTransform({position:t.position,rotation:new Pe().setFromQuaternion(t.rotation),scale:t.scale})}}this.rootComponent.tickPrePhysics(e),this.onTickPrePhysics.invoke(this,e)}tickPostPhysics(e){this.rootComponent.tickPostPhysics(e),this.onTickPostPhysics.invoke(this,e),this.movementPredictor&&this.movementPredictor.addLocalTransform({timestamp:iC.currentTime(),position:this.rootComponent.position.clone(),rotation:this.rootComponent.quaternion.clone(),scale:this.rootComponent.scale.clone()})}forwardDirection(){return new m(0,0,-1).applyQuaternion(this.rootComponent.quaternion).normalize()}rightDirection(){return new m(1,0,0).applyQuaternion(this.rootComponent.quaternion).normalize()}upDirection(){return new m(0,1,0).applyQuaternion(this.rootComponent.quaternion).normalize()}getPhysicsEngine(){return this.world?this.world.getPhysicsEngine():null}setHidden(e){return this.isHidden()!==e&&this.rootComponent.setHidden(e,!0),this}isHidden(){return this.rootComponent.isHidden()}replacePhysicsOptions(e,g=!1){return this.rootComponent.replacePhysicsOptions(e,g),this}overridePhysicsOptions(e,g=!1){return this.rootComponent.overridePhysicsOptions(e,g),this}setPhysicsEnabled(e,g=!1){return this.rootComponent.setPhysicsEnabled(e,g),this}isPhysicsEnabled(){return this.rootComponent instanceof _g&&this.rootComponent.isPhysicsEnabled()}generateDebugNode(){let e=[];return e.push(this.rootComponent.generateDebugNode()),{title:this.name,children:e,data:{uuid:this.uuid}}}getLifeSpan(){return this.lifeSpan}setLifeSpan(e){return this.lifeSpan=e,this}addComponent(e){return this.addComponents(e)}addComponents(...e){return e.forEach(g=>{this.rootComponent.add(g)}),this}getComponent(e=$A){return this.rootComponent.getComponent(e)}getComponents(e=$A){return this.rootComponent.getComponents(e)}getPathName(){return this.world?`${this.world.getPathName()}.${this.name}`:this.name}destroy(){this.world&&this.world.removeActors(this)}handleDeath(e){this.destroy()}asExportedObject(e=!1){return PI.exportObject(this,e)}asExportedPrefabData(){return PI.exportAsPrefab(this)}setWorldTransform(e){this.rootComponent.setWorldTransform(e)}setWorldPosition(e){this.setWorldTransform({position:e})}setWorldRotation(e){this.setWorldTransform({rotation:e})}setWorldScale(e){this.setWorldTransform({scale:e})}setWorldQuaternion(e){this.setWorldTransform({rotation:new Pe().setFromQuaternion(e)})}getWorldPosition(){return this.rootComponent.getWorldPosition()}getWorldRotation(){return this.rootComponent.getWorldRotation()}getWorldScale(){return this.rootComponent.getWorldScale()}getWorldQuaternion(){return this.rootComponent.getWorldQuaternion()}getWorldTransform(){return this.rootComponent.getWorldTransform()}setNetRelevant(e){this.netRelevant=e}isNetRelevant(){return this.netRelevant}getNetObjectId(){return`${mg.getClassOrConstructorName(this)}'${this.uuid}'`}setRemoteNetClientId(e){this.remoteNetClientId=e}setRemoteNetDeviceId(e){this.remoteNetDeviceId=e}getNetDeviceId(){return this.remoteNetDeviceId??Oo.getDeviceId()}getNetClientId(){if(this.remoteNetClientId)return this.remoteNetClientId;let e=this.getWorld()?.netWorld;if(!e)throw new Error("Failed to get net world when getting net client id");return e.clientId}consumeLocalDynamicState(){return!1}getNetConstructionData(){return this.asExportedObject()}getNetDynamicState(e){let g=e||null,t=g?.position,C=g?.rotation,o=g?.scale,s=this.rootComponent.position.toArray(),n=this.rootComponent.rotation.toArray(),B=this.rootComponent.scale.toArray();return g&&Oo.isVectorNearlyEqual(t,s)&&Oo.isVectorNearlyEqual(C,n)&&Oo.isVectorNearlyEqual(o,B)?null:{position:s,rotation:n,scale:B,timestamp:iC.currentTime()}}setNetDynamicState(e){let{position:g,rotation:t,scale:C,timestamp:o}=e;this.movementPredictor??=new iC,this.movementPredictor.addRemoteTransform({timestamp:o,position:new m(g[0],g[1],g[2]),rotation:new qA().setFromEuler(new Pe(t[0],t[1],t[2])),scale:new m(C[0],C[1],C[2])})}setOverrideMaterial(e){return this.rootComponent.setOverrideMaterial(e,!0),this}getExportedConstructor(){let e=this.rootComponent.isTransient();return{...this.options,position:e?this.getWorldPosition():void 0,rotation:e?this.getWorldRotation():void 0,scale:e?this.getWorldScale():void 0,sceneComponents:void 0,__isDeserializing:void 0,prefabName:void 0}}doBeginPlay(){this.rootComponent.beginPlay(),this.onBeginPlay.invoke(this),this.getWorld()?.netWorld.addNetObject(this),this.isHiddenInGame()&&this.getWorld()?.setActorHiddenInGame(this,!0)}doPreEndPlay(){this.onPreEndPlay.invoke(this)}doEndPlay(){this.isHiddenInGame()&&this.getWorld()?.setActorHiddenInGame(this,!1),this.getWorld()?.netWorld.removeNetObject(this),this.rootComponent.endPlay(),this.onEndPlay.invoke(this),this.world=null}calcBoundingBox(){this.rootComponent.updateMatrixWorld(!0);let e=this.getComponents($A);for(let g of e)g.calcBoundingBox();return this.getBoundingBox()}getBoundingBox(){let e=new ug,g=this.getComponents($A);for(let t of g){let C=t.boundingBox;C&&e.union(C)}return e}describe(e){if(e?.omitDescription){let o={name:this.name,uuid:this.uuid};return this.editorData?.displayName&&(o.displayName=this.editorData.displayName),o}let g={name:this.name,uuid:this.uuid,className:mg.getClassName(this)??this.constructor.name,position:Ps.dumpPosition(this.getWorldPosition()),rotation:Ps.dumpRotation(this.getWorldRotation()),scale:Ps.dumpScale(this.getWorldScale())};this.editorData?.displayName&&(g.displayName=this.editorData.displayName),this.editorData?.description&&(g.description=this.editorData.description),this.calcBoundingBox(),this.getBoundingBox().isEmpty()||(g.boundingBox=Ps.dumpBoundingBox(this.getBoundingBox()));let C=o=>{let s=o.describe({recalculateBounds:!1,includeDetails:e?.includeComponentsDetails});if(o.children&&o.children.length>0){let n=o.children.map(C).filter(B=>B&&Object.keys(B).length>0);n.length>0&&(s.children=n)}return s};return g.rootComponent=C(this.rootComponent),g}isHiddenInGame(){return this.hiddenInGame}setHiddenInGame(e){this.hiddenInGame=e,this.world&&this.world.setActorHiddenInGame(this,e)}isEditorOnly(){return this.editorOnly}setEditorOnly(e){this.editorOnly=e}getCamera(){return this.getComponent(lo)??null}getPlayerController(){return null}isPlayerControlled(){return!!this.getPlayerController()}async waitForComponentsToLoad(){let t=this.getComponents($A).filter(C=>M5(C)).map(C=>C.waitForLoad());await Promise.all(t)}serialize(e){e.dumpValue("rootComponent",this.rootComponent,"_rootComponent"),e.dumpProperties(this),this.isEditorOnly()&&e.markEditorOnly()}deserialize(e){let g=e.loadValue("rootComponent",this.rootComponent);g&&g!==this.rootComponent&&this.setRootComponent(g,!1),e.loadProperties(this)}onEditorPropertyChanged(e,g,t){e==="actorTags"&&this.setActorTags(g)}onEditorSelectedChanged(e,g){this.getComponents($A).forEach(t=>t.onEditorSelectedChanged(e,g))}onEditorAddToWorld(){this.getComponents($A).forEach(e=>e.onEditorAddToWorld())}onEditorRemoveFromWorld(){this.getComponents($A).forEach(e=>e.onEditorRemoveFromWorld())}getConfigurationWarnings(){return[]}getEditorClassIcon(){return"Icon_Actor"}};l(Kg,"EDITOR_CLASS_META",{actorTags:{isTagProperty:!0}}),sA([KC({editorOnly:!0,hidden:!0})],Kg.prototype,"editorData",2),sA([KC({transientOnPrefab:!0,readonly:!0})],Kg.prototype,"uuid",2),sA([KC({ctorArg:"ctorArgOnly"})],Kg.prototype,"ctorArgOptions",2),sA([KC({default:!1,category:"Advanced"})],Kg.prototype,"hiddenInGame",2),sA([KC({default:!1,category:"Advanced"})],Kg.prototype,"editorOnly",2),Kg=sA([dA("Actor")],Kg);var k5,_5,vt=class extends(_5=_g,k5=oo,_5){constructor(e={}){super(e);l(this,k5,!0);l(this,"onMeshLoaded",new oe);l(this,"model",null);l(this,"gltf",null);l(this,"_asyncTaskWorker",new JC);this.options.modelUrl&&this.loadModel(og.fromString(this.options.modelUrl))}static get DEFAULT_OPTIONS(){return{..._g.DEFAULT_OPTIONS,modelUrl:void 0,material:void 0,materials:void 0,excludeFromNavigation:!1,useDynamicMaterials:!1}}async waitForLoad(){await this._asyncTaskWorker.waitUntilComplete()}isLoading(){return this._asyncTaskWorker.isRunning()}async loadModel(e){await this._asyncTaskWorker.runTask(async()=>{this.options.modelUrl=e.initialPath;let g=await Lg.loadModel(e);g&&(this.model?.removeFromParent(),this.gltf=g,this.model=A_(g.scene),Lc&&this.deepCloneGeometries(this.model),mC()||(this.options.material?await this.setMaterial(this.options.material):this.options.materials&&await this.setMaterials(this.options.materials)),this.add(this.model),this.updateMatrixWorld(!0),this.gltf=g,this.refreshPhysics(),this.model.traverse(t=>{t instanceof fA&&this.bindObject3DProperties(t,["castShadow","receiveShadow"])}),this.options.useDynamicMaterials&&this.getActor()?.isPlaying()&&this.cloneMaterials(),this.onMeshLoaded.invoke(this,this.model))})}deepCloneGeometries(e){e.traverse(g=>{g instanceof fA&&g.geometry&&(g.geometry=g.geometry.clone())})}cloneMaterials(){this.model&&this.model.traverse(e=>{e instanceof fA&&e.material&&(Array.isArray(e.material)?e.material=e.material.map(g=>g.clone()):e.material=e.material.clone())})}refreshPhysics(){if(this.getActor()?.isPlaying()&&this.isPhysicsEnabled()){let g=this.getPhysicsEngine();g&&(g.removeComponent(this),this.motionType=g.addComponent(this)??null)}}async setMaterial(e){if(typeof e=="string"&&(this.options.material=e,!e&&!e&&typeof this.options.modelUrl=="string")){await this.loadModel(og.fromString(this.options.modelUrl));return}let g=await Lg.loadGenericMaterial(e);if(g){let t=this.getAllMeshes();for(let C of t)C.material=g}}async setMaterials(e){this.options.materials=e;let g=this.getAllMeshes();(await Promise.all(e.map(C=>Lg.loadGenericMaterial(C)))).forEach((C,o)=>{C&&o<g.length&&(g[o].material=C)})}getMaterialBySlot(e){let g=this.getAllMeshes();return e<0||e>=g.length?null:g[e].material}async setMaterialBySlot(e,g){let t=this.getAllMeshes();if(e<0||e>=t.length){console.warn(`GLTFMeshComponent: Invalid slot index ${e}. Valid range is 0-${t.length-1}`);return}let C=await Lg.loadGenericMaterial(g);C&&(t[e].material=C)}getModel(){return this.model}getModelTemplate(){return this.gltf?.scene??null}getGLTF(){return this.gltf}getAnimations(){return this.gltf?.animations??[]}getSkinnedMeshData(){return this.model?this.getAllSkinnedMeshes()[0]??null:null}getAllSkinnedMeshes(){if(!this.model)return[];let e=[];for(let g of this.getAllMeshes())g instanceof VC&&g.skeleton&&g.skeleton.bones&&g.skeleton.bones.length>0&&e.push({skinnedMesh:g,skeleton:g.skeleton});return e}getMesh(){return this.getAllMeshes()[0]??null}getAllMeshes(){let e=[];return this.model?.traverse(g=>{g instanceof fA&&e.push(g)}),e}isModelLoaded(){return!!this.model}onEditorPropertyChanged(e,g,t){super.onEditorPropertyChanged(e,g,t),e==="modelUrl"?this.loadModel(og.fromString(g)):e==="material"?this.setMaterial(g):e.startsWith("materials")&&!this.options.material&&this.options.materials&&this.setMaterials(this.options.materials)}calcBoundingBox(){console.log("Calculating bounding box for GLTFMeshComponent",this.getActor()?.editorData?.displayName),this._boundingBox=vt.calcBoundingBoxFromGLTFModel(this.getModel(),this.getActor()?.editorData?.displayName)}static calcBoundingBoxFromGLTF(e){return!e||!e.scene?(console.warn("GLTFMeshComponent: No GLTF scene available to calculate bounding box. Has the model finished loading?"),new ug):vt.calcBoundingBoxFromGLTFModel(e.scene)}static calcBoundingBoxFromGLTFModel(e,g){if(!e)return console.warn("GLTFMeshComponent: No GLTF scene available to calculate bounding box. Has the model finished loading?",g),new ug;let t=new ug;return e.traverse(C=>{if(C instanceof fA){C.updateMatrixWorld(!0),C.geometry.computeBoundingBox();let o=new ug;o.copy(C.geometry.boundingBox),o.applyMatrix4(C.matrixWorld),t.union(o)}}),t}describe(e){let g=super.describe(e);return e?.includeDetails&&(g.modelUrl=this.options.modelUrl,g.material=this.options.material,g.materials=this.options.materials,g.useDynamicMaterials=this.options.useDynamicMaterials),g}getEditorClassIcon(){return"Icon_GLTFMesh"}};l(vt,"EDITOR_CLASS_META",{..._g.EDITOR_CLASS_META,modelUrl:{type:["model"]},material:{type:["material"]},materials:{array:{child:{type:["material"]}}}}),vt=sA([dA("GLTFMeshComponent")],vt);var nB=class extends Kg{static get DEFAULT_OPTIONS(){return{...Kg.DEFAULT_OPTIONS,modelUrl:void 0,material:void 0,physicsOptions:void 0}}constructor(A){let e={...A,rootComponent:void 0},g=A.rootComponent;g&&g instanceof $A&&(e.position=g.position.clone(),e.rotation=g.rotation.clone(),e.scale=g.scale.clone(),g instanceof vt&&(e.modelUrl=g.options.modelUrl,e.material=g.options.material,e.physicsOptions=g.options.physicsOptions)),super(e);let t=new vt({modelUrl:e.modelUrl,material:e.material,physicsOptions:e.physicsOptions});this.setRootComponent(t,!0)}setRootComponent(A,e){return super.setRootComponent(A,e),A instanceof vt||console.error("GLTFMeshActor can only have GLTFMeshComponent as root"),this}getMeshComponent(){return this.getComponent(vt)}async waitForLoad(){let A=this.getMeshComponent();A&&await A.waitForLoad()}getEditorClassIcon(){return"Icon_GLTFMesh"}};l(nB,"EDITOR_CLASS_META",{...Kg.EDITOR_CLASS_META,modelUrl:{type:["model"]},material:{type:["material"]}}),nB=sA([dA("GLTFMeshActor")],nB);var DoA=Object.defineProperty,uoA=(i,A,e)=>A in i?DoA(i,A,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[A]=e,LC=(i,A,e)=>uoA(i,typeof A!="symbol"?A+"":A,e),N5=i=>{let A,e=new Set,g=(s,n)=>{let B=typeof s=="function"?s(A):s;if(!Object.is(B,A)){let a=A;A=n??(typeof B!="object"||B===null)?B:Object.assign({},A,B),e.forEach(E=>E(A,a))}},t=()=>A,C={setState:g,getState:t,getInitialState:()=>o,subscribe:s=>(e.add(s),()=>e.delete(s))},o=A=i(g,t,C);return C},yoA=(i=>i?N5(i):N5),$p=yoA((i,A)=>({emitters:{},shouldEmit:!0,registerEmitter:(e,g)=>{if(A().emitters[e]){console.warn(`Emitter ${e} already exists`);return}i(t=>(t.emitters[e]=g,t))},unregisterEmitter:e=>{i(g=>(delete g.emitters[e],g))},emit:(e,g,t)=>{let C=A().emitters[e];if(!C){console.warn(`Emitter ${e} not found`);return}C(g,t)}})),ZE=new m,zE=new qA,U5=new Pe,XE=new Pe,F5=new m,AQ=class extends de{constructor(A,e={},g,t=!1,C=!0){super(),LC(this,"settings"),LC(this,"emitted",0),LC(this,"elapsedTime",0),LC(this,"currentTime",0),LC(this,"shouldEmit"),LC(this,"emitterName"),LC(this,"localDirection"),LC(this,"store"),this.emitterName=A,this.localDirection=t,this.shouldEmit=C,this.store=g||$p.getState(),this.settings={duration:e.duration??1,nbParticles:e.nbParticles??1e3,spawnMode:e.spawnMode??"time",loop:e.loop??!1,delay:e.delay??0,colorStart:e.colorStart??["white","skyblue"],colorEnd:e.colorEnd??[],particlesLifetime:e.particlesLifetime??[.1,1],speed:e.speed??[5,20],size:e.size??[.1,1],startPositionMin:e.startPositionMin??[-1,-1,-1],startPositionMax:e.startPositionMax??[1,1,1],startRotationMin:e.startRotationMin??[0,0,0],startRotationMax:e.startRotationMax??[0,0,0],rotationSpeedMin:e.rotationSpeedMin??[0,0,0],rotationSpeedMax:e.rotationSpeedMax??[0,0,0],directionMin:e.directionMin??[0,0,0],directionMax:e.directionMax??[0,0,0]}}randFloat(A,e){return Math.random()*(e-A)+A}randInt(A,e){return Math.floor(Math.random()*(e-A+1))+A}stopEmitting(){this.shouldEmit=!1}startEmitting(A=!1){A&&(this.emitted=0,this.elapsedTime=0),this.shouldEmit=!0}emitAtPos(A,e=!1){if(this.settings.spawnMode!=="burst"){console.error("This function is meant to be used with burst spawn mode only.");return}let g=this.settings.nbParticles-this.emitted;e&&(this.emitted=0,this.elapsedTime=0),A&&this.position.copy(A),this.updateWorldMatrix(!0,!0),this.matrixWorld.decompose(ZE,zE,F5),U5.setFromQuaternion(zE),XE.setFromQuaternion(zE),this.store.emit(this.emitterName,g,()=>{var t;let C=this.randFloat(this.settings.size[0],this.settings.size[1]),o=this.settings.colorStart[this.randInt(0,this.settings.colorStart.length-1)],s=new m(this.randFloat(this.settings.directionMin[0],this.settings.directionMax[0]),this.randFloat(this.settings.directionMin[1],this.settings.directionMax[1]),this.randFloat(this.settings.directionMin[2],this.settings.directionMax[2]));return this.localDirection&&s.applyQuaternion(zE),{position:[ZE.x+this.randFloat(this.settings.startPositionMin[0],this.settings.startPositionMax[0]),ZE.y+this.randFloat(this.settings.startPositionMin[1],this.settings.startPositionMax[1]),ZE.z+this.randFloat(this.settings.startPositionMin[2],this.settings.startPositionMax[2])],direction:[s.x,s.y,s.z],scale:[C,C,C],rotation:[XE.x+this.randFloat(this.settings.startRotationMin[0],this.settings.startRotationMax[0]),XE.y+this.randFloat(this.settings.startRotationMin[1],this.settings.startRotationMax[1]),XE.z+this.randFloat(this.settings.startRotationMin[2],this.settings.startRotationMax[2])],rotationSpeed:[this.randFloat(this.settings.rotationSpeedMin[0],this.settings.rotationSpeedMax[0]),this.randFloat(this.settings.rotationSpeedMin[1],this.settings.rotationSpeedMax[1]),this.randFloat(this.settings.rotationSpeedMin[2],this.settings.rotationSpeedMax[2])],lifetime:[this.currentTime,this.randFloat(this.settings.particlesLifetime[0],this.settings.particlesLifetime[1])],colorStart:o,colorEnd:(t=this.settings.colorEnd)!=null&&t.length?this.settings.colorEnd[this.randInt(0,this.settings.colorEnd.length-1)]:o,speed:[this.randFloat(this.settings.speed[0],this.settings.speed[1])]}})}update(A,e){if(this.currentTime=A,this.emitted<this.settings.nbParticles||this.settings.loop){if(!this.shouldEmit)return;let g=(this.settings.spawnMode==="burst"?this.settings.nbParticles:Math.max(0,Math.floor((this.elapsedTime-this.settings.delay)/this.settings.duration*this.settings.nbParticles)))-this.emitted;g>0&&this.elapsedTime>=this.settings.delay&&(this.updateWorldMatrix(!0,!0),this.matrixWorld.decompose(ZE,zE,F5),U5.setFromQuaternion(zE),XE.setFromQuaternion(zE),this.store.emit(this.emitterName,g,()=>{var t;let C=this.randFloat(this.settings.size[0],this.settings.size[1]),o=this.settings.colorStart[this.randInt(0,this.settings.colorStart.length-1)],s=new m(this.randFloat(this.settings.directionMin[0],this.settings.directionMax[0]),this.randFloat(this.settings.directionMin[1],this.settings.directionMax[1]),this.randFloat(this.settings.directionMin[2],this.settings.directionMax[2]));return this.localDirection&&s.applyQuaternion(zE),{position:[ZE.x+this.randFloat(this.settings.startPositionMin[0],this.settings.startPositionMax[0]),ZE.y+this.randFloat(this.settings.startPositionMin[1],this.settings.startPositionMax[1]),ZE.z+this.randFloat(this.settings.startPositionMin[2],this.settings.startPositionMax[2])],direction:[s.x,s.y,s.z],scale:[C,C,C],rotation:[XE.x+this.randFloat(this.settings.startRotationMin[0],this.settings.startRotationMax[0]),XE.y+this.randFloat(this.settings.startRotationMin[1],this.settings.startRotationMax[1]),XE.z+this.randFloat(this.settings.startRotationMin[2],this.settings.startRotationMax[2])],rotationSpeed:[this.randFloat(this.settings.rotationSpeedMin[0],this.settings.rotationSpeedMax[0]),this.randFloat(this.settings.rotationSpeedMin[1],this.settings.rotationSpeedMax[1]),this.randFloat(this.settings.rotationSpeedMin[2],this.settings.rotationSpeedMax[2])],lifetime:[A,this.randFloat(this.settings.particlesLifetime[0],this.settings.particlesLifetime[1])],colorStart:o,colorEnd:(t=this.settings.colorEnd)!=null&&t.length?this.settings.colorEnd[this.randInt(0,this.settings.colorEnd.length-1)]:o,speed:[this.randFloat(this.settings.speed[0],this.settings.speed[1])]}}),this.emitted+=g)}this.elapsedTime+=e}updateSettings(A){Object.assign(this.settings,A)}restart(){this.emitted=0,this.elapsedTime=0}},foA=`
|
|
5090
5090
|
#define PI 3.1415926535897932384626433832795
|
|
5091
5091
|
// Linear
|
|
5092
5092
|
float easeLinear(float t)
|
|
@@ -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;
|
|
@@ -59,7 +59,7 @@ let GLTFMeshActor = class GLTFMeshActor extends Actor {
|
|
|
59
59
|
material: mergedOptions.material,
|
|
60
60
|
physicsOptions: mergedOptions.physicsOptions,
|
|
61
61
|
});
|
|
62
|
-
this.setRootComponent(mesh,
|
|
62
|
+
this.setRootComponent(mesh, true);
|
|
63
63
|
}
|
|
64
64
|
setRootComponent(component, copyTransform) {
|
|
65
65
|
super.setRootComponent(component, copyTransform);
|
|
@@ -99,4 +99,4 @@ GLTFMeshActor = __decorate([
|
|
|
99
99
|
__metadata("design:paramtypes", [Object])
|
|
100
100
|
], GLTFMeshActor);
|
|
101
101
|
export { GLTFMeshActor };
|
|
102
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
102
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR0xURk1lc2hBY3Rvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hY3RvcnMvR0xURk1lc2hBY3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7O0dBWUc7Ozs7Ozs7Ozs7QUFFSCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDakUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDOUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTFELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFjNUIsSUFBTSxhQUFhLEdBQW5CLE1BQU0sYUFBYyxTQUFRLEtBQTJCO0lBUTVELE1BQU0sS0FBYyxlQUFlO1FBQ2pDLE9BQU87WUFDTCxHQUFHLEtBQUssQ0FBQyxlQUFlO1lBQ3hCLFFBQVEsRUFBRSxTQUFTO1lBQ25CLFFBQVEsRUFBRSxTQUFTO1lBQ25CLGNBQWMsRUFBRSxTQUFTO1NBQzFCLENBQUM7SUFDSixDQUFDO0lBRUQsWUFBWSxPQUE2QjtRQUN2QywySkFBMko7UUFDM0osOEpBQThKO1FBQzlKLHVMQUF1TDtRQUN2TCxrSEFBa0g7UUFDbEgsd0hBQXdIO1FBQ3hILCtLQUErSztRQUMvSyx1RkFBdUY7UUFDdkYsTUFBTSxhQUFhLEdBQUcsRUFBQyxHQUFHLE9BQU8sRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFDLENBQUM7UUFDN0QsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQztRQUNuQyxJQUFJLElBQUksSUFBSSxJQUFJLFlBQVksY0FBYyxFQUFFLENBQUM7WUFDM0MsYUFBYSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQy9DLGFBQWEsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMvQyxhQUFhLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDekMsSUFBSSxJQUFJLFlBQVksaUJBQWlCLEVBQUUsQ0FBQztnQkFDdEMsYUFBYSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztnQkFDL0MsYUFBYSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztnQkFDL0MsYUFBYSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQztZQUM3RCxDQUFDO1FBQ0gsQ0FBQztRQUVELEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUVyQixNQUFNLElBQUksR0FBRyxJQUFJLGlCQUFpQixDQUFDO1lBQ2pDLFFBQVEsRUFBRSxhQUFhLENBQUMsUUFBUTtZQUNoQyxRQUFRLEVBQUUsYUFBYSxDQUFDLFFBQVE7WUFDaEMsY0FBYyxFQUFFLGFBQWEsQ0FBQyxjQUFjO1NBQzdDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVlLGdCQUFnQixDQUFDLFNBQXlCLEVBQUUsYUFBc0I7UUFDaEYsS0FBSyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsQ0FBQyxTQUFTLFlBQVksaUJBQWlCLENBQUMsRUFBRSxDQUFDO1lBQzlDLE9BQU8sQ0FBQyxLQUFLLENBQUMsdURBQXVELENBQUMsQ0FBQztRQUN6RSxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU0sZ0JBQWdCO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFTSxLQUFLLENBQUMsV0FBVztRQUN0QixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUM5QyxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ2xCLE1BQU0sYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3BDLENBQUM7SUFDSCxDQUFDO0lBRUQsc0dBQXNHO0lBQ3RHLG1CQUFtQjtJQUNuQixzR0FBc0c7SUFFdEYsa0JBQWtCO1FBQ2hDLE9BQU8sZUFBZSxDQUFDO0lBQ3pCLENBQUM7O0FBdkV3Qjs7OztXQUFxQztRQUM1RCxHQUFHLEtBQUssQ0FBQyxpQkFBaUI7UUFDMUIsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDN0IsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUU7S0FDeEI7RUFKZ0MsQ0FJL0I7QUFOQSxhQUFhO0lBRHpCLFdBQVcsQ0FBQyxlQUFlLENBQUM7O0dBQ2hCLGFBQWEsQ0EwRXpCIn0=
|
package/dist/src/game/World.js
CHANGED
|
@@ -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
|
-
|
|
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.
|
|
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",
|
|
@@ -75,7 +75,7 @@ export class GLTFMeshActor extends Actor<GLTFMeshActorOptions> {
|
|
|
75
75
|
material: mergedOptions.material,
|
|
76
76
|
physicsOptions: mergedOptions.physicsOptions,
|
|
77
77
|
});
|
|
78
|
-
this.setRootComponent(mesh,
|
|
78
|
+
this.setRootComponent(mesh, true);
|
|
79
79
|
}
|
|
80
80
|
|
|
81
81
|
public override setRootComponent(component: SceneComponent, copyTransform: boolean): this {
|
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
|
-
|
|
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
|
// ```
|