hytopia 0.4.1-dev.5 → 0.4.1-dev.7

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.
Files changed (2) hide show
  1. package/package.json +2 -1
  2. package/server.js +1 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hytopia",
3
- "version": "0.4.1-dev.5",
3
+ "version": "0.4.1-dev.7",
4
4
  "description": "The HYTOPIA SDK makes it easy for developers to create massively multiplayer games using JavaScript or TypeScript.",
5
5
  "main": "server.js",
6
6
  "bin": {
@@ -49,6 +49,7 @@
49
49
  "homepage": "https://github.com/hytopiagg/sdk#readme",
50
50
  "dependencies": {
51
51
  "archiver": "^7.0.1",
52
+ "mediasoup": "3.15.7",
52
53
  "@gltf-transform/cli": "4.1.1"
53
54
  }
54
55
  }
package/server.js CHANGED
@@ -382,6 +382,6 @@ Instead, \`yield\` should either be called with a value, or not be called at all
382
382
  `),X.write(`Content-Length: ${$.length}\r
383
383
  `),X.write(`Connection: close\r
384
384
  `),X.write(`\r
385
- `),X.write($),X.end();return}X.setNoDelay(!0),this.emitWithGlobal("WEBSERVER.UPGRADE",{req:J,socket:X,head:Y})};_onError=(J)=>{this.emitWithGlobal("WEBSERVER.ERROR",{error:J})};_onStopped=()=>{this.emitWithGlobal("WEBSERVER.STOPPED",{})}}class i1 extends s{static instance=new i1;_wss;_wrtcMinPort=process.env.WRTC_MIN_PORT?parseInt(process.env.WRTC_MIN_PORT):40000;_wrtcMaxPort=process.env.WRTC_MAX_PORT?parseInt(process.env.WRTC_MAX_PORT):41023;_wrtcPublicIpv4=process.env.NODE_ENV==="production"?process.env.WRTC_PUBLIC_IPV4:"127.0.0.1";_wrtcPublicIpv6=process.env.NODE_ENV==="production"?process.env.WRTC_PUBLIC_IPV6:"::";_wrtcRouter=null;_wrtcWorker=null;constructor(){super();this._wss=new gX0({noServer:!0}),this._wss.on("connection",this._onConnection),this._wss.on("error",this._onError),this._initWrtc().catch((J)=>{E.warning(`Socket._constructor(): Failed to initialize WebRTC, falling back to Websockets. This can be ignored for local development. Error: ${J.message}`)}),m8.on("WEBSERVER.UPGRADE",({req:J,socket:X,head:Y})=>this._onUpgrade(J,X,Y))}get isWrtcEnabled(){return this._wrtcWorker&&!this._wrtcWorker.died&&this._wrtcRouter}get wrtcRouter(){return this._wrtcRouter}async createWrtcTransports(){if(!this.isWrtcEnabled)E.fatalError("Socket.createWrtcTransports(): WebRTC not enabled, unable to create transports.");let J={listenIps:[{ip:"::",announcedIp:this._wrtcPublicIpv6},{ip:"0.0.0.0",announcedIp:this._wrtcPublicIpv4}],preferUdp:!0,enableSctp:!0,enableTcp:!1},X=await this._wrtcRouter.createDirectTransport(),Y=await this._wrtcRouter.createWebRtcTransport(J),Z=await this._wrtcRouter.createWebRtcTransport(J);return{directTransport:X,clientServerTransport:Y,serverClientTransport:Z}}async _initWrtc(){if(!this._wrtcPublicIpv4||!this._wrtcPublicIpv6)throw new Error("Socket._initWrtc(): WebRTC disabled, falling back to Websockets. Env variables WRTC_PUBLIC_IPV4 and WRTC_PUBLIC_IPV6 must be set in production");this._wrtcWorker=await cX0.createWorker({rtcMinPort:this._wrtcMinPort,rtcMaxPort:this._wrtcMaxPort}),this._wrtcWorker.on("died",this._onWrtcWorkerDied),this._wrtcRouter=await this._wrtcWorker.createRouter({mediaCodecs:[]}),console.log("Socket._initWrtc(): WebRTC enabled and ready!")}_onConnection=(J,X)=>{new h9(J,X)};_onError=(J,X)=>{this.emitWithGlobal("SOCKET.ERROR",{ws:J,error:X})};_onUpgrade=(J,X,Y)=>{this._wss.handleUpgrade(J,X,Y,(Z)=>{this._wss.emit("connection",Z,J)})};_onWrtcWorkerDied=(J)=>{E.warning(`Socket._onWrtcWorkerDied(): WebRTC worker unexpectedly died, falling back to Websockets for all players. Internal error: ${J}`),j6.instance.getConnectedPlayers().forEach((X)=>{X.connection.closeWrtc()}),this._wrtcRouter?.close(),this._wrtcRouter=null,this._wrtcWorker?.close(),this._wrtcWorker=null}}class h9 extends s{static _serializedPackets=new WeakMap;_wrtcDirectTransport=null;_wrtcClientServerTransport=null;_wrtcClientServerDataProducers=[];_wrtcClientServerDataConsumers=[];_wrtcServerClientTransport=null;_wrtcServerClientReliableDataProducer=null;_wrtcServerClientUnreliableDataProducer=null;_wrtcServerClientDataConsumers=[];_ws;id;constructor(J,X){super();if(this.id=Yv(),this._ws=J,this._ws.binaryType="nodebuffer",this._ws.onmessage=(Y)=>this._onMessage(Y.data),this._ws.onclose=this._onWsClose,this._ws.onerror=this._onWsError,this.onPacket(A.PacketId.CONNECTION,this._onConnectionPacket),this.onPacket(A.PacketId.HEARTBEAT,this._onHeartbeatPacket),i1.instance.isWrtcEnabled)this._upgradeToWRTC();m8.emit("CONNECTION.OPENED",{connection:this,req:X})}static serializePackets(J){for(let W of J)if(!A.isValidPacket(W))E.fatalError(`Invalid packet payload: ${JSON.stringify(W)}`);let X=h9._serializedPackets.get(J);if(X)return X;let Y=rF(J),Z=Buffer.from(Y.buffer,Y.byteOffset,Y.byteLength);return h9._serializedPackets.set(J,Z),Z}send(J,X=!0,Y=!1){if(this._ws.readyState!==mX0.OPEN)return E.warning("Connection.send(): Connection is not open.");try{let Z=h9.serializePackets(J);if(this._wrtcServerClientTransport?.iceState==="completed"&&!Y)try{(X?this._wrtcServerClientReliableDataProducer:this._wrtcServerClientUnreliableDataProducer).send(Z)}catch{this._ws.send(Z)}else this._ws.send(Z);this.emitWithGlobal("CONNECTION.PACKETS_SENT",{connection:this,packets:J})}catch(Z){E.error(`Connection.send(): Packet send failed. Error: ${Z}`)}}close(){try{this.offAll(),this._ws.close()}catch(J){E.error(`Connection.close(): Connection close failed. Error: ${J}`)}}closeWrtc(){this._closeWrtcClientServerTransport(),this._closeWrtcServerClientTransport()}onPacket(J,X){this.on("CONNECTION.PACKET_RECEIVED",({packet:Y})=>{if(Y[0]===J)X(Y)})}_closeWrtcClientServerTransport(){this._wrtcDirectTransport?.close(),this._wrtcDirectTransport=null,this._wrtcClientServerTransport?.close(),this._wrtcClientServerTransport=null,this._wrtcClientServerDataProducers.forEach((J)=>J.close()),this._wrtcClientServerDataProducers=[],this._wrtcClientServerDataConsumers.forEach((J)=>J.close()),this._wrtcClientServerDataConsumers=[]}_closeWrtcServerClientTransport(){this._wrtcServerClientTransport?.close(),this._wrtcServerClientTransport=null,this._wrtcServerClientDataConsumers.forEach((J)=>J.close()),this._wrtcServerClientDataConsumers=[],this._wrtcServerClientReliableDataProducer?.close(),this._wrtcServerClientReliableDataProducer=null,this._wrtcServerClientUnreliableDataProducer?.close(),this._wrtcServerClientUnreliableDataProducer=null}_onConnectionPacket=async(J)=>{let X=J[1],Y=X.c,Z=X.d;if(Y){let{i:W,d:$}=Y,Q=!1;if(W==this._wrtcClientServerTransport?.id)await this._wrtcClientServerTransport.connect({dtlsParameters:$}),Q=!0;if(W==this._wrtcServerClientTransport?.id)await this._wrtcServerClientTransport.connect({dtlsParameters:$}),Q=!0;if(Q)this.send([A.createPacket(A.bidirectionalPackets.connectionPacketDefinition,{ca:{i:W}})])}if(Z)for(let W of Z){let{s:$,l:Q}=W,K=await this._wrtcClientServerTransport.produceData({label:Q,sctpStreamParameters:$}),G=await this._wrtcDirectTransport.consumeData({dataProducerId:K.id});this._wrtcClientServerDataProducers.push(K),this._wrtcClientServerDataConsumers.push(G),G.on("message",(F)=>this._onMessage(F)),this.send([A.createPacket(A.bidirectionalPackets.connectionPacketDefinition,{pa:{i:K.id,l:Q}})])}};_onHeartbeatPacket=()=>{this.send([A.createPacket(A.bidirectionalPackets.heartbeatPacketDefinition,null)],!0,!0)};_onMessage=(J)=>{try{let X=this._deserialize(J);this.emitWithGlobal("CONNECTION.PACKET_RECEIVED",{connection:this,packet:X})}catch(X){E.error(`Connection._ws.onmessage(): Error: ${X}`)}};_onWrtcIceStateChange=(J,X)=>{if(["disconnected","closed"].includes(X)){if(J==this._wrtcClientServerTransport)this._closeWrtcClientServerTransport();else if(J==this._wrtcServerClientTransport)this._closeWrtcServerClientTransport()}};_onWsClose=()=>{this.closeWrtc(),this.emitWithGlobal("CONNECTION.CLOSED",{connection:this}),this.offAll()};_onWsError=(J)=>{this.emitWithGlobal("CONNECTION.ERROR",{connection:this,error:J})};_upgradeToWRTC=async()=>{let J=await i1.instance.createWrtcTransports();if(!J)return!1;let{directTransport:X,clientServerTransport:Y,serverClientTransport:Z}=J;this._wrtcDirectTransport=X,this._wrtcClientServerTransport=Y,this._wrtcClientServerTransport.on("icestatechange",(Q)=>{this._onWrtcIceStateChange(this._wrtcClientServerTransport,Q)}),this._wrtcServerClientTransport=Z,this._wrtcServerClientTransport.on("icestatechange",(Q)=>{this._onWrtcIceStateChange(this._wrtcServerClientTransport,Q)}),this._wrtcServerClientReliableDataProducer=await this._wrtcServerClientTransport.produceData({label:"scr",sctpStreamParameters:{streamId:0,ordered:!0}}),this._wrtcServerClientUnreliableDataProducer=await this._wrtcServerClientTransport.produceData({label:"scu",sctpStreamParameters:{streamId:1,ordered:!1,maxRetransmits:0}});let W=await this._wrtcServerClientTransport.consumeData({dataProducerId:this._wrtcServerClientReliableDataProducer.id}),$=await this._wrtcServerClientTransport.consumeData({dataProducerId:this._wrtcServerClientUnreliableDataProducer.id});return this._wrtcServerClientDataConsumers.push(W,$),this.send([A.createPacket(A.bidirectionalPackets.connectionPacketDefinition,{d:[{i:W.id,pi:W.dataProducerId,l:"scr",s:W.sctpStreamParameters},{i:$.id,pi:$.dataProducerId,l:"scu",s:$.sctpStreamParameters}],t:[{i:this._wrtcClientServerTransport.id,f:"cs",d:this._wrtcClientServerTransport.dtlsParameters,ic:this._wrtcClientServerTransport.iceCandidates,ip:this._wrtcClientServerTransport.iceParameters,s:this._wrtcClientServerTransport.sctpParameters},{i:this._wrtcServerClientTransport.id,f:"sc",d:this._wrtcServerClientTransport.dtlsParameters,ic:this._wrtcServerClientTransport.iceCandidates,ip:this._wrtcServerClientTransport.iceParameters,s:this._wrtcServerClientTransport.sctpParameters}]})]),!0};_deserialize(J){let X=X3(J);if(!X||typeof X!=="object"||typeof X[0]!=="number")E.fatalError(`Connection._deserialize(): Invalid packet format. Packet: ${JSON.stringify(X)}`);if(!A.isValidPacket(X))E.fatalError(`Connection._deserialize(): Invalid packet payload. Packet: ${JSON.stringify(X)}`);return X}}var xC;((Y)=>{Y.PLAYER_CONNECTED="PLAYER_MANAGER.PLAYER_CONNECTED";Y.PLAYER_DISCONNECTED="PLAYER_MANAGER.PLAYER_DISCONNECTED"})(xC||={});class j6{static instance=new j6;_connectionPlayers=new Map;constructor(){m8.on("CONNECTION.OPENED",({connection:J,req:X})=>{this._onConnectionOpened(J,X.session)}),m8.on("CONNECTION.CLOSED",({connection:J})=>{this._onConnectionClosed(J)})}getConnectedPlayers(){return Array.from(this._connectionPlayers.values())}getConnectedPlayersByWorld(J){return this.getConnectedPlayers().filter((X)=>X.world===J)}getConnectedPlayerByUsername(J){return Array.from(this._connectionPlayers.values()).find((X)=>{return X.username.toLowerCase()===J.toLowerCase()})}_onConnectionOpened(J,X){let Y=new r5(J,X);this._connectionPlayers.set(J,Y),m8.emit("PLAYER_MANAGER.PLAYER_CONNECTED",{player:Y})}_onConnectionClosed(J){let X=this._connectionPlayers.get(J);if(X)X.disconnect(),this._connectionPlayers.delete(J),m8.emit("PLAYER_MANAGER.PLAYER_DISCONNECTED",{player:X});else E.warning(`PlayerManager._onConnectionClosed(): Connection ${J.id} but was not in the PlayerManager._connectionPlayers map.`)}}var W$;((W)=>{W.DYNAMIC="dynamic";W.FIXED="fixed";W.KINEMATIC_POSITION="kinematic_position";W.KINEMATIC_VELOCITY="kinematic_velocity"})(W$||={});var zH=0.001,PC="dynamic";class f9 extends s{_additionalMass=0;_colliders=new Set;_explicitSleep=!1;_enabledPositions={x:!0,y:!0,z:!0};_enabledRotations={x:!0,y:!0,z:!0};_rigidBody;_rigidBodyDesc;_rigidBodyType;_simulation;constructor(J){super();J.type??=PC,this._rigidBodyDesc=this._createRigidBodyDesc(J),this._rigidBodyType=J.type,this._applyRigidBodyOptions(J),this._autoAddToSimulation(J)}get additionalMass(){if(!this._requireNotRemoved("additionalMass"))return 0;return this._additionalMass}get additionalSolverIterations(){if(!this._requireNotRemoved("additionalSolverIterations"))return 0;return this._rigidBody?this._rigidBody.additionalSolverIterations():this._rigidBodyDesc.additionalSolverIterations}get angularDamping(){if(!this._requireNotRemoved("angularDamping"))return 0;return this._rigidBody?this._rigidBody.angularDamping():this._rigidBodyDesc.angularDamping}get angularVelocity(){if(!this._requireNotRemoved("angularVelocity"))return{x:0,y:0,z:0};return this._rigidBody?this._rigidBody.angvel():this._rigidBodyDesc.angvel}get colliders(){return this._colliders}get dominanceGroup(){if(!this._requireNotRemoved("dominanceGroup"))return 0;return this._rigidBody?this._rigidBody.dominanceGroup():this._rigidBodyDesc.dominanceGroup}get directionFromRotation(){let{x:J,y:X,z:Y,w:Z}=this.rotation;return{x:2*(J*Y+Z*X),y:2*(X*Y-Z*J),z:1-2*(J*J+X*X)}}get effectiveAngularInertia(){if(!this._requireNotRemoved("effectiveAngularInertia"))return;return this._rigidBody?this._rigidBody.effectiveAngularInertia():void 0}get effectiveInverseMass(){if(!this._requireNotRemoved("effectiveInverseMass"))return;return this._rigidBody?this._rigidBody.effectiveInvMass():void 0}get effectiveWorldInversePrincipalAngularInertiaSqrt(){if(!this._requireNotRemoved("effectiveWorldInversePrincipalAngularInertiaSqrt"))return;return this._rigidBody?this._rigidBody.effectiveWorldInvInertiaSqrt():void 0}get enabledRotations(){if(!this._requireNotRemoved("enabledRotations"))return{x:!0,y:!0,z:!0};return this._enabledRotations}get enabledPositions(){if(!this._requireNotRemoved("enabledPositions"))return{x:!0,y:!0,z:!0};return this._enabledPositions}get gravityScale(){if(!this._requireNotRemoved("gravityScale"))return 0;return this._rigidBody?this._rigidBody.gravityScale():this._rigidBodyDesc.gravityScale}get inverseMass(){if(!this._requireNotRemoved("inverseMass"))return;return this._rigidBody?this._rigidBody.invMass():void 0}get inversePrincipalAngularInertiaSqrt(){if(!this._requireNotRemoved("inversePrincipalAngularInertiaSqrt"))return;return this._rigidBody?this._rigidBody.invPrincipalInertiaSqrt():void 0}get isCcdEnabled(){if(!this._requireNotRemoved("isCcdEnabled"))return!1;return this._rigidBody?this._rigidBody.isCcdEnabled():this._rigidBodyDesc.ccdEnabled}get isDynamic(){if(!this._requireNotRemoved("isDynamic"))return!1;return this._rigidBodyType==="dynamic"}get isEnabled(){if(!this._requireNotRemoved("isEnabled"))return!1;return this._rigidBody?this._rigidBody.isEnabled():this._rigidBodyDesc.enabled}get isFixed(){if(!this._requireNotRemoved("isFixed"))return!1;return this._rigidBodyType==="fixed"}get isKinematic(){if(!this._requireNotRemoved("isKinematic"))return!1;return["kinematic_position","kinematic_velocity"].includes(this._rigidBodyType)}get isKinematicPositionBased(){if(!this._requireNotRemoved("isKinematicPositionBased"))return!1;return this._rigidBodyType==="kinematic_position"}get isKinematicVelocityBased(){if(!this._requireNotRemoved("isKinematicVelocityBased"))return!1;return this._rigidBodyType==="kinematic_velocity"}get isMoving(){if(!this._requireNotRemoved("isMoving"))return!1;return this._rigidBody?this._rigidBody.isMoving():!1}get isRemoved(){return!this._rigidBody&&!this._rigidBodyDesc}get isSimulated(){if(!this._requireNotRemoved("isSimulated"))return!1;return this._rigidBody?!0:!1}get isSleeping(){if(!this._requireNotRemoved("isSleeping"))return!1;return this._rigidBody?this._rigidBody.isSleeping():this._rigidBodyDesc.sleeping}get linearDamping(){if(!this._requireNotRemoved("linearDamping"))return 0;return this._rigidBody?this._rigidBody.linearDamping():this._rigidBodyDesc.linearDamping}get linearVelocity(){if(!this._requireNotRemoved("linearVelocity"))return{x:0,y:0,z:0};return this._rigidBody?this._rigidBody.linvel():this._rigidBodyDesc.linvel}get localCenterOfMass(){if(!this._requireNotRemoved("localCenterOfMass"))return{x:0,y:0,z:0};return this._rigidBody?this._rigidBody.localCom():this._rigidBodyDesc.centerOfMass}get mass(){if(!this._requireNotRemoved("mass"))return 0;return this._rigidBody?this._rigidBody.mass():this._rigidBodyDesc.mass}get nextKinematicRotation(){if(!this._requireNotRemoved("nextKinematicRotation"))return{x:0,y:0,z:0,w:1};return this._rigidBody?this._rigidBody.nextRotation():this._rigidBodyDesc.rotation}get nextKinematicPosition(){if(!this._requireNotRemoved("nextKinematicPosition"))return{x:0,y:0,z:0};return this._rigidBody?this._rigidBody.nextTranslation():this._rigidBodyDesc.translation}get numColliders(){return this._colliders.size}get principalAngularInertia(){if(!this._requireNotRemoved("principalAngularInertia"))return{x:0,y:0,z:0};return this._rigidBody?this._rigidBody.principalInertia():this._rigidBodyDesc.principalAngularInertia}get principalAngularInertiaLocalFrame(){if(!this._requireNotRemoved("principalAngularInertiaLocalFrame"))return;return this._rigidBody?this._rigidBody.principalInertiaLocalFrame():void 0}get position(){if(!this._requireNotRemoved("position"))return{x:0,y:0,z:0};return this._rigidBody?this._rigidBody.translation():this._rigidBodyDesc.translation}get rawRigidBody(){if(!this._requireNotRemoved("rawRigidBody"))return;return this._rigidBody}get rotation(){if(!this._requireNotRemoved("rotation"))return{x:0,y:0,z:0,w:1};return this._rigidBody?this._rigidBody.rotation():this._rigidBodyDesc.rotation}get softCcdPrediction(){if(!this._requireNotRemoved("softCcdPrediction"))return 0;return this._rigidBody?this._rigidBody.softCcdPrediction():this._rigidBodyDesc.softCcdPrediction}get type(){if(!this._requireNotRemoved("type"))return"dynamic";return this._rigidBodyType}get worldCenterOfMass(){if(!this._requireNotRemoved("worldCenterOfMass"))return;return this._rigidBody?this._rigidBody.worldCom():void 0}setAdditionalMass(J){if(!this._requireDynamic("setAdditionalMass"))return;if(!this._requireNotRemoved("setAdditionalMass"))return;this._rigidBody?this._rigidBody.setAdditionalMass(J,!this._explicitSleep):this._rigidBodyDesc.setAdditionalMass(J)}setAdditionalMassProperties(J){if(!this._requireDynamic("setAdditionalMassProperties"))return;if(!this._requireNotRemoved("setAdditionalMassProperties"))return;let{additionalMass:X,centerOfMass:Y,principalAngularInertia:Z,principalAngularInertiaLocalFrame:W}=J;this._rigidBody?this._rigidBody.setAdditionalMassProperties(X,Y,Z,W,!this._explicitSleep):this._rigidBodyDesc.setAdditionalMassProperties(X,Y,Z,W)}setAdditionalSolverIterations(J){if(!this._requireDynamic("setAdditionalSolverIterations"))return;if(!this._requireNotRemoved("setAdditionalSolverIterations"))return;this._rigidBody?this._rigidBody.setAdditionalSolverIterations(J):this._rigidBodyDesc.setAdditionalSolverIterations(J)}setAngularDamping(J){if(!this._requireDynamic("setAngularDamping"))return;if(!this._requireNotRemoved("setAngularDamping"))return;this._rigidBody?this._rigidBody.setAngularDamping(J):this._rigidBodyDesc.setAngularDamping(J)}setAngularVelocity(J){if(!this._requireNotKinematicPositionBased("setAngularVelocity"))return;if(!this._requireNotRemoved("setAngularVelocity"))return;this._rigidBody?this._rigidBody.setAngvel(J,!this._explicitSleep):this._rigidBodyDesc.setAngvel(J)}setCcdEnabled(J){if(!this._requireDynamic("setCcdEnabled"))return;if(!this._requireNotRemoved("setCcdEnabled"))return;this._rigidBody?this._rigidBody.enableCcd(J):this._rigidBodyDesc.setCcdEnabled(J)}setDominanceGroup(J){if(!this._requireDynamic("setDominanceGroup"))return;if(!this._requireNotRemoved("setDominanceGroup"))return;this._rigidBody?this._rigidBody.setDominanceGroup(J):this._rigidBodyDesc.setDominanceGroup(J)}setEnabled(J){if(!this._requireNotRemoved("setEnabled"))return;this._rigidBody?this._rigidBody.setEnabled(J):this._rigidBodyDesc.setEnabled(J)}setEnabledPositions(J){if(!this._requireDynamic("setEnabledPositions"))return;if(!this._requireNotRemoved("setEnabledPositions"))return;this._rigidBody?this._rigidBody.setEnabledTranslations(J.x,J.y,J.z,!this._explicitSleep):this._rigidBodyDesc.enabledTranslations(J.x,J.y,J.z),this._enabledPositions=J}setEnabledRotations(J){if(!this._requireDynamic("setEnabledRotations"))return;if(!this._requireNotRemoved("setEnabledRotations"))return;this._rigidBody?this._rigidBody.setEnabledRotations(J.x,J.y,J.z,!this._explicitSleep):this._rigidBodyDesc.enabledRotations(J.x,J.y,J.z),this._enabledRotations=J}setGravityScale(J){if(!this._requireDynamic("setGravityScale"))return;if(!this._requireNotRemoved("setGravityScale"))return;this._rigidBody?this._rigidBody.setGravityScale(J,!this._explicitSleep):this._rigidBodyDesc.setGravityScale(J)}setLinearDamping(J){if(!this._requireDynamic("setLinearDamping"))return;if(!this._requireNotRemoved("setLinearDamping"))return;this._rigidBody?this._rigidBody.setLinearDamping(J):this._rigidBodyDesc.setLinearDamping(J)}setLinearVelocity(J){if(!this._requireNotKinematicPositionBased("setLinearVelocity"))return;if(!this._requireNotRemoved("setLinearVelocity"))return;this._rigidBody?this._rigidBody.setLinvel(J,!this._explicitSleep):this._rigidBodyDesc.setLinvel(J.x,J.y,J.z)}setNextKinematicRotation(J){if(!this._requireKinematic("setNextKinematicRotation"))return;if(!this._requireNotRemoved("setNextKinematicRotation"))return;this._rigidBody?this._rigidBody.setNextKinematicRotation(J):this._rigidBodyDesc.setRotation(J)}setNextKinematicPosition(J){if(!this._requireKinematic("setNextKinematicPosition"))return;if(!this._requireNotRemoved("setNextKinematicPosition"))return;this._rigidBody?this._rigidBody.setNextKinematicTranslation(J):this._rigidBodyDesc.setTranslation(J.x,J.y,J.z)}setPosition(J){if(!this._requireNotRemoved("setPosition"))return;this._rigidBody?this._rigidBody.setTranslation(J,!this._explicitSleep):this._rigidBodyDesc.setTranslation(J.x,J.y,J.z)}setRotation(J){if(!this._requireNotRemoved("setRotation"))return;this._rigidBody?this._rigidBody.setRotation(J,!this._explicitSleep):this._rigidBodyDesc.setRotation(J)}setSleeping(J){if(!this._requireDynamic("setSleeping"))return;if(!this._requireNotRemoved("setSleeping"))return;this._rigidBody?J?this._rigidBody.sleep():this._rigidBody.wakeUp():this._rigidBodyDesc.sleeping=J,this._explicitSleep=J}setSoftCcdPrediction(J){if(!this._requireDynamic("setSoftCcdPrediction"))return;if(!this._requireNotRemoved("setSoftCcdPrediction"))return;this._rigidBody?this._rigidBody.setSoftCcdPrediction(J):this._rigidBodyDesc.setSoftCcdPrediction(J)}setCollisionGroupsForSolidColliders(J){if(!this._requireNotRemoved("setCollisionGroupsForSolidColliders"))return;this._colliders.forEach((X)=>{if(X.isSensor)return;X.setCollisionGroups(J)})}setCollisionGroupsForSensorColliders(J){if(!this._requireNotRemoved("setCollisionGroupsForSensorColliders"))return;this._colliders.forEach((X)=>{if(!X.isSensor)return;X.setCollisionGroups(J)})}setType(J){if(!this._requireNotRemoved("setType"))return;let Y={["dynamic"]:z0.RigidBodyType.Dynamic,["fixed"]:z0.RigidBodyType.Fixed,["kinematic_position"]:z0.RigidBodyType.KinematicPositionBased,["kinematic_velocity"]:z0.RigidBodyType.KinematicVelocityBased}[J];if(Y===void 0)return E.error(`Invalid RigidBodyType: ${J}`);this._rigidBody?this._rigidBody.setBodyType(Y,!this._explicitSleep):this._rigidBodyDesc.status=Y,this._rigidBodyType=J}addForce(J){if(!this._requireNotRemoved("addForce"))return;if(!this._requireCreated("addForce"))return;if(!this._requireDynamic("addForce"))return;if(this._isNegligibleVector(J))return;this._rigidBody.addForce(J,!this._explicitSleep)}addTorque(J){if(!this._requireNotRemoved("addTorque"))return;if(!this._requireCreated("addTorque"))return;if(!this._requireDynamic("addTorque"))return;if(this._isNegligibleVector(J))return;this._rigidBody.addTorque(J,!this._explicitSleep)}addChildColliderToSimulation(J){if(!this._requireNotRemoved("addChildColliderToSimulation"))return;if(!this._requireCreated("addChildColliderToSimulation"))return;J.addToSimulation(this._simulation,this)}addToSimulation(J){if(!this._requireNotRemoved("addToSimulation"))return;if(this._rigidBody)return E.error("RigidBody.addToSimulation(): Rigid body already exists in the simulation!");this._simulation=J,this._rigidBody=this._simulation.createRawRigidBody(this._rigidBodyDesc),this._colliders.forEach((X)=>{if(!X.isSimulated)X.addToSimulation(J,this)})}applyImpulse(J){if(!this._requireNotRemoved("applyImpulse"))return;if(!this._requireCreated("applyImpulse"))return;if(!this._requireDynamic("applyImpulse"))return;if(this._isNegligibleVector(J))return;this._rigidBody.applyImpulse(J,!this._explicitSleep)}applyImpulseAtPoint(J,X){if(!this._requireNotRemoved("applyImpulseAtPoint"))return;if(!this._requireCreated("applyImpulseAtPoint"))return;if(!this._requireDynamic("applyImpulseAtPoint"))return;if(this._isNegligibleVector(J))return;this._rigidBody.applyImpulseAtPoint(J,X,!this._explicitSleep)}applyTorqueImpulse(J){if(!this._requireNotRemoved("applyTorqueImpulse"))return;if(!this._requireCreated("applyTorqueImpulse"))return;if(!this._requireDynamic("applyTorqueImpulse"))return;this._rigidBody.applyTorqueImpulse(J,!this._explicitSleep)}createAndAddChildCollider(J){if(!this._requireNotRemoved("createAndAddChildCollider"))return null;return this._simulation?new d8({...J,parentRigidBody:this,simulation:this._simulation}):this._createAndAddPendingChildCollider(J)}createAndAddChildCollidersToSimulation(J){let X=[];return J.forEach((Y)=>{let Z=this.createAndAddChildCollider(Y);if(Z)X.push(Z)}),X}getCollidersByTag(J){let X=[];for(let Y of this._colliders)if(Y.tag===J)X.push(Y);return X}linkCollider(J){if(!this._requireNotRemoved("linkCollider"))return;if(J.parentRigidBody!==this)return E.error("RigidBody.linkCollider(): Collider cannot be linked because it is not a child of this rigid body!");this._colliders.add(J)}lockAllRotations(){if(!this._requireNotRemoved("lockAllRotations"))return;this.setEnabledRotations({x:!1,y:!1,z:!1})}lockAllPositions(){if(!this._requireNotRemoved("lockAllPositions"))return;this.setEnabledPositions({x:!1,y:!1,z:!1})}removeFromSimulation(){if(!this._requireNotRemoved("removeFromSimulation"))return;if(!this._rigidBody)return E.error("RigidBody.removeFromSimulation(): Rigid body does not exist in the simulation!");this._colliders.forEach((J)=>{J.removeFromSimulation()}),this._simulation.removeRawRigidBody(this._rigidBody),this._simulation=void 0,this._rigidBody=void 0}unlinkCollider(J){if(!this._requireNotRemoved("unlinkCollider"))return;if(!J.isRemoved)return E.error("RigidBody.unlinkCollider(): Collider is still simulated and therefore cannot be unlinked from this rigid body!");this._colliders.delete(J)}resetAngularVelocity(){if(!this._requireNotRemoved("resetAngularVelocity"))return;if(!this._requireCreated("resetAngularVelocity"))return;this.setAngularVelocity({x:0,y:0,z:0})}resetForces(){if(!this._requireNotRemoved("resetForces"))return;if(!this._requireCreated("resetForces"))return;this._rigidBody.resetForces(!this._explicitSleep)}resetLinearVelocity(){if(!this._requireNotRemoved("resetLinearVelocity"))return;if(!this._requireCreated("resetLinearVelocity"))return;this.setLinearVelocity({x:0,y:0,z:0})}resetTorques(){if(!this._requireNotRemoved("resetTorques"))return;if(!this._requireCreated("resetTorques"))return;this._rigidBody.resetTorques(!this._explicitSleep)}sleep(){if(!this._requireNotRemoved("sleep"))return;this.setSleeping(!0)}wakeUp(){if(!this._requireNotRemoved("wakeUp"))return;this.setSleeping(!1)}_applyRigidBodyOptions(J){[["additionalMass",this.setAdditionalMass.bind(this)],["additionalMassProperties",this.setAdditionalMassProperties.bind(this)],["additionalSolverIterations",this.setAdditionalSolverIterations.bind(this)],["angularDamping",this.setAngularDamping.bind(this)],["angularVelocity",this.setAngularVelocity.bind(this)],["dominanceGroup",this.setDominanceGroup.bind(this)],["ccdEnabled",this.setCcdEnabled.bind(this)],["enabled",this.setEnabled.bind(this)],["enabledPositions",this.setEnabledPositions.bind(this)],["enabledRotations",this.setEnabledRotations.bind(this)],["gravityScale",this.setGravityScale.bind(this)],["linearDamping",this.setLinearDamping.bind(this)],["linearVelocity",this.setLinearVelocity.bind(this)],["position",this.setPosition.bind(this)],["rotation",this.setRotation.bind(this)],["sleeping",this.setSleeping.bind(this)],["softCcdPrediction",this.setSoftCcdPrediction.bind(this)]].forEach(([Y,Z])=>{if(Y in J)Z(J[Y])})}_autoAddToSimulation(J){if(J.colliders)this._createAndAddPendingChildColliders(J.colliders);if(J.simulation)this.addToSimulation(J.simulation)}_createAndAddPendingChildCollider(J){if(!this._requireNotRemoved("createAndAddPendingChildCollider"))return null;if(!this._requireNotSimulated("createAndAddPendingChildCollider"))return null;let X=new d8(J);return this._colliders.add(X),X}_createAndAddPendingChildColliders(J){let X=[];return J.forEach((Y)=>{let Z=this._createAndAddPendingChildCollider(Y);if(Z)X.push(Z)}),X}_createRigidBodyDesc(J){let X=J.type??PC;return{["dynamic"]:()=>z0.RigidBodyDesc.dynamic(),["fixed"]:()=>z0.RigidBodyDesc.fixed(),["kinematic_position"]:()=>z0.RigidBodyDesc.kinematicPositionBased(),["kinematic_velocity"]:()=>z0.RigidBodyDesc.kinematicVelocityBased()}[X]()}_requireCreated(J){if(!this._rigidBody||!this._simulation)E.error(`RigidBody._requireCreated(): Rigid body has not been created and therefore does not support the invoked method: ${J}()`);return!!this._rigidBody&&!!this._simulation}_requireDynamic(J){if(!this.isDynamic)E.error(`RigidBody._requireDynamic(): Rigid body is not dynamic and therefore does not support the invoked method: ${J}()`);return this.isDynamic}_requireKinematic(J){if(!this.isKinematic)E.error(`RigidBody._requireKinematic(): Rigid body is not kinematic and therefore does not support the invoked method: ${J}()`);return this.isKinematic}_requireNotKinematicPositionBased(J){if(this.isKinematicPositionBased)E.error(`RigidBody._requireNotKinematicPositionBased(): Rigid body is kinematic position based and therefore does not support the invoked method: ${J}()`);return!this.isKinematicPositionBased}_requireNotRemoved(J){if(!this._rigidBody&&!this._rigidBodyDesc)E.error(`RigidBody._requireNotRemoved(): Rigid body has been removed and therefore does not support the invoked method: ${J}()`);return!!this._rigidBody||!!this._rigidBodyDesc}_requireNotSimulated(J){if(this.isSimulated)E.error(`RigidBody._requireNotSimulated(): Rigid body is simulated and therefore does not support the invoked method: ${J}()`);return!this.isSimulated}_isNegligibleVector(J){return Math.abs(J.x)<zH&&Math.abs(J.y)<zH&&Math.abs(J.z)<zH}}var n0=16,t5=n0-1,NC=n0**3,lX0=[{neighborOffset:[-1,0,0],generateVertices:(J,X,Y)=>[J+0,X+0,Y+0,J+0,X+0,Y+1,J+0,X+1,Y+0,J+0,X+1,Y+0,J+0,X+0,Y+1,J+0,X+1,Y+1]},{neighborOffset:[1,0,0],generateVertices:(J,X,Y)=>[J+1,X+0,Y+0,J+1,X+1,Y+0,J+1,X+0,Y+1,J+1,X+1,Y+0,J+1,X+1,Y+1,J+1,X+0,Y+1]},{neighborOffset:[0,-1,0],generateVertices:(J,X,Y)=>[J+0,X+0,Y+0,J+1,X+0,Y+0,J+0,X+0,Y+1,J+1,X+0,Y+0,J+1,X+0,Y+1,J+0,X+0,Y+1]},{neighborOffset:[0,1,0],generateVertices:(J,X,Y)=>[J+0,X+1,Y+0,J+0,X+1,Y+1,J+1,X+1,Y+0,J+1,X+1,Y+0,J+0,X+1,Y+1,J+1,X+1,Y+1]},{neighborOffset:[0,0,-1],generateVertices:(J,X,Y)=>[J+0,X+0,Y+0,J+0,X+1,Y+0,J+1,X+0,Y+0,J+0,X+1,Y+0,J+1,X+1,Y+0,J+1,X+0,Y+0]},{neighborOffset:[0,0,1],generateVertices:(J,X,Y)=>[J+0,X+0,Y+1,J+1,X+0,Y+1,J+0,X+1,Y+1,J+0,X+1,Y+1,J+1,X+0,Y+1,J+1,X+1,Y+1]}],LH;((Z)=>{Z.DESPAWN="CHUNK.DESPAWN";Z.SET_BLOCK="CHUNK.SET_BLOCK";Z.SPAWN="CHUNK.SPAWN"})(LH||={});class w8 extends s{_blocks;_originCoordinate;_requiresUpdate=!1;_rigidBody;_world;constructor(){super();this._blocks=new Uint8Array(NC)}get blocks(){return this._blocks}get requiresUpdate(){return this._requiresUpdate}get isSimulated(){return!!this._rigidBody}get isSpawned(){return!!this._originCoordinate&&!!this._world}get originCoordinate(){return this._originCoordinate}get world(){return this._world}static blockIndexToLocalCoordinate(J){return{x:J%n0,y:(J/n0|0)%n0,z:J/(n0*n0)|0}}static globalCoordinateToLocalCoordinate(J){return{x:J.x&n0-1,y:J.y&n0-1,z:J.z&n0-1}}static globalCoordinateToOriginCoordinate(J){return{x:J.x&~(n0-1),y:J.y&~(n0-1),z:J.z&~(n0-1)}}static isValidOriginCoordinate(J){return J.x%n0===0&&J.y%n0===0&&J.z%n0===0}spawn(J,X){if(this.isSpawned){let{x:Y,y:Z,z:W}=this.originCoordinate;return E.error(`Chunk.spawn(): Chunk is already spawned at origin ${Y}, ${Z}, ${W}!`)}if(!w8.isValidOriginCoordinate(X))return E.error(`Chunk.spawn(): Chunk coordinates must be divisible by ${n0}`);this._originCoordinate=X,this._world=J,this._world.chunkLattice.registerChunk(this),this._requiresUpdate=!0}despawn(){if(!this.isSpawned)return E.error("Chunk.despawn(): Chunk has not been spawned and cannot be despawned!");this.emitWithWorld(this._world,"CHUNK.DESPAWN",{chunk:this}),this._removeFromSimulation(),this._world.chunkLattice.unregisterChunk(this),this._originCoordinate=void 0,this._world=void 0}getBlockId(J){return this._blocks[this._getIndex(J)]}hasBlock(J){return this._blocks[this._getIndex(J)]!==0}setBlock(J,X){if(!this._isValidLocalCoordinate(J))return E.error("Chunk.setBlock(): Block local coordinate is out of bounds");if(this._blocks[this._getIndex(J)]===X)return;if(this._blocks[this._getIndex(J)]=X,this.isSpawned&&this.isSimulated){this.emitWithWorld(this._world,"CHUNK.SET_BLOCK",{chunk:this,globalCoordinate:this._getGlobalCoordinate(J),localCoordinate:J,blockTypeId:X});let Y=this._getGlobalCoordinate(J),Z=[];if(J.x===0)Z.push({x:-1,y:0,z:0});if(J.y===0)Z.push({x:0,y:-1,z:0});if(J.z===0)Z.push({x:0,y:0,z:-1});if(J.x===t5)Z.push({x:1,y:0,z:0});if(J.y===t5)Z.push({x:0,y:1,z:0});if(J.z===t5)Z.push({x:0,y:0,z:1});for(let W of Z){let $={x:Y.x+W.x,y:Y.y+W.y,z:Y.z+W.z},Q=w8.globalCoordinateToOriginCoordinate($),K=this._world?.chunkLattice.getChunk(Q);if(!K?.hasBlock(w8.globalCoordinateToLocalCoordinate($)))continue;K.setRequiresUpdate(!0)}}this._requiresUpdate=!0}setRequiresUpdate(J){this._requiresUpdate=J}update(){if(!this._requiresUpdate)return;if(!this.isSpawned)return E.error("Chunk.update(): Chunk is not spawned and cannot be updated.");let J=!this._rigidBody,X=this._world.simulation;if(this._removeFromSimulation(),this._rigidBody=new f9({type:"fixed",position:this._originCoordinate,simulation:this._world.simulation}),this._meshColliders().map(([Y,Z])=>{if(!Y.isSimulated)Y.addToSimulation(X,this._rigidBody);X.colliderMap.setColliderBlockType(Y,Z)}),this._requiresUpdate=!1,J)this.emitWithWorld(this._world,"CHUNK.SPAWN",{chunk:this})}serialize(){return t.serializeChunk(this)}_meshColliders(){if(!this._world)return E.error("Chunk._meshColliders(): Chunk is not spawned and cannot be meshed."),[];let J=new Map,X=[];for(let Z=0;Z<NC;Z++){if(this._blocks[Z]===0)continue;let W=this._blocks[Z],$=this._world.blockTypeRegistry.getBlockType(W),{x:Q,y:K,z:G}=w8.blockIndexToLocalCoordinate(Z);if(!$.isMeshable){let q=$.createCollider();q.setRelativePosition({x:Q,y:K,z:G}),X.push([q,$]);continue}let F=J.get($)??{indices:[],vertices:[]};J.set($,F);for(let q of lX0){let[H,z,V]=q.neighborOffset,M={x:Q+H,y:K+z,z:G+V},R=this._getGlobalCoordinate(M),L=this._world.chunkLattice.getBlockType(R);if(L&&!L.isLiquid)continue;let w=F.indices.length;F.indices.push(w,w+1,w+2,w+3,w+4,w+5),F.vertices.push(...q.generateVertices(Q,K,G))}}let Y=[];return J.forEach((Z,W)=>{if(!Z.indices.length)return;let $=W.createCollider(new Uint32Array(Z.indices),new Float32Array(Z.vertices));Y.push([$,W])}),[...X,...Y]}_removeFromSimulation(){if(!this._rigidBody||!this._world)return;this._rigidBody.removeFromSimulation(),this._rigidBody=void 0}_getGlobalCoordinate(J){if(!this.originCoordinate)E.fatalError("Chunk._getGlobalCoordinate(): Chunk is not spawned, calculating global coordinate is impossible.");return{x:this.originCoordinate.x+J.x,y:this.originCoordinate.y+J.y,z:this.originCoordinate.z+J.z}}_getIndex(J){return J.x+n0*(J.y+n0*J.z)}_isValidLocalCoordinate(J){return J.x>=0&&J.x<=t5&&J.y>=0&&J.y<=t5&&J.z>=0&&J.z<=t5}}class PJ{_chunks=new Map;_world;constructor(J){this._world=J}registerChunk(J){if(!J.isSpawned)return E.error("ChunkLattice.registerChunk(): Chunk is not spawned.");if(this.hasChunk(J.originCoordinate)){let{x:X,y:Y,z:Z}=J.originCoordinate;return E.error(`ChunkLattice.registerChunk(): Chunk exists at origin (${X}, ${Y}, ${Z}), despawn the current chunk before registering another at the same origin.`)}if(J.world.id!==this._world.id)return E.error("ChunkLattice.registerChunk(): Chunk world does not match lattice world.");this._chunks.set(this._getChunkKey(J.originCoordinate),J)}unregisterChunk(J){if(!J.isSpawned)return E.error("ChunkLattice.unregisterChunk(): Chunk is not spawned.");if(J.world.id!==this._world.id)return E.error("ChunkLattice.unregisterChunk(): Chunk world does not match lattice world.");this._chunks.delete(this._getChunkKey(J.originCoordinate))}getBlockId(J){let X=this.getChunk(w8.globalCoordinateToOriginCoordinate(J));if(!X)return 0;return X.getBlockId(w8.globalCoordinateToLocalCoordinate(J))}getBlockType(J){let X=this.getBlockId(J);return X?this._world.blockTypeRegistry.getBlockType(X):null}getChunk(J){if(!w8.isValidOriginCoordinate(J)){E.error(`ChunkLattice.getChunk(): Chunk coordinates must be divisible by CHUNK_SIZE (${n0})`);return}return this._chunks.get(this._getChunkKey(J))}getAllChunks(){return Array.from(this._chunks.values())}hasBlock(J){let X=this.getChunk(w8.globalCoordinateToOriginCoordinate(J));if(!X)return!1;return X.hasBlock(w8.globalCoordinateToLocalCoordinate(J))}hasChunk(J){return this._chunks.has(this._getChunkKey(J))}setBlock(J,X){let Y=w8.globalCoordinateToLocalCoordinate(J),Z=w8.globalCoordinateToOriginCoordinate(J),W=this.getChunk(Z);if(!W)W=new w8,W.spawn(this._world,Z);W.setBlock(Y,X)}updateChunks(){this._chunks.forEach((J)=>{if(J.requiresUpdate)J.update()})}_getChunkKey(J){return`${J.x},${J.y},${J.z}`}}var vC={type:"dynamic",softCcdPrediction:1},BC=0.0025000000000000005,jC=Math.cos(0.005),$$;((w)=>{w.BLOCK_COLLISION="ENTITY.BLOCK_COLLISION";w.BLOCK_CONTACT_FORCE="ENTITY.BLOCK_CONTACT_FORCE";w.DESPAWN="ENTITY.DESPAWN";w.ENTITY_COLLISION="ENTITY.ENTITY_COLLISION";w.ENTITY_CONTACT_FORCE="ENTITY.ENTITY_CONTACT_FORCE";w.SET_MODEL_ANIMATIONS_PLAYBACK_RATE="ENTITY.SET_MODEL_ANIMATIONS_PLAYBACK_RATE";w.SET_MODEL_HIDDEN_NODES="ENTITY.SET_MODEL_HIDDEN_NODES";w.SET_OPACITY="ENTITY.SET_OPACITY";w.SET_PARENT="ENTITY.SET_PARENT";w.SET_TINT_COLOR="ENTITY.SET_TINT_COLOR";w.SPAWN="ENTITY.SPAWN";w.START_MODEL_LOOPED_ANIMATIONS="ENTITY.START_MODEL_LOOPED_ANIMATIONS";w.START_MODEL_ONESHOT_ANIMATIONS="ENTITY.START_MODEL_ONESHOT_ANIMATIONS";w.STOP_MODEL_ANIMATIONS="ENTITY.STOP_MODEL_ANIMATIONS";w.TICK="ENTITY.TICK";w.UPDATE_POSITION="ENTITY.UPDATE_POSITION";w.UPDATE_ROTATION="ENTITY.UPDATE_ROTATION"})($$||={});class Y8 extends f9{_id;_blockHalfExtents;_blockTextureUri;_controller;_modelAnimationsPlaybackRate=1;_modelHiddenNodes=new Set;_modelLoopedAnimations=new Set;_modelOneshotAnimations=new Set;_modelScale;_modelUri;_name;_opacity;_parent;_parentNodeName;_tag;_tintColor;_lastUpdatedPosition={x:0,y:0,z:0};_lastUpdatedRotation={x:0,y:0,z:0,w:1};_lastParentlessType="dynamic";_world;constructor(J){let X="blockTextureUri"in J,Y="modelUri"in J;if(!X===!Y)E.fatalError("Entity.constructor(): Entity data must include a blockTextureUri or modelUri, but not both.");if(X&&!J.blockHalfExtents)E.fatalError("Entity.constructor(): Block entity must have blockHalfExtents!");if(J.parent&&!J.parent.isSpawned)E.fatalError("Entity.constructor(): Parent entity must be spawned before child entity!");if(J.parent?.modelUri&&J.parentNodeName&&!U6.instance.modelHasNode(J.parent.modelUri,J.parentNodeName))E.fatalError(`Entity.constructor(): Parent node name ${J.parentNodeName} not found in parent model ${J.parent.modelUri}!`);super(J.rigidBodyOptions??vC);if(X)this._blockHalfExtents=J.blockHalfExtents,this._blockTextureUri=J.blockTextureUri;if(Y)this._modelAnimationsPlaybackRate=J.modelAnimationsPlaybackRate??1,this._modelScale=J.modelScale,this._modelUri=J.modelUri,J.modelHiddenNodes?.forEach((Z)=>this._modelHiddenNodes.add(Z.toLowerCase())),J.modelLoopedAnimations?.forEach((Z)=>this._modelLoopedAnimations.add(Z));if(this._name=J.name??"Nameless",this._opacity=J.opacity??1,this._parent=J.parent,this._parentNodeName=J.parentNodeName,this._tag=J.tag,this._tintColor=J.tintColor,J.controller)this.setController(J.controller)}get id(){return this._id}get blockHalfExtents(){return this._blockHalfExtents}get blockTextureUri(){return this._blockTextureUri}get controller(){return this._controller}get height(){return this.isModelEntity?U6.instance.getHeight(this._modelUri)*(this._modelScale??1):this._blockHalfExtents.y*2}get modelAnimationsPlaybackRate(){return this._modelAnimationsPlaybackRate}get modelHiddenNodes(){return this._modelHiddenNodes}get modelLoopedAnimations(){return this._modelLoopedAnimations}get modelScale(){return this._modelScale}get modelUri(){return this._modelUri}get name(){return this._name}get opacity(){return this._opacity}get parent(){return this._parent}get parentNodeName(){return this._parentNodeName}get tag(){return this._tag}get tintColor(){return this._tintColor}get isBlockEntity(){return!!this._blockTextureUri}get isModelEntity(){return!!this._modelUri}get isSpawned(){return!!this._world}get world(){return this._world}spawn(J,X,Y){if(this.isSpawned)return E.error(`Entity.spawn(): Entity ${this._name} is already spawned with id ${this._id}!`);if(!this.isSimulated)this.addToSimulation(J.simulation);if(this._blockTextureUri&&this._blockHalfExtents&&this.numColliders===0)this.addChildColliderToSimulation(new d8(d8.optionsFromBlockHalfExtents(this._blockHalfExtents)));if(this._modelUri&&this.numColliders===0)this.addChildColliderToSimulation(new d8(d8.optionsFromModelUri(this._modelUri,this._modelScale)));if(this.colliders.forEach((Z)=>{if(this.hasListeners("ENTITY.BLOCK_COLLISION")||this.hasListeners("ENTITY.ENTITY_COLLISION"))Z.enableCollisionEvents(!0);if(this.hasListeners("ENTITY.BLOCK_CONTACT_FORCE")||this.hasListeners("ENTITY.ENTITY_CONTACT_FORCE"))Z.enableContactForceEvents(!0);if(q6.isDefaultCollisionGroups(Z.collisionGroups))Z.setCollisionGroups({belongsTo:[Z.isSensor?4:2],collidesWith:[65535]})}),this.setPosition(X),Y)this.setRotation(Y);if(this._id=J.entityManager.registerEntity(this),this._world=J,this._controller)this._controller.spawn(this);if(this._parent)this.setParent(this._parent,this._parentNodeName,X,Y);this.colliders.forEach((Z)=>{J.simulation.colliderMap.setColliderEntity(Z,this)}),this.emitWithWorld(J,"ENTITY.SPAWN",{entity:this})}despawn(){if(!this._requireSpawned("despawn"))return;if(this._world.entityManager.getEntityChildren(this).forEach((J)=>{J.despawn()}),this._controller)this._controller.detach(this),this._controller.despawn(this);if(this.emitWithWorld(this._world,"ENTITY.DESPAWN",{entity:this}),this.isSimulated)this.removeFromSimulation();this._world.entityManager.unregisterEntity(this),this._world.audioManager.unregisterEntityAttachedAudios(this),this._world.lightManager.despawnEntityAttachedLights(this),this._world.sceneUIManager.unloadEntityAttachedSceneUIs(this),this._id=void 0,this._world=void 0}setModelAnimationsPlaybackRate(J){if(!this._requireSpawned("setModelAnimationsPlaybackRate"))return;if(!this.isModelEntity||this._modelAnimationsPlaybackRate===J)return;this._modelAnimationsPlaybackRate=J,this.emitWithWorld(this._world,"ENTITY.SET_MODEL_ANIMATIONS_PLAYBACK_RATE",{entity:this,playbackRate:J})}setController(J){if(this._controller===J)return;if(this._controller)this._controller.detach(this);if(this._controller=J,this._controller)this._controller.attach(this)}setModelHiddenNodes(J){if(!this._requireSpawned("setModelHiddenNodes"))return;this._modelHiddenNodes=new Set(J.map((X)=>X.toLowerCase())),this.emitWithWorld(this._world,"ENTITY.SET_MODEL_HIDDEN_NODES",{entity:this,modelHiddenNodes:this._modelHiddenNodes})}setOpacity(J){if(!this._requireSpawned("setOpacity"))return;if(this._opacity===J)return;this._opacity=J,this.emitWithWorld(this._world,"ENTITY.SET_OPACITY",{entity:this,opacity:J})}setParent(J,X,Y,Z){if(!this._requireSpawned("setParent"))return;if(J&&!J.isSpawned)return E.error("Entity.setParent(): Parent entity is not spawned, cannot set parent!");if(!this._parent&&J)this._lastParentlessType=this.type;if(this._parent=J,this._parentNodeName=X,this.colliders.forEach((W)=>W.setEnabled(!J)),this.setType(!J?this._lastParentlessType:"kinematic_velocity"),this.setPosition(Y??{x:0,y:0,z:0}),this.setRotation(Z??{x:0,y:0,z:0,w:1}),!this.isKinematicPositionBased)this.resetAngularVelocity(),this.resetForces(),this.resetLinearVelocity(),this.resetTorques();this.emitWithWorld(this._world,"ENTITY.SET_PARENT",{entity:this,parent:J,parentNodeName:X})}setTintColor(J){if(!this._requireSpawned("setTintColor"))return;if(!J&&!this._tintColor||J&&this._tintColor&&J.r===this._tintColor.r&&J.g===this._tintColor.g&&J.b===this._tintColor.b)return;this._tintColor=J,this.emitWithWorld(this._world,"ENTITY.SET_TINT_COLOR",{entity:this,tintColor:J})}startModelLoopedAnimations(J){if(!this._requireSpawned("startModelLoopedAnimations"))return;if(!this.isModelEntity||!J.length)return;if(!J.some((X)=>!this._modelLoopedAnimations.has(X)))return;J.forEach((X)=>{this._modelLoopedAnimations.add(X)}),this.emitWithWorld(this._world,"ENTITY.START_MODEL_LOOPED_ANIMATIONS",{entity:this,animations:new Set(J)})}startModelOneshotAnimations(J){if(!this._requireSpawned("startModelOneshotAnimations"))return;if(!this.isModelEntity||!J.length)return;J.forEach((X)=>{this._modelOneshotAnimations.add(X)}),this.emitWithWorld(this._world,"ENTITY.START_MODEL_ONESHOT_ANIMATIONS",{entity:this,animations:new Set(J)})}stopModelAnimations(J){if(!this._requireSpawned("stopModelAnimations"))return;if(!this.isModelEntity||!J.length)return;if(!J.some((X)=>this._modelLoopedAnimations.has(X))&&!J.some((X)=>this._modelOneshotAnimations.has(X)))return;J.forEach((X)=>{this._modelLoopedAnimations.delete(X),this._modelOneshotAnimations.delete(X)}),this.emitWithWorld(this._world,"ENTITY.STOP_MODEL_ANIMATIONS",{entity:this,animations:new Set(J)})}serialize(){return t.serializeEntity(this)}tick(J){if(this.emit("ENTITY.TICK",{entity:this,tickDeltaMs:J}),this._controller)this._controller.tick(this,J)}checkAndEmitUpdates(){if(!this._requireSpawned("checkAndEmitUpdates"))return;let J=this.position,X=this.rotation;if(this._rotationExceedsThreshold(X,this._lastUpdatedRotation))this._lastUpdatedRotation=X,this.emitWithWorld(this._world,"ENTITY.UPDATE_ROTATION",{entity:this,rotation:X});if(this._positionExceedsThreshold(J,this._lastUpdatedPosition))this._lastUpdatedPosition=J,this.emitWithWorld(this._world,"ENTITY.UPDATE_POSITION",{entity:this,position:J})}_requireSpawned(J){if(!this.isSpawned)E.error(`Entity._requireSpawned(): Entity ${this._name} is not spawned, cannot invoke ${J}()!`);return this.isSpawned}_positionExceedsThreshold(J,X){let Y=J.x-X.x,Z=J.y-X.y,W=J.z-X.z;return Y*Y+Z*Z+W*W>BC}_rotationExceedsThreshold(J,X){return Math.abs(J.x*X.x+J.y*X.y+J.z*X.z+J.w*X.w)<jC}}class NJ extends a1{autoCancelMouseLeftClick=!0;canWalk=()=>!0;canRun=()=>!0;canJump=()=>!0;idleLoopedAnimations=["idle_upper","idle_lower"];interactOneshotAnimations=["simple_interact"];jumpOneshotAnimations=["jump_loop"];jumpVelocity=10;runLoopedAnimations=["run_upper","run_lower"];runVelocity=8;sticksToPlatforms=!0;walkLoopedAnimations=["walk_upper","walk_lower"];walkVelocity=4;_stepAudio;_groundContactCount=0;_platform;constructor(J={}){super();this.autoCancelMouseLeftClick=J.autoCancelMouseLeftClick??this.autoCancelMouseLeftClick,this.jumpVelocity=J.jumpVelocity??this.jumpVelocity,this.runVelocity=J.runVelocity??this.runVelocity,this.walkVelocity=J.walkVelocity??this.walkVelocity,this.canWalk=J.canWalk??this.canWalk,this.canRun=J.canRun??this.canRun,this.canJump=J.canJump??this.canJump,this.sticksToPlatforms=J.sticksToPlatforms??this.sticksToPlatforms}get isGrounded(){return this._groundContactCount>0}get isOnPlatform(){return!!this._platform}get platform(){return this._platform}attach(J){this._stepAudio=new $4({uri:"audio/sfx/step/stone/stone-step-04.mp3",loop:!0,volume:0.1,referenceDistance:2,cutoffDistance:15,attachedToEntity:J}),J.setCcdEnabled(!0),J.lockAllRotations()}spawn(J){if(!J.isSpawned)return E.error("PlayerEntityController.createColliders(): Entity is not spawned!");J.createAndAddChildCollider({shape:"cylinder",radius:0.23,halfHeight:0.125,collisionGroups:{belongsTo:[4],collidesWith:[1,2]},isSensor:!0,relativePosition:{x:0,y:-0.75,z:0},tag:"groundSensor",onCollision:(X,Y)=>{if(!J.isSpawned)return;if(this._groundContactCount+=Y?1:-1,!this._groundContactCount)J.startModelOneshotAnimations(this.jumpOneshotAnimations);else J.stopModelAnimations(this.jumpOneshotAnimations);if(!(X instanceof Y8)||!X.isKinematic)return;if(Y&&this.sticksToPlatforms)this._platform=X;else if(X===this._platform&&!Y)this._platform=void 0}}),J.createAndAddChildCollider({shape:"capsule",halfHeight:0.33,radius:0.4,collisionGroups:{belongsTo:[4],collidesWith:[1,2]},friction:0,frictionCombineRule:1,tag:"wallCollider"})}tickWithPlayerInput(J,X,Y,Z){if(!J.isSpawned||!J.world)return;if(super.tickWithPlayerInput(J,X,Y,Z),J.parent)return;let{w:W,a:$,s:Q,d:K,sp:G,sh:F,ml:q}=X,{yaw:H}=Y,z=J.linearVelocity,V={x:0,y:0,z:0},M=F;if(this.isGrounded&&(W||$||Q||K)){if(M)J.stopModelAnimations(Array.from(J.modelLoopedAnimations).filter((P)=>!this.runLoopedAnimations.includes(P))),J.startModelLoopedAnimations(this.runLoopedAnimations),this._stepAudio?.setPlaybackRate(0.75);else J.stopModelAnimations(Array.from(J.modelLoopedAnimations).filter((P)=>!this.walkLoopedAnimations.includes(P))),J.startModelLoopedAnimations(this.walkLoopedAnimations),this._stepAudio?.setPlaybackRate(0.51);this._stepAudio?.play(J.world,!this._stepAudio?.isPlaying)}else this._stepAudio?.pause(),J.stopModelAnimations(Array.from(J.modelLoopedAnimations).filter((P)=>!this.idleLoopedAnimations.includes(P))),J.startModelLoopedAnimations(this.idleLoopedAnimations);if(q)J.startModelOneshotAnimations(this.interactOneshotAnimations),X.ml=!this.autoCancelMouseLeftClick;if(M&&this.canRun(this)||!M&&this.canWalk(this)){let P=M?this.runVelocity:this.walkVelocity;if(W)V.x-=P*Math.sin(H),V.z-=P*Math.cos(H);if(Q)V.x+=P*Math.sin(H),V.z+=P*Math.cos(H);if($)V.x-=P*Math.cos(H),V.z+=P*Math.sin(H);if(K)V.x+=P*Math.cos(H),V.z-=P*Math.sin(H);let N=Math.sqrt(V.x*V.x+V.z*V.z);if(N>P){let v=P/N;V.x*=v,V.z*=v}}if(G&&this.canJump(this)){if(this.isGrounded&&z.y>-0.001&&z.y<=3)V.y=this.jumpVelocity}let R=this._platform?this._platform.linearVelocity:{x:0,y:0,z:0},L={x:V.x-z.x+R.x,y:V.y+R.y,z:V.z-z.z+R.z};if(!(this.runVelocity>0&&Math.abs(z.x)>this.runVelocity||this.jumpVelocity>0&&Math.abs(z.y)>this.jumpVelocity||this.runVelocity>0&&Math.abs(z.z)>this.runVelocity)||this.isOnPlatform){if(Object.values(L).some((P)=>P!==0)){let P=J.mass;J.applyImpulse({x:L.x*P,y:L.y*P,z:L.z*P})}}if(H!==void 0){let P=H/2;J.setRotation({x:0,y:Math.fround(Math.sin(P)),z:0,w:Math.fround(Math.cos(P))})}}}var UH;((K)=>{K.LOAD="SCENE_UI.LOAD";K.SET_ATTACHED_TO_ENTITY="SCENE_UI.SET_ATTACHED_TO_ENTITY";K.SET_OFFSET="SCENE_UI.SET_OFFSET";K.SET_POSITION="SCENE_UI.SET_POSITION";K.SET_STATE="SCENE_UI.SET_STATE";K.SET_VIEW_DISTANCE="SCENE_UI.SET_VIEW_DISTANCE";K.UNLOAD="SCENE_UI.UNLOAD"})(UH||={});class vJ extends s{_id;_attachedToEntity;_offset;_position;_state={};_templateId;_viewDistance;_world;constructor(J){if(!!J.attachedToEntity===!!J.position)E.fatalError("Either attachedToEntity or position must be set, but not both");super();this._attachedToEntity=J.attachedToEntity,this._offset=J.offset,this._position=J.position,this._state=J.state??{},this._templateId=J.templateId,this._viewDistance=J.viewDistance}get id(){return this._id}get attachedToEntity(){return this._attachedToEntity}get isLoaded(){return this._id!==void 0}get offset(){return this._offset}get position(){return this._position}get state(){return this._state}get templateId(){return this._templateId}get viewDistance(){return this._viewDistance}get world(){return this._world}load(J){if(this.isLoaded)return;if(this._attachedToEntity&&!this._attachedToEntity.isSpawned)return E.error(`SceneUI.load(): Attached entity ${this._attachedToEntity.id} must be spawned before loading SceneUI!`);this._id=J.sceneUIManager.registerSceneUI(this),this._world=J,this.emitWithWorld(J,"SCENE_UI.LOAD",{sceneUI:this})}setAttachedToEntity(J){if(!J.isSpawned)return E.error(`SceneUI.setAttachedToEntity(): Entity ${J.id} is not spawned!`);if(this._attachedToEntity===J)return;if(this._attachedToEntity=J,this._position=void 0,this.isLoaded)this.emitWithWorld(this._world,"SCENE_UI.SET_ATTACHED_TO_ENTITY",{sceneUI:this,entity:J})}setOffset(J){if(this._offset===J)return;if(this._offset=J,this.isLoaded)this.emitWithWorld(this._world,"SCENE_UI.SET_OFFSET",{sceneUI:this,offset:J})}setPosition(J){if(this._position===J)return;if(this._attachedToEntity=void 0,this._position=J,this.isLoaded)this.emitWithWorld(this._world,"SCENE_UI.SET_POSITION",{sceneUI:this,position:J})}setState(J){if(this._state={...this._state,...J},this.isLoaded)this.emitWithWorld(this._world,"SCENE_UI.SET_STATE",{sceneUI:this,state:this._state})}setViewDistance(J){if(this._viewDistance=J,this.isLoaded)this.emitWithWorld(this._world,"SCENE_UI.SET_VIEW_DISTANCE",{sceneUI:this,viewDistance:J})}unload(){if(!this.isLoaded||!this._world)return;this._world.sceneUIManager.unregisterSceneUI(this),this.emitWithWorld(this._world,"SCENE_UI.UNLOAD",{sceneUI:this}),this._id=void 0,this._world=void 0}serialize(){return t.serializeSceneUI(this)}}class n1 extends Y8{player;nametagSceneUI;constructor(J){super(J);if(this.player=J.player,this.nametagSceneUI=new vJ({templateId:"hytopia:nametag",attachedToEntity:this,offset:{x:0,y:1,z:0},viewDistance:15,state:{username:this.player.username,profilePictureUrl:this.player.profilePictureUrl}}),!J.controller)this.setController(new NJ)}spawn(J,X,Y){super.spawn(J,X,Y),this.nametagSceneUI.load(J),this.player.on("PLAYER.CHAT_MESSAGE_SEND",({message:Z})=>{this.nametagSceneUI.setState({chat:Z})})}tick(J){if(!this.isSpawned||!this.world||!this.controller)return;let{input:X,camera:Y}=this.player;this.controller.tickWithPlayerInput(this,X,Y.orientation,J),super.tick(J)}}class jJ{_entities=new Map;_nextEntityId=1;_world;constructor(J){this._world=J}get world(){return this._world}registerEntity(J){if(J.id!==void 0)E.fatalError(`EntityManager.registerEntity(): Entity ${J.name} is already assigned the id ${J.id}!`);let X=this._nextEntityId;return this._entities.set(X,J),this._nextEntityId++,X}unregisterEntity(J){if(J.id===void 0)return E.error(`EntityManager.unregisterEntity(): Entity ${J.name} is not assigned an id!`);this._entities.delete(J.id)}getAllEntities(){return Array.from(this._entities.values())}getAllPlayerEntities(){let J=[];return this._entities.forEach((X)=>{if(X instanceof n1)J.push(X)}),J}getPlayerEntitiesByPlayer(J){let X=[];return this._entities.forEach((Y)=>{if(Y instanceof n1&&Y.player===J)X.push(Y)}),X}getEntity(J){return this._entities.get(J)}getEntitiesByTag(J){let X=[];return this._entities.forEach((Y)=>{if(Y.tag===J)X.push(Y)}),X}getEntitiesByTagSubstring(J){let X=[];return this._entities.forEach((Y)=>{if(Y.tag?.includes(J))X.push(Y)}),X}getEntityChildren(J){let X=[];return this._entities.forEach((Y)=>{if(Y.parent===J)X.push(Y)}),X}tickEntities(J){this._entities.forEach((X)=>{X.tick(J)})}checkAndEmitUpdates(){this._entities.forEach((J)=>{if(!J.isSpawned)return;J.checkAndEmitUpdates()})}}class kJ{_lights=new Map;_nextLightId=1;_world;constructor(J){this._world=J}get world(){return this._world}despawnEntityAttachedLights(J){this.getAllEntityAttachedLights(J).forEach((X)=>{X.despawn()})}getAllLights(){return Array.from(this._lights.values())}getAllEntityAttachedLights(J){return this.getAllLights().filter((X)=>X.attachedToEntity===J)}registerLight(J){if(J.id!==void 0)return J.id;let X=this._nextLightId;return this._lights.set(X,J),this._nextLightId++,X}unregisterLight(J){if(J.id===void 0)return;this._lights.delete(J.id)}}var kC;((Y)=>{Y[Y.POINTLIGHT=0]="POINTLIGHT";Y[Y.SPOTLIGHT=1]="SPOTLIGHT"})(kC||={});var VH;((z)=>{z.DESPAWN="LIGHT.DESPAWN";z.SET_ANGLE="LIGHT.SET_ANGLE";z.SET_ATTACHED_TO_ENTITY="LIGHT.SET_ATTACHED_TO_ENTITY";z.SET_COLOR="LIGHT.SET_COLOR";z.SET_DISTANCE="LIGHT.SET_DISTANCE";z.SET_INTENSITY="LIGHT.SET_INTENSITY";z.SET_OFFSET="LIGHT.SET_OFFSET";z.SET_PENUMBRA="LIGHT.SET_PENUMBRA";z.SET_POSITION="LIGHT.SET_POSITION";z.SET_TRACKED_ENTITY="LIGHT.SET_TRACKED_ENTITY";z.SET_TRACKED_POSITION="LIGHT.SET_TRACKED_POSITION";z.SPAWN="LIGHT.SPAWN"})(VH||={});class MH extends s{_id;_angle;_attachedToEntity;_color;_distance;_intensity;_offset;_penumbra;_position;_trackedEntity;_trackedPosition;_type;_world;constructor(J){if(!!J.attachedToEntity===!!J.position)E.fatalError("Either attachedToEntity or position must be set, but not both");super();E.warning("WARNING: Lights are poorly optimized at this time. Using more than a few lights in your game can cause extremely bad performance (FPS) issues. Use lights sparingly!"),this._angle=J.angle,this._attachedToEntity=J.attachedToEntity,this._color=J.color??{r:255,g:255,b:255},this._distance=J.distance,this._intensity=J.intensity??1,this._offset=J.offset,this._penumbra=J.penumbra,this._position=J.position,this._trackedEntity=J.trackedEntity,this._trackedPosition=J.trackedPosition,this._type=J.type??0}get id(){return this._id}get angle(){return this._angle}get attachedToEntity(){return this._attachedToEntity}get color(){return this._color}get distance(){return this._distance}get intensity(){return this._intensity}get isSpawned(){return this._id!==void 0}get offset(){return this._offset}get penumbra(){return this._penumbra}get position(){return this._position}get trackedEntity(){return this._trackedEntity}get trackedPosition(){return this._trackedPosition}get type(){return this._type}get world(){return this._world}setAngle(J){if(this._angle===J)return;if(this._angle=J,this.isSpawned)this.emitWithWorld(this._world,"LIGHT.SET_ANGLE",{light:this,angle:J})}setAttachedToEntity(J){if(!J.isSpawned)return E.error(`Light.setAttachedToEntity(): Entity ${J.id} is not spawned!`);if(this._attachedToEntity===J)return;if(this._attachedToEntity=J,this._position=void 0,this.isSpawned)this.emitWithWorld(this._world,"LIGHT.SET_ATTACHED_TO_ENTITY",{light:this,entity:J})}setColor(J){if(this._color.r===J.r&&this._color.g===J.g&&this._color.b===J.b)return;if(this._color=J,this.isSpawned)this.emitWithWorld(this._world,"LIGHT.SET_COLOR",{light:this,color:J})}setDistance(J){if(this._distance===J)return;if(this._distance=J,this.isSpawned)this.emitWithWorld(this._world,"LIGHT.SET_DISTANCE",{light:this,distance:J})}setIntensity(J){if(this._intensity===J)return;if(this._intensity=J,this.isSpawned)this.emitWithWorld(this._world,"LIGHT.SET_INTENSITY",{light:this,intensity:J})}setOffset(J){if(this._offset===J)return;if(this._offset=J,this.isSpawned)this.emitWithWorld(this._world,"LIGHT.SET_OFFSET",{light:this,offset:J})}setPenumbra(J){if(this._penumbra===J)return;if(this._penumbra=J,this.isSpawned)this.emitWithWorld(this._world,"LIGHT.SET_PENUMBRA",{light:this,penumbra:J})}setPosition(J){if(this._position===J)return;if(this._position=J,this._attachedToEntity=void 0,this.isSpawned)this.emitWithWorld(this._world,"LIGHT.SET_POSITION",{light:this,position:J})}setTrackedEntity(J){if(!J.isSpawned)return E.error(`Light.setTrackedEntity(): Entity ${J.id} is not spawned!`);if(this._trackedEntity===J)return;if(this._trackedEntity=J,this._trackedPosition=void 0,this.isSpawned)this.emitWithWorld(this._world,"LIGHT.SET_TRACKED_ENTITY",{light:this,entity:J})}setTrackedPosition(J){if(this._trackedPosition===J)return;if(this._trackedPosition=J,this._trackedEntity=void 0,this.isSpawned)this.emitWithWorld(this._world,"LIGHT.SET_TRACKED_POSITION",{light:this,position:J})}despawn(){if(!this.isSpawned||!this._world)return;this._world.lightManager.unregisterLight(this),this.emitWithWorld(this._world,"LIGHT.DESPAWN",{light:this}),this._id=void 0,this._world=void 0}spawn(J){if(this.isSpawned)return;if(this._attachedToEntity&&!this._attachedToEntity.isSpawned)return E.error(`Light.spawn(): Attached entity ${this._attachedToEntity.id} must be spawned before spawning Light!`);this._id=J.lightManager.registerLight(this),this._world=J,this.emitWithWorld(J,"LIGHT.SPAWN",{light:this})}serialize(){return t.serializeLight(this)}}var TC;((Z)=>{Z[Z.FIRST_PERSON=0]="FIRST_PERSON";Z[Z.THIRD_PERSON=1]="THIRD_PERSON";Z[Z.SPECTATOR=2]="SPECTATOR"})(TC||={});var RH;((V)=>{V.LOOK_AT_ENTITY="PLAYER_CAMERA.LOOK_AT_ENTITY";V.LOOK_AT_POSITION="PLAYER_CAMERA.LOOK_AT_POSITION";V.SET_ATTACHED_TO_ENTITY="PLAYER_CAMERA.SET_ATTACHED_TO_ENTITY";V.SET_ATTACHED_TO_POSITION="PLAYER_CAMERA.SET_ATTACHED_TO_POSITION";V.SET_FILM_OFFSET="PLAYER_CAMERA.SET_FILM_OFFSET";V.SET_FORWARD_OFFSET="PLAYER_CAMERA.SET_FORWARD_OFFSET";V.SET_FOV="PLAYER_CAMERA.SET_FOV";V.SET_MODEL_HIDDEN_NODES="PLAYER_CAMERA.SET_MODEL_HIDDEN_NODES";V.SET_MODE="PLAYER_CAMERA.SET_MODE";V.SET_OFFSET="PLAYER_CAMERA.SET_OFFSET";V.SET_TRACKED_ENTITY="PLAYER_CAMERA.SET_TRACKED_ENTITY";V.SET_TRACKED_POSITION="PLAYER_CAMERA.SET_TRACKED_POSITION";V.SET_ZOOM="PLAYER_CAMERA.SET_ZOOM"})(RH||={});class TJ extends s{player;_attachedToEntity;_attachedToPosition;_filmOffset=0;_forwardOffset=0;_fov=75;_modelHiddenNodes=new Set;_mode=1;_offset={x:0,y:0,z:0};_orientation={pitch:0,yaw:0};_trackedEntity;_trackedPosition;_zoom=1;constructor(J){super();this.player=J}get attachedToEntity(){return this._attachedToEntity}get attachedToPosition(){return this._attachedToPosition}get facingDirection(){return{x:-Math.sin(this._orientation.yaw)*Math.cos(this._orientation.pitch),y:Math.sin(this._orientation.pitch),z:-Math.cos(this._orientation.yaw)*Math.cos(this._orientation.pitch)}}get filmOffset(){return this._filmOffset}get forwardOffset(){return this._forwardOffset}get fov(){return this._fov}get modelHiddenNodes(){return this._modelHiddenNodes}get mode(){return this._mode}get offset(){return this._offset}get orientation(){return this._orientation}get trackedEntity(){return this._trackedEntity}get trackedPosition(){return this._trackedPosition}get zoom(){return this._zoom}lookAtEntity(J){if(!this._requirePlayerWorld())return;this.emitWithWorld(this.player.world,"PLAYER_CAMERA.LOOK_AT_ENTITY",{playerCamera:this,entity:J})}lookAtPosition(J){if(!this._requirePlayerWorld())return;this.emitWithWorld(this.player.world,"PLAYER_CAMERA.LOOK_AT_POSITION",{playerCamera:this,position:J})}setAttachedToEntity(J){if(!this._requirePlayerWorld())return;if(!J.isSpawned)return E.error(`PlayerCamera.setAttachedToEntity(): Entity ${J.id} is not spawned!`);this._attachedToEntity=J,this.emitWithWorld(this.player.world,"PLAYER_CAMERA.SET_ATTACHED_TO_ENTITY",{playerCamera:this,entity:J})}setAttachedToPosition(J){if(!this._requirePlayerWorld())return;this._attachedToPosition=J,this.emitWithWorld(this.player.world,"PLAYER_CAMERA.SET_ATTACHED_TO_POSITION",{playerCamera:this,position:J})}setFilmOffset(J){if(!this._requirePlayerWorld())return;this._filmOffset=J,this.emitWithWorld(this.player.world,"PLAYER_CAMERA.SET_FILM_OFFSET",{playerCamera:this,filmOffset:J})}setForwardOffset(J){if(!this._requirePlayerWorld())return;this._forwardOffset=J,this.emitWithWorld(this.player.world,"PLAYER_CAMERA.SET_FORWARD_OFFSET",{playerCamera:this,forwardOffset:J})}setFov(J){if(!this._requirePlayerWorld())return;this._fov=J,this.emitWithWorld(this.player.world,"PLAYER_CAMERA.SET_FOV",{playerCamera:this,fov:J})}setModelHiddenNodes(J){if(!this._requirePlayerWorld())return;this._modelHiddenNodes=new Set(J.map((X)=>X.toLowerCase())),this.emitWithWorld(this.player.world,"PLAYER_CAMERA.SET_MODEL_HIDDEN_NODES",{playerCamera:this,modelHiddenNodes:this._modelHiddenNodes})}setMode(J){if(!this._requirePlayerWorld())return;this._mode=J,this.emitWithWorld(this.player.world,"PLAYER_CAMERA.SET_MODE",{playerCamera:this,mode:J})}setOffset(J){if(!this._requirePlayerWorld())return;this._offset=J,this.emitWithWorld(this.player.world,"PLAYER_CAMERA.SET_OFFSET",{playerCamera:this,offset:J})}setOrientationPitch(J){this._orientation.pitch=J}setOrientationYaw(J){this._orientation.yaw=J}setTrackedEntity(J){if(!this._requirePlayerWorld())return;this._trackedEntity=J,this.emitWithWorld(this.player.world,"PLAYER_CAMERA.SET_TRACKED_ENTITY",{playerCamera:this,entity:J})}setTrackedPosition(J){if(!this._requirePlayerWorld())return;this._trackedPosition=J,this.emitWithWorld(this.player.world,"PLAYER_CAMERA.SET_TRACKED_POSITION",{playerCamera:this,position:J})}setZoom(J){if(!this._requirePlayerWorld())return;this._zoom=J,this.emitWithWorld(this.player.world,"PLAYER_CAMERA.SET_ZOOM",{playerCamera:this,zoom:J})}serialize(){return t.serializePlayerCamera(this)}_requirePlayerWorld(){if(!this.player.world)E.error(`PlayerCamera._requirePlayerWorld(): Player ${this.player.id} is not in a world!`);return!!this.player.world}}var Q$;((W)=>{W.DATA="PLAYER_UI.DATA";W.LOAD="PLAYER_UI.LOAD";W.LOCK_POINTER="PLAYER_UI.LOCK_POINTER";W.SEND_DATA="PLAYER_UI.SEND_DATA"})(Q$||={});class DJ extends s{player;constructor(J){super();this.player=J}load(J){if(!this.player.world)return;this.emitWithWorld(this.player.world,"PLAYER_UI.LOAD",{playerUI:this,htmlUri:J})}lockPointer(J){if(!this.player.world)return;this.emitWithWorld(this.player.world,"PLAYER_UI.LOCK_POINTER",{playerUI:this,lock:J})}sendData(J){if(!this.player.world)return;this.emitWithWorld(this.player.world,"PLAYER_UI.SEND_DATA",{playerUI:this,data:J})}}class _J{_colliderHandleBlockTypeMap=new Map;_colliderHandleCollisionCallbackMap=new Map;_colliderHandleEntityMap=new Map;_cleanupBlockTypeColliderHandles=new Set;_pendingCleanupBlockTypeColliderHandles=new Set;_cleanupCollisionCallbackColliderHandles=new Set;_pendingCleanupCollisionCallbackColliderHandles=new Set;_cleanupEntityColliderHandles=new Set;_pendingCleanupEntityColliderHandles=new Set;getColliderBlockType(J){if(!this._requireSimulatedCollider(J))return;return this._colliderHandleBlockTypeMap.get(J.rawCollider.handle)}getColliderCollisionCallback(J){if(!this._requireSimulatedCollider(J))return;return this._colliderHandleCollisionCallbackMap.get(J.rawCollider.handle)}getColliderEntity(J){if(!this._requireSimulatedCollider(J))return;return this._colliderHandleEntityMap.get(J.rawCollider.handle)}getColliderHandleBlockType(J){return this._colliderHandleBlockTypeMap.get(J)}getColliderHandleCollisionCallback(J){return this._colliderHandleCollisionCallbackMap.get(J)}getColliderHandleEntity(J){return this._colliderHandleEntityMap.get(J)}removeColliderBlockType(J){if(!this._requireSimulatedCollider(J))return;this.removeColliderHandleBlockType(J.rawCollider.handle)}removeColliderCollisionCallback(J){if(!this._requireSimulatedCollider(J))return;this.removeColliderHandleCollisionCallback(J.rawCollider.handle)}removeColliderEntity(J){if(!this._requireSimulatedCollider(J))return;this.removeColliderHandleEntity(J.rawCollider.handle)}removeColliderHandleBlockType(J){this._colliderHandleBlockTypeMap.delete(J)}removeColliderHandleCollisionCallback(J){this._colliderHandleCollisionCallbackMap.delete(J)}removeColliderHandleEntity(J){this._colliderHandleEntityMap.delete(J)}setColliderBlockType(J,X){if(!this._requireSimulatedCollider(J))return;this.setColliderHandleBlockType(J.rawCollider.handle,X)}setColliderCollisionCallback(J,X){if(!this._requireSimulatedCollider(J))return;this.setColliderHandleCollisionCallback(J.rawCollider.handle,X)}setColliderEntity(J,X){if(!this._requireSimulatedCollider(J))return;this.setColliderHandleEntity(J.rawCollider.handle,X)}setColliderHandleBlockType(J,X){this._colliderHandleBlockTypeMap.set(J,X),this._cleanupBlockTypeColliderHandles.delete(J),this._pendingCleanupBlockTypeColliderHandles.delete(J)}setColliderHandleCollisionCallback(J,X){this._colliderHandleCollisionCallbackMap.set(J,X),this._cleanupCollisionCallbackColliderHandles.delete(J),this._pendingCleanupCollisionCallbackColliderHandles.delete(J)}setColliderHandleEntity(J,X){this._colliderHandleEntityMap.set(J,X),this._cleanupEntityColliderHandles.delete(J),this._pendingCleanupEntityColliderHandles.delete(J)}queueColliderHandleForCleanup(J){if(this._colliderHandleBlockTypeMap.has(J))this._pendingCleanupBlockTypeColliderHandles.add(J);if(this._colliderHandleCollisionCallbackMap.has(J))this._pendingCleanupCollisionCallbackColliderHandles.add(J);if(this._colliderHandleEntityMap.has(J))this._pendingCleanupEntityColliderHandles.add(J)}cleanup(){for(let J of this._cleanupBlockTypeColliderHandles)this._colliderHandleBlockTypeMap.delete(J);this._cleanupBlockTypeColliderHandles.clear();for(let J of this._cleanupCollisionCallbackColliderHandles)this._colliderHandleCollisionCallbackMap.delete(J);this._cleanupCollisionCallbackColliderHandles.clear();for(let J of this._cleanupEntityColliderHandles)this._colliderHandleEntityMap.delete(J);this._cleanupEntityColliderHandles.clear(),[[this._pendingCleanupBlockTypeColliderHandles,this._cleanupBlockTypeColliderHandles],[this._pendingCleanupCollisionCallbackColliderHandles,this._cleanupCollisionCallbackColliderHandles],[this._pendingCleanupEntityColliderHandles,this._cleanupEntityColliderHandles]].forEach(([J,X])=>{for(let Y of J.keys())X.add(Y);J.clear()})}_requireSimulatedCollider(J){if(!J.rawCollider)E.error("ColliderMap._requireSimulatedCollider(): Collider is not in the simulation.");return!!J.rawCollider}}var uX0={x:0,y:-32,z:0},wH=60,OH;((W)=>{W.STEP_START="SIMULATION.STEP_START";W.STEP_END="SIMULATION.STEP_END";W.DEBUG_RAYCAST="SIMULATION.DEBUG_RAYCAST";W.DEBUG_RENDER="SIMULATION.DEBUG_RENDER"})(OH||={});class EJ extends s{_colliderMap=new _J;_debugRaycastingEnabled=!1;_debugRenderingEnabled=!1;_rapierEventQueue;_rapierSimulation;_world;constructor(J,X=wH,Y=uX0){super();this._rapierEventQueue=new z0.EventQueue(!0),this._rapierSimulation=new z0.World(Y),this._rapierSimulation.timestep=Math.fround(1/X),this._world=J}get colliderMap(){return this._colliderMap}get isDebugRaycastingEnabled(){return this._debugRaycastingEnabled}get isDebugRenderingEnabled(){return this._debugRenderingEnabled}get gravity(){return this._rapierSimulation.gravity}get timestepS(){return this._rapierSimulation.timestep}get world(){return this._world}raycast(J,X,Y,Z={}){let W=new z0.Ray(J,X),$=this._rapierSimulation.castRay(W,Y,Z.ignoresSensors??!0,Z.filterFlags,Z.filterGroups,Z.filterExcludeCollider,Z.filterExcludeRigidBody,Z.filterPredicate);if(this._debugRaycastingEnabled)this.emitWithWorld(this._world,"SIMULATION.DEBUG_RAYCAST",{simulation:this,origin:J,direction:X,length:Y,hit:!!$});if(!$)return null;let Q=W.pointAt($.timeOfImpact),K=$.timeOfImpact,G=$.collider,F=this._colliderMap.getColliderHandleBlockType(G.handle);if(F)return{hitBlock:y9.fromGlobalCoordinate({x:Math.floor(Q.x-(W.dir.x<0?0.0001:-0.0001)),y:Math.floor(Q.y-(W.dir.y<0?0.0001:-0.0001)),z:Math.floor(Q.z-(W.dir.z<0?0.0001:-0.0001))},F),hitPoint:Q,hitDistance:K};let q=this._colliderMap.getColliderHandleEntity(G.handle);if(q)return{hitEntity:q,hitPoint:Q,hitDistance:K};return null}createRawCollider(J,X){return this._rapierSimulation.createCollider(J,X)}createRawRigidBody(J){return this._rapierSimulation.createRigidBody(J)}enableDebugRaycasting(J){this._debugRaycastingEnabled=J}enableDebugRendering(J){this._debugRenderingEnabled=J}getContactManifolds(J,X){let Y=[];return this._rapierSimulation.narrowPhase.contactPair(J,X,(Z,W)=>{if(Z.numContacts()===0)return;let $=Z.normal(),Q=[];for(let K=0;K<Z.numSolverContacts();K++)Q.push(Z.solverContactPoint(K));Y.push({contactPoints:Q,localNormalA:!W?Z.localNormal1():Z.localNormal2(),localNormalB:!W?Z.localNormal2():Z.localNormal1(),normal:!W?$:{x:-$.x,y:-$.y,z:-$.z}})}),Y}removeRawCollider(J){this._colliderMap.queueColliderHandleForCleanup(J.handle),this._rapierSimulation.removeCollider(J,!1)}removeRawRigidBody(J){this._rapierSimulation.removeRigidBody(J)}setGravity(J){this._rapierSimulation.gravity=J}step=(J)=>{this.emitWithWorld(this._world,"SIMULATION.STEP_START",{simulation:this,tickDeltaMs:J});let X=performance.now();if(this._rapierSimulation.step(this._rapierEventQueue),this._rapierEventQueue.drainContactForceEvents(this._onContactForceEvent),this._rapierEventQueue.drainCollisionEvents(this._onCollisionEvent),this._colliderMap.cleanup(),this.emitWithWorld(this._world,"SIMULATION.STEP_END",{simulation:this,stepDurationMs:performance.now()-X}),this._debugRenderingEnabled)this.emitWithWorld(this._world,"SIMULATION.DEBUG_RENDER",{simulation:this,...this._rapierSimulation.debugRender()})};_onCollisionEvent=(J,X,Y)=>{let[Z,W]=this._getCollisionObjects(J,X);if(!Z||!W)return;let $=(Q,K)=>{if(Q instanceof V6&&K instanceof Y8&&Q.hasListeners("BLOCK_TYPE.ENTITY_COLLISION"))Q.emit("BLOCK_TYPE.ENTITY_COLLISION",{blockType:Q,entity:K,started:Y,colliderHandleA:J,colliderHandleB:X});else if(Q instanceof Y8&&K instanceof V6&&Q.hasListeners("ENTITY.BLOCK_COLLISION"))Q.emit("ENTITY.BLOCK_COLLISION",{entity:Q,blockType:K,started:Y,colliderHandleA:J,colliderHandleB:X});else if(Q instanceof Y8&&K instanceof Y8&&Q.hasListeners("ENTITY.ENTITY_COLLISION"))Q.emit("ENTITY.ENTITY_COLLISION",{entity:Q,otherEntity:K,started:Y,colliderHandleA:J,colliderHandleB:X});else if(typeof Q==="function"&&(K instanceof Y8||K instanceof V6))Q(K,Y,J,X)};$(Z,W),$(W,Z)};_onContactForceEvent=(J)=>{let[X,Y]=this._getCollisionObjects(J.collider1(),J.collider2());if(!X||typeof X==="function"||!Y||typeof Y==="function")return;let Z={totalForce:J.totalForce(),totalForceMagnitude:J.totalForceMagnitude(),maxForceDirection:J.maxForceDirection(),maxForceMagnitude:J.maxForceMagnitude()},W=($,Q)=>{if($ instanceof V6&&Q instanceof Y8&&$.hasListeners("BLOCK_TYPE.ENTITY_CONTACT_FORCE"))$.emit("BLOCK_TYPE.ENTITY_CONTACT_FORCE",{blockType:$,entity:Q,contactForceData:Z});else if($ instanceof Y8&&Q instanceof V6&&$.hasListeners("ENTITY.BLOCK_CONTACT_FORCE"))$.emit("ENTITY.BLOCK_CONTACT_FORCE",{entity:$,blockType:Q,contactForceData:Z});else if($ instanceof Y8&&Q instanceof Y8&&$.hasListeners("ENTITY.ENTITY_CONTACT_FORCE"))$.emit("ENTITY.ENTITY_CONTACT_FORCE",{entity:$,otherEntity:Q,contactForceData:Z})};W(X,Y),W(Y,X)};_getCollisionObjects(J,X){let Y=this._colliderMap.getColliderHandleBlockType(J)??this._colliderMap.getColliderHandleCollisionCallback(J)??this._colliderMap.getColliderHandleEntity(J),Z=this._colliderMap.getColliderHandleBlockType(X)??this._colliderMap.getColliderHandleCollisionCallback(X)??this._colliderMap.getColliderHandleEntity(X);return[Y,Z]}}class K${_synchronizedPlayerReliablePackets=new Map;_queuedBroadcasts=[];_queuedAudioSynchronizations={};_queuedBlockSynchronizations={};_queuedBlockTypeSynchronizations={};_queuedChunkSynchronizations={};_queuedDebugRaycastSynchronizations=[];_queuedEntitySynchronizations={};_queuedLightSynchronizations={};_queuedPerPlayerSynchronizations=new Map;_queuedPerPlayerCameraSynchronizations=new Map;_queuedPerPlayerUISynchronizations=new Map;_queuedPerPlayerUIDatasSynchronizations=new Map;_queuedPlayerSynchronizations={};_queuedSceneUISynchronizations={};_queuedWorldSynchronization;_loadedSceneUIs=new Set;_spawnedChunks=new Set;_spawnedEntities=new Set;_world;constructor(J){this._world=J,this._subscribeToAudioEvents(),this._subscribeToBlockTypeRegistryEvents(),this._subscribeToChatEvents(),this._subscribeToChunkEvents(),this._subscribeToEntityEvents(),this._subscribeToLightEvents(),this._subscribeToPlayerEvents(),this._subscribeToPlayerCameraEvents(),this._subscribeToPlayerUIEvents(),this._subscribeToSceneUIEvents(),this._subscribeToSimulationEvents(),this._subscribeToWorldEvents()}synchronize(){let J=[],X=[],Y=this._world.loop.currentTick;this._queuedPerPlayerSynchronizations.forEach((z,V)=>{this._createOrGetSynchronizedPlayerReliablePackets(V,J).push(...z)});let Z=Object.values(this._queuedEntitySynchronizations);if(Z.length>0){let[z,V]=Z.reduce(([M,R],L)=>{for(let w in L)if(w!=="i"&&w!=="p"&&w!=="r")return M.push(L),[M,R];return R.push(L),[M,R]},[[],[]]);if(V.length>0){let M=A.createPacket(A.outboundPackets.entitiesPacketDefinition,V,Y);X.push(M)}if(z.length>0){let M=A.createPacket(A.outboundPackets.entitiesPacketDefinition,z,Y);J.push(M),this._synchronizedPlayerReliablePackets.forEach((R)=>R.push(M))}}let W=Object.values(this._queuedAudioSynchronizations);if(W.length>0){let z=A.createPacket(A.outboundPackets.audiosPacketDefinition,W,Y);J.push(z),this._synchronizedPlayerReliablePackets.forEach((V)=>V.push(z))}let $=Object.values(this._queuedBlockTypeSynchronizations);if($.length>0){let z=A.createPacket(A.outboundPackets.blockTypesPacketDefinition,$,Y);J.push(z),this._synchronizedPlayerReliablePackets.forEach((V)=>V.push(z))}let Q=Object.values(this._queuedBlockSynchronizations);if(Q.length>0){let z=A.createPacket(A.outboundPackets.blocksPacketDefinition,Q,Y);J.push(z),this._synchronizedPlayerReliablePackets.forEach((V)=>V.push(z))}let K=Object.values(this._queuedChunkSynchronizations);if(K.length>0){let z=A.createPacket(A.outboundPackets.chunksPacketDefinition,K,Y);J.push(z),this._synchronizedPlayerReliablePackets.forEach((V)=>V.push(z))}let G=Object.values(this._queuedLightSynchronizations);if(G.length>0){let z=A.createPacket(A.outboundPackets.lightsPacketDefinition,G,Y);J.push(z),this._synchronizedPlayerReliablePackets.forEach((V)=>V.push(z))}this._queuedPerPlayerUISynchronizations.forEach((z,V)=>{let M=A.createPacket(A.outboundPackets.uiPacketDefinition,z,Y);this._createOrGetSynchronizedPlayerReliablePackets(V,J).push(M)}),this._queuedPerPlayerUIDatasSynchronizations.forEach((z,V)=>{let M=A.createPacket(A.outboundPackets.uiDatasPacketDefinition,z,Y);this._createOrGetSynchronizedPlayerReliablePackets(V,J).push(M)});let F=Object.values(this._queuedSceneUISynchronizations);if(F.length>0){let z=A.createPacket(A.outboundPackets.sceneUIsPacketDefinition,F,Y);J.push(z),this._synchronizedPlayerReliablePackets.forEach((V)=>V.push(z))}if(this._queuedWorldSynchronization){let z=A.createPacket(A.outboundPackets.worldPacketDefinition,this._queuedWorldSynchronization,Y);J.push(z),this._synchronizedPlayerReliablePackets.forEach((V)=>V.push(z))}this._queuedPerPlayerCameraSynchronizations.forEach((z,V)=>{let M=A.createPacket(A.outboundPackets.cameraPacketDefinition,z,Y);this._createOrGetSynchronizedPlayerReliablePackets(V,J).push(M)});let q=Object.values(this._queuedPlayerSynchronizations);if(q.length>0){let z=A.createPacket(A.outboundPackets.playersPacketDefinition,q,Y);J.push(z),this._synchronizedPlayerReliablePackets.forEach((V)=>V.push(z))}this._queuedBroadcasts.forEach((z)=>{J.push(z),this._synchronizedPlayerReliablePackets.forEach((V)=>V.push(z))});let H=this._queuedDebugRaycastSynchronizations;if(H.length>0){let z=A.createPacket(A.outboundPackets.physicsDebugRaycastsPacketDefinition,H,Y);J.push(z),this._synchronizedPlayerReliablePackets.forEach((V)=>V.push(z))}j6.instance.getConnectedPlayersByWorld(this._world).forEach((z)=>{let V=this._synchronizedPlayerReliablePackets.get(z)??J;if(V.length>0)z.connection.send(V);if(X.length>0)z.connection.send(X,!1)}),this._queuedBroadcasts=[],this._queuedAudioSynchronizations={},this._queuedBlockSynchronizations={},this._queuedBlockTypeSynchronizations={},this._queuedChunkSynchronizations={},this._queuedDebugRaycastSynchronizations=[],this._queuedEntitySynchronizations={},this._queuedLightSynchronizations={},this._queuedPerPlayerSynchronizations.clear(),this._queuedPerPlayerCameraSynchronizations.clear(),this._queuedPerPlayerUISynchronizations.clear(),this._queuedPerPlayerUIDatasSynchronizations.clear(),this._queuedPlayerSynchronizations={},this._queuedSceneUISynchronizations={},this._queuedWorldSynchronization=void 0,this._loadedSceneUIs.clear(),this._spawnedChunks.clear(),this._spawnedEntities.clear(),this._synchronizedPlayerReliablePackets.clear()}_subscribeToAudioEvents(){this._world.final("AUDIO.PAUSE",this._onAudioPause),this._world.final("AUDIO.PLAY",this._onAudioPlay),this._world.final("AUDIO.PLAY_RESTART",this._onAudioPlayRestart),this._world.final("AUDIO.SET_ATTACHED_TO_ENTITY",this._onAudioSetAttachedToEntity),this._world.final("AUDIO.SET_CUTOFF_DISTANCE",this._onAudioSetCutoffDistance),this._world.final("AUDIO.SET_DETUNE",this._onAudioSetDetune),this._world.final("AUDIO.SET_DISTORTION",this._onAudioSetDistortion),this._world.final("AUDIO.SET_POSITION",this._onAudioSetPosition),this._world.final("AUDIO.SET_PLAYBACK_RATE",this._onAudioSetPlaybackRate),this._world.final("AUDIO.SET_REFERENCE_DISTANCE",this._onAudioSetReferenceDistance),this._world.final("AUDIO.SET_VOLUME",this._onAudioSetVolume)}_subscribeToBlockTypeRegistryEvents(){this._world.final("BLOCK_TYPE_REGISTRY.REGISTER_BLOCK_TYPE",this._onBlockTypeRegistryRegisterBlockType)}_subscribeToChatEvents(){this._world.final("CHAT.BROADCAST_MESSAGE",this._onChatSendBroadcastMessage),this._world.final("CHAT.PLAYER_MESSAGE",this._onChatSendPlayerMessage)}_subscribeToChunkEvents(){this._world.final("CHUNK.SPAWN",this._onChunkSpawn),this._world.final("CHUNK.DESPAWN",this._onChunkDespawn),this._world.final("CHUNK.SET_BLOCK",this._onChunkSetBlock)}_subscribeToEntityEvents(){this._world.final("ENTITY.SPAWN",this._onEntitySpawn),this._world.final("ENTITY.DESPAWN",this._onEntityDespawn),this._world.final("ENTITY.SET_MODEL_ANIMATIONS_PLAYBACK_RATE",this._onEntitySetModelAnimationsPlaybackRate),this._world.final("ENTITY.SET_MODEL_HIDDEN_NODES",this._onEntitySetModelHiddenNodes),this._world.final("ENTITY.SET_OPACITY",this._onEntitySetOpacity),this._world.final("ENTITY.SET_PARENT",this._onEntitySetParent),this._world.final("ENTITY.SET_TINT_COLOR",this._onEntitySetTintColor),this._world.final("ENTITY.START_MODEL_LOOPED_ANIMATIONS",this._onEntityStartModelLoopedAnimations),this._world.final("ENTITY.START_MODEL_ONESHOT_ANIMATIONS",this._onEntityStartModelOneshotAnimations),this._world.final("ENTITY.STOP_MODEL_ANIMATIONS",this._onEntityStopModelAnimations),this._world.final("ENTITY.UPDATE_POSITION",this._onEntityUpdatePosition),this._world.final("ENTITY.UPDATE_ROTATION",this._onEntityUpdateRotation)}_subscribeToLightEvents(){this._world.final("LIGHT.DESPAWN",this._onLightDespawn),this._world.final("LIGHT.SET_ANGLE",this._onLightSetAngle),this._world.final("LIGHT.SET_ATTACHED_TO_ENTITY",this._onLightSetAttachedToEntity),this._world.final("LIGHT.SET_COLOR",this._onLightSetColor),this._world.final("LIGHT.SET_DISTANCE",this._onLightSetDistance),this._world.final("LIGHT.SET_INTENSITY",this._onLightSetIntensity),this._world.final("LIGHT.SET_OFFSET",this._onLightSetOffset),this._world.final("LIGHT.SET_PENUMBRA",this._onLightSetPenumbra),this._world.final("LIGHT.SET_POSITION",this._onLightSetPosition),this._world.final("LIGHT.SET_TRACKED_ENTITY",this._onLightSetTrackedEntity),this._world.final("LIGHT.SET_TRACKED_POSITION",this._onLightSetTrackedPosition),this._world.final("LIGHT.SPAWN",this._onLightSpawn)}_subscribeToPlayerEvents(){this._world.final("PLAYER.JOINED_WORLD",this._onPlayerJoinedWorld),this._world.final("PLAYER.LEFT_WORLD",this._onPlayerLeftWorld),this._world.final("PLAYER.REQUEST_SYNC",this._onPlayerRequestSync)}_subscribeToPlayerCameraEvents(){this._world.final("PLAYER_CAMERA.LOOK_AT_ENTITY",this._onPlayerCameraLookAtEntity),this._world.final("PLAYER_CAMERA.LOOK_AT_POSITION",this._onPlayerCameraLookAtPosition),this._world.final("PLAYER_CAMERA.SET_ATTACHED_TO_ENTITY",this._onPlayerCameraSetAttachedToEntity),this._world.final("PLAYER_CAMERA.SET_ATTACHED_TO_POSITION",this._onPlayerCameraSetAttachedToPosition),this._world.final("PLAYER_CAMERA.SET_FILM_OFFSET",this._onPlayerCameraSetFilmOffset),this._world.final("PLAYER_CAMERA.SET_FORWARD_OFFSET",this._onPlayerCameraSetForwardOffset),this._world.final("PLAYER_CAMERA.SET_FOV",this._onPlayerCameraSetFov),this._world.final("PLAYER_CAMERA.SET_MODEL_HIDDEN_NODES",this._onPlayerCameraSetModelHiddenNodes),this._world.final("PLAYER_CAMERA.SET_MODE",this._onPlayerCameraSetMode),this._world.final("PLAYER_CAMERA.SET_OFFSET",this._onPlayerCameraSetOffset),this._world.final("PLAYER_CAMERA.SET_TRACKED_ENTITY",this._onPlayerCameraSetTrackedEntity),this._world.final("PLAYER_CAMERA.SET_TRACKED_POSITION",this._onPlayerCameraSetTrackedPosition),this._world.final("PLAYER_CAMERA.SET_ZOOM",this._onPlayerCameraSetZoom)}_subscribeToPlayerUIEvents(){this._world.final("PLAYER_UI.LOAD",this._onPlayerUILoad),this._world.final("PLAYER_UI.LOCK_POINTER",this._onPlayerUILockPointer),this._world.final("PLAYER_UI.SEND_DATA",this._onPlayerUISendData)}_subscribeToSceneUIEvents(){this._world.final("SCENE_UI.LOAD",this._onSceneUILoad),this._world.final("SCENE_UI.SET_ATTACHED_TO_ENTITY",this._onSceneUISetAttachedToEntity),this._world.final("SCENE_UI.SET_OFFSET",this._onSceneUISetOffset),this._world.final("SCENE_UI.SET_POSITION",this._onSceneUISetPosition),this._world.final("SCENE_UI.SET_STATE",this._onSceneUISetState),this._world.final("SCENE_UI.SET_VIEW_DISTANCE",this._onSceneUISetViewDistance),this._world.final("SCENE_UI.UNLOAD",this._onSceneUIUnload)}_subscribeToSimulationEvents(){this._world.final("SIMULATION.DEBUG_RAYCAST",this._onSimulationDebugRaycast),this._world.final("SIMULATION.DEBUG_RENDER",this._onSimulationDebugRender)}_subscribeToWorldEvents(){this._world.final("WORLD.SET_AMBIENT_LIGHT_COLOR",this._onWorldSetAmbientLightColor),this._world.final("WORLD.SET_AMBIENT_LIGHT_INTENSITY",this._onWorldSetAmbientLightIntensity),this._world.final("WORLD.SET_DIRECTIONAL_LIGHT_COLOR",this._onWorldSetDirectionalLightColor),this._world.final("WORLD.SET_DIRECTIONAL_LIGHT_INTENSITY",this._onWorldSetDirectionalLightIntensity),this._world.final("WORLD.SET_DIRECTIONAL_LIGHT_POSITION",this._onWorldSetDirectionalLightPosition)}_onAudioPause=(J)=>{let X=this._createOrGetQueuedAudioSync(J.audio);X.pa=!0,delete X.pl,delete X.r};_onAudioPlay=(J)=>{let X=J.audio.serialize();X.pl=!0,delete X.pa,delete X.r,this._queuedAudioSynchronizations[X.i]=X};_onAudioPlayRestart=(J)=>{let X=this._createOrGetQueuedAudioSync(J.audio);X.r=!0,delete X.pa,delete X.pl,this._queuedAudioSynchronizations[X.i]=X};_onAudioSetAttachedToEntity=(J)=>{let X=this._createOrGetQueuedAudioSync(J.audio);X.e=J.entity?J.entity.id:void 0,X.p=J.entity?void 0:X.p};_onAudioSetCutoffDistance=(J)=>{let X=this._createOrGetQueuedAudioSync(J.audio);X.cd=J.cutoffDistance};_onAudioSetDetune=(J)=>{let X=this._createOrGetQueuedAudioSync(J.audio);X.de=J.detune};_onAudioSetDistortion=(J)=>{let X=this._createOrGetQueuedAudioSync(J.audio);X.di=J.distortion};_onAudioSetPosition=(J)=>{let X=this._createOrGetQueuedAudioSync(J.audio);X.e=J.position?void 0:X.e,X.p=J.position?t.serializeVector(J.position):void 0};_onAudioSetPlaybackRate=(J)=>{let X=this._createOrGetQueuedAudioSync(J.audio);X.pr=J.playbackRate};_onAudioSetReferenceDistance=(J)=>{let X=this._createOrGetQueuedAudioSync(J.audio);X.rd=J.referenceDistance};_onAudioSetVolume=(J)=>{let X=this._createOrGetQueuedAudioSync(J.audio);X.v=J.volume};_onBlockTypeRegistryRegisterBlockType=(J)=>{let X=J.blockType.serialize();this._queuedBlockTypeSynchronizations[J.blockType.id]=X};_onChatSendBroadcastMessage=(J)=>{let{player:X,message:Y,color:Z}=J;this._queuedBroadcasts.push(A.createPacket(A.outboundPackets.chatMessagesPacketDefinition,[{m:Y,c:Z,p:X?.id}],this._world.loop.currentTick))};_onChatSendPlayerMessage=(J)=>{let{player:X,message:Y,color:Z}=J,W=this._queuedPerPlayerSynchronizations.get(X)??[];W.push(A.createPacket(A.outboundPackets.chatMessagesPacketDefinition,[{m:Y,c:Z}],this._world.loop.currentTick)),this._queuedPerPlayerSynchronizations.set(X,W)};_onChunkSpawn=(J)=>{let X=this._createOrGetQueuedChunkSync(J.chunk);X.b=Array.from(J.chunk.blocks),X.rm=void 0,this._spawnedChunks.add(X.c.join(","))};_onChunkDespawn=(J)=>{let X=this._createOrGetQueuedChunkSync(J.chunk),Y=X.c.join(",");if(this._spawnedChunks.has(Y))delete this._queuedChunkSynchronizations[Y],this._spawnedChunks.delete(Y);else X.rm=!0};_onChunkSetBlock=(J)=>{let X=this._createOrGetQueuedBlockSync(J.globalCoordinate);X.i=J.blockTypeId};_onEntitySetModelAnimationsPlaybackRate=(J)=>{let X=this._createOrGetQueuedEntitySync(J.entity);X.ap=J.playbackRate};_onEntitySpawn=(J)=>{let X=J.entity.serialize();this._queuedEntitySynchronizations[X.i]=X,this._spawnedEntities.add(X.i)};_onEntityDespawn=(J)=>{let X=this._createOrGetQueuedEntitySync(J.entity);if(this._spawnedEntities.has(X.i))delete this._queuedEntitySynchronizations[X.i],this._spawnedEntities.delete(X.i);else X.rm=!0};_onEntitySetModelHiddenNodes=(J)=>{let X=this._createOrGetQueuedEntitySync(J.entity);X.h=Array.from(J.modelHiddenNodes)};_onEntitySetOpacity=(J)=>{let X=this._createOrGetQueuedEntitySync(J.entity);X.o=J.opacity};_onEntitySetParent=(J)=>{let X=this._createOrGetQueuedEntitySync(J.entity);X.pe=J.parent?J.parent.id:void 0,X.pn=J.parentNodeName};_onEntitySetTintColor=(J)=>{let X=this._createOrGetQueuedEntitySync(J.entity);X.t=J.tintColor?t.serializeRgbColor(J.tintColor):void 0};_onEntityStartModelLoopedAnimations=(J)=>{let X=this._createOrGetQueuedEntitySync(J.entity);if(X.al=Array.from(new Set([...X.al??[],...J.animations])),X.as)X.as=X.as.filter((Y)=>!J.animations.has(Y)).filter(Boolean)};_onEntityStartModelOneshotAnimations=(J)=>{let X=this._createOrGetQueuedEntitySync(J.entity);if(X.ao=Array.from(new Set([...X.ao??[],...J.animations])),X.as)X.as=X.as.filter((Y)=>!J.animations.has(Y)).filter(Boolean)};_onEntityStopModelAnimations=(J)=>{let X=this._createOrGetQueuedEntitySync(J.entity);if(X.al)X.al=X.al.filter((Y)=>!J.animations.has(Y)).filter(Boolean);if(X.ao)X.ao=X.ao.filter((Y)=>!J.animations.has(Y)).filter(Boolean);X.as=Array.from(new Set([...X.as??[],...J.animations]))};_onEntityUpdateRotation=(J)=>{let X=this._createOrGetQueuedEntitySync(J.entity);X.r=[J.rotation.x,J.rotation.y,J.rotation.z,J.rotation.w]};_onEntityUpdatePosition=(J)=>{let X=this._createOrGetQueuedEntitySync(J.entity);X.p=[J.position.x,J.position.y,J.position.z]};_onLightDespawn=(J)=>{let X=this._createOrGetQueuedLightSync(J.light);X.rm=!0};_onLightSetAngle=(J)=>{let X=this._createOrGetQueuedLightSync(J.light);X.a=J.angle};_onLightSetAttachedToEntity=(J)=>{let X=this._createOrGetQueuedLightSync(J.light);X.e=J.entity?J.entity.id:void 0,X.p=J.entity?void 0:X.p};_onLightSetColor=(J)=>{let X=this._createOrGetQueuedLightSync(J.light);X.c=t.serializeRgbColor(J.color)};_onLightSetDistance=(J)=>{let X=this._createOrGetQueuedLightSync(J.light);X.d=J.distance};_onLightSetIntensity=(J)=>{let X=this._createOrGetQueuedLightSync(J.light);X.n=J.intensity};_onLightSetOffset=(J)=>{let X=this._createOrGetQueuedLightSync(J.light);X.o=J.offset?t.serializeVector(J.offset):void 0};_onLightSetPenumbra=(J)=>{let X=this._createOrGetQueuedLightSync(J.light);X.pe=J.penumbra};_onLightSetPosition=(J)=>{let X=this._createOrGetQueuedLightSync(J.light);X.p=J.position?t.serializeVector(J.position):void 0,X.e=J.position?void 0:X.e};_onLightSetTrackedEntity=(J)=>{let X=this._createOrGetQueuedLightSync(J.light);X.te=J.entity?J.entity.id:void 0,X.tp=J.entity?void 0:X.tp};_onLightSetTrackedPosition=(J)=>{let X=this._createOrGetQueuedLightSync(J.light);X.tp=J.position?t.serializeVector(J.position):void 0,X.te=J.position?void 0:X.te};_onLightSpawn=(J)=>{let X=J.light.serialize();this._queuedLightSynchronizations[X.i]=X};_onPlayerCameraLookAtEntity=(J)=>{let X=this._createOrGetQueuedPlayerCameraSync(J.playerCamera);X.pl=t.serializeVector(J.entity.position),delete X.et,delete X.pt};_onPlayerCameraLookAtPosition=(J)=>{let X=this._createOrGetQueuedPlayerCameraSync(J.playerCamera);X.pl=J.position?t.serializeVector(J.position):void 0,delete X.et,delete X.pt};_onPlayerCameraSetAttachedToEntity=(J)=>{let X=this._createOrGetQueuedPlayerCameraSync(J.playerCamera);X.e=J.entity.id,delete X.p};_onPlayerCameraSetAttachedToPosition=(J)=>{let X=this._createOrGetQueuedPlayerCameraSync(J.playerCamera);X.p=J.position?t.serializeVector(J.position):void 0,delete X.e};_onPlayerCameraSetFilmOffset=(J)=>{let X=this._createOrGetQueuedPlayerCameraSync(J.playerCamera);X.fo=J.filmOffset};_onPlayerCameraSetForwardOffset=(J)=>{let X=this._createOrGetQueuedPlayerCameraSync(J.playerCamera);X.ffo=J.forwardOffset};_onPlayerCameraSetFov=(J)=>{let X=this._createOrGetQueuedPlayerCameraSync(J.playerCamera);X.fv=J.fov};_onPlayerCameraSetModelHiddenNodes=(J)=>{let X=this._createOrGetQueuedPlayerCameraSync(J.playerCamera);X.h=Array.from(J.modelHiddenNodes)};_onPlayerCameraSetMode=(J)=>{let X=this._createOrGetQueuedPlayerCameraSync(J.playerCamera);X.m=J.mode};_onPlayerCameraSetOffset=(J)=>{let X=this._createOrGetQueuedPlayerCameraSync(J.playerCamera);X.o=J.offset?t.serializeVector(J.offset):void 0};_onPlayerCameraSetTrackedEntity=(J)=>{let X=this._createOrGetQueuedPlayerCameraSync(J.playerCamera);X.et=J.entity?J.entity.id:void 0,delete X.pl,delete X.pt};_onPlayerCameraSetTrackedPosition=(J)=>{let X=this._createOrGetQueuedPlayerCameraSync(J.playerCamera);X.pt=J.position?t.serializeVector(J.position):void 0,delete X.et,delete X.pl};_onPlayerCameraSetZoom=(J)=>{let X=this._createOrGetQueuedPlayerCameraSync(J.playerCamera);X.z=J.zoom};_onPlayerJoinedWorld=(J)=>{let{player:X}=J,Y=this._queuedPerPlayerSynchronizations.get(X)??[];Y.push(A.createPacket(A.outboundPackets.worldPacketDefinition,this._world.serialize(),this._world.loop.currentTick)),Y.push(A.createPacket(A.outboundPackets.blockTypesPacketDefinition,this._world.blockTypeRegistry.serialize(),this._world.loop.currentTick)),Y.push(A.createPacket(A.outboundPackets.chunksPacketDefinition,this._world.chunkLattice.getAllChunks().map((W)=>W.serialize()),this._world.loop.currentTick)),Y.push(A.createPacket(A.outboundPackets.entitiesPacketDefinition,this._world.entityManager.getAllEntities().map((W)=>{if(X.camera.attachedToEntity===void 0&&W instanceof n1&&W.player===X)X.camera.setAttachedToEntity(W);return W.serialize()}),this._world.loop.currentTick)),Y.push(A.createPacket(A.outboundPackets.audiosPacketDefinition,this._world.audioManager.getAllAudios().map((W)=>W.serialize()),this._world.loop.currentTick)),Y.push(A.createPacket(A.outboundPackets.lightsPacketDefinition,this._world.lightManager.getAllLights().map((W)=>W.serialize()),this._world.loop.currentTick)),Y.push(A.createPacket(A.outboundPackets.sceneUIsPacketDefinition,this._world.sceneUIManager.getAllSceneUIs().map((W)=>W.serialize()),this._world.loop.currentTick)),Y.push(A.createPacket(A.outboundPackets.playersPacketDefinition,j6.instance.getConnectedPlayers().map((W)=>W.serialize()),this._world.loop.currentTick));let Z=this._createOrGetQueuedPlayerCameraSync(X.camera);this._queuedPerPlayerCameraSynchronizations.set(X,{...X.camera.serialize(),...Z}),this._queuedPerPlayerSynchronizations.set(X,Y),this._queuedPlayerSynchronizations[X.id]=X.serialize()};_onPlayerLeftWorld=(J)=>{let X=this._createOrGetQueuedPlayerSync(J.player);X.rm=!0};_onPlayerRequestSync=(J)=>{J.player.connection.send([A.createPacket(A.outboundPackets.syncResponsePacketDefinition,{r:J.receivedAt,s:Date.now(),p:performance.now()-J.receivedAtMs,n:this._world.loop.nextTickMs},this._world.loop.currentTick)])};_onPlayerUILoad=(J)=>{let X=this._createOrGetQueuedPlayerUISync(J.playerUI);X.u=J.htmlUri};_onPlayerUILockPointer=(J)=>{let X=this._createOrGetQueuedPlayerUISync(J.playerUI);X.p=J.lock};_onPlayerUISendData=(J)=>{this._createOrGetQueuedPlayerUIDatasSync(J.playerUI).push(J.data)};_onSceneUILoad=(J)=>{let X=J.sceneUI.serialize();this._queuedSceneUISynchronizations[X.i]=X,this._loadedSceneUIs.add(X.i)};_onSceneUISetAttachedToEntity=(J)=>{let X=this._createOrGetQueuedSceneUISync(J.sceneUI);X.e=J.entity?J.entity.id:void 0,X.p=J.entity?void 0:X.p};_onSceneUISetOffset=(J)=>{let X=this._createOrGetQueuedSceneUISync(J.sceneUI);X.o=J.offset?t.serializeVector(J.offset):void 0};_onSceneUISetPosition=(J)=>{let X=this._createOrGetQueuedSceneUISync(J.sceneUI);X.p=J.position?t.serializeVector(J.position):void 0,X.e=J.position?void 0:X.e};_onSceneUISetState=(J)=>{let X=this._createOrGetQueuedSceneUISync(J.sceneUI);X.s=J.state};_onSceneUISetViewDistance=(J)=>{let X=this._createOrGetQueuedSceneUISync(J.sceneUI);X.v=J.viewDistance};_onSceneUIUnload=(J)=>{let X=this._createOrGetQueuedSceneUISync(J.sceneUI);if(this._loadedSceneUIs.has(X.i))delete this._queuedSceneUISynchronizations[X.i],this._loadedSceneUIs.delete(X.i);else X.rm=!0};_onSimulationDebugRaycast=(J)=>{this._queuedDebugRaycastSynchronizations.push(t.serializePhysicsDebugRaycast(J))};_onSimulationDebugRender=(J)=>{this._queuedBroadcasts.push(A.createPacket(A.outboundPackets.physicsDebugRenderPacketDefinition,{v:Array.from(J.vertices),c:Array.from(J.colors)},this._world.loop.currentTick))};_onWorldSetAmbientLightColor=(J)=>{let X=this._createOrGetQueuedWorldSync(J.world);X.ac=t.serializeRgbColor(J.color)};_onWorldSetAmbientLightIntensity=(J)=>{let X=this._createOrGetQueuedWorldSync(J.world);X.ai=J.intensity};_onWorldSetDirectionalLightColor=(J)=>{let X=this._createOrGetQueuedWorldSync(J.world);X.dc=t.serializeRgbColor(J.color)};_onWorldSetDirectionalLightIntensity=(J)=>{let X=this._createOrGetQueuedWorldSync(J.world);X.di=J.intensity};_onWorldSetDirectionalLightPosition=(J)=>{let X=this._createOrGetQueuedWorldSync(J.world);X.dp=t.serializeVector(J.position)};_createOrGetQueuedAudioSync(J){if(J.id===void 0)E.fatalError("NetworkSynchronizer._createOrGetQueuedAudioSync(): Audio has no id!");return this._queuedAudioSynchronizations[J.id]??={i:J.id}}_createOrGetQueuedBlockSync(J){let{x:X,y:Y,z:Z}=J;return this._queuedBlockSynchronizations[`${X},${Y},${Z}`]??={i:0,c:[X,Y,Z]}}_createOrGetQueuedChunkSync(J){if(!J.originCoordinate)E.fatalError("NetworkSynchronizer._createOrGetQueuedChunkSync(): Chunk has no origin coordinate!");let{x:X,y:Y,z:Z}=J.originCoordinate;return this._queuedChunkSynchronizations[`${X},${Y},${Z}`]??={c:[X,Y,Z]}}_createOrGetQueuedEntitySync(J){if(J.id===void 0)E.fatalError("NetworkSynchronizer._createOrGetQueuedEntitySync(): Entity has no id!");return this._queuedEntitySynchronizations[J.id]??={i:J.id}}_createOrGetQueuedLightSync(J){if(J.id===void 0)E.fatalError("NetworkSynchronizer._createOrGetQueuedLightSync(): Light has no id!");return this._queuedLightSynchronizations[J.id]??={i:J.id}}_createOrGetQueuedPlayerSync(J){if(J.id===void 0)E.fatalError("NetworkSynchronizer._createOrGetQueuedPlayerSync(): Player has no id!");return this._queuedPlayerSynchronizations[J.id]??={i:J.id}}_createOrGetQueuedPlayerCameraSync(J){let X=this._queuedPerPlayerCameraSynchronizations.get(J.player);if(!X)X={},this._queuedPerPlayerCameraSynchronizations.set(J.player,X);return X}_createOrGetQueuedPlayerUISync(J){let X=this._queuedPerPlayerUISynchronizations.get(J.player);if(!X)X={},this._queuedPerPlayerUISynchronizations.set(J.player,X);return X}_createOrGetQueuedPlayerUIDatasSync(J){let X=this._queuedPerPlayerUIDatasSynchronizations.get(J.player);if(!X)X=[],this._queuedPerPlayerUIDatasSynchronizations.set(J.player,X);return X}_createOrGetQueuedSceneUISync(J){if(J.id===void 0)E.fatalError("NetworkSynchronizer._createOrGetQueuedSceneUISync(): SceneUI has no id!");return this._queuedSceneUISynchronizations[J.id]??={i:J.id}}_createOrGetQueuedWorldSync(J){if(J.id!==this._world.id)E.fatalError("NetworkSynchronizer._createOrGetQueuedWorldSync(): World does not match this network synchronizer world!");return this._queuedWorldSynchronization??={i:J.id}}_createOrGetSynchronizedPlayerReliablePackets(J,X){let Y=this._synchronizedPlayerReliablePackets.get(J);if(!Y)Y=[...X],this._synchronizedPlayerReliablePackets.set(J,Y);return Y}}class CJ{_sceneUIs=new Map;_nextSceneUIId=1;_world;constructor(J){this._world=J}get world(){return this._world}getAllSceneUIs(){return Array.from(this._sceneUIs.values())}getAllEntityAttachedSceneUIs(J){return this.getAllSceneUIs().filter((X)=>X.attachedToEntity===J)}getSceneUIById(J){return this._sceneUIs.get(J)}registerSceneUI(J){if(J.id!==void 0)return J.id;let X=this._nextSceneUIId;return this._sceneUIs.set(X,J),this._nextSceneUIId++,X}unloadEntityAttachedSceneUIs(J){this.getAllEntityAttachedSceneUIs(J).forEach((X)=>{X.unload()})}unregisterSceneUI(J){if(J.id===void 0)return;this._sceneUIs.delete(J.id)}}class SJ{_accumulatorMs=0;_targetTicksPerSecond;_fixedTimestepMs;_fixedTimestepS;_nextTickMs=0;_lastLoopTimeMs=0;_tickFunction;_tickErrorCallback;_tickHandle=null;constructor(J,X,Y){this._targetTicksPerSecond=J,this._fixedTimestepS=Math.fround(1/J),this._fixedTimestepMs=Math.fround(this._fixedTimestepS*1000),this._tickFunction=X,this._tickErrorCallback=Y}get targetTicksPerSecond(){return this._targetTicksPerSecond}get fixedTimestepMs(){return this._fixedTimestepMs}get fixedTimestepS(){return this._fixedTimestepS}get nextTickMs(){return this._nextTickMs}start(){if(this._tickHandle)return E.warning("Ticker.start(): ticker already running.");this._lastLoopTimeMs=performance.now();let J=()=>{let X=performance.now(),Y=X-this._lastLoopTimeMs;if(this._lastLoopTimeMs=X,Y>250)Y=250;this._accumulatorMs+=Y;while(this._accumulatorMs>=this._fixedTimestepMs)this._tick(this._fixedTimestepMs),this._accumulatorMs-=this._fixedTimestepMs;this._nextTickMs=this._fixedTimestepMs-this._accumulatorMs,this._tickHandle=setTimeout(J,0)};J()}stop(){if(!this._tickHandle)return E.warning("Ticker.stop(): ticker not running.");clearTimeout(this._tickHandle),this._tickHandle=null}_tick(J){try{this._tickFunction(J)}catch(X){if(X instanceof Error&&this._tickErrorCallback)this._tickErrorCallback(X);else E.warning(`Ticker._tick(): tick callback threw an error, but it was not an instance of Error. Error: ${X}`)}}}var DC;(($)=>{$.START="WORLD_LOOP.START";$.STOP="WORLD_LOOP.STOP";$.TICK_START="WORLD_LOOP.TICK_START";$.TICK_END="WORLD_LOOP.TICK_END";$.TICK_ERROR="WORLD_LOOP.TICK_ERROR"})(DC||={});class IJ extends s{_currentTick=0;_ticker;_world;constructor(J,X=wH){super();this._ticker=new SJ(X,this._tick,this._onTickError),this._world=J}get currentTick(){return this._currentTick}get nextTickMs(){return this._ticker.nextTickMs}get timestepS(){return this._ticker.fixedTimestepS}get world(){return this._world}start(){this._ticker.start(),this.emitWithWorld(this._world,"WORLD_LOOP.START",{worldLoop:this})}stop(){this._ticker.stop(),this.emitWithWorld(this._world,"WORLD_LOOP.STOP",{worldLoop:this})}_tick=(J)=>{this.emitWithWorld(this._world,"WORLD_LOOP.TICK_START",{worldLoop:this,tickDeltaMs:J});let X=performance.now();this._world.chunkLattice.updateChunks(),this._world.entityManager.tickEntities(J),this._world.simulation.step(J),this._world.entityManager.checkAndEmitUpdates(),this._world.networkSynchronizer.synchronize(),this._currentTick++,this.emitWithWorld(this._world,"WORLD_LOOP.TICK_END",{worldLoop:this,tickDurationMs:performance.now()-X})};_onTickError=(J)=>{E.error(`WorldLoop._onTickError(): Error: ${J}`),this.emitWithWorld(this._world,"WORLD_LOOP.TICK_ERROR",{worldLoop:this,error:J})}}var xH;((K)=>{K.SET_AMBIENT_LIGHT_COLOR="WORLD.SET_AMBIENT_LIGHT_COLOR";K.SET_AMBIENT_LIGHT_INTENSITY="WORLD.SET_AMBIENT_LIGHT_INTENSITY";K.SET_DIRECTIONAL_LIGHT_COLOR="WORLD.SET_DIRECTIONAL_LIGHT_COLOR";K.SET_DIRECTIONAL_LIGHT_INTENSITY="WORLD.SET_DIRECTIONAL_LIGHT_INTENSITY";K.SET_DIRECTIONAL_LIGHT_POSITION="WORLD.SET_DIRECTIONAL_LIGHT_POSITION";K.START="WORLD.START";K.STOP="WORLD.STOP"})(xH||={});class hJ extends s{_id;_ambientLightColor;_ambientLightIntensity;_directionalLightColor;_directionalLightIntensity;_directionalLightPosition;_name;_skyboxUri;_audioManager;_blockTypeRegistry;_chatManager;_chunkLattice;_entityManager;_lightManager;_loop;_networkSynchronizer;_sceneUIManager;_simulation;constructor(J){super();this._id=J.id,this._ambientLightColor=J.ambientLightColor??{r:255,g:255,b:255},this._ambientLightIntensity=J.ambientLightIntensity??1,this._directionalLightColor=J.directionalLightColor??{r:255,g:255,b:255},this._directionalLightIntensity=J.directionalLightIntensity??3,this._directionalLightPosition=J.directionalLightPosition??{x:100,y:150,z:100},this._name=J.name,this._skyboxUri=J.skyboxUri,this._audioManager=new Q4(this),this._blockTypeRegistry=new d4(this),this._chatManager=new fJ(this),this._chunkLattice=new PJ(this),this._entityManager=new jJ(this),this._lightManager=new kJ(this),this._loop=new IJ(this,J.tickRate),this._networkSynchronizer=new K$(this),this._sceneUIManager=new CJ(this),this._simulation=new EJ(this,J.tickRate,J.gravity)}get id(){return this._id}get ambientLightColor(){return this._ambientLightColor}get ambientLightIntensity(){return this._ambientLightIntensity}get directionalLightColor(){return this._directionalLightColor}get directionalLightIntensity(){return this._directionalLightIntensity}get directionalLightPosition(){return this._directionalLightPosition}get name(){return this._name}get skyboxUri(){return this._skyboxUri}get audioManager(){return this._audioManager}get blockTypeRegistry(){return this._blockTypeRegistry}get chatManager(){return this._chatManager}get chunkLattice(){return this._chunkLattice}get entityManager(){return this._entityManager}get lightManager(){return this._lightManager}get loop(){return this._loop}get networkSynchronizer(){return this._networkSynchronizer}get sceneUIManager(){return this._sceneUIManager}get simulation(){return this._simulation}loadMap(J){if(J.blockTypes)for(let X of J.blockTypes)this.blockTypeRegistry.registerGenericBlockType({id:X.id,isLiquid:X.isLiquid,name:X.name,textureUri:X.textureUri});if(J.blocks)for(let[X,Y]of Object.entries(J.blocks)){let[Z,W,$]=X.split(",").map(Number);this.chunkLattice.setBlock({x:Z,y:W,z:$},Y)}if(J.entities)for(let[X,Y]of Object.entries(J.entities)){let[Z,W,$]=X.split(",").map(Number);new Y8(Y).spawn(this,{x:Z,y:W,z:$})}}setAmbientLightColor(J){this._ambientLightColor=J,this.emit("WORLD.SET_AMBIENT_LIGHT_COLOR",{world:this,color:J})}setAmbientLightIntensity(J){this._ambientLightIntensity=J,this.emit("WORLD.SET_AMBIENT_LIGHT_INTENSITY",{world:this,intensity:J})}setDirectionalLightColor(J){this._directionalLightColor=J,this.emit("WORLD.SET_DIRECTIONAL_LIGHT_COLOR",{world:this,color:J})}setDirectionalLightIntensity(J){this._directionalLightIntensity=J,this.emit("WORLD.SET_DIRECTIONAL_LIGHT_INTENSITY",{world:this,intensity:J})}setDirectionalLightPosition(J){this._directionalLightPosition=J,this.emit("WORLD.SET_DIRECTIONAL_LIGHT_POSITION",{world:this,position:J})}start(){this._loop.start(),this.emit("WORLD.START",{world:this,startedAtMs:Date.now()})}stop(){this._loop.stop(),this.emit("WORLD.STOP",{world:this,stoppedAtMs:Date.now()})}serialize(){return t.serializeWorld(this)}}var _C;((Y)=>{Y.START="GAMESERVER.START";Y.STOP="GAMESERVER.STOP"})(_C||={});function dX0(J){z0.init().then(()=>{return R1.instance.modelRegistry.preloadModels()}).then(()=>{J(R1.instance.worlds[0]),R1.instance.start()}).catch((X)=>{E.fatalError(`Failed to initialize the game engine, exiting. Error: ${X}`)})}class R1{static _instance;_modelRegistry=U6.instance;_playerManager=j6.instance;_socket=i1.instance;_webServer=o5.instance;_worlds={};constructor(){let J=new hJ({id:0,name:"Default World",skyboxUri:"skyboxes/partly-cloudy"});this._worlds[J.id]=J}static get instance(){if(!this._instance)this._instance=new R1;return this._instance}get modelRegistry(){return this._modelRegistry}get playerManager(){return this._playerManager}get socket(){return this._socket}get webServer(){return this._webServer}get worlds(){return this._worlds}start(){m8.emit("GAMESERVER.START",{startedAtMs:performance.now()}),Object.values(this._worlds).forEach((J)=>J.start()),this._webServer.start()}stop(){m8.emit("GAMESERVER.STOP",{stoppedAtMs:performance.now()}),Object.values(this._worlds).forEach((J)=>J.stop())}}class b9{static instance=new b9;constructor(){}async getGlobalData(J){let X=await u6.instance.getData(J);if(!X||X.error){if(X?.error)E.warning(`PersistenceManager.getGlobalData(): ${X.error.message}`);return}return X}async getPlayerData(J){let X=await u6.instance.getData(this._getPlayerKey(J));if(!X||X.error){if(X?.error)E.warning(`PersistenceManager.getPlayerData(): ${X.error.message}`);return}return X}async setGlobalData(J,X){let Y=await u6.instance.setData(J,X);if(!Y||Y.error){if(Y?.error)E.warning(`PersistenceManager.setGlobalData(): ${Y.error.message}`);return}return Y}async setPlayerData(J,X){let Y=await u6.instance.setData(this._getPlayerKey(J),X);if(!Y||Y.error){if(Y?.error)E.warning(`PersistenceManager.setPlayerData(): ${Y.error.message}`);return}return Y}_getPlayerKey(J){return`player-${J.id}`}}var EC=["w","a","s","d","sp","sh","tb","ml","mr","q","e","r","f","z","x","c","v","1","2","3","4","5","6","7","8","9","0"],BJ;((W)=>{W.CHAT_MESSAGE_SEND="PLAYER.CHAT_MESSAGE_SEND";W.JOINED_WORLD="PLAYER.JOINED_WORLD";W.LEFT_WORLD="PLAYER.LEFT_WORLD";W.REQUEST_SYNC="PLAYER.REQUEST_SYNC"})(BJ||={});class r5 extends s{static _devNextPlayerId=1;id;username;profilePictureUrl;camera;connection;ui;_input={};_lastUnreliableInputSequenceNumber=0;_world;constructor(J,X){super();this.id=X?.user.id??`player-${r5._devNextPlayerId++}`,this.username=X?.user.username??this.id,this.profilePictureUrl=X?.user.profilePictureURL??void 0,this.camera=new TJ(this),this.connection=J,this.ui=new DJ(this),J.onPacket(A.PacketId.CHAT_MESSAGE_SEND,this._onChatMessageSendPacket),J.onPacket(A.PacketId.DEBUG_CONFIG,this._onDebugConfigPacket),J.onPacket(A.PacketId.INPUT,this._onInputPacket),J.onPacket(A.PacketId.SYNC_REQUEST,this._onSyncRequestPacket),J.onPacket(A.PacketId.UI_DATA_SEND,this._onUIDataSendPacket),this.joinWorld(R1.instance.worlds[0])}get input(){return this._input}get world(){return this._world}disconnect(){this.leaveWorld(),this.connection.close()}async getPersistedData(){return b9.instance.getPlayerData(this)}joinWorld(J){this.leaveWorld(),this._world=J,this.emitWithWorld(this._world,"PLAYER.JOINED_WORLD",{player:this,world:this._world})}leaveWorld(){if(!this._world)return;this.emitWithWorld(this._world,"PLAYER.LEFT_WORLD",{player:this,world:this._world}),this._world=void 0}async setPersistedData(J){return b9.instance.setPlayerData(this,J)}serialize(){return t.serializePlayer(this)}_onChatMessageSendPacket=(J)=>{if(this._world)this.emitWithWorld(this._world,"PLAYER.CHAT_MESSAGE_SEND",{player:this,message:J[1].m})};_onDebugConfigPacket=(J)=>{console.log(J)};_onInputPacket=(J)=>{let X=J[1];if(X.sq!==void 0){if(X.sq<this._lastUnreliableInputSequenceNumber)return;this._lastUnreliableInputSequenceNumber=X.sq}if(EC.forEach((Y)=>{let Z=Y;if(X[Z]!==void 0)this._input[Z]=Boolean(X[Z])}),X.cp!==void 0)this.camera.setOrientationPitch(X.cp);if(X.cy!==void 0)this.camera.setOrientationYaw(X.cy)};_onSyncRequestPacket=()=>{if(this._world)this.emitWithWorld(this._world,"PLAYER.REQUEST_SYNC",{player:this,receivedAt:Date.now(),receivedAtMs:performance.now()})};_onUIDataSendPacket=(J)=>{this.ui.emit("PLAYER_UI.DATA",{playerUI:this.ui,data:J[1]})}}var PH;((Y)=>{Y.BROADCAST_MESSAGE="CHAT.BROADCAST_MESSAGE";Y.PLAYER_MESSAGE="CHAT.PLAYER_MESSAGE"})(PH||={});class fJ extends s{_commandCallbacks={};_world;constructor(J){super();this._world=J,this._subscribeToPlayerEvents()}registerCommand(J,X){this._commandCallbacks[J]=X}unregisterCommand(J){delete this._commandCallbacks[J]}sendBroadcastMessage(J,X){this._sendBroadcastMessage(void 0,J,X)}sendPlayerMessage(J,X,Y){this.emitWithWorld(this._world,"CHAT.PLAYER_MESSAGE",{player:J,message:X,color:Y})}_subscribeToPlayerEvents(){this._world.on("PLAYER.CHAT_MESSAGE_SEND",(J)=>{let{player:X,message:Y}=J,[Z,...W]=Y.split(" "),$=this._commandCallbacks[Z];if($){$(X,W,Y);return}this._sendBroadcastMessage(X,Y)})}_sendBroadcastMessage(J,X,Y){this.emitWithWorld(this._world,"CHAT.BROADCAST_MESSAGE",{player:J,message:X,color:Y})}}var l=0.000001,Q0=typeof Float32Array!=="undefined"?Float32Array:Array,d6=Math.random;var L_0=Math.PI/180;if(!Math.hypot)Math.hypot=function(){var J=0,X=arguments.length;while(X--)J+=arguments[X]*arguments[X];return Math.sqrt(J)};var e0={};k6(e0,{transpose:()=>tX0,subtract:()=>SC,sub:()=>VY0,str:()=>QY0,set:()=>rX0,scale:()=>ZY0,rotate:()=>YY0,multiplyScalarAndAdd:()=>LY0,multiplyScalar:()=>zY0,multiply:()=>CC,mul:()=>UY0,invert:()=>eX0,identity:()=>sX0,fromValues:()=>oX0,fromScaling:()=>$Y0,fromRotation:()=>WY0,frob:()=>KY0,exactEquals:()=>qY0,equals:()=>HY0,determinant:()=>XY0,create:()=>iX0,copy:()=>aX0,clone:()=>nX0,adjoint:()=>JY0,add:()=>FY0,LDU:()=>GY0});function iX0(){var J=new Q0(4);if(Q0!=Float32Array)J[1]=0,J[2]=0;return J[0]=1,J[3]=1,J}function nX0(J){var X=new Q0(4);return X[0]=J[0],X[1]=J[1],X[2]=J[2],X[3]=J[3],X}function aX0(J,X){return J[0]=X[0],J[1]=X[1],J[2]=X[2],J[3]=X[3],J}function sX0(J){return J[0]=1,J[1]=0,J[2]=0,J[3]=1,J}function oX0(J,X,Y,Z){var W=new Q0(4);return W[0]=J,W[1]=X,W[2]=Y,W[3]=Z,W}function rX0(J,X,Y,Z,W){return J[0]=X,J[1]=Y,J[2]=Z,J[3]=W,J}function tX0(J,X){if(J===X){var Y=X[1];J[1]=X[2],J[2]=Y}else J[0]=X[0],J[1]=X[2],J[2]=X[1],J[3]=X[3];return J}function eX0(J,X){var Y=X[0],Z=X[1],W=X[2],$=X[3],Q=Y*$-W*Z;if(!Q)return null;return Q=1/Q,J[0]=$*Q,J[1]=-Z*Q,J[2]=-W*Q,J[3]=Y*Q,J}function JY0(J,X){var Y=X[0];return J[0]=X[3],J[1]=-X[1],J[2]=-X[2],J[3]=Y,J}function XY0(J){return J[0]*J[3]-J[2]*J[1]}function CC(J,X,Y){var Z=X[0],W=X[1],$=X[2],Q=X[3],K=Y[0],G=Y[1],F=Y[2],q=Y[3];return J[0]=Z*K+$*G,J[1]=W*K+Q*G,J[2]=Z*F+$*q,J[3]=W*F+Q*q,J}function YY0(J,X,Y){var Z=X[0],W=X[1],$=X[2],Q=X[3],K=Math.sin(Y),G=Math.cos(Y);return J[0]=Z*G+$*K,J[1]=W*G+Q*K,J[2]=Z*-K+$*G,J[3]=W*-K+Q*G,J}function ZY0(J,X,Y){var Z=X[0],W=X[1],$=X[2],Q=X[3],K=Y[0],G=Y[1];return J[0]=Z*K,J[1]=W*K,J[2]=$*G,J[3]=Q*G,J}function WY0(J,X){var Y=Math.sin(X),Z=Math.cos(X);return J[0]=Z,J[1]=Y,J[2]=-Y,J[3]=Z,J}function $Y0(J,X){return J[0]=X[0],J[1]=0,J[2]=0,J[3]=X[1],J}function QY0(J){return"mat2("+J[0]+", "+J[1]+", "+J[2]+", "+J[3]+")"}function KY0(J){return Math.hypot(J[0],J[1],J[2],J[3])}function GY0(J,X,Y,Z){return J[2]=Z[2]/Z[0],Y[0]=Z[0],Y[1]=Z[1],Y[3]=Z[3]-J[2]*Y[1],[J,X,Y]}function FY0(J,X,Y){return J[0]=X[0]+Y[0],J[1]=X[1]+Y[1],J[2]=X[2]+Y[2],J[3]=X[3]+Y[3],J}function SC(J,X,Y){return J[0]=X[0]-Y[0],J[1]=X[1]-Y[1],J[2]=X[2]-Y[2],J[3]=X[3]-Y[3],J}function qY0(J,X){return J[0]===X[0]&&J[1]===X[1]&&J[2]===X[2]&&J[3]===X[3]}function HY0(J,X){var Y=J[0],Z=J[1],W=J[2],$=J[3],Q=X[0],K=X[1],G=X[2],F=X[3];return Math.abs(Y-Q)<=l*Math.max(1,Math.abs(Y),Math.abs(Q))&&Math.abs(Z-K)<=l*Math.max(1,Math.abs(Z),Math.abs(K))&&Math.abs(W-G)<=l*Math.max(1,Math.abs(W),Math.abs(G))&&Math.abs($-F)<=l*Math.max(1,Math.abs($),Math.abs(F))}function zY0(J,X,Y){return J[0]=X[0]*Y,J[1]=X[1]*Y,J[2]=X[2]*Y,J[3]=X[3]*Y,J}function LY0(J,X,Y,Z){return J[0]=X[0]+Y[0]*Z,J[1]=X[1]+Y[1]*Z,J[2]=X[2]+Y[2]*Z,J[3]=X[3]+Y[3]*Z,J}var UY0=CC,VY0=SC;var h0={};k6(h0,{transpose:()=>NY0,translate:()=>kY0,subtract:()=>hC,sub:()=>uY0,str:()=>bY0,set:()=>xY0,scale:()=>DY0,rotate:()=>TY0,projection:()=>fY0,normalFromMat4:()=>hY0,multiplyScalarAndAdd:()=>gY0,multiplyScalar:()=>yY0,multiply:()=>IC,mul:()=>lY0,invert:()=>vY0,identity:()=>PY0,fromValues:()=>OY0,fromTranslation:()=>_Y0,fromScaling:()=>CY0,fromRotation:()=>EY0,fromQuat:()=>IY0,fromMat4:()=>MY0,fromMat2d:()=>SY0,frob:()=>pY0,exactEquals:()=>cY0,equals:()=>mY0,determinant:()=>jY0,create:()=>NH,copy:()=>wY0,clone:()=>RY0,adjoint:()=>BY0,add:()=>AY0});function NH(){var J=new Q0(9);if(Q0!=Float32Array)J[1]=0,J[2]=0,J[3]=0,J[5]=0,J[6]=0,J[7]=0;return J[0]=1,J[4]=1,J[8]=1,J}function MY0(J,X){return J[0]=X[0],J[1]=X[1],J[2]=X[2],J[3]=X[4],J[4]=X[5],J[5]=X[6],J[6]=X[8],J[7]=X[9],J[8]=X[10],J}function RY0(J){var X=new Q0(9);return X[0]=J[0],X[1]=J[1],X[2]=J[2],X[3]=J[3],X[4]=J[4],X[5]=J[5],X[6]=J[6],X[7]=J[7],X[8]=J[8],X}function wY0(J,X){return J[0]=X[0],J[1]=X[1],J[2]=X[2],J[3]=X[3],J[4]=X[4],J[5]=X[5],J[6]=X[6],J[7]=X[7],J[8]=X[8],J}function OY0(J,X,Y,Z,W,$,Q,K,G){var F=new Q0(9);return F[0]=J,F[1]=X,F[2]=Y,F[3]=Z,F[4]=W,F[5]=$,F[6]=Q,F[7]=K,F[8]=G,F}function xY0(J,X,Y,Z,W,$,Q,K,G,F){return J[0]=X,J[1]=Y,J[2]=Z,J[3]=W,J[4]=$,J[5]=Q,J[6]=K,J[7]=G,J[8]=F,J}function PY0(J){return J[0]=1,J[1]=0,J[2]=0,J[3]=0,J[4]=1,J[5]=0,J[6]=0,J[7]=0,J[8]=1,J}function NY0(J,X){if(J===X){var Y=X[1],Z=X[2],W=X[5];J[1]=X[3],J[2]=X[6],J[3]=Y,J[5]=X[7],J[6]=Z,J[7]=W}else J[0]=X[0],J[1]=X[3],J[2]=X[6],J[3]=X[1],J[4]=X[4],J[5]=X[7],J[6]=X[2],J[7]=X[5],J[8]=X[8];return J}function vY0(J,X){var Y=X[0],Z=X[1],W=X[2],$=X[3],Q=X[4],K=X[5],G=X[6],F=X[7],q=X[8],H=q*Q-K*F,z=-q*$+K*G,V=F*$-Q*G,M=Y*H+Z*z+W*V;if(!M)return null;return M=1/M,J[0]=H*M,J[1]=(-q*Z+W*F)*M,J[2]=(K*Z-W*Q)*M,J[3]=z*M,J[4]=(q*Y-W*G)*M,J[5]=(-K*Y+W*$)*M,J[6]=V*M,J[7]=(-F*Y+Z*G)*M,J[8]=(Q*Y-Z*$)*M,J}function BY0(J,X){var Y=X[0],Z=X[1],W=X[2],$=X[3],Q=X[4],K=X[5],G=X[6],F=X[7],q=X[8];return J[0]=Q*q-K*F,J[1]=W*F-Z*q,J[2]=Z*K-W*Q,J[3]=K*G-$*q,J[4]=Y*q-W*G,J[5]=W*$-Y*K,J[6]=$*F-Q*G,J[7]=Z*G-Y*F,J[8]=Y*Q-Z*$,J}function jY0(J){var X=J[0],Y=J[1],Z=J[2],W=J[3],$=J[4],Q=J[5],K=J[6],G=J[7],F=J[8];return X*(F*$-Q*G)+Y*(-F*W+Q*K)+Z*(G*W-$*K)}function IC(J,X,Y){var Z=X[0],W=X[1],$=X[2],Q=X[3],K=X[4],G=X[5],F=X[6],q=X[7],H=X[8],z=Y[0],V=Y[1],M=Y[2],R=Y[3],L=Y[4],w=Y[5],P=Y[6],N=Y[7],v=Y[8];return J[0]=z*Z+V*Q+M*F,J[1]=z*W+V*K+M*q,J[2]=z*$+V*G+M*H,J[3]=R*Z+L*Q+w*F,J[4]=R*W+L*K+w*q,J[5]=R*$+L*G+w*H,J[6]=P*Z+N*Q+v*F,J[7]=P*W+N*K+v*q,J[8]=P*$+N*G+v*H,J}function kY0(J,X,Y){var Z=X[0],W=X[1],$=X[2],Q=X[3],K=X[4],G=X[5],F=X[6],q=X[7],H=X[8],z=Y[0],V=Y[1];return J[0]=Z,J[1]=W,J[2]=$,J[3]=Q,J[4]=K,J[5]=G,J[6]=z*Z+V*Q+F,J[7]=z*W+V*K+q,J[8]=z*$+V*G+H,J}function TY0(J,X,Y){var Z=X[0],W=X[1],$=X[2],Q=X[3],K=X[4],G=X[5],F=X[6],q=X[7],H=X[8],z=Math.sin(Y),V=Math.cos(Y);return J[0]=V*Z+z*Q,J[1]=V*W+z*K,J[2]=V*$+z*G,J[3]=V*Q-z*Z,J[4]=V*K-z*W,J[5]=V*G-z*$,J[6]=F,J[7]=q,J[8]=H,J}function DY0(J,X,Y){var Z=Y[0],W=Y[1];return J[0]=Z*X[0],J[1]=Z*X[1],J[2]=Z*X[2],J[3]=W*X[3],J[4]=W*X[4],J[5]=W*X[5],J[6]=X[6],J[7]=X[7],J[8]=X[8],J}function _Y0(J,X){return J[0]=1,J[1]=0,J[2]=0,J[3]=0,J[4]=1,J[5]=0,J[6]=X[0],J[7]=X[1],J[8]=1,J}function EY0(J,X){var Y=Math.sin(X),Z=Math.cos(X);return J[0]=Z,J[1]=Y,J[2]=0,J[3]=-Y,J[4]=Z,J[5]=0,J[6]=0,J[7]=0,J[8]=1,J}function CY0(J,X){return J[0]=X[0],J[1]=0,J[2]=0,J[3]=0,J[4]=X[1],J[5]=0,J[6]=0,J[7]=0,J[8]=1,J}function SY0(J,X){return J[0]=X[0],J[1]=X[1],J[2]=0,J[3]=X[2],J[4]=X[3],J[5]=0,J[6]=X[4],J[7]=X[5],J[8]=1,J}function IY0(J,X){var Y=X[0],Z=X[1],W=X[2],$=X[3],Q=Y+Y,K=Z+Z,G=W+W,F=Y*Q,q=Z*Q,H=Z*K,z=W*Q,V=W*K,M=W*G,R=$*Q,L=$*K,w=$*G;return J[0]=1-H-M,J[3]=q-w,J[6]=z+L,J[1]=q+w,J[4]=1-F-M,J[7]=V-R,J[2]=z-L,J[5]=V+R,J[8]=1-F-H,J}function hY0(J,X){var Y=X[0],Z=X[1],W=X[2],$=X[3],Q=X[4],K=X[5],G=X[6],F=X[7],q=X[8],H=X[9],z=X[10],V=X[11],M=X[12],R=X[13],L=X[14],w=X[15],P=Y*K-Z*Q,N=Y*G-W*Q,v=Y*F-$*Q,j=Z*G-W*K,O=Z*F-$*K,D=W*F-$*G,_=q*R-H*M,C=q*L-z*M,S=q*w-V*M,I=H*L-z*R,f=H*w-V*R,y=z*w-V*L,h=P*y-N*f+v*I+j*S-O*C+D*_;if(!h)return null;return h=1/h,J[0]=(K*y-G*f+F*I)*h,J[1]=(G*S-Q*y-F*C)*h,J[2]=(Q*f-K*S+F*_)*h,J[3]=(W*f-Z*y-$*I)*h,J[4]=(Y*y-W*S+$*C)*h,J[5]=(Z*S-Y*f-$*_)*h,J[6]=(R*D-L*O+w*j)*h,J[7]=(L*v-M*D-w*N)*h,J[8]=(M*O-R*v+w*P)*h,J}function fY0(J,X,Y){return J[0]=2/X,J[1]=0,J[2]=0,J[3]=0,J[4]=-2/Y,J[5]=0,J[6]=-1,J[7]=1,J[8]=1,J}function bY0(J){return"mat3("+J[0]+", "+J[1]+", "+J[2]+", "+J[3]+", "+J[4]+", "+J[5]+", "+J[6]+", "+J[7]+", "+J[8]+")"}function pY0(J){return Math.hypot(J[0],J[1],J[2],J[3],J[4],J[5],J[6],J[7],J[8])}function AY0(J,X,Y){return J[0]=X[0]+Y[0],J[1]=X[1]+Y[1],J[2]=X[2]+Y[2],J[3]=X[3]+Y[3],J[4]=X[4]+Y[4],J[5]=X[5]+Y[5],J[6]=X[6]+Y[6],J[7]=X[7]+Y[7],J[8]=X[8]+Y[8],J}function hC(J,X,Y){return J[0]=X[0]-Y[0],J[1]=X[1]-Y[1],J[2]=X[2]-Y[2],J[3]=X[3]-Y[3],J[4]=X[4]-Y[4],J[5]=X[5]-Y[5],J[6]=X[6]-Y[6],J[7]=X[7]-Y[7],J[8]=X[8]-Y[8],J}function yY0(J,X,Y){return J[0]=X[0]*Y,J[1]=X[1]*Y,J[2]=X[2]*Y,J[3]=X[3]*Y,J[4]=X[4]*Y,J[5]=X[5]*Y,J[6]=X[6]*Y,J[7]=X[7]*Y,J[8]=X[8]*Y,J}function gY0(J,X,Y,Z){return J[0]=X[0]+Y[0]*Z,J[1]=X[1]+Y[1]*Z,J[2]=X[2]+Y[2]*Z,J[3]=X[3]+Y[3]*Z,J[4]=X[4]+Y[4]*Z,J[5]=X[5]+Y[5]*Z,J[6]=X[6]+Y[6]*Z,J[7]=X[7]+Y[7]*Z,J[8]=X[8]+Y[8]*Z,J}function cY0(J,X){return J[0]===X[0]&&J[1]===X[1]&&J[2]===X[2]&&J[3]===X[3]&&J[4]===X[4]&&J[5]===X[5]&&J[6]===X[6]&&J[7]===X[7]&&J[8]===X[8]}function mY0(J,X){var Y=J[0],Z=J[1],W=J[2],$=J[3],Q=J[4],K=J[5],G=J[6],F=J[7],q=J[8],H=X[0],z=X[1],V=X[2],M=X[3],R=X[4],L=X[5],w=X[6],P=X[7],N=X[8];return Math.abs(Y-H)<=l*Math.max(1,Math.abs(Y),Math.abs(H))&&Math.abs(Z-z)<=l*Math.max(1,Math.abs(Z),Math.abs(z))&&Math.abs(W-V)<=l*Math.max(1,Math.abs(W),Math.abs(V))&&Math.abs($-M)<=l*Math.max(1,Math.abs($),Math.abs(M))&&Math.abs(Q-R)<=l*Math.max(1,Math.abs(Q),Math.abs(R))&&Math.abs(K-L)<=l*Math.max(1,Math.abs(K),Math.abs(L))&&Math.abs(G-w)<=l*Math.max(1,Math.abs(G),Math.abs(w))&&Math.abs(F-P)<=l*Math.max(1,Math.abs(F),Math.abs(P))&&Math.abs(q-N)<=l*Math.max(1,Math.abs(q),Math.abs(N))}var lY0=IC,uY0=hC;var Y0={};k6(Y0,{transpose:()=>oY0,translate:()=>JZ0,targetTo:()=>jZ0,subtract:()=>cC,sub:()=>hZ0,str:()=>kZ0,set:()=>sY0,scale:()=>XZ0,rotateZ:()=>$Z0,rotateY:()=>WZ0,rotateX:()=>ZZ0,rotate:()=>YZ0,perspectiveZO:()=>xZ0,perspectiveNO:()=>yC,perspectiveFromFieldOfView:()=>PZ0,perspective:()=>OZ0,orthoZO:()=>vZ0,orthoNO:()=>gC,ortho:()=>NZ0,multiplyScalarAndAdd:()=>EZ0,multiplyScalar:()=>_Z0,multiply:()=>bC,mul:()=>IZ0,lookAt:()=>BZ0,invert:()=>rY0,identity:()=>fC,getTranslation:()=>LZ0,getScaling:()=>AC,getRotation:()=>UZ0,frustum:()=>wZ0,fromZRotation:()=>HZ0,fromYRotation:()=>qZ0,fromXRotation:()=>FZ0,fromValues:()=>aY0,fromTranslation:()=>QZ0,fromScaling:()=>KZ0,fromRotationTranslationScaleOrigin:()=>MZ0,fromRotationTranslationScale:()=>VZ0,fromRotationTranslation:()=>pC,fromRotation:()=>GZ0,fromQuat2:()=>zZ0,fromQuat:()=>RZ0,frob:()=>TZ0,exactEquals:()=>CZ0,equals:()=>SZ0,determinant:()=>eY0,create:()=>dY0,copy:()=>nY0,clone:()=>iY0,adjoint:()=>tY0,add:()=>DZ0});function dY0(){var J=new Q0(16);if(Q0!=Float32Array)J[1]=0,J[2]=0,J[3]=0,J[4]=0,J[6]=0,J[7]=0,J[8]=0,J[9]=0,J[11]=0,J[12]=0,J[13]=0,J[14]=0;return J[0]=1,J[5]=1,J[10]=1,J[15]=1,J}function iY0(J){var X=new Q0(16);return X[0]=J[0],X[1]=J[1],X[2]=J[2],X[3]=J[3],X[4]=J[4],X[5]=J[5],X[6]=J[6],X[7]=J[7],X[8]=J[8],X[9]=J[9],X[10]=J[10],X[11]=J[11],X[12]=J[12],X[13]=J[13],X[14]=J[14],X[15]=J[15],X}function nY0(J,X){return J[0]=X[0],J[1]=X[1],J[2]=X[2],J[3]=X[3],J[4]=X[4],J[5]=X[5],J[6]=X[6],J[7]=X[7],J[8]=X[8],J[9]=X[9],J[10]=X[10],J[11]=X[11],J[12]=X[12],J[13]=X[13],J[14]=X[14],J[15]=X[15],J}function aY0(J,X,Y,Z,W,$,Q,K,G,F,q,H,z,V,M,R){var L=new Q0(16);return L[0]=J,L[1]=X,L[2]=Y,L[3]=Z,L[4]=W,L[5]=$,L[6]=Q,L[7]=K,L[8]=G,L[9]=F,L[10]=q,L[11]=H,L[12]=z,L[13]=V,L[14]=M,L[15]=R,L}function sY0(J,X,Y,Z,W,$,Q,K,G,F,q,H,z,V,M,R,L){return J[0]=X,J[1]=Y,J[2]=Z,J[3]=W,J[4]=$,J[5]=Q,J[6]=K,J[7]=G,J[8]=F,J[9]=q,J[10]=H,J[11]=z,J[12]=V,J[13]=M,J[14]=R,J[15]=L,J}function fC(J){return J[0]=1,J[1]=0,J[2]=0,J[3]=0,J[4]=0,J[5]=1,J[6]=0,J[7]=0,J[8]=0,J[9]=0,J[10]=1,J[11]=0,J[12]=0,J[13]=0,J[14]=0,J[15]=1,J}function oY0(J,X){if(J===X){var Y=X[1],Z=X[2],W=X[3],$=X[6],Q=X[7],K=X[11];J[1]=X[4],J[2]=X[8],J[3]=X[12],J[4]=Y,J[6]=X[9],J[7]=X[13],J[8]=Z,J[9]=$,J[11]=X[14],J[12]=W,J[13]=Q,J[14]=K}else J[0]=X[0],J[1]=X[4],J[2]=X[8],J[3]=X[12],J[4]=X[1],J[5]=X[5],J[6]=X[9],J[7]=X[13],J[8]=X[2],J[9]=X[6],J[10]=X[10],J[11]=X[14],J[12]=X[3],J[13]=X[7],J[14]=X[11],J[15]=X[15];return J}function rY0(J,X){var Y=X[0],Z=X[1],W=X[2],$=X[3],Q=X[4],K=X[5],G=X[6],F=X[7],q=X[8],H=X[9],z=X[10],V=X[11],M=X[12],R=X[13],L=X[14],w=X[15],P=Y*K-Z*Q,N=Y*G-W*Q,v=Y*F-$*Q,j=Z*G-W*K,O=Z*F-$*K,D=W*F-$*G,_=q*R-H*M,C=q*L-z*M,S=q*w-V*M,I=H*L-z*R,f=H*w-V*R,y=z*w-V*L,h=P*y-N*f+v*I+j*S-O*C+D*_;if(!h)return null;return h=1/h,J[0]=(K*y-G*f+F*I)*h,J[1]=(W*f-Z*y-$*I)*h,J[2]=(R*D-L*O+w*j)*h,J[3]=(z*O-H*D-V*j)*h,J[4]=(G*S-Q*y-F*C)*h,J[5]=(Y*y-W*S+$*C)*h,J[6]=(L*v-M*D-w*N)*h,J[7]=(q*D-z*v+V*N)*h,J[8]=(Q*f-K*S+F*_)*h,J[9]=(Z*S-Y*f-$*_)*h,J[10]=(M*O-R*v+w*P)*h,J[11]=(H*v-q*O-V*P)*h,J[12]=(K*C-Q*I-G*_)*h,J[13]=(Y*I-Z*C+W*_)*h,J[14]=(R*N-M*j-L*P)*h,J[15]=(q*j-H*N+z*P)*h,J}function tY0(J,X){var Y=X[0],Z=X[1],W=X[2],$=X[3],Q=X[4],K=X[5],G=X[6],F=X[7],q=X[8],H=X[9],z=X[10],V=X[11],M=X[12],R=X[13],L=X[14],w=X[15];return J[0]=K*(z*w-V*L)-H*(G*w-F*L)+R*(G*V-F*z),J[1]=-(Z*(z*w-V*L)-H*(W*w-$*L)+R*(W*V-$*z)),J[2]=Z*(G*w-F*L)-K*(W*w-$*L)+R*(W*F-$*G),J[3]=-(Z*(G*V-F*z)-K*(W*V-$*z)+H*(W*F-$*G)),J[4]=-(Q*(z*w-V*L)-q*(G*w-F*L)+M*(G*V-F*z)),J[5]=Y*(z*w-V*L)-q*(W*w-$*L)+M*(W*V-$*z),J[6]=-(Y*(G*w-F*L)-Q*(W*w-$*L)+M*(W*F-$*G)),J[7]=Y*(G*V-F*z)-Q*(W*V-$*z)+q*(W*F-$*G),J[8]=Q*(H*w-V*R)-q*(K*w-F*R)+M*(K*V-F*H),J[9]=-(Y*(H*w-V*R)-q*(Z*w-$*R)+M*(Z*V-$*H)),J[10]=Y*(K*w-F*R)-Q*(Z*w-$*R)+M*(Z*F-$*K),J[11]=-(Y*(K*V-F*H)-Q*(Z*V-$*H)+q*(Z*F-$*K)),J[12]=-(Q*(H*L-z*R)-q*(K*L-G*R)+M*(K*z-G*H)),J[13]=Y*(H*L-z*R)-q*(Z*L-W*R)+M*(Z*z-W*H),J[14]=-(Y*(K*L-G*R)-Q*(Z*L-W*R)+M*(Z*G-W*K)),J[15]=Y*(K*z-G*H)-Q*(Z*z-W*H)+q*(Z*G-W*K),J}function eY0(J){var X=J[0],Y=J[1],Z=J[2],W=J[3],$=J[4],Q=J[5],K=J[6],G=J[7],F=J[8],q=J[9],H=J[10],z=J[11],V=J[12],M=J[13],R=J[14],L=J[15],w=X*Q-Y*$,P=X*K-Z*$,N=X*G-W*$,v=Y*K-Z*Q,j=Y*G-W*Q,O=Z*G-W*K,D=F*M-q*V,_=F*R-H*V,C=F*L-z*V,S=q*R-H*M,I=q*L-z*M,f=H*L-z*R;return w*f-P*I+N*S+v*C-j*_+O*D}function bC(J,X,Y){var Z=X[0],W=X[1],$=X[2],Q=X[3],K=X[4],G=X[5],F=X[6],q=X[7],H=X[8],z=X[9],V=X[10],M=X[11],R=X[12],L=X[13],w=X[14],P=X[15],N=Y[0],v=Y[1],j=Y[2],O=Y[3];return J[0]=N*Z+v*K+j*H+O*R,J[1]=N*W+v*G+j*z+O*L,J[2]=N*$+v*F+j*V+O*w,J[3]=N*Q+v*q+j*M+O*P,N=Y[4],v=Y[5],j=Y[6],O=Y[7],J[4]=N*Z+v*K+j*H+O*R,J[5]=N*W+v*G+j*z+O*L,J[6]=N*$+v*F+j*V+O*w,J[7]=N*Q+v*q+j*M+O*P,N=Y[8],v=Y[9],j=Y[10],O=Y[11],J[8]=N*Z+v*K+j*H+O*R,J[9]=N*W+v*G+j*z+O*L,J[10]=N*$+v*F+j*V+O*w,J[11]=N*Q+v*q+j*M+O*P,N=Y[12],v=Y[13],j=Y[14],O=Y[15],J[12]=N*Z+v*K+j*H+O*R,J[13]=N*W+v*G+j*z+O*L,J[14]=N*$+v*F+j*V+O*w,J[15]=N*Q+v*q+j*M+O*P,J}function JZ0(J,X,Y){var Z=Y[0],W=Y[1],$=Y[2],Q,K,G,F,q,H,z,V,M,R,L,w;if(X===J)J[12]=X[0]*Z+X[4]*W+X[8]*$+X[12],J[13]=X[1]*Z+X[5]*W+X[9]*$+X[13],J[14]=X[2]*Z+X[6]*W+X[10]*$+X[14],J[15]=X[3]*Z+X[7]*W+X[11]*$+X[15];else Q=X[0],K=X[1],G=X[2],F=X[3],q=X[4],H=X[5],z=X[6],V=X[7],M=X[8],R=X[9],L=X[10],w=X[11],J[0]=Q,J[1]=K,J[2]=G,J[3]=F,J[4]=q,J[5]=H,J[6]=z,J[7]=V,J[8]=M,J[9]=R,J[10]=L,J[11]=w,J[12]=Q*Z+q*W+M*$+X[12],J[13]=K*Z+H*W+R*$+X[13],J[14]=G*Z+z*W+L*$+X[14],J[15]=F*Z+V*W+w*$+X[15];return J}function XZ0(J,X,Y){var Z=Y[0],W=Y[1],$=Y[2];return J[0]=X[0]*Z,J[1]=X[1]*Z,J[2]=X[2]*Z,J[3]=X[3]*Z,J[4]=X[4]*W,J[5]=X[5]*W,J[6]=X[6]*W,J[7]=X[7]*W,J[8]=X[8]*$,J[9]=X[9]*$,J[10]=X[10]*$,J[11]=X[11]*$,J[12]=X[12],J[13]=X[13],J[14]=X[14],J[15]=X[15],J}function YZ0(J,X,Y,Z){var W=Z[0],$=Z[1],Q=Z[2],K=Math.hypot(W,$,Q),G,F,q,H,z,V,M,R,L,w,P,N,v,j,O,D,_,C,S,I,f,y,h,g;if(K<l)return null;if(K=1/K,W*=K,$*=K,Q*=K,G=Math.sin(Y),F=Math.cos(Y),q=1-F,H=X[0],z=X[1],V=X[2],M=X[3],R=X[4],L=X[5],w=X[6],P=X[7],N=X[8],v=X[9],j=X[10],O=X[11],D=W*W*q+F,_=$*W*q+Q*G,C=Q*W*q-$*G,S=W*$*q-Q*G,I=$*$*q+F,f=Q*$*q+W*G,y=W*Q*q+$*G,h=$*Q*q-W*G,g=Q*Q*q+F,J[0]=H*D+R*_+N*C,J[1]=z*D+L*_+v*C,J[2]=V*D+w*_+j*C,J[3]=M*D+P*_+O*C,J[4]=H*S+R*I+N*f,J[5]=z*S+L*I+v*f,J[6]=V*S+w*I+j*f,J[7]=M*S+P*I+O*f,J[8]=H*y+R*h+N*g,J[9]=z*y+L*h+v*g,J[10]=V*y+w*h+j*g,J[11]=M*y+P*h+O*g,X!==J)J[12]=X[12],J[13]=X[13],J[14]=X[14],J[15]=X[15];return J}function ZZ0(J,X,Y){var Z=Math.sin(Y),W=Math.cos(Y),$=X[4],Q=X[5],K=X[6],G=X[7],F=X[8],q=X[9],H=X[10],z=X[11];if(X!==J)J[0]=X[0],J[1]=X[1],J[2]=X[2],J[3]=X[3],J[12]=X[12],J[13]=X[13],J[14]=X[14],J[15]=X[15];return J[4]=$*W+F*Z,J[5]=Q*W+q*Z,J[6]=K*W+H*Z,J[7]=G*W+z*Z,J[8]=F*W-$*Z,J[9]=q*W-Q*Z,J[10]=H*W-K*Z,J[11]=z*W-G*Z,J}function WZ0(J,X,Y){var Z=Math.sin(Y),W=Math.cos(Y),$=X[0],Q=X[1],K=X[2],G=X[3],F=X[8],q=X[9],H=X[10],z=X[11];if(X!==J)J[4]=X[4],J[5]=X[5],J[6]=X[6],J[7]=X[7],J[12]=X[12],J[13]=X[13],J[14]=X[14],J[15]=X[15];return J[0]=$*W-F*Z,J[1]=Q*W-q*Z,J[2]=K*W-H*Z,J[3]=G*W-z*Z,J[8]=$*Z+F*W,J[9]=Q*Z+q*W,J[10]=K*Z+H*W,J[11]=G*Z+z*W,J}function $Z0(J,X,Y){var Z=Math.sin(Y),W=Math.cos(Y),$=X[0],Q=X[1],K=X[2],G=X[3],F=X[4],q=X[5],H=X[6],z=X[7];if(X!==J)J[8]=X[8],J[9]=X[9],J[10]=X[10],J[11]=X[11],J[12]=X[12],J[13]=X[13],J[14]=X[14],J[15]=X[15];return J[0]=$*W+F*Z,J[1]=Q*W+q*Z,J[2]=K*W+H*Z,J[3]=G*W+z*Z,J[4]=F*W-$*Z,J[5]=q*W-Q*Z,J[6]=H*W-K*Z,J[7]=z*W-G*Z,J}function QZ0(J,X){return J[0]=1,J[1]=0,J[2]=0,J[3]=0,J[4]=0,J[5]=1,J[6]=0,J[7]=0,J[8]=0,J[9]=0,J[10]=1,J[11]=0,J[12]=X[0],J[13]=X[1],J[14]=X[2],J[15]=1,J}function KZ0(J,X){return J[0]=X[0],J[1]=0,J[2]=0,J[3]=0,J[4]=0,J[5]=X[1],J[6]=0,J[7]=0,J[8]=0,J[9]=0,J[10]=X[2],J[11]=0,J[12]=0,J[13]=0,J[14]=0,J[15]=1,J}function GZ0(J,X,Y){var Z=Y[0],W=Y[1],$=Y[2],Q=Math.hypot(Z,W,$),K,G,F;if(Q<l)return null;return Q=1/Q,Z*=Q,W*=Q,$*=Q,K=Math.sin(X),G=Math.cos(X),F=1-G,J[0]=Z*Z*F+G,J[1]=W*Z*F+$*K,J[2]=$*Z*F-W*K,J[3]=0,J[4]=Z*W*F-$*K,J[5]=W*W*F+G,J[6]=$*W*F+Z*K,J[7]=0,J[8]=Z*$*F+W*K,J[9]=W*$*F-Z*K,J[10]=$*$*F+G,J[11]=0,J[12]=0,J[13]=0,J[14]=0,J[15]=1,J}function FZ0(J,X){var Y=Math.sin(X),Z=Math.cos(X);return J[0]=1,J[1]=0,J[2]=0,J[3]=0,J[4]=0,J[5]=Z,J[6]=Y,J[7]=0,J[8]=0,J[9]=-Y,J[10]=Z,J[11]=0,J[12]=0,J[13]=0,J[14]=0,J[15]=1,J}function qZ0(J,X){var Y=Math.sin(X),Z=Math.cos(X);return J[0]=Z,J[1]=0,J[2]=-Y,J[3]=0,J[4]=0,J[5]=1,J[6]=0,J[7]=0,J[8]=Y,J[9]=0,J[10]=Z,J[11]=0,J[12]=0,J[13]=0,J[14]=0,J[15]=1,J}function HZ0(J,X){var Y=Math.sin(X),Z=Math.cos(X);return J[0]=Z,J[1]=Y,J[2]=0,J[3]=0,J[4]=-Y,J[5]=Z,J[6]=0,J[7]=0,J[8]=0,J[9]=0,J[10]=1,J[11]=0,J[12]=0,J[13]=0,J[14]=0,J[15]=1,J}function pC(J,X,Y){var Z=X[0],W=X[1],$=X[2],Q=X[3],K=Z+Z,G=W+W,F=$+$,q=Z*K,H=Z*G,z=Z*F,V=W*G,M=W*F,R=$*F,L=Q*K,w=Q*G,P=Q*F;return J[0]=1-(V+R),J[1]=H+P,J[2]=z-w,J[3]=0,J[4]=H-P,J[5]=1-(q+R),J[6]=M+L,J[7]=0,J[8]=z+w,J[9]=M-L,J[10]=1-(q+V),J[11]=0,J[12]=Y[0],J[13]=Y[1],J[14]=Y[2],J[15]=1,J}function zZ0(J,X){var Y=new Q0(3),Z=-X[0],W=-X[1],$=-X[2],Q=X[3],K=X[4],G=X[5],F=X[6],q=X[7],H=Z*Z+W*W+$*$+Q*Q;if(H>0)Y[0]=(K*Q+q*Z+G*$-F*W)*2/H,Y[1]=(G*Q+q*W+F*Z-K*$)*2/H,Y[2]=(F*Q+q*$+K*W-G*Z)*2/H;else Y[0]=(K*Q+q*Z+G*$-F*W)*2,Y[1]=(G*Q+q*W+F*Z-K*$)*2,Y[2]=(F*Q+q*$+K*W-G*Z)*2;return pC(J,X,Y),J}function LZ0(J,X){return J[0]=X[12],J[1]=X[13],J[2]=X[14],J}function AC(J,X){var Y=X[0],Z=X[1],W=X[2],$=X[4],Q=X[5],K=X[6],G=X[8],F=X[9],q=X[10];return J[0]=Math.hypot(Y,Z,W),J[1]=Math.hypot($,Q,K),J[2]=Math.hypot(G,F,q),J}function UZ0(J,X){var Y=new Q0(3);AC(Y,X);var Z=1/Y[0],W=1/Y[1],$=1/Y[2],Q=X[0]*Z,K=X[1]*W,G=X[2]*$,F=X[4]*Z,q=X[5]*W,H=X[6]*$,z=X[8]*Z,V=X[9]*W,M=X[10]*$,R=Q+q+M,L=0;if(R>0)L=Math.sqrt(R+1)*2,J[3]=0.25*L,J[0]=(H-V)/L,J[1]=(z-G)/L,J[2]=(K-F)/L;else if(Q>q&&Q>M)L=Math.sqrt(1+Q-q-M)*2,J[3]=(H-V)/L,J[0]=0.25*L,J[1]=(K+F)/L,J[2]=(z+G)/L;else if(q>M)L=Math.sqrt(1+q-Q-M)*2,J[3]=(z-G)/L,J[0]=(K+F)/L,J[1]=0.25*L,J[2]=(H+V)/L;else L=Math.sqrt(1+M-Q-q)*2,J[3]=(K-F)/L,J[0]=(z+G)/L,J[1]=(H+V)/L,J[2]=0.25*L;return J}function VZ0(J,X,Y,Z){var W=X[0],$=X[1],Q=X[2],K=X[3],G=W+W,F=$+$,q=Q+Q,H=W*G,z=W*F,V=W*q,M=$*F,R=$*q,L=Q*q,w=K*G,P=K*F,N=K*q,v=Z[0],j=Z[1],O=Z[2];return J[0]=(1-(M+L))*v,J[1]=(z+N)*v,J[2]=(V-P)*v,J[3]=0,J[4]=(z-N)*j,J[5]=(1-(H+L))*j,J[6]=(R+w)*j,J[7]=0,J[8]=(V+P)*O,J[9]=(R-w)*O,J[10]=(1-(H+M))*O,J[11]=0,J[12]=Y[0],J[13]=Y[1],J[14]=Y[2],J[15]=1,J}function MZ0(J,X,Y,Z,W){var $=X[0],Q=X[1],K=X[2],G=X[3],F=$+$,q=Q+Q,H=K+K,z=$*F,V=$*q,M=$*H,R=Q*q,L=Q*H,w=K*H,P=G*F,N=G*q,v=G*H,j=Z[0],O=Z[1],D=Z[2],_=W[0],C=W[1],S=W[2],I=(1-(R+w))*j,f=(V+v)*j,y=(M-N)*j,h=(V-v)*O,g=(1-(z+w))*O,J0=(L+P)*O,p0=(M+N)*D,a0=(L-P)*D,Q6=(1-(z+R))*D;return J[0]=I,J[1]=f,J[2]=y,J[3]=0,J[4]=h,J[5]=g,J[6]=J0,J[7]=0,J[8]=p0,J[9]=a0,J[10]=Q6,J[11]=0,J[12]=Y[0]+_-(I*_+h*C+p0*S),J[13]=Y[1]+C-(f*_+g*C+a0*S),J[14]=Y[2]+S-(y*_+J0*C+Q6*S),J[15]=1,J}function RZ0(J,X){var Y=X[0],Z=X[1],W=X[2],$=X[3],Q=Y+Y,K=Z+Z,G=W+W,F=Y*Q,q=Z*Q,H=Z*K,z=W*Q,V=W*K,M=W*G,R=$*Q,L=$*K,w=$*G;return J[0]=1-H-M,J[1]=q+w,J[2]=z-L,J[3]=0,J[4]=q-w,J[5]=1-F-M,J[6]=V+R,J[7]=0,J[8]=z+L,J[9]=V-R,J[10]=1-F-H,J[11]=0,J[12]=0,J[13]=0,J[14]=0,J[15]=1,J}function wZ0(J,X,Y,Z,W,$,Q){var K=1/(Y-X),G=1/(W-Z),F=1/($-Q);return J[0]=$*2*K,J[1]=0,J[2]=0,J[3]=0,J[4]=0,J[5]=$*2*G,J[6]=0,J[7]=0,J[8]=(Y+X)*K,J[9]=(W+Z)*G,J[10]=(Q+$)*F,J[11]=-1,J[12]=0,J[13]=0,J[14]=Q*$*2*F,J[15]=0,J}function yC(J,X,Y,Z,W){var $=1/Math.tan(X/2),Q;if(J[0]=$/Y,J[1]=0,J[2]=0,J[3]=0,J[4]=0,J[5]=$,J[6]=0,J[7]=0,J[8]=0,J[9]=0,J[11]=-1,J[12]=0,J[13]=0,J[15]=0,W!=null&&W!==1/0)Q=1/(Z-W),J[10]=(W+Z)*Q,J[14]=2*W*Z*Q;else J[10]=-1,J[14]=-2*Z;return J}var OZ0=yC;function xZ0(J,X,Y,Z,W){var $=1/Math.tan(X/2),Q;if(J[0]=$/Y,J[1]=0,J[2]=0,J[3]=0,J[4]=0,J[5]=$,J[6]=0,J[7]=0,J[8]=0,J[9]=0,J[11]=-1,J[12]=0,J[13]=0,J[15]=0,W!=null&&W!==1/0)Q=1/(Z-W),J[10]=W*Q,J[14]=W*Z*Q;else J[10]=-1,J[14]=-Z;return J}function PZ0(J,X,Y,Z){var W=Math.tan(X.upDegrees*Math.PI/180),$=Math.tan(X.downDegrees*Math.PI/180),Q=Math.tan(X.leftDegrees*Math.PI/180),K=Math.tan(X.rightDegrees*Math.PI/180),G=2/(Q+K),F=2/(W+$);return J[0]=G,J[1]=0,J[2]=0,J[3]=0,J[4]=0,J[5]=F,J[6]=0,J[7]=0,J[8]=-((Q-K)*G*0.5),J[9]=(W-$)*F*0.5,J[10]=Z/(Y-Z),J[11]=-1,J[12]=0,J[13]=0,J[14]=Z*Y/(Y-Z),J[15]=0,J}function gC(J,X,Y,Z,W,$,Q){var K=1/(X-Y),G=1/(Z-W),F=1/($-Q);return J[0]=-2*K,J[1]=0,J[2]=0,J[3]=0,J[4]=0,J[5]=-2*G,J[6]=0,J[7]=0,J[8]=0,J[9]=0,J[10]=2*F,J[11]=0,J[12]=(X+Y)*K,J[13]=(W+Z)*G,J[14]=(Q+$)*F,J[15]=1,J}var NZ0=gC;function vZ0(J,X,Y,Z,W,$,Q){var K=1/(X-Y),G=1/(Z-W),F=1/($-Q);return J[0]=-2*K,J[1]=0,J[2]=0,J[3]=0,J[4]=0,J[5]=-2*G,J[6]=0,J[7]=0,J[8]=0,J[9]=0,J[10]=F,J[11]=0,J[12]=(X+Y)*K,J[13]=(W+Z)*G,J[14]=$*F,J[15]=1,J}function BZ0(J,X,Y,Z){var W,$,Q,K,G,F,q,H,z,V,M=X[0],R=X[1],L=X[2],w=Z[0],P=Z[1],N=Z[2],v=Y[0],j=Y[1],O=Y[2];if(Math.abs(M-v)<l&&Math.abs(R-j)<l&&Math.abs(L-O)<l)return fC(J);if(q=M-v,H=R-j,z=L-O,V=1/Math.hypot(q,H,z),q*=V,H*=V,z*=V,W=P*z-N*H,$=N*q-w*z,Q=w*H-P*q,V=Math.hypot(W,$,Q),!V)W=0,$=0,Q=0;else V=1/V,W*=V,$*=V,Q*=V;if(K=H*Q-z*$,G=z*W-q*Q,F=q*$-H*W,V=Math.hypot(K,G,F),!V)K=0,G=0,F=0;else V=1/V,K*=V,G*=V,F*=V;return J[0]=W,J[1]=K,J[2]=q,J[3]=0,J[4]=$,J[5]=G,J[6]=H,J[7]=0,J[8]=Q,J[9]=F,J[10]=z,J[11]=0,J[12]=-(W*M+$*R+Q*L),J[13]=-(K*M+G*R+F*L),J[14]=-(q*M+H*R+z*L),J[15]=1,J}function jZ0(J,X,Y,Z){var W=X[0],$=X[1],Q=X[2],K=Z[0],G=Z[1],F=Z[2],q=W-Y[0],H=$-Y[1],z=Q-Y[2],V=q*q+H*H+z*z;if(V>0)V=1/Math.sqrt(V),q*=V,H*=V,z*=V;var M=G*z-F*H,R=F*q-K*z,L=K*H-G*q;if(V=M*M+R*R+L*L,V>0)V=1/Math.sqrt(V),M*=V,R*=V,L*=V;return J[0]=M,J[1]=R,J[2]=L,J[3]=0,J[4]=H*L-z*R,J[5]=z*M-q*L,J[6]=q*R-H*M,J[7]=0,J[8]=q,J[9]=H,J[10]=z,J[11]=0,J[12]=W,J[13]=$,J[14]=Q,J[15]=1,J}function kZ0(J){return"mat4("+J[0]+", "+J[1]+", "+J[2]+", "+J[3]+", "+J[4]+", "+J[5]+", "+J[6]+", "+J[7]+", "+J[8]+", "+J[9]+", "+J[10]+", "+J[11]+", "+J[12]+", "+J[13]+", "+J[14]+", "+J[15]+")"}function TZ0(J){return Math.hypot(J[0],J[1],J[2],J[3],J[4],J[5],J[6],J[7],J[8],J[9],J[10],J[11],J[12],J[13],J[14],J[15])}function DZ0(J,X,Y){return J[0]=X[0]+Y[0],J[1]=X[1]+Y[1],J[2]=X[2]+Y[2],J[3]=X[3]+Y[3],J[4]=X[4]+Y[4],J[5]=X[5]+Y[5],J[6]=X[6]+Y[6],J[7]=X[7]+Y[7],J[8]=X[8]+Y[8],J[9]=X[9]+Y[9],J[10]=X[10]+Y[10],J[11]=X[11]+Y[11],J[12]=X[12]+Y[12],J[13]=X[13]+Y[13],J[14]=X[14]+Y[14],J[15]=X[15]+Y[15],J}function cC(J,X,Y){return J[0]=X[0]-Y[0],J[1]=X[1]-Y[1],J[2]=X[2]-Y[2],J[3]=X[3]-Y[3],J[4]=X[4]-Y[4],J[5]=X[5]-Y[5],J[6]=X[6]-Y[6],J[7]=X[7]-Y[7],J[8]=X[8]-Y[8],J[9]=X[9]-Y[9],J[10]=X[10]-Y[10],J[11]=X[11]-Y[11],J[12]=X[12]-Y[12],J[13]=X[13]-Y[13],J[14]=X[14]-Y[14],J[15]=X[15]-Y[15],J}function _Z0(J,X,Y){return J[0]=X[0]*Y,J[1]=X[1]*Y,J[2]=X[2]*Y,J[3]=X[3]*Y,J[4]=X[4]*Y,J[5]=X[5]*Y,J[6]=X[6]*Y,J[7]=X[7]*Y,J[8]=X[8]*Y,J[9]=X[9]*Y,J[10]=X[10]*Y,J[11]=X[11]*Y,J[12]=X[12]*Y,J[13]=X[13]*Y,J[14]=X[14]*Y,J[15]=X[15]*Y,J}function EZ0(J,X,Y,Z){return J[0]=X[0]+Y[0]*Z,J[1]=X[1]+Y[1]*Z,J[2]=X[2]+Y[2]*Z,J[3]=X[3]+Y[3]*Z,J[4]=X[4]+Y[4]*Z,J[5]=X[5]+Y[5]*Z,J[6]=X[6]+Y[6]*Z,J[7]=X[7]+Y[7]*Z,J[8]=X[8]+Y[8]*Z,J[9]=X[9]+Y[9]*Z,J[10]=X[10]+Y[10]*Z,J[11]=X[11]+Y[11]*Z,J[12]=X[12]+Y[12]*Z,J[13]=X[13]+Y[13]*Z,J[14]=X[14]+Y[14]*Z,J[15]=X[15]+Y[15]*Z,J}function CZ0(J,X){return J[0]===X[0]&&J[1]===X[1]&&J[2]===X[2]&&J[3]===X[3]&&J[4]===X[4]&&J[5]===X[5]&&J[6]===X[6]&&J[7]===X[7]&&J[8]===X[8]&&J[9]===X[9]&&J[10]===X[10]&&J[11]===X[11]&&J[12]===X[12]&&J[13]===X[13]&&J[14]===X[14]&&J[15]===X[15]}function SZ0(J,X){var Y=J[0],Z=J[1],W=J[2],$=J[3],Q=J[4],K=J[5],G=J[6],F=J[7],q=J[8],H=J[9],z=J[10],V=J[11],M=J[12],R=J[13],L=J[14],w=J[15],P=X[0],N=X[1],v=X[2],j=X[3],O=X[4],D=X[5],_=X[6],C=X[7],S=X[8],I=X[9],f=X[10],y=X[11],h=X[12],g=X[13],J0=X[14],p0=X[15];return Math.abs(Y-P)<=l*Math.max(1,Math.abs(Y),Math.abs(P))&&Math.abs(Z-N)<=l*Math.max(1,Math.abs(Z),Math.abs(N))&&Math.abs(W-v)<=l*Math.max(1,Math.abs(W),Math.abs(v))&&Math.abs($-j)<=l*Math.max(1,Math.abs($),Math.abs(j))&&Math.abs(Q-O)<=l*Math.max(1,Math.abs(Q),Math.abs(O))&&Math.abs(K-D)<=l*Math.max(1,Math.abs(K),Math.abs(D))&&Math.abs(G-_)<=l*Math.max(1,Math.abs(G),Math.abs(_))&&Math.abs(F-C)<=l*Math.max(1,Math.abs(F),Math.abs(C))&&Math.abs(q-S)<=l*Math.max(1,Math.abs(q),Math.abs(S))&&Math.abs(H-I)<=l*Math.max(1,Math.abs(H),Math.abs(I))&&Math.abs(z-f)<=l*Math.max(1,Math.abs(z),Math.abs(f))&&Math.abs(V-y)<=l*Math.max(1,Math.abs(V),Math.abs(y))&&Math.abs(M-h)<=l*Math.max(1,Math.abs(M),Math.abs(h))&&Math.abs(R-g)<=l*Math.max(1,Math.abs(R),Math.abs(g))&&Math.abs(L-J0)<=l*Math.max(1,Math.abs(L),Math.abs(J0))&&Math.abs(w-p0)<=l*Math.max(1,Math.abs(w),Math.abs(p0))}var IZ0=bC,hZ0=cC;var N0={};k6(N0,{str:()=>EW0,squaredLength:()=>MS,sqrLen:()=>yW0,sqlerp:()=>lW0,slerp:()=>H$,setAxisAngle:()=>GS,setAxes:()=>uW0,set:()=>hW0,scale:()=>LS,rotationTo:()=>mW0,rotateZ:()=>vW0,rotateY:()=>NW0,rotateX:()=>PW0,random:()=>kW0,pow:()=>jW0,normalize:()=>kH,multiply:()=>FS,mul:()=>bW0,ln:()=>HS,lerp:()=>pW0,length:()=>VS,len:()=>AW0,invert:()=>TW0,identity:()=>wW0,getAxisAngle:()=>OW0,getAngle:()=>xW0,fromValues:()=>SW0,fromMat3:()=>zS,fromEuler:()=>_W0,exp:()=>qS,exactEquals:()=>gW0,equals:()=>cW0,dot:()=>US,create:()=>jH,copy:()=>IW0,conjugate:()=>DW0,clone:()=>CW0,calculateW:()=>BW0,add:()=>fW0});var W0={};k6(W0,{zero:()=>$W0,transformQuat:()=>JW0,transformMat4:()=>tZ0,transformMat3:()=>eZ0,subtract:()=>lC,sub:()=>FW0,str:()=>QW0,squaredLength:()=>aC,squaredDistance:()=>nC,sqrLen:()=>UW0,sqrDist:()=>LW0,set:()=>pZ0,scaleAndAdd:()=>dZ0,scale:()=>uZ0,round:()=>lZ0,rotateZ:()=>ZW0,rotateY:()=>YW0,rotateX:()=>XW0,random:()=>rZ0,normalize:()=>vH,negate:()=>iZ0,multiply:()=>uC,mul:()=>qW0,min:()=>cZ0,max:()=>mZ0,lerp:()=>aZ0,length:()=>mC,len:()=>BH,inverse:()=>nZ0,hermite:()=>sZ0,fromValues:()=>F$,forEach:()=>VW0,floor:()=>gZ0,exactEquals:()=>KW0,equals:()=>GW0,dot:()=>q$,divide:()=>dC,div:()=>HW0,distance:()=>iC,dist:()=>zW0,cross:()=>bJ,create:()=>G$,copy:()=>bZ0,clone:()=>fZ0,ceil:()=>yZ0,bezier:()=>oZ0,angle:()=>WW0,add:()=>AZ0});function G$(){var J=new Q0(3);if(Q0!=Float32Array)J[0]=0,J[1]=0,J[2]=0;return J}function fZ0(J){var X=new Q0(3);return X[0]=J[0],X[1]=J[1],X[2]=J[2],X}function mC(J){var X=J[0],Y=J[1],Z=J[2];return Math.hypot(X,Y,Z)}function F$(J,X,Y){var Z=new Q0(3);return Z[0]=J,Z[1]=X,Z[2]=Y,Z}function bZ0(J,X){return J[0]=X[0],J[1]=X[1],J[2]=X[2],J}function pZ0(J,X,Y,Z){return J[0]=X,J[1]=Y,J[2]=Z,J}function AZ0(J,X,Y){return J[0]=X[0]+Y[0],J[1]=X[1]+Y[1],J[2]=X[2]+Y[2],J}function lC(J,X,Y){return J[0]=X[0]-Y[0],J[1]=X[1]-Y[1],J[2]=X[2]-Y[2],J}function uC(J,X,Y){return J[0]=X[0]*Y[0],J[1]=X[1]*Y[1],J[2]=X[2]*Y[2],J}function dC(J,X,Y){return J[0]=X[0]/Y[0],J[1]=X[1]/Y[1],J[2]=X[2]/Y[2],J}function yZ0(J,X){return J[0]=Math.ceil(X[0]),J[1]=Math.ceil(X[1]),J[2]=Math.ceil(X[2]),J}function gZ0(J,X){return J[0]=Math.floor(X[0]),J[1]=Math.floor(X[1]),J[2]=Math.floor(X[2]),J}function cZ0(J,X,Y){return J[0]=Math.min(X[0],Y[0]),J[1]=Math.min(X[1],Y[1]),J[2]=Math.min(X[2],Y[2]),J}function mZ0(J,X,Y){return J[0]=Math.max(X[0],Y[0]),J[1]=Math.max(X[1],Y[1]),J[2]=Math.max(X[2],Y[2]),J}function lZ0(J,X){return J[0]=Math.round(X[0]),J[1]=Math.round(X[1]),J[2]=Math.round(X[2]),J}function uZ0(J,X,Y){return J[0]=X[0]*Y,J[1]=X[1]*Y,J[2]=X[2]*Y,J}function dZ0(J,X,Y,Z){return J[0]=X[0]+Y[0]*Z,J[1]=X[1]+Y[1]*Z,J[2]=X[2]+Y[2]*Z,J}function iC(J,X){var Y=X[0]-J[0],Z=X[1]-J[1],W=X[2]-J[2];return Math.hypot(Y,Z,W)}function nC(J,X){var Y=X[0]-J[0],Z=X[1]-J[1],W=X[2]-J[2];return Y*Y+Z*Z+W*W}function aC(J){var X=J[0],Y=J[1],Z=J[2];return X*X+Y*Y+Z*Z}function iZ0(J,X){return J[0]=-X[0],J[1]=-X[1],J[2]=-X[2],J}function nZ0(J,X){return J[0]=1/X[0],J[1]=1/X[1],J[2]=1/X[2],J}function vH(J,X){var Y=X[0],Z=X[1],W=X[2],$=Y*Y+Z*Z+W*W;if($>0)$=1/Math.sqrt($);return J[0]=X[0]*$,J[1]=X[1]*$,J[2]=X[2]*$,J}function q$(J,X){return J[0]*X[0]+J[1]*X[1]+J[2]*X[2]}function bJ(J,X,Y){var Z=X[0],W=X[1],$=X[2],Q=Y[0],K=Y[1],G=Y[2];return J[0]=W*G-$*K,J[1]=$*Q-Z*G,J[2]=Z*K-W*Q,J}function aZ0(J,X,Y,Z){var W=X[0],$=X[1],Q=X[2];return J[0]=W+Z*(Y[0]-W),J[1]=$+Z*(Y[1]-$),J[2]=Q+Z*(Y[2]-Q),J}function sZ0(J,X,Y,Z,W,$){var Q=$*$,K=Q*(2*$-3)+1,G=Q*($-2)+$,F=Q*($-1),q=Q*(3-2*$);return J[0]=X[0]*K+Y[0]*G+Z[0]*F+W[0]*q,J[1]=X[1]*K+Y[1]*G+Z[1]*F+W[1]*q,J[2]=X[2]*K+Y[2]*G+Z[2]*F+W[2]*q,J}function oZ0(J,X,Y,Z,W,$){var Q=1-$,K=Q*Q,G=$*$,F=K*Q,q=3*$*K,H=3*G*Q,z=G*$;return J[0]=X[0]*F+Y[0]*q+Z[0]*H+W[0]*z,J[1]=X[1]*F+Y[1]*q+Z[1]*H+W[1]*z,J[2]=X[2]*F+Y[2]*q+Z[2]*H+W[2]*z,J}function rZ0(J,X){X=X||1;var Y=d6()*2*Math.PI,Z=d6()*2-1,W=Math.sqrt(1-Z*Z)*X;return J[0]=Math.cos(Y)*W,J[1]=Math.sin(Y)*W,J[2]=Z*X,J}function tZ0(J,X,Y){var Z=X[0],W=X[1],$=X[2],Q=Y[3]*Z+Y[7]*W+Y[11]*$+Y[15];return Q=Q||1,J[0]=(Y[0]*Z+Y[4]*W+Y[8]*$+Y[12])/Q,J[1]=(Y[1]*Z+Y[5]*W+Y[9]*$+Y[13])/Q,J[2]=(Y[2]*Z+Y[6]*W+Y[10]*$+Y[14])/Q,J}function eZ0(J,X,Y){var Z=X[0],W=X[1],$=X[2];return J[0]=Z*Y[0]+W*Y[3]+$*Y[6],J[1]=Z*Y[1]+W*Y[4]+$*Y[7],J[2]=Z*Y[2]+W*Y[5]+$*Y[8],J}function JW0(J,X,Y){var Z=Y[0],W=Y[1],$=Y[2],Q=Y[3],K=X[0],G=X[1],F=X[2],q=W*F-$*G,H=$*K-Z*F,z=Z*G-W*K,V=W*z-$*H,M=$*q-Z*z,R=Z*H-W*q,L=Q*2;return q*=L,H*=L,z*=L,V*=2,M*=2,R*=2,J[0]=K+q+V,J[1]=G+H+M,J[2]=F+z+R,J}function XW0(J,X,Y,Z){var W=[],$=[];return W[0]=X[0]-Y[0],W[1]=X[1]-Y[1],W[2]=X[2]-Y[2],$[0]=W[0],$[1]=W[1]*Math.cos(Z)-W[2]*Math.sin(Z),$[2]=W[1]*Math.sin(Z)+W[2]*Math.cos(Z),J[0]=$[0]+Y[0],J[1]=$[1]+Y[1],J[2]=$[2]+Y[2],J}function YW0(J,X,Y,Z){var W=[],$=[];return W[0]=X[0]-Y[0],W[1]=X[1]-Y[1],W[2]=X[2]-Y[2],$[0]=W[2]*Math.sin(Z)+W[0]*Math.cos(Z),$[1]=W[1],$[2]=W[2]*Math.cos(Z)-W[0]*Math.sin(Z),J[0]=$[0]+Y[0],J[1]=$[1]+Y[1],J[2]=$[2]+Y[2],J}function ZW0(J,X,Y,Z){var W=[],$=[];return W[0]=X[0]-Y[0],W[1]=X[1]-Y[1],W[2]=X[2]-Y[2],$[0]=W[0]*Math.cos(Z)-W[1]*Math.sin(Z),$[1]=W[0]*Math.sin(Z)+W[1]*Math.cos(Z),$[2]=W[2],J[0]=$[0]+Y[0],J[1]=$[1]+Y[1],J[2]=$[2]+Y[2],J}function WW0(J,X){var Y=J[0],Z=J[1],W=J[2],$=X[0],Q=X[1],K=X[2],G=Math.sqrt(Y*Y+Z*Z+W*W),F=Math.sqrt($*$+Q*Q+K*K),q=G*F,H=q&&q$(J,X)/q;return Math.acos(Math.min(Math.max(H,-1),1))}function $W0(J){return J[0]=0,J[1]=0,J[2]=0,J}function QW0(J){return"vec3("+J[0]+", "+J[1]+", "+J[2]+")"}function KW0(J,X){return J[0]===X[0]&&J[1]===X[1]&&J[2]===X[2]}function GW0(J,X){var Y=J[0],Z=J[1],W=J[2],$=X[0],Q=X[1],K=X[2];return Math.abs(Y-$)<=l*Math.max(1,Math.abs(Y),Math.abs($))&&Math.abs(Z-Q)<=l*Math.max(1,Math.abs(Z),Math.abs(Q))&&Math.abs(W-K)<=l*Math.max(1,Math.abs(W),Math.abs(K))}var FW0=lC,qW0=uC,HW0=dC,zW0=iC,LW0=nC,BH=mC,UW0=aC,VW0=function(){var J=G$();return function(X,Y,Z,W,$,Q){var K,G;if(!Y)Y=3;if(!Z)Z=0;if(W)G=Math.min(W*Y+Z,X.length);else G=X.length;for(K=Z;K<G;K+=Y)J[0]=X[K],J[1]=X[K+1],J[2]=X[K+2],$(J,J,Q),X[K]=J[0],X[K+1]=J[1],X[K+2]=J[2];return X}}();function MW0(){var J=new Q0(4);if(Q0!=Float32Array)J[0]=0,J[1]=0,J[2]=0,J[3]=0;return J}function sC(J){var X=new Q0(4);return X[0]=J[0],X[1]=J[1],X[2]=J[2],X[3]=J[3],X}function oC(J,X,Y,Z){var W=new Q0(4);return W[0]=J,W[1]=X,W[2]=Y,W[3]=Z,W}function rC(J,X){return J[0]=X[0],J[1]=X[1],J[2]=X[2],J[3]=X[3],J}function tC(J,X,Y,Z,W){return J[0]=X,J[1]=Y,J[2]=Z,J[3]=W,J}function eC(J,X,Y){return J[0]=X[0]+Y[0],J[1]=X[1]+Y[1],J[2]=X[2]+Y[2],J[3]=X[3]+Y[3],J}function JS(J,X,Y){return J[0]=X[0]*Y,J[1]=X[1]*Y,J[2]=X[2]*Y,J[3]=X[3]*Y,J}function XS(J){var X=J[0],Y=J[1],Z=J[2],W=J[3];return Math.hypot(X,Y,Z,W)}function YS(J){var X=J[0],Y=J[1],Z=J[2],W=J[3];return X*X+Y*Y+Z*Z+W*W}function ZS(J,X){var Y=X[0],Z=X[1],W=X[2],$=X[3],Q=Y*Y+Z*Z+W*W+$*$;if(Q>0)Q=1/Math.sqrt(Q);return J[0]=Y*Q,J[1]=Z*Q,J[2]=W*Q,J[3]=$*Q,J}function WS(J,X){return J[0]*X[0]+J[1]*X[1]+J[2]*X[2]+J[3]*X[3]}function $S(J,X,Y,Z){var W=X[0],$=X[1],Q=X[2],K=X[3];return J[0]=W+Z*(Y[0]-W),J[1]=$+Z*(Y[1]-$),J[2]=Q+Z*(Y[2]-Q),J[3]=K+Z*(Y[3]-K),J}function QS(J,X){return J[0]===X[0]&&J[1]===X[1]&&J[2]===X[2]&&J[3]===X[3]}function KS(J,X){var Y=J[0],Z=J[1],W=J[2],$=J[3],Q=X[0],K=X[1],G=X[2],F=X[3];return Math.abs(Y-Q)<=l*Math.max(1,Math.abs(Y),Math.abs(Q))&&Math.abs(Z-K)<=l*Math.max(1,Math.abs(Z),Math.abs(K))&&Math.abs(W-G)<=l*Math.max(1,Math.abs(W),Math.abs(G))&&Math.abs($-F)<=l*Math.max(1,Math.abs($),Math.abs(F))}var U_0=function(){var J=MW0();return function(X,Y,Z,W,$,Q){var K,G;if(!Y)Y=4;if(!Z)Z=0;if(W)G=Math.min(W*Y+Z,X.length);else G=X.length;for(K=Z;K<G;K+=Y)J[0]=X[K],J[1]=X[K+1],J[2]=X[K+2],J[3]=X[K+3],$(J,J,Q),X[K]=J[0],X[K+1]=J[1],X[K+2]=J[2],X[K+3]=J[3];return X}}();function jH(){var J=new Q0(4);if(Q0!=Float32Array)J[0]=0,J[1]=0,J[2]=0;return J[3]=1,J}function wW0(J){return J[0]=0,J[1]=0,J[2]=0,J[3]=1,J}function GS(J,X,Y){Y=Y*0.5;var Z=Math.sin(Y);return J[0]=Z*X[0],J[1]=Z*X[1],J[2]=Z*X[2],J[3]=Math.cos(Y),J}function OW0(J,X){var Y=Math.acos(X[3])*2,Z=Math.sin(Y/2);if(Z>l)J[0]=X[0]/Z,J[1]=X[1]/Z,J[2]=X[2]/Z;else J[0]=1,J[1]=0,J[2]=0;return Y}function xW0(J,X){var Y=US(J,X);return Math.acos(2*Y*Y-1)}function FS(J,X,Y){var Z=X[0],W=X[1],$=X[2],Q=X[3],K=Y[0],G=Y[1],F=Y[2],q=Y[3];return J[0]=Z*q+Q*K+W*F-$*G,J[1]=W*q+Q*G+$*K-Z*F,J[2]=$*q+Q*F+Z*G-W*K,J[3]=Q*q-Z*K-W*G-$*F,J}function PW0(J,X,Y){Y*=0.5;var Z=X[0],W=X[1],$=X[2],Q=X[3],K=Math.sin(Y),G=Math.cos(Y);return J[0]=Z*G+Q*K,J[1]=W*G+$*K,J[2]=$*G-W*K,J[3]=Q*G-Z*K,J}function NW0(J,X,Y){Y*=0.5;var Z=X[0],W=X[1],$=X[2],Q=X[3],K=Math.sin(Y),G=Math.cos(Y);return J[0]=Z*G-$*K,J[1]=W*G+Q*K,J[2]=$*G+Z*K,J[3]=Q*G-W*K,J}function vW0(J,X,Y){Y*=0.5;var Z=X[0],W=X[1],$=X[2],Q=X[3],K=Math.sin(Y),G=Math.cos(Y);return J[0]=Z*G+W*K,J[1]=W*G-Z*K,J[2]=$*G+Q*K,J[3]=Q*G-$*K,J}function BW0(J,X){var Y=X[0],Z=X[1],W=X[2];return J[0]=Y,J[1]=Z,J[2]=W,J[3]=Math.sqrt(Math.abs(1-Y*Y-Z*Z-W*W)),J}function qS(J,X){var Y=X[0],Z=X[1],W=X[2],$=X[3],Q=Math.sqrt(Y*Y+Z*Z+W*W),K=Math.exp($),G=Q>0?K*Math.sin(Q)/Q:0;return J[0]=Y*G,J[1]=Z*G,J[2]=W*G,J[3]=K*Math.cos(Q),J}function HS(J,X){var Y=X[0],Z=X[1],W=X[2],$=X[3],Q=Math.sqrt(Y*Y+Z*Z+W*W),K=Q>0?Math.atan2(Q,$)/Q:0;return J[0]=Y*K,J[1]=Z*K,J[2]=W*K,J[3]=0.5*Math.log(Y*Y+Z*Z+W*W+$*$),J}function jW0(J,X,Y){return HS(J,X),LS(J,J,Y),qS(J,J),J}function H$(J,X,Y,Z){var W=X[0],$=X[1],Q=X[2],K=X[3],G=Y[0],F=Y[1],q=Y[2],H=Y[3],z,V,M,R,L;if(V=W*G+$*F+Q*q+K*H,V<0)V=-V,G=-G,F=-F,q=-q,H=-H;if(1-V>l)z=Math.acos(V),M=Math.sin(z),R=Math.sin((1-Z)*z)/M,L=Math.sin(Z*z)/M;else R=1-Z,L=Z;return J[0]=R*W+L*G,J[1]=R*$+L*F,J[2]=R*Q+L*q,J[3]=R*K+L*H,J}function kW0(J){var X=d6(),Y=d6(),Z=d6(),W=Math.sqrt(1-X),$=Math.sqrt(X);return J[0]=W*Math.sin(2*Math.PI*Y),J[1]=W*Math.cos(2*Math.PI*Y),J[2]=$*Math.sin(2*Math.PI*Z),J[3]=$*Math.cos(2*Math.PI*Z),J}function TW0(J,X){var Y=X[0],Z=X[1],W=X[2],$=X[3],Q=Y*Y+Z*Z+W*W+$*$,K=Q?1/Q:0;return J[0]=-Y*K,J[1]=-Z*K,J[2]=-W*K,J[3]=$*K,J}function DW0(J,X){return J[0]=-X[0],J[1]=-X[1],J[2]=-X[2],J[3]=X[3],J}function zS(J,X){var Y=X[0]+X[4]+X[8],Z;if(Y>0)Z=Math.sqrt(Y+1),J[3]=0.5*Z,Z=0.5/Z,J[0]=(X[5]-X[7])*Z,J[1]=(X[6]-X[2])*Z,J[2]=(X[1]-X[3])*Z;else{var W=0;if(X[4]>X[0])W=1;if(X[8]>X[W*3+W])W=2;var $=(W+1)%3,Q=(W+2)%3;Z=Math.sqrt(X[W*3+W]-X[$*3+$]-X[Q*3+Q]+1),J[W]=0.5*Z,Z=0.5/Z,J[3]=(X[$*3+Q]-X[Q*3+$])*Z,J[$]=(X[$*3+W]+X[W*3+$])*Z,J[Q]=(X[Q*3+W]+X[W*3+Q])*Z}return J}function _W0(J,X,Y,Z){var W=0.5*Math.PI/180;X*=W,Y*=W,Z*=W;var $=Math.sin(X),Q=Math.cos(X),K=Math.sin(Y),G=Math.cos(Y),F=Math.sin(Z),q=Math.cos(Z);return J[0]=$*G*q-Q*K*F,J[1]=Q*K*q+$*G*F,J[2]=Q*G*F-$*K*q,J[3]=Q*G*q+$*K*F,J}function EW0(J){return"quat("+J[0]+", "+J[1]+", "+J[2]+", "+J[3]+")"}var CW0=sC,SW0=oC,IW0=rC,hW0=tC,fW0=eC,bW0=FS,LS=JS,US=WS,pW0=$S,VS=XS,AW0=VS,MS=YS,yW0=MS,kH=ZS,gW0=QS,cW0=KS,mW0=function(){var J=G$(),X=F$(1,0,0),Y=F$(0,1,0);return function(Z,W,$){var Q=q$(W,$);if(Q<-0.999999){if(bJ(J,X,W),BH(J)<0.000001)bJ(J,Y,W);return vH(J,J),GS(Z,J,Math.PI),Z}else if(Q>0.999999)return Z[0]=0,Z[1]=0,Z[2]=0,Z[3]=1,Z;else return bJ(J,W,$),Z[0]=J[0],Z[1]=J[1],Z[2]=J[2],Z[3]=1+Q,kH(Z,Z)}}(),lW0=function(){var J=jH(),X=jH();return function(Y,Z,W,$,Q,K){return H$(J,Z,Q,K),H$(X,W,$,K),H$(Y,J,X,2*K*(1-K)),Y}}(),uW0=function(){var J=NH();return function(X,Y,Z,W){return J[0]=Z[0],J[3]=Z[1],J[6]=Z[2],J[1]=W[0],J[4]=W[1],J[7]=W[2],J[2]=-Y[0],J[5]=-Y[1],J[8]=-Y[2],kH(X,zS(X,J))}}();var q0={};k6(q0,{zero:()=>M$0,transformMat4:()=>L$0,transformMat3:()=>z$0,transformMat2d:()=>H$0,transformMat2:()=>q$0,subtract:()=>wS,sub:()=>P$0,str:()=>R$0,squaredLength:()=>BS,squaredDistance:()=>NS,sqrLen:()=>k$0,sqrDist:()=>j$0,set:()=>aW0,scaleAndAdd:()=>Y$0,scale:()=>X$0,round:()=>J$0,rotate:()=>U$0,random:()=>F$0,normalize:()=>$$0,negate:()=>Z$0,multiply:()=>OS,mul:()=>N$0,min:()=>tW0,max:()=>eW0,lerp:()=>G$0,length:()=>vS,len:()=>x$0,inverse:()=>W$0,fromValues:()=>iW0,forEach:()=>T$0,floor:()=>rW0,exactEquals:()=>w$0,equals:()=>O$0,dot:()=>Q$0,divide:()=>xS,div:()=>v$0,distance:()=>PS,dist:()=>B$0,cross:()=>K$0,create:()=>RS,copy:()=>nW0,clone:()=>dW0,ceil:()=>oW0,angle:()=>V$0,add:()=>sW0});function RS(){var J=new Q0(2);if(Q0!=Float32Array)J[0]=0,J[1]=0;return J}function dW0(J){var X=new Q0(2);return X[0]=J[0],X[1]=J[1],X}function iW0(J,X){var Y=new Q0(2);return Y[0]=J,Y[1]=X,Y}function nW0(J,X){return J[0]=X[0],J[1]=X[1],J}function aW0(J,X,Y){return J[0]=X,J[1]=Y,J}function sW0(J,X,Y){return J[0]=X[0]+Y[0],J[1]=X[1]+Y[1],J}function wS(J,X,Y){return J[0]=X[0]-Y[0],J[1]=X[1]-Y[1],J}function OS(J,X,Y){return J[0]=X[0]*Y[0],J[1]=X[1]*Y[1],J}function xS(J,X,Y){return J[0]=X[0]/Y[0],J[1]=X[1]/Y[1],J}function oW0(J,X){return J[0]=Math.ceil(X[0]),J[1]=Math.ceil(X[1]),J}function rW0(J,X){return J[0]=Math.floor(X[0]),J[1]=Math.floor(X[1]),J}function tW0(J,X,Y){return J[0]=Math.min(X[0],Y[0]),J[1]=Math.min(X[1],Y[1]),J}function eW0(J,X,Y){return J[0]=Math.max(X[0],Y[0]),J[1]=Math.max(X[1],Y[1]),J}function J$0(J,X){return J[0]=Math.round(X[0]),J[1]=Math.round(X[1]),J}function X$0(J,X,Y){return J[0]=X[0]*Y,J[1]=X[1]*Y,J}function Y$0(J,X,Y,Z){return J[0]=X[0]+Y[0]*Z,J[1]=X[1]+Y[1]*Z,J}function PS(J,X){var Y=X[0]-J[0],Z=X[1]-J[1];return Math.hypot(Y,Z)}function NS(J,X){var Y=X[0]-J[0],Z=X[1]-J[1];return Y*Y+Z*Z}function vS(J){var X=J[0],Y=J[1];return Math.hypot(X,Y)}function BS(J){var X=J[0],Y=J[1];return X*X+Y*Y}function Z$0(J,X){return J[0]=-X[0],J[1]=-X[1],J}function W$0(J,X){return J[0]=1/X[0],J[1]=1/X[1],J}function $$0(J,X){var Y=X[0],Z=X[1],W=Y*Y+Z*Z;if(W>0)W=1/Math.sqrt(W);return J[0]=X[0]*W,J[1]=X[1]*W,J}function Q$0(J,X){return J[0]*X[0]+J[1]*X[1]}function K$0(J,X,Y){var Z=X[0]*Y[1]-X[1]*Y[0];return J[0]=J[1]=0,J[2]=Z,J}function G$0(J,X,Y,Z){var W=X[0],$=X[1];return J[0]=W+Z*(Y[0]-W),J[1]=$+Z*(Y[1]-$),J}function F$0(J,X){X=X||1;var Y=d6()*2*Math.PI;return J[0]=Math.cos(Y)*X,J[1]=Math.sin(Y)*X,J}function q$0(J,X,Y){var Z=X[0],W=X[1];return J[0]=Y[0]*Z+Y[2]*W,J[1]=Y[1]*Z+Y[3]*W,J}function H$0(J,X,Y){var Z=X[0],W=X[1];return J[0]=Y[0]*Z+Y[2]*W+Y[4],J[1]=Y[1]*Z+Y[3]*W+Y[5],J}function z$0(J,X,Y){var Z=X[0],W=X[1];return J[0]=Y[0]*Z+Y[3]*W+Y[6],J[1]=Y[1]*Z+Y[4]*W+Y[7],J}function L$0(J,X,Y){var Z=X[0],W=X[1];return J[0]=Y[0]*Z+Y[4]*W+Y[12],J[1]=Y[1]*Z+Y[5]*W+Y[13],J}function U$0(J,X,Y,Z){var W=X[0]-Y[0],$=X[1]-Y[1],Q=Math.sin(Z),K=Math.cos(Z);return J[0]=W*K-$*Q+Y[0],J[1]=W*Q+$*K+Y[1],J}function V$0(J,X){var Y=J[0],Z=J[1],W=X[0],$=X[1],Q=Math.sqrt(Y*Y+Z*Z)*Math.sqrt(W*W+$*$),K=Q&&(Y*W+Z*$)/Q;return Math.acos(Math.min(Math.max(K,-1),1))}function M$0(J){return J[0]=0,J[1]=0,J}function R$0(J){return"vec2("+J[0]+", "+J[1]+")"}function w$0(J,X){return J[0]===X[0]&&J[1]===X[1]}function O$0(J,X){var Y=J[0],Z=J[1],W=X[0],$=X[1];return Math.abs(Y-W)<=l*Math.max(1,Math.abs(Y),Math.abs(W))&&Math.abs(Z-$)<=l*Math.max(1,Math.abs(Z),Math.abs($))}var x$0=vS,P$0=wS,N$0=OS,v$0=xS,B$0=PS,j$0=NS,k$0=BS,T$0=function(){var J=RS();return function(X,Y,Z,W,$,Q){var K,G;if(!Y)Y=2;if(!Z)Z=0;if(W)G=Math.min(W*Y+Z,X.length);else G=X.length;for(K=Z;K<G;K+=Y)J[0]=X[K],J[1]=X[K+1],$(J,J,Q),X[K]=J[0],X[K+1]=J[1];return X}}();class A9 extends Float32Array{constructor(J,X,Y,Z){super([J,X,Y,Z])}get determinant(){return e0.determinant(this)}get frobeniusNorm(){return e0.frob(this)}static create(){let J=new A9(0,0,0,0);return e0.identity(J),J}static fromRotation(J){let X=A9.create();return e0.fromRotation(X,J),X}static fromScaling(J){let X=A9.create();return e0.fromScaling(X,J),X}add(J){return e0.add(this,this,J),this}adjoint(){return e0.adjoint(this,this),this}clone(){return new A9(this[0],this[1],this[2],this[3])}copy(J){return e0.copy(this,J),this}equals(J){return e0.equals(this,J)}exactEquals(J){return e0.exactEquals(this,J)}identity(){return e0.identity(this),this}invert(){return e0.invert(this,this),this}multiply(J){return e0.mul(this,this,J),this}multiplyScalar(J){return e0.multiplyScalar(this,this,J),this}rotate(J){return e0.rotate(this,this,J),this}subtract(J){return e0.sub(this,this,J),this}toString(){return`[${this[0]},${this[1]}][${this[2]},${this[3]}]`}transpose(){return e0.transpose(this,this),this}}class i6 extends Float32Array{constructor(J,X,Y,Z,W,$,Q,K,G){super([J,X,Y,Z,W,$,Q,K,G])}get determinant(){return h0.determinant(this)}get frobeniusNorm(){return h0.frob(this)}static create(){let J=new i6(0,0,0,0,0,0,0,0,0);return h0.identity(J),J}static fromMatrix4(J){let X=i6.create();return h0.fromMat4(X,J),X}static fromQuaternion(J){let X=i6.create();return h0.fromQuat(X,J),X}static fromRotation(J){let X=i6.create();return h0.fromRotation(X,J),X}static fromScaling(J){let X=i6.create();return h0.fromScaling(X,J),X}static fromTranslation(J){let X=i6.create();return h0.fromTranslation(X,J),X}add(J){return h0.add(this,this,J),this}adjoint(){return h0.adjoint(this,this),this}clone(){return new i6(this[0],this[1],this[2],this[3],this[4],this[5],this[6],this[7],this[8])}copy(J){return h0.copy(this,J),this}equals(J){return h0.equals(this,J)}exactEquals(J){return h0.exactEquals(this,J)}identity(){return h0.identity(this),this}invert(){return h0.invert(this,this),this}multiply(J){return h0.mul(this,this,J),this}multiplyScalar(J){return h0.multiplyScalar(this,this,J),this}transformVector(J){return J.transformMatrix3(this)}projection(J,X){return h0.projection(this,J,X),this}rotate(J){return h0.rotate(this,this,J),this}subtract(J){return h0.sub(this,this,J),this}toString(){return`[${this[0]},${this[1]},${this[2]}][${this[3]},${this[4]},${this[5]}][${this[6]},${this[7]},${this[8]}]`}transpose(){return h0.transpose(this,this),this}}class E8 extends Float32Array{constructor(J,X,Y,Z,W,$,Q,K,G,F,q,H,z,V,M,R){super([J,X,Y,Z,W,$,Q,K,G,F,q,H,z,V,M,R])}get determinant(){return Y0.determinant(this)}get frobeniusNorm(){return Y0.frob(this)}static create(){let J=new E8(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);return Y0.identity(J),J}static fromQuaternion(J){let X=E8.create();return Y0.fromQuat(X,J),X}static fromRotation(J,X){let Y=E8.create();return Y0.fromRotation(Y,J,X),Y}static fromRotationTranslation(J,X){let Y=E8.create();return Y0.fromRotationTranslation(Y,J,X),Y}static fromRotationTranslationScale(J,X,Y){let Z=E8.create();return Y0.fromRotationTranslationScale(Z,J,X,Y),Z}static fromRotationTranslationScaleOrigin(J,X,Y,Z){let W=E8.create();return Y0.fromRotationTranslationScaleOrigin(W,J,X,Y,Z),W}static fromScaling(J){let X=E8.create();return Y0.fromScaling(X,J),X}static fromTranslation(J){let X=E8.create();return Y0.fromTranslation(X,J),X}static fromXRotation(J){let X=E8.create();return Y0.fromXRotation(X,J),X}static fromYRotation(J){let X=E8.create();return Y0.fromYRotation(X,J),X}static fromZRotation(J){let X=E8.create();return Y0.fromZRotation(X,J),X}add(J){return Y0.add(this,this,J),this}adjoint(){return Y0.adjoint(this,this),this}clone(){return new E8(this[0],this[1],this[2],this[3],this[4],this[5],this[6],this[7],this[8],this[9],this[10],this[11],this[12],this[13],this[14],this[15])}copy(J){return Y0.copy(this,J),this}equals(J){return Y0.equals(this,J)}exactEquals(J){return Y0.exactEquals(this,J)}frustrum(J,X,Y,Z,W,$){return Y0.frustum(this,J,X,Y,Z,W,$),this}identity(){return Y0.identity(this),this}invert(){return Y0.invert(this,this),this}lookAt(J,X,Y){return Y0.lookAt(this,J,X,Y),this}multiply(J){return Y0.mul(this,this,J),this}multiplyScalar(J){return Y0.multiplyScalar(this,this,J),this}orthographic(J,X,Y,Z,W,$){return Y0.ortho(this,J,X,Y,Z,W,$),this}perspective(J,X,Y,Z){return Y0.perspective(this,J,X,Y,Z),this}rotate(J,X){return Y0.rotate(this,this,J,X),this}rotateX(J){return Y0.rotateX(this,this,J),this}rotateY(J){return Y0.rotateY(this,this,J),this}rotateZ(J){return Y0.rotateZ(this,this,J),this}scale(J){return Y0.scale(this,this,J),this}subtract(J){return Y0.sub(this,this,J),this}targetTo(J,X,Y){return Y0.targetTo(this,J,X,Y),this}toString(){return`[${this[0]},${this[1]},${this[2]},${this[3]}][${this[4]},${this[5]},${this[6]},${this[7]}][${this[8]},${this[9]},${this[10]},${this[11]}][${this[12]},${this[13]},${this[14]},${this[15]}]`}translate(J){return Y0.translate(this,this,J),this}transpose(){return Y0.transpose(this,this),this}}class J4 extends Float32Array{constructor(J,X,Y,Z){super([J,X,Y,Z])}get length(){return N0.length(this)}get squaredLength(){return N0.squaredLength(this)}get magnitude(){return N0.length(this)}get squaredMagnitude(){return N0.squaredLength(this)}get x(){return this[0]}set x(J){this[0]=J}get y(){return this[1]}set y(J){this[1]=J}get z(){return this[2]}set z(J){this[2]=J}get w(){return this[3]}set w(J){this[3]=J}static fromEuler(J,X,Y){let Z=N0.fromEuler(new Float32Array(4),J,X,Y);return new J4(Z[0],Z[1],Z[2],Z[3])}static fromQuaternionLike(J){return new J4(J.x,J.y,J.z,J.w)}clone(){return new J4(this.x,this.y,this.z,this.w)}conjugate(){return N0.conjugate(this,this),this}copy(J){return N0.copy(this,J),this}dot(J){return N0.dot(this,J)}exponential(){return N0.exp(this,this),this}equals(J){return N0.equals(this,J)}exactEquals(J){return N0.exactEquals(this,J)}getAngle(J){return N0.getAngle(this,J)}identity(){return N0.identity(this),this}invert(){return N0.invert(this,this),this}lerp(J,X){return N0.lerp(this,this,J,X),this}logarithm(){return N0.ln(this,this),this}multiply(J){return N0.multiply(this,this,J),this}transformVector(J){return J.transformQuaternion(this)}normalize(){return N0.normalize(this,this),this}power(J){return N0.pow(this,this,J),this}randomize(){return N0.random(this),this}rotateX(J){return N0.rotateX(this,this,J),this}rotateY(J){return N0.rotateY(this,this,J),this}rotateZ(J){return N0.rotateZ(this,this,J),this}scale(J){return N0.scale(this,this,J),this}setAxisAngle(J,X){return N0.setAxisAngle(this,J,X),this}slerp(J,X){return N0.slerp(this,this,J,X),this}toString(){return`${this.x},${this.y},${this.z},${this.w}`}}class pJ extends Float32Array{constructor(J,X){super([J,X])}get length(){return q0.length(this)}get squaredLength(){return q0.squaredLength(this)}get magnitude(){return q0.length(this)}get squaredMagnitude(){return q0.squaredLength(this)}get x(){return this[0]}set x(J){this[0]=J}get y(){return this[1]}set y(J){this[1]=J}static create(){return new pJ(0,0)}add(J){return q0.add(this,this,J),this}angle(J){return q0.angle(this,J)}ceil(){return q0.ceil(this,this),this}clone(){return new pJ(this.x,this.y)}copy(J){return q0.copy(this,J),this}distance(J){return q0.distance(this,J)}divide(J){return q0.divide(this,this,J),this}dot(J){return q0.dot(this,J)}equals(J){return q0.equals(this,J)}exactEquals(J){return q0.exactEquals(this,J)}floor(){return q0.floor(this,this),this}invert(){return q0.inverse(this,this),this}lerp(J,X){return q0.lerp(this,this,J,X),this}max(J){return q0.max(this,this,J),this}min(J){return q0.min(this,this,J),this}multiply(J){return q0.mul(this,this,J),this}negate(){return q0.negate(this,this),this}normalize(){return q0.normalize(this,this),this}randomize(J){return q0.random(this,J),this}rotate(J,X){return q0.rotate(this,this,J,X),this}round(){return q0.round(this,this),this}scale(J){return q0.scale(this,this,J),this}scaleAndAdd(J,X){return q0.scaleAndAdd(this,this,J,X),this}subtract(J){return q0.sub(this,this,J),this}toString(){return`${this.x},${this.y}`}transformMatrix2(J){return q0.transformMat2(this,this,J),this}transformMatrix3(J){return q0.transformMat3(this,this,J),this}transformMatrix4(J){return q0.transformMat4(this,this,J),this}zero(){return q0.zero(this),this}}class X4 extends Float32Array{constructor(J,X,Y){super([J,X,Y])}get length(){return W0.length(this)}get squaredLength(){return W0.squaredLength(this)}get magnitude(){return W0.length(this)}get squaredMagnitude(){return W0.squaredLength(this)}get x(){return this[0]}set x(J){this[0]=J}get y(){return this[1]}set y(J){this[1]=J}get z(){return this[2]}set z(J){this[2]=J}static create(){return new X4(0,0,0)}static fromVector3Like(J){return new X4(J.x,J.y,J.z)}add(J){return W0.add(this,this,J),this}ceil(){return W0.ceil(this,this),this}clone(){return new X4(this.x,this.y,this.z)}copy(J){return W0.copy(this,J),this}cross(J){return W0.cross(this,this,J),this}distance(J){return W0.distance(this,J)}divide(J){return W0.div(this,this,J),this}dot(J){return W0.dot(this,J)}equals(J){return W0.equals(this,J)}exactEquals(J){return W0.exactEquals(this,J)}floor(){return W0.floor(this,this),this}invert(){return W0.inverse(this,this),this}lerp(J,X){return W0.lerp(this,this,J,X),this}max(J){return W0.max(this,this,J),this}min(J){return W0.min(this,this,J),this}multiply(J){return W0.mul(this,this,J),this}negate(){return W0.negate(this,this),this}normalize(){return W0.normalize(this,this),this}randomize(J){return W0.random(this,J),this}rotateX(J,X){return W0.rotateX(this,this,J,X),this}rotateY(J,X){return W0.rotateY(this,this,J,X),this}rotateZ(J,X){return W0.rotateZ(this,this,J,X),this}round(){return W0.round(this,this),this}scale(J){return W0.scale(this,this,J),this}scaleAndAdd(J,X){return W0.scaleAndAdd(this,this,J,X),this}subtract(J){return W0.sub(this,this,J),this}toString(){return`${this.x},${this.y},${this.z}`}transformMatrix3(J){return W0.transformMat3(this,this,J),this}transformMatrix4(J){return W0.transformMat4(this,this,J),this}transformQuaternion(J){return W0.transformQuat(this,this,J),this}zero(){return W0.zero(this),this}}var v0=function(J,X,Y,Z){function W($){return $ instanceof Y?$:new Y(function(Q){Q($)})}return new(Y||(Y=Promise))(function($,Q){function K(q){try{F(Z.next(q))}catch(H){Q(H)}}function G(q){try{F(Z.throw(q))}catch(H){Q(H)}}function F(q){q.done?$(q.value):W(q.value).then(K,G)}F((Z=Z.apply(J,X||[])).next())})},P0=function(J,X){var Y={label:0,sent:function(){if($[0]&1)throw $[1];return $[1]},trys:[],ops:[]},Z,W,$,Q=Object.create((typeof Iterator==="function"?Iterator:Object).prototype);return Q.next=K(0),Q.throw=K(1),Q.return=K(2),typeof Symbol==="function"&&(Q[Symbol.iterator]=function(){return this}),Q;function K(F){return function(q){return G([F,q])}}function G(F){if(Z)throw new TypeError("Generator is already executing.");while(Q&&(Q=0,F[0]&&(Y=0)),Y)try{if(Z=1,W&&($=F[0]&2?W.return:F[0]?W.throw||(($=W.return)&&$.call(W),0):W.next)&&!($=$.call(W,F[1])).done)return $;if(W=0,$)F=[F[0]&2,$.value];switch(F[0]){case 0:case 1:$=F;break;case 4:return Y.label++,{value:F[1],done:!1};case 5:Y.label++,W=F[1],F=[0];continue;case 7:F=Y.ops.pop(),Y.trys.pop();continue;default:if(($=Y.trys,!($=$.length>0&&$[$.length-1]))&&(F[0]===6||F[0]===2)){Y=0;continue}if(F[0]===3&&(!$||F[1]>$[0]&&F[1]<$[3])){Y.label=F[1];break}if(F[0]===6&&Y.label<$[1]){Y.label=$[1],$=F;break}if($&&Y.label<$[2]){Y.label=$[2],Y.ops.push(F);break}if($[2])Y.ops.pop();Y.trys.pop();continue}F=X.call(J,Y)}catch(q){F=[6,q],W=0}finally{Z=$=0}if(F[0]&5)throw F[1];return{value:F[0]?F[1]:void 0,done:!0}}},c8=function(J,X){var Y=typeof Symbol==="function"&&J[Symbol.iterator];if(!Y)return J;var Z=Y.call(J),W,$=[],Q;try{while((X===void 0||X-- >0)&&!(W=Z.next()).done)$.push(W.value)}catch(K){Q={error:K}}finally{try{if(W&&!W.done&&(Y=Z.return))Y.call(Z)}finally{if(Q)throw Q.error}}return $},$6=function(J,X,Y){if(Y||arguments.length===2){for(var Z=0,W=X.length,$;Z<W;Z++)if($||!(Z in X)){if(!$)$=Array.prototype.slice.call(X,0,Z);$[Z]=X[Z]}}return J.concat($||Array.prototype.slice.call(X))},jS=function(J){var X=typeof Symbol==="function"&&Symbol.iterator,Y=X&&J[X],Z=0;if(Y)return Y.call(J);if(J&&typeof J.length==="number")return{next:function(){if(J&&Z>=J.length)J=void 0;return{value:J&&J[Z++],done:!J}}};throw new TypeError(X?"Object is not iterable.":"Symbol.iterator is not defined.")},P_0=function(){function J(X){if(X===void 0)X=J.minComparator;var Y=this;this.compare=X,this.heapArray=[],this._limit=0,this.offer=this.add,this.element=this.peek,this.poll=this.pop,this._invertedCompare=function(Z,W){return Y.compare(Z,W).then(function($){return-1*$})}}return J.getChildrenIndexOf=function(X){return[X*2+1,X*2+2]},J.getParentIndexOf=function(X){if(X<=0)return-1;var Y=X%2?1:2;return Math.floor((X-Y)/2)},J.getSiblingIndexOf=function(X){if(X<=0)return-1;var Y=X%2?1:-1;return X+Y},J.minComparator=function(X,Y){return v0(this,void 0,void 0,function(){return P0(this,function(Z){if(X>Y)return[2,1];else if(X<Y)return[2,-1];else return[2,0]})})},J.maxComparator=function(X,Y){return v0(this,void 0,void 0,function(){return P0(this,function(Z){if(Y>X)return[2,1];else if(Y<X)return[2,-1];else return[2,0]})})},J.minComparatorNumber=function(X,Y){return v0(this,void 0,void 0,function(){return P0(this,function(Z){return[2,X-Y]})})},J.maxComparatorNumber=function(X,Y){return v0(this,void 0,void 0,function(){return P0(this,function(Z){return[2,Y-X]})})},J.defaultIsEqual=function(X,Y){return v0(this,void 0,void 0,function(){return P0(this,function(Z){return[2,X===Y]})})},J.print=function(X){function Y(q){var H=J.getParentIndexOf(q);return Math.floor(Math.log2(H+1))}function Z(q,H){var z="";for(;H>0;--H)z+=q;return z}var W=0,$=[],Q=Y(X.length-1)+2,K=0;while(W<X.length){var G=Y(W)+1;if(W===0)G=0;var F=String(X.get(W));if(F.length>K)K=F.length;$[G]=$[G]||[],$[G].push(F),W+=1}return $.map(function(q,H){var z=Math.pow(2,Q-H)-1;return Z(" ",Math.floor(z/2)*K)+q.map(function(V){var M=(K-V.length)/2;return Z(" ",Math.ceil(M))+V+Z(" ",Math.floor(M))}).join(Z(" ",z*K))}).join(`
385
+ `),X.write($),X.end();return}X.setNoDelay(!0),this.emitWithGlobal("WEBSERVER.UPGRADE",{req:J,socket:X,head:Y})};_onError=(J)=>{this.emitWithGlobal("WEBSERVER.ERROR",{error:J})};_onStopped=()=>{this.emitWithGlobal("WEBSERVER.STOPPED",{})}}class i1 extends s{static instance=new i1;_wss;_wrtcMinPort=process.env.WRTC_MIN_PORT?parseInt(process.env.WRTC_MIN_PORT):40000;_wrtcMaxPort=process.env.WRTC_MAX_PORT?parseInt(process.env.WRTC_MAX_PORT):41023;_wrtcPublicIpv4=process.env.NODE_ENV==="production"?process.env.WRTC_PUBLIC_IPV4:"127.0.0.1";_wrtcPublicIpv6=process.env.NODE_ENV==="production"?process.env.WRTC_PUBLIC_IPV6:"::";_wrtcRouter=null;_wrtcWorker=null;constructor(){super();this._wss=new gX0({noServer:!0}),this._wss.on("connection",this._onConnection),this._wss.on("error",this._onError),this._initWrtc().catch((J)=>{E.warning(`Socket._constructor(): Failed to initialize WebRTC, falling back to Websockets. This can be ignored for local development. Error: ${J.message}`)}),m8.on("WEBSERVER.UPGRADE",({req:J,socket:X,head:Y})=>this._onUpgrade(J,X,Y))}get isWrtcEnabled(){return this._wrtcWorker&&!this._wrtcWorker.died&&this._wrtcRouter}get wrtcRouter(){return this._wrtcRouter}async createWrtcTransports(){if(!this.isWrtcEnabled)E.fatalError("Socket.createWrtcTransports(): WebRTC not enabled, unable to create transports.");let J={listenIps:[{ip:"::",announcedIp:this._wrtcPublicIpv6},{ip:"0.0.0.0",announcedIp:this._wrtcPublicIpv4}],preferUdp:!0,enableSctp:!0,enableTcp:!1},X=await this._wrtcRouter.createDirectTransport(),Y=await this._wrtcRouter.createWebRtcTransport(J),Z=await this._wrtcRouter.createWebRtcTransport(J);return{directTransport:X,clientServerTransport:Y,serverClientTransport:Z}}async _initWrtc(){if(!this._wrtcPublicIpv4||!this._wrtcPublicIpv6)throw new Error("Socket._initWrtc(): WebRTC disabled, falling back to Websockets. Env variables WRTC_PUBLIC_IPV4 and WRTC_PUBLIC_IPV6 must be set in production");this._wrtcWorker=await cX0.createWorker({rtcMinPort:this._wrtcMinPort,rtcMaxPort:this._wrtcMaxPort}),this._wrtcWorker.on("died",this._onWrtcWorkerDied),this._wrtcRouter=await this._wrtcWorker.createRouter({mediaCodecs:[]}),console.log("Socket._initWrtc(): WebRTC enabled and ready!")}_onConnection=(J,X)=>{new h9(J,X)};_onError=(J,X)=>{this.emitWithGlobal("SOCKET.ERROR",{ws:J,error:X})};_onUpgrade=(J,X,Y)=>{this._wss.handleUpgrade(J,X,Y,(Z)=>{this._wss.emit("connection",Z,J)})};_onWrtcWorkerDied=(J)=>{E.warning(`Socket._onWrtcWorkerDied(): WebRTC worker unexpectedly died, falling back to Websockets for all players. Internal error: ${J}`),j6.instance.getConnectedPlayers().forEach((X)=>{X.connection.closeWrtc()}),this._wrtcRouter?.close(),this._wrtcRouter=null,this._wrtcWorker?.close(),this._wrtcWorker=null}}class h9 extends s{static _serializedPackets=new WeakMap;_wrtcDirectTransport=null;_wrtcClientServerTransport=null;_wrtcClientServerDataProducers=[];_wrtcClientServerDataConsumers=[];_wrtcServerClientTransport=null;_wrtcServerClientReliableDataProducer=null;_wrtcServerClientUnreliableDataProducer=null;_wrtcServerClientDataConsumers=[];_ws;id;constructor(J,X){super();if(this.id=Yv(),this._ws=J,this._ws.binaryType="nodebuffer",this._ws.onmessage=(Y)=>this._onMessage(Y.data),this._ws.onclose=this._onWsClose,this._ws.onerror=this._onWsError,this.onPacket(A.PacketId.CONNECTION,this._onConnectionPacket),this.onPacket(A.PacketId.HEARTBEAT,this._onHeartbeatPacket),i1.instance.isWrtcEnabled)this._upgradeToWRTC();m8.emit("CONNECTION.OPENED",{connection:this,req:X})}static serializePackets(J){for(let W of J)if(!A.isValidPacket(W))return E.error(`Connection.serializePackets(): Invalid packet payload: ${JSON.stringify(W)}`);let X=h9._serializedPackets.get(J);if(X)return X;let Y=rF(J),Z=Buffer.from(Y.buffer,Y.byteOffset,Y.byteLength);return h9._serializedPackets.set(J,Z),Z}send(J,X=!0,Y=!1){if(this._ws.readyState!==mX0.OPEN)return E.warning("Connection.send(): Connection is not open.");try{let Z=h9.serializePackets(J);if(!Z)return;if(this._wrtcServerClientTransport?.iceState==="completed"&&!Y)try{(X?this._wrtcServerClientReliableDataProducer:this._wrtcServerClientUnreliableDataProducer).send(Z)}catch{this._ws.send(Z)}else this._ws.send(Z);this.emitWithGlobal("CONNECTION.PACKETS_SENT",{connection:this,packets:J})}catch(Z){E.error(`Connection.send(): Packet send failed. Error: ${Z}`)}}close(){try{this.offAll(),this._ws.close()}catch(J){E.error(`Connection.close(): Connection close failed. Error: ${J}`)}}closeWrtc(){this._closeWrtcClientServerTransport(),this._closeWrtcServerClientTransport()}onPacket(J,X){this.on("CONNECTION.PACKET_RECEIVED",({packet:Y})=>{if(Y[0]===J)X(Y)})}_closeWrtcClientServerTransport(){this._wrtcDirectTransport?.close(),this._wrtcDirectTransport=null,this._wrtcClientServerTransport?.close(),this._wrtcClientServerTransport=null,this._wrtcClientServerDataProducers.forEach((J)=>J.close()),this._wrtcClientServerDataProducers=[],this._wrtcClientServerDataConsumers.forEach((J)=>J.close()),this._wrtcClientServerDataConsumers=[]}_closeWrtcServerClientTransport(){this._wrtcServerClientTransport?.close(),this._wrtcServerClientTransport=null,this._wrtcServerClientDataConsumers.forEach((J)=>J.close()),this._wrtcServerClientDataConsumers=[],this._wrtcServerClientReliableDataProducer?.close(),this._wrtcServerClientReliableDataProducer=null,this._wrtcServerClientUnreliableDataProducer?.close(),this._wrtcServerClientUnreliableDataProducer=null}_onConnectionPacket=async(J)=>{let X=J[1],Y=X.c,Z=X.d;if(Y){let{i:W,d:$}=Y,Q=!1;if(W==this._wrtcClientServerTransport?.id)await this._wrtcClientServerTransport.connect({dtlsParameters:$}),Q=!0;if(W==this._wrtcServerClientTransport?.id)await this._wrtcServerClientTransport.connect({dtlsParameters:$}),Q=!0;if(Q)this.send([A.createPacket(A.bidirectionalPackets.connectionPacketDefinition,{ca:{i:W}})])}if(Z)for(let W of Z){let{s:$,l:Q}=W,K=await this._wrtcClientServerTransport.produceData({label:Q,sctpStreamParameters:$}),G=await this._wrtcDirectTransport.consumeData({dataProducerId:K.id});this._wrtcClientServerDataProducers.push(K),this._wrtcClientServerDataConsumers.push(G),G.on("message",(F)=>this._onMessage(F)),this.send([A.createPacket(A.bidirectionalPackets.connectionPacketDefinition,{pa:{i:K.id,l:Q}})])}};_onHeartbeatPacket=()=>{this.send([A.createPacket(A.bidirectionalPackets.heartbeatPacketDefinition,null)],!0,!0)};_onMessage=(J)=>{try{let X=this._deserialize(J);if(!X)return;this.emitWithGlobal("CONNECTION.PACKET_RECEIVED",{connection:this,packet:X})}catch(X){E.error(`Connection._ws.onmessage(): Error: ${X}`)}};_onWrtcIceStateChange=(J,X)=>{if(["disconnected","closed"].includes(X)){if(J==this._wrtcClientServerTransport)this._closeWrtcClientServerTransport();else if(J==this._wrtcServerClientTransport)this._closeWrtcServerClientTransport()}};_onWsClose=()=>{this.closeWrtc(),this.emitWithGlobal("CONNECTION.CLOSED",{connection:this}),this.offAll()};_onWsError=(J)=>{this.emitWithGlobal("CONNECTION.ERROR",{connection:this,error:J})};_upgradeToWRTC=async()=>{let J=await i1.instance.createWrtcTransports();if(!J)return!1;let{directTransport:X,clientServerTransport:Y,serverClientTransport:Z}=J;this._wrtcDirectTransport=X,this._wrtcClientServerTransport=Y,this._wrtcClientServerTransport.on("icestatechange",(Q)=>{this._onWrtcIceStateChange(this._wrtcClientServerTransport,Q)}),this._wrtcServerClientTransport=Z,this._wrtcServerClientTransport.on("icestatechange",(Q)=>{this._onWrtcIceStateChange(this._wrtcServerClientTransport,Q)}),this._wrtcServerClientReliableDataProducer=await this._wrtcServerClientTransport.produceData({label:"scr",sctpStreamParameters:{streamId:0,ordered:!0}}),this._wrtcServerClientUnreliableDataProducer=await this._wrtcServerClientTransport.produceData({label:"scu",sctpStreamParameters:{streamId:1,ordered:!1,maxRetransmits:0}});let W=await this._wrtcServerClientTransport.consumeData({dataProducerId:this._wrtcServerClientReliableDataProducer.id}),$=await this._wrtcServerClientTransport.consumeData({dataProducerId:this._wrtcServerClientUnreliableDataProducer.id});return this._wrtcServerClientDataConsumers.push(W,$),this.send([A.createPacket(A.bidirectionalPackets.connectionPacketDefinition,{d:[{i:W.id,pi:W.dataProducerId,l:"scr",s:W.sctpStreamParameters},{i:$.id,pi:$.dataProducerId,l:"scu",s:$.sctpStreamParameters}],t:[{i:this._wrtcClientServerTransport.id,f:"cs",d:this._wrtcClientServerTransport.dtlsParameters,ic:this._wrtcClientServerTransport.iceCandidates,ip:this._wrtcClientServerTransport.iceParameters,s:this._wrtcClientServerTransport.sctpParameters},{i:this._wrtcServerClientTransport.id,f:"sc",d:this._wrtcServerClientTransport.dtlsParameters,ic:this._wrtcServerClientTransport.iceCandidates,ip:this._wrtcServerClientTransport.iceParameters,s:this._wrtcServerClientTransport.sctpParameters}]})]),!0};_deserialize(J){let X=X3(J);if(!X||typeof X!=="object"||typeof X[0]!=="number")return E.error(`Connection._deserialize(): Invalid packet format. Packet: ${JSON.stringify(X)}`);if(!A.isValidPacket(X))return E.error(`Connection._deserialize(): Invalid packet payload. Packet: ${JSON.stringify(X)}`);return X}}var xC;((Y)=>{Y.PLAYER_CONNECTED="PLAYER_MANAGER.PLAYER_CONNECTED";Y.PLAYER_DISCONNECTED="PLAYER_MANAGER.PLAYER_DISCONNECTED"})(xC||={});class j6{static instance=new j6;_connectionPlayers=new Map;constructor(){m8.on("CONNECTION.OPENED",({connection:J,req:X})=>{this._onConnectionOpened(J,X.session)}),m8.on("CONNECTION.CLOSED",({connection:J})=>{this._onConnectionClosed(J)})}getConnectedPlayers(){return Array.from(this._connectionPlayers.values())}getConnectedPlayersByWorld(J){return this.getConnectedPlayers().filter((X)=>X.world===J)}getConnectedPlayerByUsername(J){return Array.from(this._connectionPlayers.values()).find((X)=>{return X.username.toLowerCase()===J.toLowerCase()})}_onConnectionOpened(J,X){let Y=new r5(J,X);this._connectionPlayers.set(J,Y),m8.emit("PLAYER_MANAGER.PLAYER_CONNECTED",{player:Y})}_onConnectionClosed(J){let X=this._connectionPlayers.get(J);if(X)X.disconnect(),this._connectionPlayers.delete(J),m8.emit("PLAYER_MANAGER.PLAYER_DISCONNECTED",{player:X});else E.warning(`PlayerManager._onConnectionClosed(): Connection ${J.id} but was not in the PlayerManager._connectionPlayers map.`)}}var W$;((W)=>{W.DYNAMIC="dynamic";W.FIXED="fixed";W.KINEMATIC_POSITION="kinematic_position";W.KINEMATIC_VELOCITY="kinematic_velocity"})(W$||={});var zH=0.001,PC="dynamic";class f9 extends s{_additionalMass=0;_colliders=new Set;_explicitSleep=!1;_enabledPositions={x:!0,y:!0,z:!0};_enabledRotations={x:!0,y:!0,z:!0};_rigidBody;_rigidBodyDesc;_rigidBodyType;_simulation;constructor(J){super();J.type??=PC,this._rigidBodyDesc=this._createRigidBodyDesc(J),this._rigidBodyType=J.type,this._applyRigidBodyOptions(J),this._autoAddToSimulation(J)}get additionalMass(){if(!this._requireNotRemoved("additionalMass"))return 0;return this._additionalMass}get additionalSolverIterations(){if(!this._requireNotRemoved("additionalSolverIterations"))return 0;return this._rigidBody?this._rigidBody.additionalSolverIterations():this._rigidBodyDesc.additionalSolverIterations}get angularDamping(){if(!this._requireNotRemoved("angularDamping"))return 0;return this._rigidBody?this._rigidBody.angularDamping():this._rigidBodyDesc.angularDamping}get angularVelocity(){if(!this._requireNotRemoved("angularVelocity"))return{x:0,y:0,z:0};return this._rigidBody?this._rigidBody.angvel():this._rigidBodyDesc.angvel}get colliders(){return this._colliders}get dominanceGroup(){if(!this._requireNotRemoved("dominanceGroup"))return 0;return this._rigidBody?this._rigidBody.dominanceGroup():this._rigidBodyDesc.dominanceGroup}get directionFromRotation(){let{x:J,y:X,z:Y,w:Z}=this.rotation;return{x:2*(J*Y+Z*X),y:2*(X*Y-Z*J),z:1-2*(J*J+X*X)}}get effectiveAngularInertia(){if(!this._requireNotRemoved("effectiveAngularInertia"))return;return this._rigidBody?this._rigidBody.effectiveAngularInertia():void 0}get effectiveInverseMass(){if(!this._requireNotRemoved("effectiveInverseMass"))return;return this._rigidBody?this._rigidBody.effectiveInvMass():void 0}get effectiveWorldInversePrincipalAngularInertiaSqrt(){if(!this._requireNotRemoved("effectiveWorldInversePrincipalAngularInertiaSqrt"))return;return this._rigidBody?this._rigidBody.effectiveWorldInvInertiaSqrt():void 0}get enabledRotations(){if(!this._requireNotRemoved("enabledRotations"))return{x:!0,y:!0,z:!0};return this._enabledRotations}get enabledPositions(){if(!this._requireNotRemoved("enabledPositions"))return{x:!0,y:!0,z:!0};return this._enabledPositions}get gravityScale(){if(!this._requireNotRemoved("gravityScale"))return 0;return this._rigidBody?this._rigidBody.gravityScale():this._rigidBodyDesc.gravityScale}get inverseMass(){if(!this._requireNotRemoved("inverseMass"))return;return this._rigidBody?this._rigidBody.invMass():void 0}get inversePrincipalAngularInertiaSqrt(){if(!this._requireNotRemoved("inversePrincipalAngularInertiaSqrt"))return;return this._rigidBody?this._rigidBody.invPrincipalInertiaSqrt():void 0}get isCcdEnabled(){if(!this._requireNotRemoved("isCcdEnabled"))return!1;return this._rigidBody?this._rigidBody.isCcdEnabled():this._rigidBodyDesc.ccdEnabled}get isDynamic(){if(!this._requireNotRemoved("isDynamic"))return!1;return this._rigidBodyType==="dynamic"}get isEnabled(){if(!this._requireNotRemoved("isEnabled"))return!1;return this._rigidBody?this._rigidBody.isEnabled():this._rigidBodyDesc.enabled}get isFixed(){if(!this._requireNotRemoved("isFixed"))return!1;return this._rigidBodyType==="fixed"}get isKinematic(){if(!this._requireNotRemoved("isKinematic"))return!1;return["kinematic_position","kinematic_velocity"].includes(this._rigidBodyType)}get isKinematicPositionBased(){if(!this._requireNotRemoved("isKinematicPositionBased"))return!1;return this._rigidBodyType==="kinematic_position"}get isKinematicVelocityBased(){if(!this._requireNotRemoved("isKinematicVelocityBased"))return!1;return this._rigidBodyType==="kinematic_velocity"}get isMoving(){if(!this._requireNotRemoved("isMoving"))return!1;return this._rigidBody?this._rigidBody.isMoving():!1}get isRemoved(){return!this._rigidBody&&!this._rigidBodyDesc}get isSimulated(){if(!this._requireNotRemoved("isSimulated"))return!1;return this._rigidBody?!0:!1}get isSleeping(){if(!this._requireNotRemoved("isSleeping"))return!1;return this._rigidBody?this._rigidBody.isSleeping():this._rigidBodyDesc.sleeping}get linearDamping(){if(!this._requireNotRemoved("linearDamping"))return 0;return this._rigidBody?this._rigidBody.linearDamping():this._rigidBodyDesc.linearDamping}get linearVelocity(){if(!this._requireNotRemoved("linearVelocity"))return{x:0,y:0,z:0};return this._rigidBody?this._rigidBody.linvel():this._rigidBodyDesc.linvel}get localCenterOfMass(){if(!this._requireNotRemoved("localCenterOfMass"))return{x:0,y:0,z:0};return this._rigidBody?this._rigidBody.localCom():this._rigidBodyDesc.centerOfMass}get mass(){if(!this._requireNotRemoved("mass"))return 0;return this._rigidBody?this._rigidBody.mass():this._rigidBodyDesc.mass}get nextKinematicRotation(){if(!this._requireNotRemoved("nextKinematicRotation"))return{x:0,y:0,z:0,w:1};return this._rigidBody?this._rigidBody.nextRotation():this._rigidBodyDesc.rotation}get nextKinematicPosition(){if(!this._requireNotRemoved("nextKinematicPosition"))return{x:0,y:0,z:0};return this._rigidBody?this._rigidBody.nextTranslation():this._rigidBodyDesc.translation}get numColliders(){return this._colliders.size}get principalAngularInertia(){if(!this._requireNotRemoved("principalAngularInertia"))return{x:0,y:0,z:0};return this._rigidBody?this._rigidBody.principalInertia():this._rigidBodyDesc.principalAngularInertia}get principalAngularInertiaLocalFrame(){if(!this._requireNotRemoved("principalAngularInertiaLocalFrame"))return;return this._rigidBody?this._rigidBody.principalInertiaLocalFrame():void 0}get position(){if(!this._requireNotRemoved("position"))return{x:0,y:0,z:0};return this._rigidBody?this._rigidBody.translation():this._rigidBodyDesc.translation}get rawRigidBody(){if(!this._requireNotRemoved("rawRigidBody"))return;return this._rigidBody}get rotation(){if(!this._requireNotRemoved("rotation"))return{x:0,y:0,z:0,w:1};return this._rigidBody?this._rigidBody.rotation():this._rigidBodyDesc.rotation}get softCcdPrediction(){if(!this._requireNotRemoved("softCcdPrediction"))return 0;return this._rigidBody?this._rigidBody.softCcdPrediction():this._rigidBodyDesc.softCcdPrediction}get type(){if(!this._requireNotRemoved("type"))return"dynamic";return this._rigidBodyType}get worldCenterOfMass(){if(!this._requireNotRemoved("worldCenterOfMass"))return;return this._rigidBody?this._rigidBody.worldCom():void 0}setAdditionalMass(J){if(!this._requireDynamic("setAdditionalMass"))return;if(!this._requireNotRemoved("setAdditionalMass"))return;this._rigidBody?this._rigidBody.setAdditionalMass(J,!this._explicitSleep):this._rigidBodyDesc.setAdditionalMass(J)}setAdditionalMassProperties(J){if(!this._requireDynamic("setAdditionalMassProperties"))return;if(!this._requireNotRemoved("setAdditionalMassProperties"))return;let{additionalMass:X,centerOfMass:Y,principalAngularInertia:Z,principalAngularInertiaLocalFrame:W}=J;this._rigidBody?this._rigidBody.setAdditionalMassProperties(X,Y,Z,W,!this._explicitSleep):this._rigidBodyDesc.setAdditionalMassProperties(X,Y,Z,W)}setAdditionalSolverIterations(J){if(!this._requireDynamic("setAdditionalSolverIterations"))return;if(!this._requireNotRemoved("setAdditionalSolverIterations"))return;this._rigidBody?this._rigidBody.setAdditionalSolverIterations(J):this._rigidBodyDesc.setAdditionalSolverIterations(J)}setAngularDamping(J){if(!this._requireDynamic("setAngularDamping"))return;if(!this._requireNotRemoved("setAngularDamping"))return;this._rigidBody?this._rigidBody.setAngularDamping(J):this._rigidBodyDesc.setAngularDamping(J)}setAngularVelocity(J){if(!this._requireNotKinematicPositionBased("setAngularVelocity"))return;if(!this._requireNotRemoved("setAngularVelocity"))return;this._rigidBody?this._rigidBody.setAngvel(J,!this._explicitSleep):this._rigidBodyDesc.setAngvel(J)}setCcdEnabled(J){if(!this._requireDynamic("setCcdEnabled"))return;if(!this._requireNotRemoved("setCcdEnabled"))return;this._rigidBody?this._rigidBody.enableCcd(J):this._rigidBodyDesc.setCcdEnabled(J)}setDominanceGroup(J){if(!this._requireDynamic("setDominanceGroup"))return;if(!this._requireNotRemoved("setDominanceGroup"))return;this._rigidBody?this._rigidBody.setDominanceGroup(J):this._rigidBodyDesc.setDominanceGroup(J)}setEnabled(J){if(!this._requireNotRemoved("setEnabled"))return;this._rigidBody?this._rigidBody.setEnabled(J):this._rigidBodyDesc.setEnabled(J)}setEnabledPositions(J){if(!this._requireDynamic("setEnabledPositions"))return;if(!this._requireNotRemoved("setEnabledPositions"))return;this._rigidBody?this._rigidBody.setEnabledTranslations(J.x,J.y,J.z,!this._explicitSleep):this._rigidBodyDesc.enabledTranslations(J.x,J.y,J.z),this._enabledPositions=J}setEnabledRotations(J){if(!this._requireDynamic("setEnabledRotations"))return;if(!this._requireNotRemoved("setEnabledRotations"))return;this._rigidBody?this._rigidBody.setEnabledRotations(J.x,J.y,J.z,!this._explicitSleep):this._rigidBodyDesc.enabledRotations(J.x,J.y,J.z),this._enabledRotations=J}setGravityScale(J){if(!this._requireDynamic("setGravityScale"))return;if(!this._requireNotRemoved("setGravityScale"))return;this._rigidBody?this._rigidBody.setGravityScale(J,!this._explicitSleep):this._rigidBodyDesc.setGravityScale(J)}setLinearDamping(J){if(!this._requireDynamic("setLinearDamping"))return;if(!this._requireNotRemoved("setLinearDamping"))return;this._rigidBody?this._rigidBody.setLinearDamping(J):this._rigidBodyDesc.setLinearDamping(J)}setLinearVelocity(J){if(!this._requireNotKinematicPositionBased("setLinearVelocity"))return;if(!this._requireNotRemoved("setLinearVelocity"))return;this._rigidBody?this._rigidBody.setLinvel(J,!this._explicitSleep):this._rigidBodyDesc.setLinvel(J.x,J.y,J.z)}setNextKinematicRotation(J){if(!this._requireKinematic("setNextKinematicRotation"))return;if(!this._requireNotRemoved("setNextKinematicRotation"))return;this._rigidBody?this._rigidBody.setNextKinematicRotation(J):this._rigidBodyDesc.setRotation(J)}setNextKinematicPosition(J){if(!this._requireKinematic("setNextKinematicPosition"))return;if(!this._requireNotRemoved("setNextKinematicPosition"))return;this._rigidBody?this._rigidBody.setNextKinematicTranslation(J):this._rigidBodyDesc.setTranslation(J.x,J.y,J.z)}setPosition(J){if(!this._requireNotRemoved("setPosition"))return;this._rigidBody?this._rigidBody.setTranslation(J,!this._explicitSleep):this._rigidBodyDesc.setTranslation(J.x,J.y,J.z)}setRotation(J){if(!this._requireNotRemoved("setRotation"))return;this._rigidBody?this._rigidBody.setRotation(J,!this._explicitSleep):this._rigidBodyDesc.setRotation(J)}setSleeping(J){if(!this._requireDynamic("setSleeping"))return;if(!this._requireNotRemoved("setSleeping"))return;this._rigidBody?J?this._rigidBody.sleep():this._rigidBody.wakeUp():this._rigidBodyDesc.sleeping=J,this._explicitSleep=J}setSoftCcdPrediction(J){if(!this._requireDynamic("setSoftCcdPrediction"))return;if(!this._requireNotRemoved("setSoftCcdPrediction"))return;this._rigidBody?this._rigidBody.setSoftCcdPrediction(J):this._rigidBodyDesc.setSoftCcdPrediction(J)}setCollisionGroupsForSolidColliders(J){if(!this._requireNotRemoved("setCollisionGroupsForSolidColliders"))return;this._colliders.forEach((X)=>{if(X.isSensor)return;X.setCollisionGroups(J)})}setCollisionGroupsForSensorColliders(J){if(!this._requireNotRemoved("setCollisionGroupsForSensorColliders"))return;this._colliders.forEach((X)=>{if(!X.isSensor)return;X.setCollisionGroups(J)})}setType(J){if(!this._requireNotRemoved("setType"))return;let Y={["dynamic"]:z0.RigidBodyType.Dynamic,["fixed"]:z0.RigidBodyType.Fixed,["kinematic_position"]:z0.RigidBodyType.KinematicPositionBased,["kinematic_velocity"]:z0.RigidBodyType.KinematicVelocityBased}[J];if(Y===void 0)return E.error(`Invalid RigidBodyType: ${J}`);this._rigidBody?this._rigidBody.setBodyType(Y,!this._explicitSleep):this._rigidBodyDesc.status=Y,this._rigidBodyType=J}addForce(J){if(!this._requireNotRemoved("addForce"))return;if(!this._requireCreated("addForce"))return;if(!this._requireDynamic("addForce"))return;if(this._isNegligibleVector(J))return;this._rigidBody.addForce(J,!this._explicitSleep)}addTorque(J){if(!this._requireNotRemoved("addTorque"))return;if(!this._requireCreated("addTorque"))return;if(!this._requireDynamic("addTorque"))return;if(this._isNegligibleVector(J))return;this._rigidBody.addTorque(J,!this._explicitSleep)}addChildColliderToSimulation(J){if(!this._requireNotRemoved("addChildColliderToSimulation"))return;if(!this._requireCreated("addChildColliderToSimulation"))return;J.addToSimulation(this._simulation,this)}addToSimulation(J){if(!this._requireNotRemoved("addToSimulation"))return;if(this._rigidBody)return E.error("RigidBody.addToSimulation(): Rigid body already exists in the simulation!");this._simulation=J,this._rigidBody=this._simulation.createRawRigidBody(this._rigidBodyDesc),this._colliders.forEach((X)=>{if(!X.isSimulated)X.addToSimulation(J,this)})}applyImpulse(J){if(!this._requireNotRemoved("applyImpulse"))return;if(!this._requireCreated("applyImpulse"))return;if(!this._requireDynamic("applyImpulse"))return;if(this._isNegligibleVector(J))return;this._rigidBody.applyImpulse(J,!this._explicitSleep)}applyImpulseAtPoint(J,X){if(!this._requireNotRemoved("applyImpulseAtPoint"))return;if(!this._requireCreated("applyImpulseAtPoint"))return;if(!this._requireDynamic("applyImpulseAtPoint"))return;if(this._isNegligibleVector(J))return;this._rigidBody.applyImpulseAtPoint(J,X,!this._explicitSleep)}applyTorqueImpulse(J){if(!this._requireNotRemoved("applyTorqueImpulse"))return;if(!this._requireCreated("applyTorqueImpulse"))return;if(!this._requireDynamic("applyTorqueImpulse"))return;this._rigidBody.applyTorqueImpulse(J,!this._explicitSleep)}createAndAddChildCollider(J){if(!this._requireNotRemoved("createAndAddChildCollider"))return null;return this._simulation?new d8({...J,parentRigidBody:this,simulation:this._simulation}):this._createAndAddPendingChildCollider(J)}createAndAddChildCollidersToSimulation(J){let X=[];return J.forEach((Y)=>{let Z=this.createAndAddChildCollider(Y);if(Z)X.push(Z)}),X}getCollidersByTag(J){let X=[];for(let Y of this._colliders)if(Y.tag===J)X.push(Y);return X}linkCollider(J){if(!this._requireNotRemoved("linkCollider"))return;if(J.parentRigidBody!==this)return E.error("RigidBody.linkCollider(): Collider cannot be linked because it is not a child of this rigid body!");this._colliders.add(J)}lockAllRotations(){if(!this._requireNotRemoved("lockAllRotations"))return;this.setEnabledRotations({x:!1,y:!1,z:!1})}lockAllPositions(){if(!this._requireNotRemoved("lockAllPositions"))return;this.setEnabledPositions({x:!1,y:!1,z:!1})}removeFromSimulation(){if(!this._requireNotRemoved("removeFromSimulation"))return;if(!this._rigidBody)return E.error("RigidBody.removeFromSimulation(): Rigid body does not exist in the simulation!");this._colliders.forEach((J)=>{J.removeFromSimulation()}),this._simulation.removeRawRigidBody(this._rigidBody),this._simulation=void 0,this._rigidBody=void 0}unlinkCollider(J){if(!this._requireNotRemoved("unlinkCollider"))return;if(!J.isRemoved)return E.error("RigidBody.unlinkCollider(): Collider is still simulated and therefore cannot be unlinked from this rigid body!");this._colliders.delete(J)}resetAngularVelocity(){if(!this._requireNotRemoved("resetAngularVelocity"))return;if(!this._requireCreated("resetAngularVelocity"))return;this.setAngularVelocity({x:0,y:0,z:0})}resetForces(){if(!this._requireNotRemoved("resetForces"))return;if(!this._requireCreated("resetForces"))return;this._rigidBody.resetForces(!this._explicitSleep)}resetLinearVelocity(){if(!this._requireNotRemoved("resetLinearVelocity"))return;if(!this._requireCreated("resetLinearVelocity"))return;this.setLinearVelocity({x:0,y:0,z:0})}resetTorques(){if(!this._requireNotRemoved("resetTorques"))return;if(!this._requireCreated("resetTorques"))return;this._rigidBody.resetTorques(!this._explicitSleep)}sleep(){if(!this._requireNotRemoved("sleep"))return;this.setSleeping(!0)}wakeUp(){if(!this._requireNotRemoved("wakeUp"))return;this.setSleeping(!1)}_applyRigidBodyOptions(J){[["additionalMass",this.setAdditionalMass.bind(this)],["additionalMassProperties",this.setAdditionalMassProperties.bind(this)],["additionalSolverIterations",this.setAdditionalSolverIterations.bind(this)],["angularDamping",this.setAngularDamping.bind(this)],["angularVelocity",this.setAngularVelocity.bind(this)],["dominanceGroup",this.setDominanceGroup.bind(this)],["ccdEnabled",this.setCcdEnabled.bind(this)],["enabled",this.setEnabled.bind(this)],["enabledPositions",this.setEnabledPositions.bind(this)],["enabledRotations",this.setEnabledRotations.bind(this)],["gravityScale",this.setGravityScale.bind(this)],["linearDamping",this.setLinearDamping.bind(this)],["linearVelocity",this.setLinearVelocity.bind(this)],["position",this.setPosition.bind(this)],["rotation",this.setRotation.bind(this)],["sleeping",this.setSleeping.bind(this)],["softCcdPrediction",this.setSoftCcdPrediction.bind(this)]].forEach(([Y,Z])=>{if(Y in J)Z(J[Y])})}_autoAddToSimulation(J){if(J.colliders)this._createAndAddPendingChildColliders(J.colliders);if(J.simulation)this.addToSimulation(J.simulation)}_createAndAddPendingChildCollider(J){if(!this._requireNotRemoved("createAndAddPendingChildCollider"))return null;if(!this._requireNotSimulated("createAndAddPendingChildCollider"))return null;let X=new d8(J);return this._colliders.add(X),X}_createAndAddPendingChildColliders(J){let X=[];return J.forEach((Y)=>{let Z=this._createAndAddPendingChildCollider(Y);if(Z)X.push(Z)}),X}_createRigidBodyDesc(J){let X=J.type??PC;return{["dynamic"]:()=>z0.RigidBodyDesc.dynamic(),["fixed"]:()=>z0.RigidBodyDesc.fixed(),["kinematic_position"]:()=>z0.RigidBodyDesc.kinematicPositionBased(),["kinematic_velocity"]:()=>z0.RigidBodyDesc.kinematicVelocityBased()}[X]()}_requireCreated(J){if(!this._rigidBody||!this._simulation)E.error(`RigidBody._requireCreated(): Rigid body has not been created and therefore does not support the invoked method: ${J}()`);return!!this._rigidBody&&!!this._simulation}_requireDynamic(J){if(!this.isDynamic)E.error(`RigidBody._requireDynamic(): Rigid body is not dynamic and therefore does not support the invoked method: ${J}()`);return this.isDynamic}_requireKinematic(J){if(!this.isKinematic)E.error(`RigidBody._requireKinematic(): Rigid body is not kinematic and therefore does not support the invoked method: ${J}()`);return this.isKinematic}_requireNotKinematicPositionBased(J){if(this.isKinematicPositionBased)E.error(`RigidBody._requireNotKinematicPositionBased(): Rigid body is kinematic position based and therefore does not support the invoked method: ${J}()`);return!this.isKinematicPositionBased}_requireNotRemoved(J){if(!this._rigidBody&&!this._rigidBodyDesc)E.error(`RigidBody._requireNotRemoved(): Rigid body has been removed and therefore does not support the invoked method: ${J}()`);return!!this._rigidBody||!!this._rigidBodyDesc}_requireNotSimulated(J){if(this.isSimulated)E.error(`RigidBody._requireNotSimulated(): Rigid body is simulated and therefore does not support the invoked method: ${J}()`);return!this.isSimulated}_isNegligibleVector(J){return Math.abs(J.x)<zH&&Math.abs(J.y)<zH&&Math.abs(J.z)<zH}}var n0=16,t5=n0-1,NC=n0**3,lX0=[{neighborOffset:[-1,0,0],generateVertices:(J,X,Y)=>[J+0,X+0,Y+0,J+0,X+0,Y+1,J+0,X+1,Y+0,J+0,X+1,Y+0,J+0,X+0,Y+1,J+0,X+1,Y+1]},{neighborOffset:[1,0,0],generateVertices:(J,X,Y)=>[J+1,X+0,Y+0,J+1,X+1,Y+0,J+1,X+0,Y+1,J+1,X+1,Y+0,J+1,X+1,Y+1,J+1,X+0,Y+1]},{neighborOffset:[0,-1,0],generateVertices:(J,X,Y)=>[J+0,X+0,Y+0,J+1,X+0,Y+0,J+0,X+0,Y+1,J+1,X+0,Y+0,J+1,X+0,Y+1,J+0,X+0,Y+1]},{neighborOffset:[0,1,0],generateVertices:(J,X,Y)=>[J+0,X+1,Y+0,J+0,X+1,Y+1,J+1,X+1,Y+0,J+1,X+1,Y+0,J+0,X+1,Y+1,J+1,X+1,Y+1]},{neighborOffset:[0,0,-1],generateVertices:(J,X,Y)=>[J+0,X+0,Y+0,J+0,X+1,Y+0,J+1,X+0,Y+0,J+0,X+1,Y+0,J+1,X+1,Y+0,J+1,X+0,Y+0]},{neighborOffset:[0,0,1],generateVertices:(J,X,Y)=>[J+0,X+0,Y+1,J+1,X+0,Y+1,J+0,X+1,Y+1,J+0,X+1,Y+1,J+1,X+0,Y+1,J+1,X+1,Y+1]}],LH;((Z)=>{Z.DESPAWN="CHUNK.DESPAWN";Z.SET_BLOCK="CHUNK.SET_BLOCK";Z.SPAWN="CHUNK.SPAWN"})(LH||={});class w8 extends s{_blocks;_originCoordinate;_requiresUpdate=!1;_rigidBody;_world;constructor(){super();this._blocks=new Uint8Array(NC)}get blocks(){return this._blocks}get requiresUpdate(){return this._requiresUpdate}get isSimulated(){return!!this._rigidBody}get isSpawned(){return!!this._originCoordinate&&!!this._world}get originCoordinate(){return this._originCoordinate}get world(){return this._world}static blockIndexToLocalCoordinate(J){return{x:J%n0,y:(J/n0|0)%n0,z:J/(n0*n0)|0}}static globalCoordinateToLocalCoordinate(J){return{x:J.x&n0-1,y:J.y&n0-1,z:J.z&n0-1}}static globalCoordinateToOriginCoordinate(J){return{x:J.x&~(n0-1),y:J.y&~(n0-1),z:J.z&~(n0-1)}}static isValidOriginCoordinate(J){return J.x%n0===0&&J.y%n0===0&&J.z%n0===0}spawn(J,X){if(this.isSpawned){let{x:Y,y:Z,z:W}=this.originCoordinate;return E.error(`Chunk.spawn(): Chunk is already spawned at origin ${Y}, ${Z}, ${W}!`)}if(!w8.isValidOriginCoordinate(X))return E.error(`Chunk.spawn(): Chunk coordinates must be divisible by ${n0}`);this._originCoordinate=X,this._world=J,this._world.chunkLattice.registerChunk(this),this._requiresUpdate=!0}despawn(){if(!this.isSpawned)return E.error("Chunk.despawn(): Chunk has not been spawned and cannot be despawned!");this.emitWithWorld(this._world,"CHUNK.DESPAWN",{chunk:this}),this._removeFromSimulation(),this._world.chunkLattice.unregisterChunk(this),this._originCoordinate=void 0,this._world=void 0}getBlockId(J){return this._blocks[this._getIndex(J)]}hasBlock(J){return this._blocks[this._getIndex(J)]!==0}setBlock(J,X){if(!this._isValidLocalCoordinate(J))return E.error("Chunk.setBlock(): Block local coordinate is out of bounds");if(this._blocks[this._getIndex(J)]===X)return;if(this._blocks[this._getIndex(J)]=X,this.isSpawned&&this.isSimulated){this.emitWithWorld(this._world,"CHUNK.SET_BLOCK",{chunk:this,globalCoordinate:this._getGlobalCoordinate(J),localCoordinate:J,blockTypeId:X});let Y=this._getGlobalCoordinate(J),Z=[];if(J.x===0)Z.push({x:-1,y:0,z:0});if(J.y===0)Z.push({x:0,y:-1,z:0});if(J.z===0)Z.push({x:0,y:0,z:-1});if(J.x===t5)Z.push({x:1,y:0,z:0});if(J.y===t5)Z.push({x:0,y:1,z:0});if(J.z===t5)Z.push({x:0,y:0,z:1});for(let W of Z){let $={x:Y.x+W.x,y:Y.y+W.y,z:Y.z+W.z},Q=w8.globalCoordinateToOriginCoordinate($),K=this._world?.chunkLattice.getChunk(Q);if(!K?.hasBlock(w8.globalCoordinateToLocalCoordinate($)))continue;K.setRequiresUpdate(!0)}}this._requiresUpdate=!0}setRequiresUpdate(J){this._requiresUpdate=J}update(){if(!this._requiresUpdate)return;if(!this.isSpawned)return E.error("Chunk.update(): Chunk is not spawned and cannot be updated.");let J=!this._rigidBody,X=this._world.simulation;if(this._removeFromSimulation(),this._rigidBody=new f9({type:"fixed",position:this._originCoordinate,simulation:this._world.simulation}),this._meshColliders().map(([Y,Z])=>{if(!Y.isSimulated)Y.addToSimulation(X,this._rigidBody);X.colliderMap.setColliderBlockType(Y,Z)}),this._requiresUpdate=!1,J)this.emitWithWorld(this._world,"CHUNK.SPAWN",{chunk:this})}serialize(){return t.serializeChunk(this)}_meshColliders(){if(!this._world)return E.error("Chunk._meshColliders(): Chunk is not spawned and cannot be meshed."),[];let J=new Map,X=[];for(let Z=0;Z<NC;Z++){if(this._blocks[Z]===0)continue;let W=this._blocks[Z],$=this._world.blockTypeRegistry.getBlockType(W),{x:Q,y:K,z:G}=w8.blockIndexToLocalCoordinate(Z);if(!$.isMeshable){let q=$.createCollider();q.setRelativePosition({x:Q,y:K,z:G}),X.push([q,$]);continue}let F=J.get($)??{indices:[],vertices:[]};J.set($,F);for(let q of lX0){let[H,z,V]=q.neighborOffset,M={x:Q+H,y:K+z,z:G+V},R=this._getGlobalCoordinate(M),L=this._world.chunkLattice.getBlockType(R);if(L&&!L.isLiquid)continue;let w=F.indices.length;F.indices.push(w,w+1,w+2,w+3,w+4,w+5),F.vertices.push(...q.generateVertices(Q,K,G))}}let Y=[];return J.forEach((Z,W)=>{if(!Z.indices.length)return;let $=W.createCollider(new Uint32Array(Z.indices),new Float32Array(Z.vertices));Y.push([$,W])}),[...X,...Y]}_removeFromSimulation(){if(!this._rigidBody||!this._world)return;this._rigidBody.removeFromSimulation(),this._rigidBody=void 0}_getGlobalCoordinate(J){if(!this.originCoordinate)E.fatalError("Chunk._getGlobalCoordinate(): Chunk is not spawned, calculating global coordinate is impossible.");return{x:this.originCoordinate.x+J.x,y:this.originCoordinate.y+J.y,z:this.originCoordinate.z+J.z}}_getIndex(J){return J.x+n0*(J.y+n0*J.z)}_isValidLocalCoordinate(J){return J.x>=0&&J.x<=t5&&J.y>=0&&J.y<=t5&&J.z>=0&&J.z<=t5}}class PJ{_chunks=new Map;_world;constructor(J){this._world=J}registerChunk(J){if(!J.isSpawned)return E.error("ChunkLattice.registerChunk(): Chunk is not spawned.");if(this.hasChunk(J.originCoordinate)){let{x:X,y:Y,z:Z}=J.originCoordinate;return E.error(`ChunkLattice.registerChunk(): Chunk exists at origin (${X}, ${Y}, ${Z}), despawn the current chunk before registering another at the same origin.`)}if(J.world.id!==this._world.id)return E.error("ChunkLattice.registerChunk(): Chunk world does not match lattice world.");this._chunks.set(this._getChunkKey(J.originCoordinate),J)}unregisterChunk(J){if(!J.isSpawned)return E.error("ChunkLattice.unregisterChunk(): Chunk is not spawned.");if(J.world.id!==this._world.id)return E.error("ChunkLattice.unregisterChunk(): Chunk world does not match lattice world.");this._chunks.delete(this._getChunkKey(J.originCoordinate))}getBlockId(J){let X=this.getChunk(w8.globalCoordinateToOriginCoordinate(J));if(!X)return 0;return X.getBlockId(w8.globalCoordinateToLocalCoordinate(J))}getBlockType(J){let X=this.getBlockId(J);return X?this._world.blockTypeRegistry.getBlockType(X):null}getChunk(J){if(!w8.isValidOriginCoordinate(J)){E.error(`ChunkLattice.getChunk(): Chunk coordinates must be divisible by CHUNK_SIZE (${n0})`);return}return this._chunks.get(this._getChunkKey(J))}getAllChunks(){return Array.from(this._chunks.values())}hasBlock(J){let X=this.getChunk(w8.globalCoordinateToOriginCoordinate(J));if(!X)return!1;return X.hasBlock(w8.globalCoordinateToLocalCoordinate(J))}hasChunk(J){return this._chunks.has(this._getChunkKey(J))}setBlock(J,X){let Y=w8.globalCoordinateToLocalCoordinate(J),Z=w8.globalCoordinateToOriginCoordinate(J),W=this.getChunk(Z);if(!W)W=new w8,W.spawn(this._world,Z);W.setBlock(Y,X)}updateChunks(){this._chunks.forEach((J)=>{if(J.requiresUpdate)J.update()})}_getChunkKey(J){return`${J.x},${J.y},${J.z}`}}var vC={type:"dynamic",softCcdPrediction:1},BC=0.0025000000000000005,jC=Math.cos(0.005),$$;((w)=>{w.BLOCK_COLLISION="ENTITY.BLOCK_COLLISION";w.BLOCK_CONTACT_FORCE="ENTITY.BLOCK_CONTACT_FORCE";w.DESPAWN="ENTITY.DESPAWN";w.ENTITY_COLLISION="ENTITY.ENTITY_COLLISION";w.ENTITY_CONTACT_FORCE="ENTITY.ENTITY_CONTACT_FORCE";w.SET_MODEL_ANIMATIONS_PLAYBACK_RATE="ENTITY.SET_MODEL_ANIMATIONS_PLAYBACK_RATE";w.SET_MODEL_HIDDEN_NODES="ENTITY.SET_MODEL_HIDDEN_NODES";w.SET_OPACITY="ENTITY.SET_OPACITY";w.SET_PARENT="ENTITY.SET_PARENT";w.SET_TINT_COLOR="ENTITY.SET_TINT_COLOR";w.SPAWN="ENTITY.SPAWN";w.START_MODEL_LOOPED_ANIMATIONS="ENTITY.START_MODEL_LOOPED_ANIMATIONS";w.START_MODEL_ONESHOT_ANIMATIONS="ENTITY.START_MODEL_ONESHOT_ANIMATIONS";w.STOP_MODEL_ANIMATIONS="ENTITY.STOP_MODEL_ANIMATIONS";w.TICK="ENTITY.TICK";w.UPDATE_POSITION="ENTITY.UPDATE_POSITION";w.UPDATE_ROTATION="ENTITY.UPDATE_ROTATION"})($$||={});class Y8 extends f9{_id;_blockHalfExtents;_blockTextureUri;_controller;_modelAnimationsPlaybackRate=1;_modelHiddenNodes=new Set;_modelLoopedAnimations=new Set;_modelOneshotAnimations=new Set;_modelScale;_modelUri;_name;_opacity;_parent;_parentNodeName;_tag;_tintColor;_lastUpdatedPosition={x:0,y:0,z:0};_lastUpdatedRotation={x:0,y:0,z:0,w:1};_lastParentlessType="dynamic";_world;constructor(J){let X="blockTextureUri"in J,Y="modelUri"in J;if(!X===!Y)E.fatalError("Entity.constructor(): Entity data must include a blockTextureUri or modelUri, but not both.");if(X&&!J.blockHalfExtents)E.fatalError("Entity.constructor(): Block entity must have blockHalfExtents!");if(J.parent&&!J.parent.isSpawned)E.fatalError("Entity.constructor(): Parent entity must be spawned before child entity!");if(J.parent?.modelUri&&J.parentNodeName&&!U6.instance.modelHasNode(J.parent.modelUri,J.parentNodeName))E.fatalError(`Entity.constructor(): Parent node name ${J.parentNodeName} not found in parent model ${J.parent.modelUri}!`);super(J.rigidBodyOptions??vC);if(X)this._blockHalfExtents=J.blockHalfExtents,this._blockTextureUri=J.blockTextureUri;if(Y)this._modelAnimationsPlaybackRate=J.modelAnimationsPlaybackRate??1,this._modelScale=J.modelScale,this._modelUri=J.modelUri,J.modelHiddenNodes?.forEach((Z)=>this._modelHiddenNodes.add(Z.toLowerCase())),J.modelLoopedAnimations?.forEach((Z)=>this._modelLoopedAnimations.add(Z));if(this._name=J.name??"Nameless",this._opacity=J.opacity??1,this._parent=J.parent,this._parentNodeName=J.parentNodeName,this._tag=J.tag,this._tintColor=J.tintColor,J.controller)this.setController(J.controller)}get id(){return this._id}get blockHalfExtents(){return this._blockHalfExtents}get blockTextureUri(){return this._blockTextureUri}get controller(){return this._controller}get height(){return this.isModelEntity?U6.instance.getHeight(this._modelUri)*(this._modelScale??1):this._blockHalfExtents.y*2}get modelAnimationsPlaybackRate(){return this._modelAnimationsPlaybackRate}get modelHiddenNodes(){return this._modelHiddenNodes}get modelLoopedAnimations(){return this._modelLoopedAnimations}get modelScale(){return this._modelScale}get modelUri(){return this._modelUri}get name(){return this._name}get opacity(){return this._opacity}get parent(){return this._parent}get parentNodeName(){return this._parentNodeName}get tag(){return this._tag}get tintColor(){return this._tintColor}get isBlockEntity(){return!!this._blockTextureUri}get isModelEntity(){return!!this._modelUri}get isSpawned(){return!!this._world}get world(){return this._world}spawn(J,X,Y){if(this.isSpawned)return E.error(`Entity.spawn(): Entity ${this._name} is already spawned with id ${this._id}!`);if(!this.isSimulated)this.addToSimulation(J.simulation);if(this._blockTextureUri&&this._blockHalfExtents&&this.numColliders===0)this.addChildColliderToSimulation(new d8(d8.optionsFromBlockHalfExtents(this._blockHalfExtents)));if(this._modelUri&&this.numColliders===0)this.addChildColliderToSimulation(new d8(d8.optionsFromModelUri(this._modelUri,this._modelScale)));if(this.colliders.forEach((Z)=>{if(this.hasListeners("ENTITY.BLOCK_COLLISION")||this.hasListeners("ENTITY.ENTITY_COLLISION"))Z.enableCollisionEvents(!0);if(this.hasListeners("ENTITY.BLOCK_CONTACT_FORCE")||this.hasListeners("ENTITY.ENTITY_CONTACT_FORCE"))Z.enableContactForceEvents(!0);if(q6.isDefaultCollisionGroups(Z.collisionGroups))Z.setCollisionGroups({belongsTo:[Z.isSensor?4:2],collidesWith:[65535]})}),this.setPosition(X),Y)this.setRotation(Y);if(this._id=J.entityManager.registerEntity(this),this._world=J,this._controller)this._controller.spawn(this);if(this._parent)this.setParent(this._parent,this._parentNodeName,X,Y);this.colliders.forEach((Z)=>{J.simulation.colliderMap.setColliderEntity(Z,this)}),this.emitWithWorld(J,"ENTITY.SPAWN",{entity:this})}despawn(){if(!this._requireSpawned("despawn"))return;if(this._world.entityManager.getEntityChildren(this).forEach((J)=>{J.despawn()}),this._controller)this._controller.detach(this),this._controller.despawn(this);if(this.emitWithWorld(this._world,"ENTITY.DESPAWN",{entity:this}),this.isSimulated)this.removeFromSimulation();this._world.entityManager.unregisterEntity(this),this._world.audioManager.unregisterEntityAttachedAudios(this),this._world.lightManager.despawnEntityAttachedLights(this),this._world.sceneUIManager.unloadEntityAttachedSceneUIs(this),this._id=void 0,this._world=void 0}setModelAnimationsPlaybackRate(J){if(!this._requireSpawned("setModelAnimationsPlaybackRate"))return;if(!this.isModelEntity||this._modelAnimationsPlaybackRate===J)return;this._modelAnimationsPlaybackRate=J,this.emitWithWorld(this._world,"ENTITY.SET_MODEL_ANIMATIONS_PLAYBACK_RATE",{entity:this,playbackRate:J})}setController(J){if(this._controller===J)return;if(this._controller)this._controller.detach(this);if(this._controller=J,this._controller)this._controller.attach(this)}setModelHiddenNodes(J){if(!this._requireSpawned("setModelHiddenNodes"))return;this._modelHiddenNodes=new Set(J.map((X)=>X.toLowerCase())),this.emitWithWorld(this._world,"ENTITY.SET_MODEL_HIDDEN_NODES",{entity:this,modelHiddenNodes:this._modelHiddenNodes})}setOpacity(J){if(!this._requireSpawned("setOpacity"))return;if(this._opacity===J)return;this._opacity=J,this.emitWithWorld(this._world,"ENTITY.SET_OPACITY",{entity:this,opacity:J})}setParent(J,X,Y,Z){if(!this._requireSpawned("setParent"))return;if(J&&!J.isSpawned)return E.error("Entity.setParent(): Parent entity is not spawned, cannot set parent!");if(!this._parent&&J)this._lastParentlessType=this.type;if(this._parent=J,this._parentNodeName=X,this.colliders.forEach((W)=>W.setEnabled(!J)),this.setType(!J?this._lastParentlessType:"kinematic_velocity"),this.setPosition(Y??{x:0,y:0,z:0}),this.setRotation(Z??{x:0,y:0,z:0,w:1}),!this.isKinematicPositionBased)this.resetAngularVelocity(),this.resetForces(),this.resetLinearVelocity(),this.resetTorques();this.emitWithWorld(this._world,"ENTITY.SET_PARENT",{entity:this,parent:J,parentNodeName:X})}setTintColor(J){if(!this._requireSpawned("setTintColor"))return;if(!J&&!this._tintColor||J&&this._tintColor&&J.r===this._tintColor.r&&J.g===this._tintColor.g&&J.b===this._tintColor.b)return;this._tintColor=J,this.emitWithWorld(this._world,"ENTITY.SET_TINT_COLOR",{entity:this,tintColor:J})}startModelLoopedAnimations(J){if(!this._requireSpawned("startModelLoopedAnimations"))return;if(!this.isModelEntity||!J.length)return;if(!J.some((X)=>!this._modelLoopedAnimations.has(X)))return;J.forEach((X)=>{this._modelLoopedAnimations.add(X)}),this.emitWithWorld(this._world,"ENTITY.START_MODEL_LOOPED_ANIMATIONS",{entity:this,animations:new Set(J)})}startModelOneshotAnimations(J){if(!this._requireSpawned("startModelOneshotAnimations"))return;if(!this.isModelEntity||!J.length)return;J.forEach((X)=>{this._modelOneshotAnimations.add(X)}),this.emitWithWorld(this._world,"ENTITY.START_MODEL_ONESHOT_ANIMATIONS",{entity:this,animations:new Set(J)})}stopModelAnimations(J){if(!this._requireSpawned("stopModelAnimations"))return;if(!this.isModelEntity||!J.length)return;if(!J.some((X)=>this._modelLoopedAnimations.has(X))&&!J.some((X)=>this._modelOneshotAnimations.has(X)))return;J.forEach((X)=>{this._modelLoopedAnimations.delete(X),this._modelOneshotAnimations.delete(X)}),this.emitWithWorld(this._world,"ENTITY.STOP_MODEL_ANIMATIONS",{entity:this,animations:new Set(J)})}serialize(){return t.serializeEntity(this)}tick(J){if(this.emit("ENTITY.TICK",{entity:this,tickDeltaMs:J}),this._controller)this._controller.tick(this,J)}checkAndEmitUpdates(){if(!this._requireSpawned("checkAndEmitUpdates"))return;let J=this.position,X=this.rotation;if(this._rotationExceedsThreshold(X,this._lastUpdatedRotation))this._lastUpdatedRotation=X,this.emitWithWorld(this._world,"ENTITY.UPDATE_ROTATION",{entity:this,rotation:X});if(this._positionExceedsThreshold(J,this._lastUpdatedPosition))this._lastUpdatedPosition=J,this.emitWithWorld(this._world,"ENTITY.UPDATE_POSITION",{entity:this,position:J})}_requireSpawned(J){if(!this.isSpawned)E.error(`Entity._requireSpawned(): Entity ${this._name} is not spawned, cannot invoke ${J}()!`);return this.isSpawned}_positionExceedsThreshold(J,X){let Y=J.x-X.x,Z=J.y-X.y,W=J.z-X.z;return Y*Y+Z*Z+W*W>BC}_rotationExceedsThreshold(J,X){return Math.abs(J.x*X.x+J.y*X.y+J.z*X.z+J.w*X.w)<jC}}class NJ extends a1{autoCancelMouseLeftClick=!0;canWalk=()=>!0;canRun=()=>!0;canJump=()=>!0;idleLoopedAnimations=["idle_upper","idle_lower"];interactOneshotAnimations=["simple_interact"];jumpOneshotAnimations=["jump_loop"];jumpVelocity=10;runLoopedAnimations=["run_upper","run_lower"];runVelocity=8;sticksToPlatforms=!0;walkLoopedAnimations=["walk_upper","walk_lower"];walkVelocity=4;_stepAudio;_groundContactCount=0;_platform;constructor(J={}){super();this.autoCancelMouseLeftClick=J.autoCancelMouseLeftClick??this.autoCancelMouseLeftClick,this.jumpVelocity=J.jumpVelocity??this.jumpVelocity,this.runVelocity=J.runVelocity??this.runVelocity,this.walkVelocity=J.walkVelocity??this.walkVelocity,this.canWalk=J.canWalk??this.canWalk,this.canRun=J.canRun??this.canRun,this.canJump=J.canJump??this.canJump,this.sticksToPlatforms=J.sticksToPlatforms??this.sticksToPlatforms}get isGrounded(){return this._groundContactCount>0}get isOnPlatform(){return!!this._platform}get platform(){return this._platform}attach(J){this._stepAudio=new $4({uri:"audio/sfx/step/stone/stone-step-04.mp3",loop:!0,volume:0.1,referenceDistance:2,cutoffDistance:15,attachedToEntity:J}),J.setCcdEnabled(!0),J.lockAllRotations()}spawn(J){if(!J.isSpawned)return E.error("PlayerEntityController.createColliders(): Entity is not spawned!");J.createAndAddChildCollider({shape:"cylinder",radius:0.23,halfHeight:0.125,collisionGroups:{belongsTo:[4],collidesWith:[1,2]},isSensor:!0,relativePosition:{x:0,y:-0.75,z:0},tag:"groundSensor",onCollision:(X,Y)=>{if(!J.isSpawned)return;if(this._groundContactCount+=Y?1:-1,!this._groundContactCount)J.startModelOneshotAnimations(this.jumpOneshotAnimations);else J.stopModelAnimations(this.jumpOneshotAnimations);if(!(X instanceof Y8)||!X.isKinematic)return;if(Y&&this.sticksToPlatforms)this._platform=X;else if(X===this._platform&&!Y)this._platform=void 0}}),J.createAndAddChildCollider({shape:"capsule",halfHeight:0.33,radius:0.4,collisionGroups:{belongsTo:[4],collidesWith:[1,2]},friction:0,frictionCombineRule:1,tag:"wallCollider"})}tickWithPlayerInput(J,X,Y,Z){if(!J.isSpawned||!J.world)return;if(super.tickWithPlayerInput(J,X,Y,Z),J.parent)return;let{w:W,a:$,s:Q,d:K,sp:G,sh:F,ml:q}=X,{yaw:H}=Y,z=J.linearVelocity,V={x:0,y:0,z:0},M=F;if(this.isGrounded&&(W||$||Q||K)){if(M)J.stopModelAnimations(Array.from(J.modelLoopedAnimations).filter((P)=>!this.runLoopedAnimations.includes(P))),J.startModelLoopedAnimations(this.runLoopedAnimations),this._stepAudio?.setPlaybackRate(0.75);else J.stopModelAnimations(Array.from(J.modelLoopedAnimations).filter((P)=>!this.walkLoopedAnimations.includes(P))),J.startModelLoopedAnimations(this.walkLoopedAnimations),this._stepAudio?.setPlaybackRate(0.51);this._stepAudio?.play(J.world,!this._stepAudio?.isPlaying)}else this._stepAudio?.pause(),J.stopModelAnimations(Array.from(J.modelLoopedAnimations).filter((P)=>!this.idleLoopedAnimations.includes(P))),J.startModelLoopedAnimations(this.idleLoopedAnimations);if(q)J.startModelOneshotAnimations(this.interactOneshotAnimations),X.ml=!this.autoCancelMouseLeftClick;if(M&&this.canRun(this)||!M&&this.canWalk(this)){let P=M?this.runVelocity:this.walkVelocity;if(W)V.x-=P*Math.sin(H),V.z-=P*Math.cos(H);if(Q)V.x+=P*Math.sin(H),V.z+=P*Math.cos(H);if($)V.x-=P*Math.cos(H),V.z+=P*Math.sin(H);if(K)V.x+=P*Math.cos(H),V.z-=P*Math.sin(H);let N=Math.sqrt(V.x*V.x+V.z*V.z);if(N>P){let v=P/N;V.x*=v,V.z*=v}}if(G&&this.canJump(this)){if(this.isGrounded&&z.y>-0.001&&z.y<=3)V.y=this.jumpVelocity}let R=this._platform?this._platform.linearVelocity:{x:0,y:0,z:0},L={x:V.x-z.x+R.x,y:V.y+R.y,z:V.z-z.z+R.z};if(!(this.runVelocity>0&&Math.abs(z.x)>this.runVelocity||this.jumpVelocity>0&&Math.abs(z.y)>this.jumpVelocity||this.runVelocity>0&&Math.abs(z.z)>this.runVelocity)||this.isOnPlatform){if(Object.values(L).some((P)=>P!==0)){let P=J.mass;J.applyImpulse({x:L.x*P,y:L.y*P,z:L.z*P})}}if(H!==void 0){let P=H/2;J.setRotation({x:0,y:Math.fround(Math.sin(P)),z:0,w:Math.fround(Math.cos(P))})}}}var UH;((K)=>{K.LOAD="SCENE_UI.LOAD";K.SET_ATTACHED_TO_ENTITY="SCENE_UI.SET_ATTACHED_TO_ENTITY";K.SET_OFFSET="SCENE_UI.SET_OFFSET";K.SET_POSITION="SCENE_UI.SET_POSITION";K.SET_STATE="SCENE_UI.SET_STATE";K.SET_VIEW_DISTANCE="SCENE_UI.SET_VIEW_DISTANCE";K.UNLOAD="SCENE_UI.UNLOAD"})(UH||={});class vJ extends s{_id;_attachedToEntity;_offset;_position;_state={};_templateId;_viewDistance;_world;constructor(J){if(!!J.attachedToEntity===!!J.position)E.fatalError("Either attachedToEntity or position must be set, but not both");super();this._attachedToEntity=J.attachedToEntity,this._offset=J.offset,this._position=J.position,this._state=J.state??{},this._templateId=J.templateId,this._viewDistance=J.viewDistance}get id(){return this._id}get attachedToEntity(){return this._attachedToEntity}get isLoaded(){return this._id!==void 0}get offset(){return this._offset}get position(){return this._position}get state(){return this._state}get templateId(){return this._templateId}get viewDistance(){return this._viewDistance}get world(){return this._world}load(J){if(this.isLoaded)return;if(this._attachedToEntity&&!this._attachedToEntity.isSpawned)return E.error(`SceneUI.load(): Attached entity ${this._attachedToEntity.id} must be spawned before loading SceneUI!`);this._id=J.sceneUIManager.registerSceneUI(this),this._world=J,this.emitWithWorld(J,"SCENE_UI.LOAD",{sceneUI:this})}setAttachedToEntity(J){if(!J.isSpawned)return E.error(`SceneUI.setAttachedToEntity(): Entity ${J.id} is not spawned!`);if(this._attachedToEntity===J)return;if(this._attachedToEntity=J,this._position=void 0,this.isLoaded)this.emitWithWorld(this._world,"SCENE_UI.SET_ATTACHED_TO_ENTITY",{sceneUI:this,entity:J})}setOffset(J){if(this._offset===J)return;if(this._offset=J,this.isLoaded)this.emitWithWorld(this._world,"SCENE_UI.SET_OFFSET",{sceneUI:this,offset:J})}setPosition(J){if(this._position===J)return;if(this._attachedToEntity=void 0,this._position=J,this.isLoaded)this.emitWithWorld(this._world,"SCENE_UI.SET_POSITION",{sceneUI:this,position:J})}setState(J){if(this._state={...this._state,...J},this.isLoaded)this.emitWithWorld(this._world,"SCENE_UI.SET_STATE",{sceneUI:this,state:this._state})}setViewDistance(J){if(this._viewDistance=J,this.isLoaded)this.emitWithWorld(this._world,"SCENE_UI.SET_VIEW_DISTANCE",{sceneUI:this,viewDistance:J})}unload(){if(!this.isLoaded||!this._world)return;this._world.sceneUIManager.unregisterSceneUI(this),this.emitWithWorld(this._world,"SCENE_UI.UNLOAD",{sceneUI:this}),this._id=void 0,this._world=void 0}serialize(){return t.serializeSceneUI(this)}}class n1 extends Y8{player;nametagSceneUI;constructor(J){super(J);if(this.player=J.player,this.nametagSceneUI=new vJ({templateId:"hytopia:nametag",attachedToEntity:this,offset:{x:0,y:1,z:0},viewDistance:15,state:{username:this.player.username,profilePictureUrl:this.player.profilePictureUrl}}),!J.controller)this.setController(new NJ)}spawn(J,X,Y){super.spawn(J,X,Y),this.nametagSceneUI.load(J),this.player.on("PLAYER.CHAT_MESSAGE_SEND",({message:Z})=>{this.nametagSceneUI.setState({chat:Z})})}tick(J){if(!this.isSpawned||!this.world||!this.controller)return;let{input:X,camera:Y}=this.player;this.controller.tickWithPlayerInput(this,X,Y.orientation,J),super.tick(J)}}class jJ{_entities=new Map;_nextEntityId=1;_world;constructor(J){this._world=J}get world(){return this._world}registerEntity(J){if(J.id!==void 0)E.fatalError(`EntityManager.registerEntity(): Entity ${J.name} is already assigned the id ${J.id}!`);let X=this._nextEntityId;return this._entities.set(X,J),this._nextEntityId++,X}unregisterEntity(J){if(J.id===void 0)return E.error(`EntityManager.unregisterEntity(): Entity ${J.name} is not assigned an id!`);this._entities.delete(J.id)}getAllEntities(){return Array.from(this._entities.values())}getAllPlayerEntities(){let J=[];return this._entities.forEach((X)=>{if(X instanceof n1)J.push(X)}),J}getPlayerEntitiesByPlayer(J){let X=[];return this._entities.forEach((Y)=>{if(Y instanceof n1&&Y.player===J)X.push(Y)}),X}getEntity(J){return this._entities.get(J)}getEntitiesByTag(J){let X=[];return this._entities.forEach((Y)=>{if(Y.tag===J)X.push(Y)}),X}getEntitiesByTagSubstring(J){let X=[];return this._entities.forEach((Y)=>{if(Y.tag?.includes(J))X.push(Y)}),X}getEntityChildren(J){let X=[];return this._entities.forEach((Y)=>{if(Y.parent===J)X.push(Y)}),X}tickEntities(J){this._entities.forEach((X)=>{X.tick(J)})}checkAndEmitUpdates(){this._entities.forEach((J)=>{if(!J.isSpawned)return;J.checkAndEmitUpdates()})}}class kJ{_lights=new Map;_nextLightId=1;_world;constructor(J){this._world=J}get world(){return this._world}despawnEntityAttachedLights(J){this.getAllEntityAttachedLights(J).forEach((X)=>{X.despawn()})}getAllLights(){return Array.from(this._lights.values())}getAllEntityAttachedLights(J){return this.getAllLights().filter((X)=>X.attachedToEntity===J)}registerLight(J){if(J.id!==void 0)return J.id;let X=this._nextLightId;return this._lights.set(X,J),this._nextLightId++,X}unregisterLight(J){if(J.id===void 0)return;this._lights.delete(J.id)}}var kC;((Y)=>{Y[Y.POINTLIGHT=0]="POINTLIGHT";Y[Y.SPOTLIGHT=1]="SPOTLIGHT"})(kC||={});var VH;((z)=>{z.DESPAWN="LIGHT.DESPAWN";z.SET_ANGLE="LIGHT.SET_ANGLE";z.SET_ATTACHED_TO_ENTITY="LIGHT.SET_ATTACHED_TO_ENTITY";z.SET_COLOR="LIGHT.SET_COLOR";z.SET_DISTANCE="LIGHT.SET_DISTANCE";z.SET_INTENSITY="LIGHT.SET_INTENSITY";z.SET_OFFSET="LIGHT.SET_OFFSET";z.SET_PENUMBRA="LIGHT.SET_PENUMBRA";z.SET_POSITION="LIGHT.SET_POSITION";z.SET_TRACKED_ENTITY="LIGHT.SET_TRACKED_ENTITY";z.SET_TRACKED_POSITION="LIGHT.SET_TRACKED_POSITION";z.SPAWN="LIGHT.SPAWN"})(VH||={});class MH extends s{_id;_angle;_attachedToEntity;_color;_distance;_intensity;_offset;_penumbra;_position;_trackedEntity;_trackedPosition;_type;_world;constructor(J){if(!!J.attachedToEntity===!!J.position)E.fatalError("Either attachedToEntity or position must be set, but not both");super();E.warning("WARNING: Lights are poorly optimized at this time. Using more than a few lights in your game can cause extremely bad performance (FPS) issues. Use lights sparingly!"),this._angle=J.angle,this._attachedToEntity=J.attachedToEntity,this._color=J.color??{r:255,g:255,b:255},this._distance=J.distance,this._intensity=J.intensity??1,this._offset=J.offset,this._penumbra=J.penumbra,this._position=J.position,this._trackedEntity=J.trackedEntity,this._trackedPosition=J.trackedPosition,this._type=J.type??0}get id(){return this._id}get angle(){return this._angle}get attachedToEntity(){return this._attachedToEntity}get color(){return this._color}get distance(){return this._distance}get intensity(){return this._intensity}get isSpawned(){return this._id!==void 0}get offset(){return this._offset}get penumbra(){return this._penumbra}get position(){return this._position}get trackedEntity(){return this._trackedEntity}get trackedPosition(){return this._trackedPosition}get type(){return this._type}get world(){return this._world}setAngle(J){if(this._angle===J)return;if(this._angle=J,this.isSpawned)this.emitWithWorld(this._world,"LIGHT.SET_ANGLE",{light:this,angle:J})}setAttachedToEntity(J){if(!J.isSpawned)return E.error(`Light.setAttachedToEntity(): Entity ${J.id} is not spawned!`);if(this._attachedToEntity===J)return;if(this._attachedToEntity=J,this._position=void 0,this.isSpawned)this.emitWithWorld(this._world,"LIGHT.SET_ATTACHED_TO_ENTITY",{light:this,entity:J})}setColor(J){if(this._color.r===J.r&&this._color.g===J.g&&this._color.b===J.b)return;if(this._color=J,this.isSpawned)this.emitWithWorld(this._world,"LIGHT.SET_COLOR",{light:this,color:J})}setDistance(J){if(this._distance===J)return;if(this._distance=J,this.isSpawned)this.emitWithWorld(this._world,"LIGHT.SET_DISTANCE",{light:this,distance:J})}setIntensity(J){if(this._intensity===J)return;if(this._intensity=J,this.isSpawned)this.emitWithWorld(this._world,"LIGHT.SET_INTENSITY",{light:this,intensity:J})}setOffset(J){if(this._offset===J)return;if(this._offset=J,this.isSpawned)this.emitWithWorld(this._world,"LIGHT.SET_OFFSET",{light:this,offset:J})}setPenumbra(J){if(this._penumbra===J)return;if(this._penumbra=J,this.isSpawned)this.emitWithWorld(this._world,"LIGHT.SET_PENUMBRA",{light:this,penumbra:J})}setPosition(J){if(this._position===J)return;if(this._position=J,this._attachedToEntity=void 0,this.isSpawned)this.emitWithWorld(this._world,"LIGHT.SET_POSITION",{light:this,position:J})}setTrackedEntity(J){if(!J.isSpawned)return E.error(`Light.setTrackedEntity(): Entity ${J.id} is not spawned!`);if(this._trackedEntity===J)return;if(this._trackedEntity=J,this._trackedPosition=void 0,this.isSpawned)this.emitWithWorld(this._world,"LIGHT.SET_TRACKED_ENTITY",{light:this,entity:J})}setTrackedPosition(J){if(this._trackedPosition===J)return;if(this._trackedPosition=J,this._trackedEntity=void 0,this.isSpawned)this.emitWithWorld(this._world,"LIGHT.SET_TRACKED_POSITION",{light:this,position:J})}despawn(){if(!this.isSpawned||!this._world)return;this._world.lightManager.unregisterLight(this),this.emitWithWorld(this._world,"LIGHT.DESPAWN",{light:this}),this._id=void 0,this._world=void 0}spawn(J){if(this.isSpawned)return;if(this._attachedToEntity&&!this._attachedToEntity.isSpawned)return E.error(`Light.spawn(): Attached entity ${this._attachedToEntity.id} must be spawned before spawning Light!`);this._id=J.lightManager.registerLight(this),this._world=J,this.emitWithWorld(J,"LIGHT.SPAWN",{light:this})}serialize(){return t.serializeLight(this)}}var TC;((Z)=>{Z[Z.FIRST_PERSON=0]="FIRST_PERSON";Z[Z.THIRD_PERSON=1]="THIRD_PERSON";Z[Z.SPECTATOR=2]="SPECTATOR"})(TC||={});var RH;((V)=>{V.LOOK_AT_ENTITY="PLAYER_CAMERA.LOOK_AT_ENTITY";V.LOOK_AT_POSITION="PLAYER_CAMERA.LOOK_AT_POSITION";V.SET_ATTACHED_TO_ENTITY="PLAYER_CAMERA.SET_ATTACHED_TO_ENTITY";V.SET_ATTACHED_TO_POSITION="PLAYER_CAMERA.SET_ATTACHED_TO_POSITION";V.SET_FILM_OFFSET="PLAYER_CAMERA.SET_FILM_OFFSET";V.SET_FORWARD_OFFSET="PLAYER_CAMERA.SET_FORWARD_OFFSET";V.SET_FOV="PLAYER_CAMERA.SET_FOV";V.SET_MODEL_HIDDEN_NODES="PLAYER_CAMERA.SET_MODEL_HIDDEN_NODES";V.SET_MODE="PLAYER_CAMERA.SET_MODE";V.SET_OFFSET="PLAYER_CAMERA.SET_OFFSET";V.SET_TRACKED_ENTITY="PLAYER_CAMERA.SET_TRACKED_ENTITY";V.SET_TRACKED_POSITION="PLAYER_CAMERA.SET_TRACKED_POSITION";V.SET_ZOOM="PLAYER_CAMERA.SET_ZOOM"})(RH||={});class TJ extends s{player;_attachedToEntity;_attachedToPosition;_filmOffset=0;_forwardOffset=0;_fov=75;_modelHiddenNodes=new Set;_mode=1;_offset={x:0,y:0,z:0};_orientation={pitch:0,yaw:0};_trackedEntity;_trackedPosition;_zoom=1;constructor(J){super();this.player=J}get attachedToEntity(){return this._attachedToEntity}get attachedToPosition(){return this._attachedToPosition}get facingDirection(){return{x:-Math.sin(this._orientation.yaw)*Math.cos(this._orientation.pitch),y:Math.sin(this._orientation.pitch),z:-Math.cos(this._orientation.yaw)*Math.cos(this._orientation.pitch)}}get filmOffset(){return this._filmOffset}get forwardOffset(){return this._forwardOffset}get fov(){return this._fov}get modelHiddenNodes(){return this._modelHiddenNodes}get mode(){return this._mode}get offset(){return this._offset}get orientation(){return this._orientation}get trackedEntity(){return this._trackedEntity}get trackedPosition(){return this._trackedPosition}get zoom(){return this._zoom}lookAtEntity(J){if(!this._requirePlayerWorld())return;this.emitWithWorld(this.player.world,"PLAYER_CAMERA.LOOK_AT_ENTITY",{playerCamera:this,entity:J})}lookAtPosition(J){if(!this._requirePlayerWorld())return;this.emitWithWorld(this.player.world,"PLAYER_CAMERA.LOOK_AT_POSITION",{playerCamera:this,position:J})}setAttachedToEntity(J){if(!this._requirePlayerWorld())return;if(!J.isSpawned)return E.error(`PlayerCamera.setAttachedToEntity(): Entity ${J.id} is not spawned!`);this._attachedToEntity=J,this.emitWithWorld(this.player.world,"PLAYER_CAMERA.SET_ATTACHED_TO_ENTITY",{playerCamera:this,entity:J})}setAttachedToPosition(J){if(!this._requirePlayerWorld())return;this._attachedToPosition=J,this.emitWithWorld(this.player.world,"PLAYER_CAMERA.SET_ATTACHED_TO_POSITION",{playerCamera:this,position:J})}setFilmOffset(J){if(!this._requirePlayerWorld())return;this._filmOffset=J,this.emitWithWorld(this.player.world,"PLAYER_CAMERA.SET_FILM_OFFSET",{playerCamera:this,filmOffset:J})}setForwardOffset(J){if(!this._requirePlayerWorld())return;this._forwardOffset=J,this.emitWithWorld(this.player.world,"PLAYER_CAMERA.SET_FORWARD_OFFSET",{playerCamera:this,forwardOffset:J})}setFov(J){if(!this._requirePlayerWorld())return;this._fov=J,this.emitWithWorld(this.player.world,"PLAYER_CAMERA.SET_FOV",{playerCamera:this,fov:J})}setModelHiddenNodes(J){if(!this._requirePlayerWorld())return;this._modelHiddenNodes=new Set(J.map((X)=>X.toLowerCase())),this.emitWithWorld(this.player.world,"PLAYER_CAMERA.SET_MODEL_HIDDEN_NODES",{playerCamera:this,modelHiddenNodes:this._modelHiddenNodes})}setMode(J){if(!this._requirePlayerWorld())return;this._mode=J,this.emitWithWorld(this.player.world,"PLAYER_CAMERA.SET_MODE",{playerCamera:this,mode:J})}setOffset(J){if(!this._requirePlayerWorld())return;this._offset=J,this.emitWithWorld(this.player.world,"PLAYER_CAMERA.SET_OFFSET",{playerCamera:this,offset:J})}setOrientationPitch(J){this._orientation.pitch=J}setOrientationYaw(J){this._orientation.yaw=J}setTrackedEntity(J){if(!this._requirePlayerWorld())return;this._trackedEntity=J,this.emitWithWorld(this.player.world,"PLAYER_CAMERA.SET_TRACKED_ENTITY",{playerCamera:this,entity:J})}setTrackedPosition(J){if(!this._requirePlayerWorld())return;this._trackedPosition=J,this.emitWithWorld(this.player.world,"PLAYER_CAMERA.SET_TRACKED_POSITION",{playerCamera:this,position:J})}setZoom(J){if(!this._requirePlayerWorld())return;this._zoom=J,this.emitWithWorld(this.player.world,"PLAYER_CAMERA.SET_ZOOM",{playerCamera:this,zoom:J})}serialize(){return t.serializePlayerCamera(this)}_requirePlayerWorld(){if(!this.player.world)E.error(`PlayerCamera._requirePlayerWorld(): Player ${this.player.id} is not in a world!`);return!!this.player.world}}var Q$;((W)=>{W.DATA="PLAYER_UI.DATA";W.LOAD="PLAYER_UI.LOAD";W.LOCK_POINTER="PLAYER_UI.LOCK_POINTER";W.SEND_DATA="PLAYER_UI.SEND_DATA"})(Q$||={});class DJ extends s{player;constructor(J){super();this.player=J}load(J){if(!this.player.world)return;this.emitWithWorld(this.player.world,"PLAYER_UI.LOAD",{playerUI:this,htmlUri:J})}lockPointer(J){if(!this.player.world)return;this.emitWithWorld(this.player.world,"PLAYER_UI.LOCK_POINTER",{playerUI:this,lock:J})}sendData(J){if(!this.player.world)return;this.emitWithWorld(this.player.world,"PLAYER_UI.SEND_DATA",{playerUI:this,data:J})}}class _J{_colliderHandleBlockTypeMap=new Map;_colliderHandleCollisionCallbackMap=new Map;_colliderHandleEntityMap=new Map;_cleanupBlockTypeColliderHandles=new Set;_pendingCleanupBlockTypeColliderHandles=new Set;_cleanupCollisionCallbackColliderHandles=new Set;_pendingCleanupCollisionCallbackColliderHandles=new Set;_cleanupEntityColliderHandles=new Set;_pendingCleanupEntityColliderHandles=new Set;getColliderBlockType(J){if(!this._requireSimulatedCollider(J))return;return this._colliderHandleBlockTypeMap.get(J.rawCollider.handle)}getColliderCollisionCallback(J){if(!this._requireSimulatedCollider(J))return;return this._colliderHandleCollisionCallbackMap.get(J.rawCollider.handle)}getColliderEntity(J){if(!this._requireSimulatedCollider(J))return;return this._colliderHandleEntityMap.get(J.rawCollider.handle)}getColliderHandleBlockType(J){return this._colliderHandleBlockTypeMap.get(J)}getColliderHandleCollisionCallback(J){return this._colliderHandleCollisionCallbackMap.get(J)}getColliderHandleEntity(J){return this._colliderHandleEntityMap.get(J)}removeColliderBlockType(J){if(!this._requireSimulatedCollider(J))return;this.removeColliderHandleBlockType(J.rawCollider.handle)}removeColliderCollisionCallback(J){if(!this._requireSimulatedCollider(J))return;this.removeColliderHandleCollisionCallback(J.rawCollider.handle)}removeColliderEntity(J){if(!this._requireSimulatedCollider(J))return;this.removeColliderHandleEntity(J.rawCollider.handle)}removeColliderHandleBlockType(J){this._colliderHandleBlockTypeMap.delete(J)}removeColliderHandleCollisionCallback(J){this._colliderHandleCollisionCallbackMap.delete(J)}removeColliderHandleEntity(J){this._colliderHandleEntityMap.delete(J)}setColliderBlockType(J,X){if(!this._requireSimulatedCollider(J))return;this.setColliderHandleBlockType(J.rawCollider.handle,X)}setColliderCollisionCallback(J,X){if(!this._requireSimulatedCollider(J))return;this.setColliderHandleCollisionCallback(J.rawCollider.handle,X)}setColliderEntity(J,X){if(!this._requireSimulatedCollider(J))return;this.setColliderHandleEntity(J.rawCollider.handle,X)}setColliderHandleBlockType(J,X){this._colliderHandleBlockTypeMap.set(J,X),this._cleanupBlockTypeColliderHandles.delete(J),this._pendingCleanupBlockTypeColliderHandles.delete(J)}setColliderHandleCollisionCallback(J,X){this._colliderHandleCollisionCallbackMap.set(J,X),this._cleanupCollisionCallbackColliderHandles.delete(J),this._pendingCleanupCollisionCallbackColliderHandles.delete(J)}setColliderHandleEntity(J,X){this._colliderHandleEntityMap.set(J,X),this._cleanupEntityColliderHandles.delete(J),this._pendingCleanupEntityColliderHandles.delete(J)}queueColliderHandleForCleanup(J){if(this._colliderHandleBlockTypeMap.has(J))this._pendingCleanupBlockTypeColliderHandles.add(J);if(this._colliderHandleCollisionCallbackMap.has(J))this._pendingCleanupCollisionCallbackColliderHandles.add(J);if(this._colliderHandleEntityMap.has(J))this._pendingCleanupEntityColliderHandles.add(J)}cleanup(){for(let J of this._cleanupBlockTypeColliderHandles)this._colliderHandleBlockTypeMap.delete(J);this._cleanupBlockTypeColliderHandles.clear();for(let J of this._cleanupCollisionCallbackColliderHandles)this._colliderHandleCollisionCallbackMap.delete(J);this._cleanupCollisionCallbackColliderHandles.clear();for(let J of this._cleanupEntityColliderHandles)this._colliderHandleEntityMap.delete(J);this._cleanupEntityColliderHandles.clear(),[[this._pendingCleanupBlockTypeColliderHandles,this._cleanupBlockTypeColliderHandles],[this._pendingCleanupCollisionCallbackColliderHandles,this._cleanupCollisionCallbackColliderHandles],[this._pendingCleanupEntityColliderHandles,this._cleanupEntityColliderHandles]].forEach(([J,X])=>{for(let Y of J.keys())X.add(Y);J.clear()})}_requireSimulatedCollider(J){if(!J.rawCollider)E.error("ColliderMap._requireSimulatedCollider(): Collider is not in the simulation.");return!!J.rawCollider}}var uX0={x:0,y:-32,z:0},wH=60,OH;((W)=>{W.STEP_START="SIMULATION.STEP_START";W.STEP_END="SIMULATION.STEP_END";W.DEBUG_RAYCAST="SIMULATION.DEBUG_RAYCAST";W.DEBUG_RENDER="SIMULATION.DEBUG_RENDER"})(OH||={});class EJ extends s{_colliderMap=new _J;_debugRaycastingEnabled=!1;_debugRenderingEnabled=!1;_rapierEventQueue;_rapierSimulation;_world;constructor(J,X=wH,Y=uX0){super();this._rapierEventQueue=new z0.EventQueue(!0),this._rapierSimulation=new z0.World(Y),this._rapierSimulation.timestep=Math.fround(1/X),this._world=J}get colliderMap(){return this._colliderMap}get isDebugRaycastingEnabled(){return this._debugRaycastingEnabled}get isDebugRenderingEnabled(){return this._debugRenderingEnabled}get gravity(){return this._rapierSimulation.gravity}get timestepS(){return this._rapierSimulation.timestep}get world(){return this._world}raycast(J,X,Y,Z={}){let W=new z0.Ray(J,X),$=this._rapierSimulation.castRay(W,Y,Z.ignoresSensors??!0,Z.filterFlags,Z.filterGroups,Z.filterExcludeCollider,Z.filterExcludeRigidBody,Z.filterPredicate);if(this._debugRaycastingEnabled)this.emitWithWorld(this._world,"SIMULATION.DEBUG_RAYCAST",{simulation:this,origin:J,direction:X,length:Y,hit:!!$});if(!$)return null;let Q=W.pointAt($.timeOfImpact),K=$.timeOfImpact,G=$.collider,F=this._colliderMap.getColliderHandleBlockType(G.handle);if(F)return{hitBlock:y9.fromGlobalCoordinate({x:Math.floor(Q.x-(W.dir.x<0?0.0001:-0.0001)),y:Math.floor(Q.y-(W.dir.y<0?0.0001:-0.0001)),z:Math.floor(Q.z-(W.dir.z<0?0.0001:-0.0001))},F),hitPoint:Q,hitDistance:K};let q=this._colliderMap.getColliderHandleEntity(G.handle);if(q)return{hitEntity:q,hitPoint:Q,hitDistance:K};return null}createRawCollider(J,X){return this._rapierSimulation.createCollider(J,X)}createRawRigidBody(J){return this._rapierSimulation.createRigidBody(J)}enableDebugRaycasting(J){this._debugRaycastingEnabled=J}enableDebugRendering(J){this._debugRenderingEnabled=J}getContactManifolds(J,X){let Y=[];return this._rapierSimulation.narrowPhase.contactPair(J,X,(Z,W)=>{if(Z.numContacts()===0)return;let $=Z.normal(),Q=[];for(let K=0;K<Z.numSolverContacts();K++)Q.push(Z.solverContactPoint(K));Y.push({contactPoints:Q,localNormalA:!W?Z.localNormal1():Z.localNormal2(),localNormalB:!W?Z.localNormal2():Z.localNormal1(),normal:!W?$:{x:-$.x,y:-$.y,z:-$.z}})}),Y}removeRawCollider(J){this._colliderMap.queueColliderHandleForCleanup(J.handle),this._rapierSimulation.removeCollider(J,!1)}removeRawRigidBody(J){this._rapierSimulation.removeRigidBody(J)}setGravity(J){this._rapierSimulation.gravity=J}step=(J)=>{this.emitWithWorld(this._world,"SIMULATION.STEP_START",{simulation:this,tickDeltaMs:J});let X=performance.now();if(this._rapierSimulation.step(this._rapierEventQueue),this._rapierEventQueue.drainContactForceEvents(this._onContactForceEvent),this._rapierEventQueue.drainCollisionEvents(this._onCollisionEvent),this._colliderMap.cleanup(),this.emitWithWorld(this._world,"SIMULATION.STEP_END",{simulation:this,stepDurationMs:performance.now()-X}),this._debugRenderingEnabled)this.emitWithWorld(this._world,"SIMULATION.DEBUG_RENDER",{simulation:this,...this._rapierSimulation.debugRender()})};_onCollisionEvent=(J,X,Y)=>{let[Z,W]=this._getCollisionObjects(J,X);if(!Z||!W)return;let $=(Q,K)=>{if(Q instanceof V6&&K instanceof Y8&&Q.hasListeners("BLOCK_TYPE.ENTITY_COLLISION"))Q.emit("BLOCK_TYPE.ENTITY_COLLISION",{blockType:Q,entity:K,started:Y,colliderHandleA:J,colliderHandleB:X});else if(Q instanceof Y8&&K instanceof V6&&Q.hasListeners("ENTITY.BLOCK_COLLISION"))Q.emit("ENTITY.BLOCK_COLLISION",{entity:Q,blockType:K,started:Y,colliderHandleA:J,colliderHandleB:X});else if(Q instanceof Y8&&K instanceof Y8&&Q.hasListeners("ENTITY.ENTITY_COLLISION"))Q.emit("ENTITY.ENTITY_COLLISION",{entity:Q,otherEntity:K,started:Y,colliderHandleA:J,colliderHandleB:X});else if(typeof Q==="function"&&(K instanceof Y8||K instanceof V6))Q(K,Y,J,X)};$(Z,W),$(W,Z)};_onContactForceEvent=(J)=>{let[X,Y]=this._getCollisionObjects(J.collider1(),J.collider2());if(!X||typeof X==="function"||!Y||typeof Y==="function")return;let Z={totalForce:J.totalForce(),totalForceMagnitude:J.totalForceMagnitude(),maxForceDirection:J.maxForceDirection(),maxForceMagnitude:J.maxForceMagnitude()},W=($,Q)=>{if($ instanceof V6&&Q instanceof Y8&&$.hasListeners("BLOCK_TYPE.ENTITY_CONTACT_FORCE"))$.emit("BLOCK_TYPE.ENTITY_CONTACT_FORCE",{blockType:$,entity:Q,contactForceData:Z});else if($ instanceof Y8&&Q instanceof V6&&$.hasListeners("ENTITY.BLOCK_CONTACT_FORCE"))$.emit("ENTITY.BLOCK_CONTACT_FORCE",{entity:$,blockType:Q,contactForceData:Z});else if($ instanceof Y8&&Q instanceof Y8&&$.hasListeners("ENTITY.ENTITY_CONTACT_FORCE"))$.emit("ENTITY.ENTITY_CONTACT_FORCE",{entity:$,otherEntity:Q,contactForceData:Z})};W(X,Y),W(Y,X)};_getCollisionObjects(J,X){let Y=this._colliderMap.getColliderHandleBlockType(J)??this._colliderMap.getColliderHandleCollisionCallback(J)??this._colliderMap.getColliderHandleEntity(J),Z=this._colliderMap.getColliderHandleBlockType(X)??this._colliderMap.getColliderHandleCollisionCallback(X)??this._colliderMap.getColliderHandleEntity(X);return[Y,Z]}}class K${_synchronizedPlayerReliablePackets=new Map;_queuedBroadcasts=[];_queuedAudioSynchronizations={};_queuedBlockSynchronizations={};_queuedBlockTypeSynchronizations={};_queuedChunkSynchronizations={};_queuedDebugRaycastSynchronizations=[];_queuedEntitySynchronizations={};_queuedLightSynchronizations={};_queuedPerPlayerSynchronizations=new Map;_queuedPerPlayerCameraSynchronizations=new Map;_queuedPerPlayerUISynchronizations=new Map;_queuedPerPlayerUIDatasSynchronizations=new Map;_queuedPlayerSynchronizations={};_queuedSceneUISynchronizations={};_queuedWorldSynchronization;_loadedSceneUIs=new Set;_spawnedChunks=new Set;_spawnedEntities=new Set;_world;constructor(J){this._world=J,this._subscribeToAudioEvents(),this._subscribeToBlockTypeRegistryEvents(),this._subscribeToChatEvents(),this._subscribeToChunkEvents(),this._subscribeToEntityEvents(),this._subscribeToLightEvents(),this._subscribeToPlayerEvents(),this._subscribeToPlayerCameraEvents(),this._subscribeToPlayerUIEvents(),this._subscribeToSceneUIEvents(),this._subscribeToSimulationEvents(),this._subscribeToWorldEvents()}synchronize(){let J=[],X=[],Y=this._world.loop.currentTick;this._queuedPerPlayerSynchronizations.forEach((z,V)=>{this._createOrGetSynchronizedPlayerReliablePackets(V,J).push(...z)});let Z=Object.values(this._queuedEntitySynchronizations);if(Z.length>0){let[z,V]=Z.reduce(([M,R],L)=>{for(let w in L)if(w!=="i"&&w!=="p"&&w!=="r")return M.push(L),[M,R];return R.push(L),[M,R]},[[],[]]);if(V.length>0){let M=A.createPacket(A.outboundPackets.entitiesPacketDefinition,V,Y);X.push(M)}if(z.length>0){let M=A.createPacket(A.outboundPackets.entitiesPacketDefinition,z,Y);J.push(M),this._synchronizedPlayerReliablePackets.forEach((R)=>R.push(M))}}let W=Object.values(this._queuedAudioSynchronizations);if(W.length>0){let z=A.createPacket(A.outboundPackets.audiosPacketDefinition,W,Y);J.push(z),this._synchronizedPlayerReliablePackets.forEach((V)=>V.push(z))}let $=Object.values(this._queuedBlockTypeSynchronizations);if($.length>0){let z=A.createPacket(A.outboundPackets.blockTypesPacketDefinition,$,Y);J.push(z),this._synchronizedPlayerReliablePackets.forEach((V)=>V.push(z))}let Q=Object.values(this._queuedBlockSynchronizations);if(Q.length>0){let z=A.createPacket(A.outboundPackets.blocksPacketDefinition,Q,Y);J.push(z),this._synchronizedPlayerReliablePackets.forEach((V)=>V.push(z))}let K=Object.values(this._queuedChunkSynchronizations);if(K.length>0){let z=A.createPacket(A.outboundPackets.chunksPacketDefinition,K,Y);J.push(z),this._synchronizedPlayerReliablePackets.forEach((V)=>V.push(z))}let G=Object.values(this._queuedLightSynchronizations);if(G.length>0){let z=A.createPacket(A.outboundPackets.lightsPacketDefinition,G,Y);J.push(z),this._synchronizedPlayerReliablePackets.forEach((V)=>V.push(z))}this._queuedPerPlayerUISynchronizations.forEach((z,V)=>{let M=A.createPacket(A.outboundPackets.uiPacketDefinition,z,Y);this._createOrGetSynchronizedPlayerReliablePackets(V,J).push(M)}),this._queuedPerPlayerUIDatasSynchronizations.forEach((z,V)=>{let M=A.createPacket(A.outboundPackets.uiDatasPacketDefinition,z,Y);this._createOrGetSynchronizedPlayerReliablePackets(V,J).push(M)});let F=Object.values(this._queuedSceneUISynchronizations);if(F.length>0){let z=A.createPacket(A.outboundPackets.sceneUIsPacketDefinition,F,Y);J.push(z),this._synchronizedPlayerReliablePackets.forEach((V)=>V.push(z))}if(this._queuedWorldSynchronization){let z=A.createPacket(A.outboundPackets.worldPacketDefinition,this._queuedWorldSynchronization,Y);J.push(z),this._synchronizedPlayerReliablePackets.forEach((V)=>V.push(z))}this._queuedPerPlayerCameraSynchronizations.forEach((z,V)=>{let M=A.createPacket(A.outboundPackets.cameraPacketDefinition,z,Y);this._createOrGetSynchronizedPlayerReliablePackets(V,J).push(M)});let q=Object.values(this._queuedPlayerSynchronizations);if(q.length>0){let z=A.createPacket(A.outboundPackets.playersPacketDefinition,q,Y);J.push(z),this._synchronizedPlayerReliablePackets.forEach((V)=>V.push(z))}this._queuedBroadcasts.forEach((z)=>{J.push(z),this._synchronizedPlayerReliablePackets.forEach((V)=>V.push(z))});let H=this._queuedDebugRaycastSynchronizations;if(H.length>0){let z=A.createPacket(A.outboundPackets.physicsDebugRaycastsPacketDefinition,H,Y);J.push(z),this._synchronizedPlayerReliablePackets.forEach((V)=>V.push(z))}j6.instance.getConnectedPlayersByWorld(this._world).forEach((z)=>{let V=this._synchronizedPlayerReliablePackets.get(z)??J;if(V.length>0)z.connection.send(V);if(X.length>0)z.connection.send(X,!1)}),this._queuedBroadcasts=[],this._queuedAudioSynchronizations={},this._queuedBlockSynchronizations={},this._queuedBlockTypeSynchronizations={},this._queuedChunkSynchronizations={},this._queuedDebugRaycastSynchronizations=[],this._queuedEntitySynchronizations={},this._queuedLightSynchronizations={},this._queuedPerPlayerSynchronizations.clear(),this._queuedPerPlayerCameraSynchronizations.clear(),this._queuedPerPlayerUISynchronizations.clear(),this._queuedPerPlayerUIDatasSynchronizations.clear(),this._queuedPlayerSynchronizations={},this._queuedSceneUISynchronizations={},this._queuedWorldSynchronization=void 0,this._loadedSceneUIs.clear(),this._spawnedChunks.clear(),this._spawnedEntities.clear(),this._synchronizedPlayerReliablePackets.clear()}_subscribeToAudioEvents(){this._world.final("AUDIO.PAUSE",this._onAudioPause),this._world.final("AUDIO.PLAY",this._onAudioPlay),this._world.final("AUDIO.PLAY_RESTART",this._onAudioPlayRestart),this._world.final("AUDIO.SET_ATTACHED_TO_ENTITY",this._onAudioSetAttachedToEntity),this._world.final("AUDIO.SET_CUTOFF_DISTANCE",this._onAudioSetCutoffDistance),this._world.final("AUDIO.SET_DETUNE",this._onAudioSetDetune),this._world.final("AUDIO.SET_DISTORTION",this._onAudioSetDistortion),this._world.final("AUDIO.SET_POSITION",this._onAudioSetPosition),this._world.final("AUDIO.SET_PLAYBACK_RATE",this._onAudioSetPlaybackRate),this._world.final("AUDIO.SET_REFERENCE_DISTANCE",this._onAudioSetReferenceDistance),this._world.final("AUDIO.SET_VOLUME",this._onAudioSetVolume)}_subscribeToBlockTypeRegistryEvents(){this._world.final("BLOCK_TYPE_REGISTRY.REGISTER_BLOCK_TYPE",this._onBlockTypeRegistryRegisterBlockType)}_subscribeToChatEvents(){this._world.final("CHAT.BROADCAST_MESSAGE",this._onChatSendBroadcastMessage),this._world.final("CHAT.PLAYER_MESSAGE",this._onChatSendPlayerMessage)}_subscribeToChunkEvents(){this._world.final("CHUNK.SPAWN",this._onChunkSpawn),this._world.final("CHUNK.DESPAWN",this._onChunkDespawn),this._world.final("CHUNK.SET_BLOCK",this._onChunkSetBlock)}_subscribeToEntityEvents(){this._world.final("ENTITY.SPAWN",this._onEntitySpawn),this._world.final("ENTITY.DESPAWN",this._onEntityDespawn),this._world.final("ENTITY.SET_MODEL_ANIMATIONS_PLAYBACK_RATE",this._onEntitySetModelAnimationsPlaybackRate),this._world.final("ENTITY.SET_MODEL_HIDDEN_NODES",this._onEntitySetModelHiddenNodes),this._world.final("ENTITY.SET_OPACITY",this._onEntitySetOpacity),this._world.final("ENTITY.SET_PARENT",this._onEntitySetParent),this._world.final("ENTITY.SET_TINT_COLOR",this._onEntitySetTintColor),this._world.final("ENTITY.START_MODEL_LOOPED_ANIMATIONS",this._onEntityStartModelLoopedAnimations),this._world.final("ENTITY.START_MODEL_ONESHOT_ANIMATIONS",this._onEntityStartModelOneshotAnimations),this._world.final("ENTITY.STOP_MODEL_ANIMATIONS",this._onEntityStopModelAnimations),this._world.final("ENTITY.UPDATE_POSITION",this._onEntityUpdatePosition),this._world.final("ENTITY.UPDATE_ROTATION",this._onEntityUpdateRotation)}_subscribeToLightEvents(){this._world.final("LIGHT.DESPAWN",this._onLightDespawn),this._world.final("LIGHT.SET_ANGLE",this._onLightSetAngle),this._world.final("LIGHT.SET_ATTACHED_TO_ENTITY",this._onLightSetAttachedToEntity),this._world.final("LIGHT.SET_COLOR",this._onLightSetColor),this._world.final("LIGHT.SET_DISTANCE",this._onLightSetDistance),this._world.final("LIGHT.SET_INTENSITY",this._onLightSetIntensity),this._world.final("LIGHT.SET_OFFSET",this._onLightSetOffset),this._world.final("LIGHT.SET_PENUMBRA",this._onLightSetPenumbra),this._world.final("LIGHT.SET_POSITION",this._onLightSetPosition),this._world.final("LIGHT.SET_TRACKED_ENTITY",this._onLightSetTrackedEntity),this._world.final("LIGHT.SET_TRACKED_POSITION",this._onLightSetTrackedPosition),this._world.final("LIGHT.SPAWN",this._onLightSpawn)}_subscribeToPlayerEvents(){this._world.final("PLAYER.JOINED_WORLD",this._onPlayerJoinedWorld),this._world.final("PLAYER.LEFT_WORLD",this._onPlayerLeftWorld),this._world.final("PLAYER.REQUEST_SYNC",this._onPlayerRequestSync)}_subscribeToPlayerCameraEvents(){this._world.final("PLAYER_CAMERA.LOOK_AT_ENTITY",this._onPlayerCameraLookAtEntity),this._world.final("PLAYER_CAMERA.LOOK_AT_POSITION",this._onPlayerCameraLookAtPosition),this._world.final("PLAYER_CAMERA.SET_ATTACHED_TO_ENTITY",this._onPlayerCameraSetAttachedToEntity),this._world.final("PLAYER_CAMERA.SET_ATTACHED_TO_POSITION",this._onPlayerCameraSetAttachedToPosition),this._world.final("PLAYER_CAMERA.SET_FILM_OFFSET",this._onPlayerCameraSetFilmOffset),this._world.final("PLAYER_CAMERA.SET_FORWARD_OFFSET",this._onPlayerCameraSetForwardOffset),this._world.final("PLAYER_CAMERA.SET_FOV",this._onPlayerCameraSetFov),this._world.final("PLAYER_CAMERA.SET_MODEL_HIDDEN_NODES",this._onPlayerCameraSetModelHiddenNodes),this._world.final("PLAYER_CAMERA.SET_MODE",this._onPlayerCameraSetMode),this._world.final("PLAYER_CAMERA.SET_OFFSET",this._onPlayerCameraSetOffset),this._world.final("PLAYER_CAMERA.SET_TRACKED_ENTITY",this._onPlayerCameraSetTrackedEntity),this._world.final("PLAYER_CAMERA.SET_TRACKED_POSITION",this._onPlayerCameraSetTrackedPosition),this._world.final("PLAYER_CAMERA.SET_ZOOM",this._onPlayerCameraSetZoom)}_subscribeToPlayerUIEvents(){this._world.final("PLAYER_UI.LOAD",this._onPlayerUILoad),this._world.final("PLAYER_UI.LOCK_POINTER",this._onPlayerUILockPointer),this._world.final("PLAYER_UI.SEND_DATA",this._onPlayerUISendData)}_subscribeToSceneUIEvents(){this._world.final("SCENE_UI.LOAD",this._onSceneUILoad),this._world.final("SCENE_UI.SET_ATTACHED_TO_ENTITY",this._onSceneUISetAttachedToEntity),this._world.final("SCENE_UI.SET_OFFSET",this._onSceneUISetOffset),this._world.final("SCENE_UI.SET_POSITION",this._onSceneUISetPosition),this._world.final("SCENE_UI.SET_STATE",this._onSceneUISetState),this._world.final("SCENE_UI.SET_VIEW_DISTANCE",this._onSceneUISetViewDistance),this._world.final("SCENE_UI.UNLOAD",this._onSceneUIUnload)}_subscribeToSimulationEvents(){this._world.final("SIMULATION.DEBUG_RAYCAST",this._onSimulationDebugRaycast),this._world.final("SIMULATION.DEBUG_RENDER",this._onSimulationDebugRender)}_subscribeToWorldEvents(){this._world.final("WORLD.SET_AMBIENT_LIGHT_COLOR",this._onWorldSetAmbientLightColor),this._world.final("WORLD.SET_AMBIENT_LIGHT_INTENSITY",this._onWorldSetAmbientLightIntensity),this._world.final("WORLD.SET_DIRECTIONAL_LIGHT_COLOR",this._onWorldSetDirectionalLightColor),this._world.final("WORLD.SET_DIRECTIONAL_LIGHT_INTENSITY",this._onWorldSetDirectionalLightIntensity),this._world.final("WORLD.SET_DIRECTIONAL_LIGHT_POSITION",this._onWorldSetDirectionalLightPosition)}_onAudioPause=(J)=>{let X=this._createOrGetQueuedAudioSync(J.audio);X.pa=!0,delete X.pl,delete X.r};_onAudioPlay=(J)=>{let X=J.audio.serialize();X.pl=!0,delete X.pa,delete X.r,this._queuedAudioSynchronizations[X.i]=X};_onAudioPlayRestart=(J)=>{let X=this._createOrGetQueuedAudioSync(J.audio);X.r=!0,delete X.pa,delete X.pl,this._queuedAudioSynchronizations[X.i]=X};_onAudioSetAttachedToEntity=(J)=>{let X=this._createOrGetQueuedAudioSync(J.audio);X.e=J.entity?J.entity.id:void 0,X.p=J.entity?void 0:X.p};_onAudioSetCutoffDistance=(J)=>{let X=this._createOrGetQueuedAudioSync(J.audio);X.cd=J.cutoffDistance};_onAudioSetDetune=(J)=>{let X=this._createOrGetQueuedAudioSync(J.audio);X.de=J.detune};_onAudioSetDistortion=(J)=>{let X=this._createOrGetQueuedAudioSync(J.audio);X.di=J.distortion};_onAudioSetPosition=(J)=>{let X=this._createOrGetQueuedAudioSync(J.audio);X.e=J.position?void 0:X.e,X.p=J.position?t.serializeVector(J.position):void 0};_onAudioSetPlaybackRate=(J)=>{let X=this._createOrGetQueuedAudioSync(J.audio);X.pr=J.playbackRate};_onAudioSetReferenceDistance=(J)=>{let X=this._createOrGetQueuedAudioSync(J.audio);X.rd=J.referenceDistance};_onAudioSetVolume=(J)=>{let X=this._createOrGetQueuedAudioSync(J.audio);X.v=J.volume};_onBlockTypeRegistryRegisterBlockType=(J)=>{let X=J.blockType.serialize();this._queuedBlockTypeSynchronizations[J.blockType.id]=X};_onChatSendBroadcastMessage=(J)=>{let{player:X,message:Y,color:Z}=J;this._queuedBroadcasts.push(A.createPacket(A.outboundPackets.chatMessagesPacketDefinition,[{m:Y,c:Z,p:X?.id}],this._world.loop.currentTick))};_onChatSendPlayerMessage=(J)=>{let{player:X,message:Y,color:Z}=J,W=this._queuedPerPlayerSynchronizations.get(X)??[];W.push(A.createPacket(A.outboundPackets.chatMessagesPacketDefinition,[{m:Y,c:Z}],this._world.loop.currentTick)),this._queuedPerPlayerSynchronizations.set(X,W)};_onChunkSpawn=(J)=>{let X=this._createOrGetQueuedChunkSync(J.chunk);X.b=Array.from(J.chunk.blocks),X.rm=void 0,this._spawnedChunks.add(X.c.join(","))};_onChunkDespawn=(J)=>{let X=this._createOrGetQueuedChunkSync(J.chunk),Y=X.c.join(",");if(this._spawnedChunks.has(Y))delete this._queuedChunkSynchronizations[Y],this._spawnedChunks.delete(Y);else X.rm=!0};_onChunkSetBlock=(J)=>{let X=this._createOrGetQueuedBlockSync(J.globalCoordinate);X.i=J.blockTypeId};_onEntitySetModelAnimationsPlaybackRate=(J)=>{let X=this._createOrGetQueuedEntitySync(J.entity);X.ap=J.playbackRate};_onEntitySpawn=(J)=>{let X=J.entity.serialize();this._queuedEntitySynchronizations[X.i]=X,this._spawnedEntities.add(X.i)};_onEntityDespawn=(J)=>{let X=this._createOrGetQueuedEntitySync(J.entity);if(this._spawnedEntities.has(X.i))delete this._queuedEntitySynchronizations[X.i],this._spawnedEntities.delete(X.i);else X.rm=!0};_onEntitySetModelHiddenNodes=(J)=>{let X=this._createOrGetQueuedEntitySync(J.entity);X.h=Array.from(J.modelHiddenNodes)};_onEntitySetOpacity=(J)=>{let X=this._createOrGetQueuedEntitySync(J.entity);X.o=J.opacity};_onEntitySetParent=(J)=>{let X=this._createOrGetQueuedEntitySync(J.entity);X.pe=J.parent?J.parent.id:void 0,X.pn=J.parentNodeName};_onEntitySetTintColor=(J)=>{let X=this._createOrGetQueuedEntitySync(J.entity);X.t=J.tintColor?t.serializeRgbColor(J.tintColor):void 0};_onEntityStartModelLoopedAnimations=(J)=>{let X=this._createOrGetQueuedEntitySync(J.entity);if(X.al=Array.from(new Set([...X.al??[],...J.animations])),X.as)X.as=X.as.filter((Y)=>!J.animations.has(Y)).filter(Boolean)};_onEntityStartModelOneshotAnimations=(J)=>{let X=this._createOrGetQueuedEntitySync(J.entity);if(X.ao=Array.from(new Set([...X.ao??[],...J.animations])),X.as)X.as=X.as.filter((Y)=>!J.animations.has(Y)).filter(Boolean)};_onEntityStopModelAnimations=(J)=>{let X=this._createOrGetQueuedEntitySync(J.entity);if(X.al)X.al=X.al.filter((Y)=>!J.animations.has(Y)).filter(Boolean);if(X.ao)X.ao=X.ao.filter((Y)=>!J.animations.has(Y)).filter(Boolean);X.as=Array.from(new Set([...X.as??[],...J.animations]))};_onEntityUpdateRotation=(J)=>{let X=this._createOrGetQueuedEntitySync(J.entity);X.r=[J.rotation.x,J.rotation.y,J.rotation.z,J.rotation.w]};_onEntityUpdatePosition=(J)=>{let X=this._createOrGetQueuedEntitySync(J.entity);X.p=[J.position.x,J.position.y,J.position.z]};_onLightDespawn=(J)=>{let X=this._createOrGetQueuedLightSync(J.light);X.rm=!0};_onLightSetAngle=(J)=>{let X=this._createOrGetQueuedLightSync(J.light);X.a=J.angle};_onLightSetAttachedToEntity=(J)=>{let X=this._createOrGetQueuedLightSync(J.light);X.e=J.entity?J.entity.id:void 0,X.p=J.entity?void 0:X.p};_onLightSetColor=(J)=>{let X=this._createOrGetQueuedLightSync(J.light);X.c=t.serializeRgbColor(J.color)};_onLightSetDistance=(J)=>{let X=this._createOrGetQueuedLightSync(J.light);X.d=J.distance};_onLightSetIntensity=(J)=>{let X=this._createOrGetQueuedLightSync(J.light);X.n=J.intensity};_onLightSetOffset=(J)=>{let X=this._createOrGetQueuedLightSync(J.light);X.o=J.offset?t.serializeVector(J.offset):void 0};_onLightSetPenumbra=(J)=>{let X=this._createOrGetQueuedLightSync(J.light);X.pe=J.penumbra};_onLightSetPosition=(J)=>{let X=this._createOrGetQueuedLightSync(J.light);X.p=J.position?t.serializeVector(J.position):void 0,X.e=J.position?void 0:X.e};_onLightSetTrackedEntity=(J)=>{let X=this._createOrGetQueuedLightSync(J.light);X.te=J.entity?J.entity.id:void 0,X.tp=J.entity?void 0:X.tp};_onLightSetTrackedPosition=(J)=>{let X=this._createOrGetQueuedLightSync(J.light);X.tp=J.position?t.serializeVector(J.position):void 0,X.te=J.position?void 0:X.te};_onLightSpawn=(J)=>{let X=J.light.serialize();this._queuedLightSynchronizations[X.i]=X};_onPlayerCameraLookAtEntity=(J)=>{let X=this._createOrGetQueuedPlayerCameraSync(J.playerCamera);X.pl=t.serializeVector(J.entity.position),delete X.et,delete X.pt};_onPlayerCameraLookAtPosition=(J)=>{let X=this._createOrGetQueuedPlayerCameraSync(J.playerCamera);X.pl=J.position?t.serializeVector(J.position):void 0,delete X.et,delete X.pt};_onPlayerCameraSetAttachedToEntity=(J)=>{let X=this._createOrGetQueuedPlayerCameraSync(J.playerCamera);X.e=J.entity.id,delete X.p};_onPlayerCameraSetAttachedToPosition=(J)=>{let X=this._createOrGetQueuedPlayerCameraSync(J.playerCamera);X.p=J.position?t.serializeVector(J.position):void 0,delete X.e};_onPlayerCameraSetFilmOffset=(J)=>{let X=this._createOrGetQueuedPlayerCameraSync(J.playerCamera);X.fo=J.filmOffset};_onPlayerCameraSetForwardOffset=(J)=>{let X=this._createOrGetQueuedPlayerCameraSync(J.playerCamera);X.ffo=J.forwardOffset};_onPlayerCameraSetFov=(J)=>{let X=this._createOrGetQueuedPlayerCameraSync(J.playerCamera);X.fv=J.fov};_onPlayerCameraSetModelHiddenNodes=(J)=>{let X=this._createOrGetQueuedPlayerCameraSync(J.playerCamera);X.h=Array.from(J.modelHiddenNodes)};_onPlayerCameraSetMode=(J)=>{let X=this._createOrGetQueuedPlayerCameraSync(J.playerCamera);X.m=J.mode};_onPlayerCameraSetOffset=(J)=>{let X=this._createOrGetQueuedPlayerCameraSync(J.playerCamera);X.o=J.offset?t.serializeVector(J.offset):void 0};_onPlayerCameraSetTrackedEntity=(J)=>{let X=this._createOrGetQueuedPlayerCameraSync(J.playerCamera);X.et=J.entity?J.entity.id:void 0,delete X.pl,delete X.pt};_onPlayerCameraSetTrackedPosition=(J)=>{let X=this._createOrGetQueuedPlayerCameraSync(J.playerCamera);X.pt=J.position?t.serializeVector(J.position):void 0,delete X.et,delete X.pl};_onPlayerCameraSetZoom=(J)=>{let X=this._createOrGetQueuedPlayerCameraSync(J.playerCamera);X.z=J.zoom};_onPlayerJoinedWorld=(J)=>{let{player:X}=J,Y=this._queuedPerPlayerSynchronizations.get(X)??[];Y.push(A.createPacket(A.outboundPackets.worldPacketDefinition,this._world.serialize(),this._world.loop.currentTick)),Y.push(A.createPacket(A.outboundPackets.blockTypesPacketDefinition,this._world.blockTypeRegistry.serialize(),this._world.loop.currentTick)),Y.push(A.createPacket(A.outboundPackets.chunksPacketDefinition,this._world.chunkLattice.getAllChunks().map((W)=>W.serialize()),this._world.loop.currentTick)),Y.push(A.createPacket(A.outboundPackets.entitiesPacketDefinition,this._world.entityManager.getAllEntities().map((W)=>{if(X.camera.attachedToEntity===void 0&&W instanceof n1&&W.player===X)X.camera.setAttachedToEntity(W);return W.serialize()}),this._world.loop.currentTick)),Y.push(A.createPacket(A.outboundPackets.audiosPacketDefinition,this._world.audioManager.getAllAudios().map((W)=>W.serialize()),this._world.loop.currentTick)),Y.push(A.createPacket(A.outboundPackets.lightsPacketDefinition,this._world.lightManager.getAllLights().map((W)=>W.serialize()),this._world.loop.currentTick)),Y.push(A.createPacket(A.outboundPackets.sceneUIsPacketDefinition,this._world.sceneUIManager.getAllSceneUIs().map((W)=>W.serialize()),this._world.loop.currentTick)),Y.push(A.createPacket(A.outboundPackets.playersPacketDefinition,j6.instance.getConnectedPlayers().map((W)=>W.serialize()),this._world.loop.currentTick));let Z=this._createOrGetQueuedPlayerCameraSync(X.camera);this._queuedPerPlayerCameraSynchronizations.set(X,{...X.camera.serialize(),...Z}),this._queuedPerPlayerSynchronizations.set(X,Y),this._queuedPlayerSynchronizations[X.id]=X.serialize()};_onPlayerLeftWorld=(J)=>{let X=this._createOrGetQueuedPlayerSync(J.player);X.rm=!0};_onPlayerRequestSync=(J)=>{J.player.connection.send([A.createPacket(A.outboundPackets.syncResponsePacketDefinition,{r:J.receivedAt,s:Date.now(),p:performance.now()-J.receivedAtMs,n:this._world.loop.nextTickMs},this._world.loop.currentTick)])};_onPlayerUILoad=(J)=>{let X=this._createOrGetQueuedPlayerUISync(J.playerUI);X.u=J.htmlUri};_onPlayerUILockPointer=(J)=>{let X=this._createOrGetQueuedPlayerUISync(J.playerUI);X.p=J.lock};_onPlayerUISendData=(J)=>{this._createOrGetQueuedPlayerUIDatasSync(J.playerUI).push(J.data)};_onSceneUILoad=(J)=>{let X=J.sceneUI.serialize();this._queuedSceneUISynchronizations[X.i]=X,this._loadedSceneUIs.add(X.i)};_onSceneUISetAttachedToEntity=(J)=>{let X=this._createOrGetQueuedSceneUISync(J.sceneUI);X.e=J.entity?J.entity.id:void 0,X.p=J.entity?void 0:X.p};_onSceneUISetOffset=(J)=>{let X=this._createOrGetQueuedSceneUISync(J.sceneUI);X.o=J.offset?t.serializeVector(J.offset):void 0};_onSceneUISetPosition=(J)=>{let X=this._createOrGetQueuedSceneUISync(J.sceneUI);X.p=J.position?t.serializeVector(J.position):void 0,X.e=J.position?void 0:X.e};_onSceneUISetState=(J)=>{let X=this._createOrGetQueuedSceneUISync(J.sceneUI);X.s=J.state};_onSceneUISetViewDistance=(J)=>{let X=this._createOrGetQueuedSceneUISync(J.sceneUI);X.v=J.viewDistance};_onSceneUIUnload=(J)=>{let X=this._createOrGetQueuedSceneUISync(J.sceneUI);if(this._loadedSceneUIs.has(X.i))delete this._queuedSceneUISynchronizations[X.i],this._loadedSceneUIs.delete(X.i);else X.rm=!0};_onSimulationDebugRaycast=(J)=>{this._queuedDebugRaycastSynchronizations.push(t.serializePhysicsDebugRaycast(J))};_onSimulationDebugRender=(J)=>{this._queuedBroadcasts.push(A.createPacket(A.outboundPackets.physicsDebugRenderPacketDefinition,{v:Array.from(J.vertices),c:Array.from(J.colors)},this._world.loop.currentTick))};_onWorldSetAmbientLightColor=(J)=>{let X=this._createOrGetQueuedWorldSync(J.world);X.ac=t.serializeRgbColor(J.color)};_onWorldSetAmbientLightIntensity=(J)=>{let X=this._createOrGetQueuedWorldSync(J.world);X.ai=J.intensity};_onWorldSetDirectionalLightColor=(J)=>{let X=this._createOrGetQueuedWorldSync(J.world);X.dc=t.serializeRgbColor(J.color)};_onWorldSetDirectionalLightIntensity=(J)=>{let X=this._createOrGetQueuedWorldSync(J.world);X.di=J.intensity};_onWorldSetDirectionalLightPosition=(J)=>{let X=this._createOrGetQueuedWorldSync(J.world);X.dp=t.serializeVector(J.position)};_createOrGetQueuedAudioSync(J){if(J.id===void 0)E.fatalError("NetworkSynchronizer._createOrGetQueuedAudioSync(): Audio has no id!");return this._queuedAudioSynchronizations[J.id]??={i:J.id}}_createOrGetQueuedBlockSync(J){let{x:X,y:Y,z:Z}=J;return this._queuedBlockSynchronizations[`${X},${Y},${Z}`]??={i:0,c:[X,Y,Z]}}_createOrGetQueuedChunkSync(J){if(!J.originCoordinate)E.fatalError("NetworkSynchronizer._createOrGetQueuedChunkSync(): Chunk has no origin coordinate!");let{x:X,y:Y,z:Z}=J.originCoordinate;return this._queuedChunkSynchronizations[`${X},${Y},${Z}`]??={c:[X,Y,Z]}}_createOrGetQueuedEntitySync(J){if(J.id===void 0)E.fatalError("NetworkSynchronizer._createOrGetQueuedEntitySync(): Entity has no id!");return this._queuedEntitySynchronizations[J.id]??={i:J.id}}_createOrGetQueuedLightSync(J){if(J.id===void 0)E.fatalError("NetworkSynchronizer._createOrGetQueuedLightSync(): Light has no id!");return this._queuedLightSynchronizations[J.id]??={i:J.id}}_createOrGetQueuedPlayerSync(J){if(J.id===void 0)E.fatalError("NetworkSynchronizer._createOrGetQueuedPlayerSync(): Player has no id!");return this._queuedPlayerSynchronizations[J.id]??={i:J.id}}_createOrGetQueuedPlayerCameraSync(J){let X=this._queuedPerPlayerCameraSynchronizations.get(J.player);if(!X)X={},this._queuedPerPlayerCameraSynchronizations.set(J.player,X);return X}_createOrGetQueuedPlayerUISync(J){let X=this._queuedPerPlayerUISynchronizations.get(J.player);if(!X)X={},this._queuedPerPlayerUISynchronizations.set(J.player,X);return X}_createOrGetQueuedPlayerUIDatasSync(J){let X=this._queuedPerPlayerUIDatasSynchronizations.get(J.player);if(!X)X=[],this._queuedPerPlayerUIDatasSynchronizations.set(J.player,X);return X}_createOrGetQueuedSceneUISync(J){if(J.id===void 0)E.fatalError("NetworkSynchronizer._createOrGetQueuedSceneUISync(): SceneUI has no id!");return this._queuedSceneUISynchronizations[J.id]??={i:J.id}}_createOrGetQueuedWorldSync(J){if(J.id!==this._world.id)E.fatalError("NetworkSynchronizer._createOrGetQueuedWorldSync(): World does not match this network synchronizer world!");return this._queuedWorldSynchronization??={i:J.id}}_createOrGetSynchronizedPlayerReliablePackets(J,X){let Y=this._synchronizedPlayerReliablePackets.get(J);if(!Y)Y=[...X],this._synchronizedPlayerReliablePackets.set(J,Y);return Y}}class CJ{_sceneUIs=new Map;_nextSceneUIId=1;_world;constructor(J){this._world=J}get world(){return this._world}getAllSceneUIs(){return Array.from(this._sceneUIs.values())}getAllEntityAttachedSceneUIs(J){return this.getAllSceneUIs().filter((X)=>X.attachedToEntity===J)}getSceneUIById(J){return this._sceneUIs.get(J)}registerSceneUI(J){if(J.id!==void 0)return J.id;let X=this._nextSceneUIId;return this._sceneUIs.set(X,J),this._nextSceneUIId++,X}unloadEntityAttachedSceneUIs(J){this.getAllEntityAttachedSceneUIs(J).forEach((X)=>{X.unload()})}unregisterSceneUI(J){if(J.id===void 0)return;this._sceneUIs.delete(J.id)}}class SJ{_accumulatorMs=0;_targetTicksPerSecond;_fixedTimestepMs;_fixedTimestepS;_nextTickMs=0;_lastLoopTimeMs=0;_tickFunction;_tickErrorCallback;_tickHandle=null;constructor(J,X,Y){this._targetTicksPerSecond=J,this._fixedTimestepS=Math.fround(1/J),this._fixedTimestepMs=Math.fround(this._fixedTimestepS*1000),this._tickFunction=X,this._tickErrorCallback=Y}get targetTicksPerSecond(){return this._targetTicksPerSecond}get fixedTimestepMs(){return this._fixedTimestepMs}get fixedTimestepS(){return this._fixedTimestepS}get nextTickMs(){return this._nextTickMs}start(){if(this._tickHandle)return E.warning("Ticker.start(): ticker already running.");this._lastLoopTimeMs=performance.now();let J=()=>{let X=performance.now(),Y=X-this._lastLoopTimeMs;if(this._lastLoopTimeMs=X,Y>250)Y=250;this._accumulatorMs+=Y;while(this._accumulatorMs>=this._fixedTimestepMs)this._tick(this._fixedTimestepMs),this._accumulatorMs-=this._fixedTimestepMs;this._nextTickMs=this._fixedTimestepMs-this._accumulatorMs,this._tickHandle=setTimeout(J,0)};J()}stop(){if(!this._tickHandle)return E.warning("Ticker.stop(): ticker not running.");clearTimeout(this._tickHandle),this._tickHandle=null}_tick(J){try{this._tickFunction(J)}catch(X){if(X instanceof Error&&this._tickErrorCallback)this._tickErrorCallback(X);else E.warning(`Ticker._tick(): tick callback threw an error, but it was not an instance of Error. Error: ${X}`)}}}var DC;(($)=>{$.START="WORLD_LOOP.START";$.STOP="WORLD_LOOP.STOP";$.TICK_START="WORLD_LOOP.TICK_START";$.TICK_END="WORLD_LOOP.TICK_END";$.TICK_ERROR="WORLD_LOOP.TICK_ERROR"})(DC||={});class IJ extends s{_currentTick=0;_ticker;_world;constructor(J,X=wH){super();this._ticker=new SJ(X,this._tick,this._onTickError),this._world=J}get currentTick(){return this._currentTick}get nextTickMs(){return this._ticker.nextTickMs}get timestepS(){return this._ticker.fixedTimestepS}get world(){return this._world}start(){this._ticker.start(),this.emitWithWorld(this._world,"WORLD_LOOP.START",{worldLoop:this})}stop(){this._ticker.stop(),this.emitWithWorld(this._world,"WORLD_LOOP.STOP",{worldLoop:this})}_tick=(J)=>{this.emitWithWorld(this._world,"WORLD_LOOP.TICK_START",{worldLoop:this,tickDeltaMs:J});let X=performance.now();this._world.chunkLattice.updateChunks(),this._world.entityManager.tickEntities(J),this._world.simulation.step(J),this._world.entityManager.checkAndEmitUpdates(),this._world.networkSynchronizer.synchronize(),this._currentTick++,this.emitWithWorld(this._world,"WORLD_LOOP.TICK_END",{worldLoop:this,tickDurationMs:performance.now()-X})};_onTickError=(J)=>{E.error(`WorldLoop._onTickError(): Error: ${J}`),this.emitWithWorld(this._world,"WORLD_LOOP.TICK_ERROR",{worldLoop:this,error:J})}}var xH;((K)=>{K.SET_AMBIENT_LIGHT_COLOR="WORLD.SET_AMBIENT_LIGHT_COLOR";K.SET_AMBIENT_LIGHT_INTENSITY="WORLD.SET_AMBIENT_LIGHT_INTENSITY";K.SET_DIRECTIONAL_LIGHT_COLOR="WORLD.SET_DIRECTIONAL_LIGHT_COLOR";K.SET_DIRECTIONAL_LIGHT_INTENSITY="WORLD.SET_DIRECTIONAL_LIGHT_INTENSITY";K.SET_DIRECTIONAL_LIGHT_POSITION="WORLD.SET_DIRECTIONAL_LIGHT_POSITION";K.START="WORLD.START";K.STOP="WORLD.STOP"})(xH||={});class hJ extends s{_id;_ambientLightColor;_ambientLightIntensity;_directionalLightColor;_directionalLightIntensity;_directionalLightPosition;_name;_skyboxUri;_audioManager;_blockTypeRegistry;_chatManager;_chunkLattice;_entityManager;_lightManager;_loop;_networkSynchronizer;_sceneUIManager;_simulation;constructor(J){super();this._id=J.id,this._ambientLightColor=J.ambientLightColor??{r:255,g:255,b:255},this._ambientLightIntensity=J.ambientLightIntensity??1,this._directionalLightColor=J.directionalLightColor??{r:255,g:255,b:255},this._directionalLightIntensity=J.directionalLightIntensity??3,this._directionalLightPosition=J.directionalLightPosition??{x:100,y:150,z:100},this._name=J.name,this._skyboxUri=J.skyboxUri,this._audioManager=new Q4(this),this._blockTypeRegistry=new d4(this),this._chatManager=new fJ(this),this._chunkLattice=new PJ(this),this._entityManager=new jJ(this),this._lightManager=new kJ(this),this._loop=new IJ(this,J.tickRate),this._networkSynchronizer=new K$(this),this._sceneUIManager=new CJ(this),this._simulation=new EJ(this,J.tickRate,J.gravity)}get id(){return this._id}get ambientLightColor(){return this._ambientLightColor}get ambientLightIntensity(){return this._ambientLightIntensity}get directionalLightColor(){return this._directionalLightColor}get directionalLightIntensity(){return this._directionalLightIntensity}get directionalLightPosition(){return this._directionalLightPosition}get name(){return this._name}get skyboxUri(){return this._skyboxUri}get audioManager(){return this._audioManager}get blockTypeRegistry(){return this._blockTypeRegistry}get chatManager(){return this._chatManager}get chunkLattice(){return this._chunkLattice}get entityManager(){return this._entityManager}get lightManager(){return this._lightManager}get loop(){return this._loop}get networkSynchronizer(){return this._networkSynchronizer}get sceneUIManager(){return this._sceneUIManager}get simulation(){return this._simulation}loadMap(J){if(J.blockTypes)for(let X of J.blockTypes)this.blockTypeRegistry.registerGenericBlockType({id:X.id,isLiquid:X.isLiquid,name:X.name,textureUri:X.textureUri});if(J.blocks)for(let[X,Y]of Object.entries(J.blocks)){let[Z,W,$]=X.split(",").map(Number);this.chunkLattice.setBlock({x:Z,y:W,z:$},Y)}if(J.entities)for(let[X,Y]of Object.entries(J.entities)){let[Z,W,$]=X.split(",").map(Number);new Y8(Y).spawn(this,{x:Z,y:W,z:$})}}setAmbientLightColor(J){this._ambientLightColor=J,this.emit("WORLD.SET_AMBIENT_LIGHT_COLOR",{world:this,color:J})}setAmbientLightIntensity(J){this._ambientLightIntensity=J,this.emit("WORLD.SET_AMBIENT_LIGHT_INTENSITY",{world:this,intensity:J})}setDirectionalLightColor(J){this._directionalLightColor=J,this.emit("WORLD.SET_DIRECTIONAL_LIGHT_COLOR",{world:this,color:J})}setDirectionalLightIntensity(J){this._directionalLightIntensity=J,this.emit("WORLD.SET_DIRECTIONAL_LIGHT_INTENSITY",{world:this,intensity:J})}setDirectionalLightPosition(J){this._directionalLightPosition=J,this.emit("WORLD.SET_DIRECTIONAL_LIGHT_POSITION",{world:this,position:J})}start(){this._loop.start(),this.emit("WORLD.START",{world:this,startedAtMs:Date.now()})}stop(){this._loop.stop(),this.emit("WORLD.STOP",{world:this,stoppedAtMs:Date.now()})}serialize(){return t.serializeWorld(this)}}var _C;((Y)=>{Y.START="GAMESERVER.START";Y.STOP="GAMESERVER.STOP"})(_C||={});function dX0(J){z0.init().then(()=>{return R1.instance.modelRegistry.preloadModels()}).then(()=>{J(R1.instance.worlds[0]),R1.instance.start()}).catch((X)=>{E.fatalError(`Failed to initialize the game engine, exiting. Error: ${X}`)})}class R1{static _instance;_modelRegistry=U6.instance;_playerManager=j6.instance;_socket=i1.instance;_webServer=o5.instance;_worlds={};constructor(){let J=new hJ({id:0,name:"Default World",skyboxUri:"skyboxes/partly-cloudy"});this._worlds[J.id]=J}static get instance(){if(!this._instance)this._instance=new R1;return this._instance}get modelRegistry(){return this._modelRegistry}get playerManager(){return this._playerManager}get socket(){return this._socket}get webServer(){return this._webServer}get worlds(){return this._worlds}start(){m8.emit("GAMESERVER.START",{startedAtMs:performance.now()}),Object.values(this._worlds).forEach((J)=>J.start()),this._webServer.start()}stop(){m8.emit("GAMESERVER.STOP",{stoppedAtMs:performance.now()}),Object.values(this._worlds).forEach((J)=>J.stop())}}class b9{static instance=new b9;constructor(){}async getGlobalData(J){let X=await u6.instance.getData(J);if(!X||X.error){if(X?.error)E.warning(`PersistenceManager.getGlobalData(): ${X.error.message}`);return}return X}async getPlayerData(J){let X=await u6.instance.getData(this._getPlayerKey(J));if(!X||X.error){if(X?.error)E.warning(`PersistenceManager.getPlayerData(): ${X.error.message}`);return}return X}async setGlobalData(J,X){let Y=await u6.instance.setData(J,X);if(!Y||Y.error){if(Y?.error)E.warning(`PersistenceManager.setGlobalData(): ${Y.error.message}`);return}return Y}async setPlayerData(J,X){let Y=await u6.instance.setData(this._getPlayerKey(J),X);if(!Y||Y.error){if(Y?.error)E.warning(`PersistenceManager.setPlayerData(): ${Y.error.message}`);return}return Y}_getPlayerKey(J){return`player-${J.id}`}}var EC=["w","a","s","d","sp","sh","tb","ml","mr","q","e","r","f","z","x","c","v","1","2","3","4","5","6","7","8","9","0"],BJ;((W)=>{W.CHAT_MESSAGE_SEND="PLAYER.CHAT_MESSAGE_SEND";W.JOINED_WORLD="PLAYER.JOINED_WORLD";W.LEFT_WORLD="PLAYER.LEFT_WORLD";W.REQUEST_SYNC="PLAYER.REQUEST_SYNC"})(BJ||={});class r5 extends s{static _devNextPlayerId=1;id;username;profilePictureUrl;camera;connection;ui;_input={};_lastUnreliableInputSequenceNumber=0;_world;constructor(J,X){super();this.id=X?.user.id??`player-${r5._devNextPlayerId++}`,this.username=X?.user.username??this.id,this.profilePictureUrl=X?.user.profilePictureURL??void 0,this.camera=new TJ(this),this.connection=J,this.ui=new DJ(this),J.onPacket(A.PacketId.CHAT_MESSAGE_SEND,this._onChatMessageSendPacket),J.onPacket(A.PacketId.DEBUG_CONFIG,this._onDebugConfigPacket),J.onPacket(A.PacketId.INPUT,this._onInputPacket),J.onPacket(A.PacketId.SYNC_REQUEST,this._onSyncRequestPacket),J.onPacket(A.PacketId.UI_DATA_SEND,this._onUIDataSendPacket),this.joinWorld(R1.instance.worlds[0])}get input(){return this._input}get world(){return this._world}disconnect(){this.leaveWorld(),this.connection.close()}async getPersistedData(){return b9.instance.getPlayerData(this)}joinWorld(J){this.leaveWorld(),this._world=J,this.emitWithWorld(this._world,"PLAYER.JOINED_WORLD",{player:this,world:this._world})}leaveWorld(){if(!this._world)return;this.emitWithWorld(this._world,"PLAYER.LEFT_WORLD",{player:this,world:this._world}),this._world=void 0}async setPersistedData(J){return b9.instance.setPlayerData(this,J)}serialize(){return t.serializePlayer(this)}_onChatMessageSendPacket=(J)=>{if(this._world)this.emitWithWorld(this._world,"PLAYER.CHAT_MESSAGE_SEND",{player:this,message:J[1].m})};_onDebugConfigPacket=(J)=>{console.log(J)};_onInputPacket=(J)=>{let X=J[1];if(X.sq!==void 0){if(X.sq<this._lastUnreliableInputSequenceNumber)return;this._lastUnreliableInputSequenceNumber=X.sq}if(EC.forEach((Y)=>{let Z=Y;if(X[Z]!==void 0)this._input[Z]=Boolean(X[Z])}),X.cp!==void 0)this.camera.setOrientationPitch(X.cp);if(X.cy!==void 0)this.camera.setOrientationYaw(X.cy)};_onSyncRequestPacket=()=>{if(this._world)this.emitWithWorld(this._world,"PLAYER.REQUEST_SYNC",{player:this,receivedAt:Date.now(),receivedAtMs:performance.now()})};_onUIDataSendPacket=(J)=>{this.ui.emit("PLAYER_UI.DATA",{playerUI:this.ui,data:J[1]})}}var PH;((Y)=>{Y.BROADCAST_MESSAGE="CHAT.BROADCAST_MESSAGE";Y.PLAYER_MESSAGE="CHAT.PLAYER_MESSAGE"})(PH||={});class fJ extends s{_commandCallbacks={};_world;constructor(J){super();this._world=J,this._subscribeToPlayerEvents()}registerCommand(J,X){this._commandCallbacks[J]=X}unregisterCommand(J){delete this._commandCallbacks[J]}sendBroadcastMessage(J,X){this._sendBroadcastMessage(void 0,J,X)}sendPlayerMessage(J,X,Y){this.emitWithWorld(this._world,"CHAT.PLAYER_MESSAGE",{player:J,message:X,color:Y})}_subscribeToPlayerEvents(){this._world.on("PLAYER.CHAT_MESSAGE_SEND",(J)=>{let{player:X,message:Y}=J,[Z,...W]=Y.split(" "),$=this._commandCallbacks[Z];if($){$(X,W,Y);return}this._sendBroadcastMessage(X,Y)})}_sendBroadcastMessage(J,X,Y){this.emitWithWorld(this._world,"CHAT.BROADCAST_MESSAGE",{player:J,message:X,color:Y})}}var l=0.000001,Q0=typeof Float32Array!=="undefined"?Float32Array:Array,d6=Math.random;var L_0=Math.PI/180;if(!Math.hypot)Math.hypot=function(){var J=0,X=arguments.length;while(X--)J+=arguments[X]*arguments[X];return Math.sqrt(J)};var e0={};k6(e0,{transpose:()=>tX0,subtract:()=>SC,sub:()=>VY0,str:()=>QY0,set:()=>rX0,scale:()=>ZY0,rotate:()=>YY0,multiplyScalarAndAdd:()=>LY0,multiplyScalar:()=>zY0,multiply:()=>CC,mul:()=>UY0,invert:()=>eX0,identity:()=>sX0,fromValues:()=>oX0,fromScaling:()=>$Y0,fromRotation:()=>WY0,frob:()=>KY0,exactEquals:()=>qY0,equals:()=>HY0,determinant:()=>XY0,create:()=>iX0,copy:()=>aX0,clone:()=>nX0,adjoint:()=>JY0,add:()=>FY0,LDU:()=>GY0});function iX0(){var J=new Q0(4);if(Q0!=Float32Array)J[1]=0,J[2]=0;return J[0]=1,J[3]=1,J}function nX0(J){var X=new Q0(4);return X[0]=J[0],X[1]=J[1],X[2]=J[2],X[3]=J[3],X}function aX0(J,X){return J[0]=X[0],J[1]=X[1],J[2]=X[2],J[3]=X[3],J}function sX0(J){return J[0]=1,J[1]=0,J[2]=0,J[3]=1,J}function oX0(J,X,Y,Z){var W=new Q0(4);return W[0]=J,W[1]=X,W[2]=Y,W[3]=Z,W}function rX0(J,X,Y,Z,W){return J[0]=X,J[1]=Y,J[2]=Z,J[3]=W,J}function tX0(J,X){if(J===X){var Y=X[1];J[1]=X[2],J[2]=Y}else J[0]=X[0],J[1]=X[2],J[2]=X[1],J[3]=X[3];return J}function eX0(J,X){var Y=X[0],Z=X[1],W=X[2],$=X[3],Q=Y*$-W*Z;if(!Q)return null;return Q=1/Q,J[0]=$*Q,J[1]=-Z*Q,J[2]=-W*Q,J[3]=Y*Q,J}function JY0(J,X){var Y=X[0];return J[0]=X[3],J[1]=-X[1],J[2]=-X[2],J[3]=Y,J}function XY0(J){return J[0]*J[3]-J[2]*J[1]}function CC(J,X,Y){var Z=X[0],W=X[1],$=X[2],Q=X[3],K=Y[0],G=Y[1],F=Y[2],q=Y[3];return J[0]=Z*K+$*G,J[1]=W*K+Q*G,J[2]=Z*F+$*q,J[3]=W*F+Q*q,J}function YY0(J,X,Y){var Z=X[0],W=X[1],$=X[2],Q=X[3],K=Math.sin(Y),G=Math.cos(Y);return J[0]=Z*G+$*K,J[1]=W*G+Q*K,J[2]=Z*-K+$*G,J[3]=W*-K+Q*G,J}function ZY0(J,X,Y){var Z=X[0],W=X[1],$=X[2],Q=X[3],K=Y[0],G=Y[1];return J[0]=Z*K,J[1]=W*K,J[2]=$*G,J[3]=Q*G,J}function WY0(J,X){var Y=Math.sin(X),Z=Math.cos(X);return J[0]=Z,J[1]=Y,J[2]=-Y,J[3]=Z,J}function $Y0(J,X){return J[0]=X[0],J[1]=0,J[2]=0,J[3]=X[1],J}function QY0(J){return"mat2("+J[0]+", "+J[1]+", "+J[2]+", "+J[3]+")"}function KY0(J){return Math.hypot(J[0],J[1],J[2],J[3])}function GY0(J,X,Y,Z){return J[2]=Z[2]/Z[0],Y[0]=Z[0],Y[1]=Z[1],Y[3]=Z[3]-J[2]*Y[1],[J,X,Y]}function FY0(J,X,Y){return J[0]=X[0]+Y[0],J[1]=X[1]+Y[1],J[2]=X[2]+Y[2],J[3]=X[3]+Y[3],J}function SC(J,X,Y){return J[0]=X[0]-Y[0],J[1]=X[1]-Y[1],J[2]=X[2]-Y[2],J[3]=X[3]-Y[3],J}function qY0(J,X){return J[0]===X[0]&&J[1]===X[1]&&J[2]===X[2]&&J[3]===X[3]}function HY0(J,X){var Y=J[0],Z=J[1],W=J[2],$=J[3],Q=X[0],K=X[1],G=X[2],F=X[3];return Math.abs(Y-Q)<=l*Math.max(1,Math.abs(Y),Math.abs(Q))&&Math.abs(Z-K)<=l*Math.max(1,Math.abs(Z),Math.abs(K))&&Math.abs(W-G)<=l*Math.max(1,Math.abs(W),Math.abs(G))&&Math.abs($-F)<=l*Math.max(1,Math.abs($),Math.abs(F))}function zY0(J,X,Y){return J[0]=X[0]*Y,J[1]=X[1]*Y,J[2]=X[2]*Y,J[3]=X[3]*Y,J}function LY0(J,X,Y,Z){return J[0]=X[0]+Y[0]*Z,J[1]=X[1]+Y[1]*Z,J[2]=X[2]+Y[2]*Z,J[3]=X[3]+Y[3]*Z,J}var UY0=CC,VY0=SC;var h0={};k6(h0,{transpose:()=>NY0,translate:()=>kY0,subtract:()=>hC,sub:()=>uY0,str:()=>bY0,set:()=>xY0,scale:()=>DY0,rotate:()=>TY0,projection:()=>fY0,normalFromMat4:()=>hY0,multiplyScalarAndAdd:()=>gY0,multiplyScalar:()=>yY0,multiply:()=>IC,mul:()=>lY0,invert:()=>vY0,identity:()=>PY0,fromValues:()=>OY0,fromTranslation:()=>_Y0,fromScaling:()=>CY0,fromRotation:()=>EY0,fromQuat:()=>IY0,fromMat4:()=>MY0,fromMat2d:()=>SY0,frob:()=>pY0,exactEquals:()=>cY0,equals:()=>mY0,determinant:()=>jY0,create:()=>NH,copy:()=>wY0,clone:()=>RY0,adjoint:()=>BY0,add:()=>AY0});function NH(){var J=new Q0(9);if(Q0!=Float32Array)J[1]=0,J[2]=0,J[3]=0,J[5]=0,J[6]=0,J[7]=0;return J[0]=1,J[4]=1,J[8]=1,J}function MY0(J,X){return J[0]=X[0],J[1]=X[1],J[2]=X[2],J[3]=X[4],J[4]=X[5],J[5]=X[6],J[6]=X[8],J[7]=X[9],J[8]=X[10],J}function RY0(J){var X=new Q0(9);return X[0]=J[0],X[1]=J[1],X[2]=J[2],X[3]=J[3],X[4]=J[4],X[5]=J[5],X[6]=J[6],X[7]=J[7],X[8]=J[8],X}function wY0(J,X){return J[0]=X[0],J[1]=X[1],J[2]=X[2],J[3]=X[3],J[4]=X[4],J[5]=X[5],J[6]=X[6],J[7]=X[7],J[8]=X[8],J}function OY0(J,X,Y,Z,W,$,Q,K,G){var F=new Q0(9);return F[0]=J,F[1]=X,F[2]=Y,F[3]=Z,F[4]=W,F[5]=$,F[6]=Q,F[7]=K,F[8]=G,F}function xY0(J,X,Y,Z,W,$,Q,K,G,F){return J[0]=X,J[1]=Y,J[2]=Z,J[3]=W,J[4]=$,J[5]=Q,J[6]=K,J[7]=G,J[8]=F,J}function PY0(J){return J[0]=1,J[1]=0,J[2]=0,J[3]=0,J[4]=1,J[5]=0,J[6]=0,J[7]=0,J[8]=1,J}function NY0(J,X){if(J===X){var Y=X[1],Z=X[2],W=X[5];J[1]=X[3],J[2]=X[6],J[3]=Y,J[5]=X[7],J[6]=Z,J[7]=W}else J[0]=X[0],J[1]=X[3],J[2]=X[6],J[3]=X[1],J[4]=X[4],J[5]=X[7],J[6]=X[2],J[7]=X[5],J[8]=X[8];return J}function vY0(J,X){var Y=X[0],Z=X[1],W=X[2],$=X[3],Q=X[4],K=X[5],G=X[6],F=X[7],q=X[8],H=q*Q-K*F,z=-q*$+K*G,V=F*$-Q*G,M=Y*H+Z*z+W*V;if(!M)return null;return M=1/M,J[0]=H*M,J[1]=(-q*Z+W*F)*M,J[2]=(K*Z-W*Q)*M,J[3]=z*M,J[4]=(q*Y-W*G)*M,J[5]=(-K*Y+W*$)*M,J[6]=V*M,J[7]=(-F*Y+Z*G)*M,J[8]=(Q*Y-Z*$)*M,J}function BY0(J,X){var Y=X[0],Z=X[1],W=X[2],$=X[3],Q=X[4],K=X[5],G=X[6],F=X[7],q=X[8];return J[0]=Q*q-K*F,J[1]=W*F-Z*q,J[2]=Z*K-W*Q,J[3]=K*G-$*q,J[4]=Y*q-W*G,J[5]=W*$-Y*K,J[6]=$*F-Q*G,J[7]=Z*G-Y*F,J[8]=Y*Q-Z*$,J}function jY0(J){var X=J[0],Y=J[1],Z=J[2],W=J[3],$=J[4],Q=J[5],K=J[6],G=J[7],F=J[8];return X*(F*$-Q*G)+Y*(-F*W+Q*K)+Z*(G*W-$*K)}function IC(J,X,Y){var Z=X[0],W=X[1],$=X[2],Q=X[3],K=X[4],G=X[5],F=X[6],q=X[7],H=X[8],z=Y[0],V=Y[1],M=Y[2],R=Y[3],L=Y[4],w=Y[5],P=Y[6],N=Y[7],v=Y[8];return J[0]=z*Z+V*Q+M*F,J[1]=z*W+V*K+M*q,J[2]=z*$+V*G+M*H,J[3]=R*Z+L*Q+w*F,J[4]=R*W+L*K+w*q,J[5]=R*$+L*G+w*H,J[6]=P*Z+N*Q+v*F,J[7]=P*W+N*K+v*q,J[8]=P*$+N*G+v*H,J}function kY0(J,X,Y){var Z=X[0],W=X[1],$=X[2],Q=X[3],K=X[4],G=X[5],F=X[6],q=X[7],H=X[8],z=Y[0],V=Y[1];return J[0]=Z,J[1]=W,J[2]=$,J[3]=Q,J[4]=K,J[5]=G,J[6]=z*Z+V*Q+F,J[7]=z*W+V*K+q,J[8]=z*$+V*G+H,J}function TY0(J,X,Y){var Z=X[0],W=X[1],$=X[2],Q=X[3],K=X[4],G=X[5],F=X[6],q=X[7],H=X[8],z=Math.sin(Y),V=Math.cos(Y);return J[0]=V*Z+z*Q,J[1]=V*W+z*K,J[2]=V*$+z*G,J[3]=V*Q-z*Z,J[4]=V*K-z*W,J[5]=V*G-z*$,J[6]=F,J[7]=q,J[8]=H,J}function DY0(J,X,Y){var Z=Y[0],W=Y[1];return J[0]=Z*X[0],J[1]=Z*X[1],J[2]=Z*X[2],J[3]=W*X[3],J[4]=W*X[4],J[5]=W*X[5],J[6]=X[6],J[7]=X[7],J[8]=X[8],J}function _Y0(J,X){return J[0]=1,J[1]=0,J[2]=0,J[3]=0,J[4]=1,J[5]=0,J[6]=X[0],J[7]=X[1],J[8]=1,J}function EY0(J,X){var Y=Math.sin(X),Z=Math.cos(X);return J[0]=Z,J[1]=Y,J[2]=0,J[3]=-Y,J[4]=Z,J[5]=0,J[6]=0,J[7]=0,J[8]=1,J}function CY0(J,X){return J[0]=X[0],J[1]=0,J[2]=0,J[3]=0,J[4]=X[1],J[5]=0,J[6]=0,J[7]=0,J[8]=1,J}function SY0(J,X){return J[0]=X[0],J[1]=X[1],J[2]=0,J[3]=X[2],J[4]=X[3],J[5]=0,J[6]=X[4],J[7]=X[5],J[8]=1,J}function IY0(J,X){var Y=X[0],Z=X[1],W=X[2],$=X[3],Q=Y+Y,K=Z+Z,G=W+W,F=Y*Q,q=Z*Q,H=Z*K,z=W*Q,V=W*K,M=W*G,R=$*Q,L=$*K,w=$*G;return J[0]=1-H-M,J[3]=q-w,J[6]=z+L,J[1]=q+w,J[4]=1-F-M,J[7]=V-R,J[2]=z-L,J[5]=V+R,J[8]=1-F-H,J}function hY0(J,X){var Y=X[0],Z=X[1],W=X[2],$=X[3],Q=X[4],K=X[5],G=X[6],F=X[7],q=X[8],H=X[9],z=X[10],V=X[11],M=X[12],R=X[13],L=X[14],w=X[15],P=Y*K-Z*Q,N=Y*G-W*Q,v=Y*F-$*Q,j=Z*G-W*K,O=Z*F-$*K,D=W*F-$*G,_=q*R-H*M,C=q*L-z*M,S=q*w-V*M,I=H*L-z*R,f=H*w-V*R,y=z*w-V*L,h=P*y-N*f+v*I+j*S-O*C+D*_;if(!h)return null;return h=1/h,J[0]=(K*y-G*f+F*I)*h,J[1]=(G*S-Q*y-F*C)*h,J[2]=(Q*f-K*S+F*_)*h,J[3]=(W*f-Z*y-$*I)*h,J[4]=(Y*y-W*S+$*C)*h,J[5]=(Z*S-Y*f-$*_)*h,J[6]=(R*D-L*O+w*j)*h,J[7]=(L*v-M*D-w*N)*h,J[8]=(M*O-R*v+w*P)*h,J}function fY0(J,X,Y){return J[0]=2/X,J[1]=0,J[2]=0,J[3]=0,J[4]=-2/Y,J[5]=0,J[6]=-1,J[7]=1,J[8]=1,J}function bY0(J){return"mat3("+J[0]+", "+J[1]+", "+J[2]+", "+J[3]+", "+J[4]+", "+J[5]+", "+J[6]+", "+J[7]+", "+J[8]+")"}function pY0(J){return Math.hypot(J[0],J[1],J[2],J[3],J[4],J[5],J[6],J[7],J[8])}function AY0(J,X,Y){return J[0]=X[0]+Y[0],J[1]=X[1]+Y[1],J[2]=X[2]+Y[2],J[3]=X[3]+Y[3],J[4]=X[4]+Y[4],J[5]=X[5]+Y[5],J[6]=X[6]+Y[6],J[7]=X[7]+Y[7],J[8]=X[8]+Y[8],J}function hC(J,X,Y){return J[0]=X[0]-Y[0],J[1]=X[1]-Y[1],J[2]=X[2]-Y[2],J[3]=X[3]-Y[3],J[4]=X[4]-Y[4],J[5]=X[5]-Y[5],J[6]=X[6]-Y[6],J[7]=X[7]-Y[7],J[8]=X[8]-Y[8],J}function yY0(J,X,Y){return J[0]=X[0]*Y,J[1]=X[1]*Y,J[2]=X[2]*Y,J[3]=X[3]*Y,J[4]=X[4]*Y,J[5]=X[5]*Y,J[6]=X[6]*Y,J[7]=X[7]*Y,J[8]=X[8]*Y,J}function gY0(J,X,Y,Z){return J[0]=X[0]+Y[0]*Z,J[1]=X[1]+Y[1]*Z,J[2]=X[2]+Y[2]*Z,J[3]=X[3]+Y[3]*Z,J[4]=X[4]+Y[4]*Z,J[5]=X[5]+Y[5]*Z,J[6]=X[6]+Y[6]*Z,J[7]=X[7]+Y[7]*Z,J[8]=X[8]+Y[8]*Z,J}function cY0(J,X){return J[0]===X[0]&&J[1]===X[1]&&J[2]===X[2]&&J[3]===X[3]&&J[4]===X[4]&&J[5]===X[5]&&J[6]===X[6]&&J[7]===X[7]&&J[8]===X[8]}function mY0(J,X){var Y=J[0],Z=J[1],W=J[2],$=J[3],Q=J[4],K=J[5],G=J[6],F=J[7],q=J[8],H=X[0],z=X[1],V=X[2],M=X[3],R=X[4],L=X[5],w=X[6],P=X[7],N=X[8];return Math.abs(Y-H)<=l*Math.max(1,Math.abs(Y),Math.abs(H))&&Math.abs(Z-z)<=l*Math.max(1,Math.abs(Z),Math.abs(z))&&Math.abs(W-V)<=l*Math.max(1,Math.abs(W),Math.abs(V))&&Math.abs($-M)<=l*Math.max(1,Math.abs($),Math.abs(M))&&Math.abs(Q-R)<=l*Math.max(1,Math.abs(Q),Math.abs(R))&&Math.abs(K-L)<=l*Math.max(1,Math.abs(K),Math.abs(L))&&Math.abs(G-w)<=l*Math.max(1,Math.abs(G),Math.abs(w))&&Math.abs(F-P)<=l*Math.max(1,Math.abs(F),Math.abs(P))&&Math.abs(q-N)<=l*Math.max(1,Math.abs(q),Math.abs(N))}var lY0=IC,uY0=hC;var Y0={};k6(Y0,{transpose:()=>oY0,translate:()=>JZ0,targetTo:()=>jZ0,subtract:()=>cC,sub:()=>hZ0,str:()=>kZ0,set:()=>sY0,scale:()=>XZ0,rotateZ:()=>$Z0,rotateY:()=>WZ0,rotateX:()=>ZZ0,rotate:()=>YZ0,perspectiveZO:()=>xZ0,perspectiveNO:()=>yC,perspectiveFromFieldOfView:()=>PZ0,perspective:()=>OZ0,orthoZO:()=>vZ0,orthoNO:()=>gC,ortho:()=>NZ0,multiplyScalarAndAdd:()=>EZ0,multiplyScalar:()=>_Z0,multiply:()=>bC,mul:()=>IZ0,lookAt:()=>BZ0,invert:()=>rY0,identity:()=>fC,getTranslation:()=>LZ0,getScaling:()=>AC,getRotation:()=>UZ0,frustum:()=>wZ0,fromZRotation:()=>HZ0,fromYRotation:()=>qZ0,fromXRotation:()=>FZ0,fromValues:()=>aY0,fromTranslation:()=>QZ0,fromScaling:()=>KZ0,fromRotationTranslationScaleOrigin:()=>MZ0,fromRotationTranslationScale:()=>VZ0,fromRotationTranslation:()=>pC,fromRotation:()=>GZ0,fromQuat2:()=>zZ0,fromQuat:()=>RZ0,frob:()=>TZ0,exactEquals:()=>CZ0,equals:()=>SZ0,determinant:()=>eY0,create:()=>dY0,copy:()=>nY0,clone:()=>iY0,adjoint:()=>tY0,add:()=>DZ0});function dY0(){var J=new Q0(16);if(Q0!=Float32Array)J[1]=0,J[2]=0,J[3]=0,J[4]=0,J[6]=0,J[7]=0,J[8]=0,J[9]=0,J[11]=0,J[12]=0,J[13]=0,J[14]=0;return J[0]=1,J[5]=1,J[10]=1,J[15]=1,J}function iY0(J){var X=new Q0(16);return X[0]=J[0],X[1]=J[1],X[2]=J[2],X[3]=J[3],X[4]=J[4],X[5]=J[5],X[6]=J[6],X[7]=J[7],X[8]=J[8],X[9]=J[9],X[10]=J[10],X[11]=J[11],X[12]=J[12],X[13]=J[13],X[14]=J[14],X[15]=J[15],X}function nY0(J,X){return J[0]=X[0],J[1]=X[1],J[2]=X[2],J[3]=X[3],J[4]=X[4],J[5]=X[5],J[6]=X[6],J[7]=X[7],J[8]=X[8],J[9]=X[9],J[10]=X[10],J[11]=X[11],J[12]=X[12],J[13]=X[13],J[14]=X[14],J[15]=X[15],J}function aY0(J,X,Y,Z,W,$,Q,K,G,F,q,H,z,V,M,R){var L=new Q0(16);return L[0]=J,L[1]=X,L[2]=Y,L[3]=Z,L[4]=W,L[5]=$,L[6]=Q,L[7]=K,L[8]=G,L[9]=F,L[10]=q,L[11]=H,L[12]=z,L[13]=V,L[14]=M,L[15]=R,L}function sY0(J,X,Y,Z,W,$,Q,K,G,F,q,H,z,V,M,R,L){return J[0]=X,J[1]=Y,J[2]=Z,J[3]=W,J[4]=$,J[5]=Q,J[6]=K,J[7]=G,J[8]=F,J[9]=q,J[10]=H,J[11]=z,J[12]=V,J[13]=M,J[14]=R,J[15]=L,J}function fC(J){return J[0]=1,J[1]=0,J[2]=0,J[3]=0,J[4]=0,J[5]=1,J[6]=0,J[7]=0,J[8]=0,J[9]=0,J[10]=1,J[11]=0,J[12]=0,J[13]=0,J[14]=0,J[15]=1,J}function oY0(J,X){if(J===X){var Y=X[1],Z=X[2],W=X[3],$=X[6],Q=X[7],K=X[11];J[1]=X[4],J[2]=X[8],J[3]=X[12],J[4]=Y,J[6]=X[9],J[7]=X[13],J[8]=Z,J[9]=$,J[11]=X[14],J[12]=W,J[13]=Q,J[14]=K}else J[0]=X[0],J[1]=X[4],J[2]=X[8],J[3]=X[12],J[4]=X[1],J[5]=X[5],J[6]=X[9],J[7]=X[13],J[8]=X[2],J[9]=X[6],J[10]=X[10],J[11]=X[14],J[12]=X[3],J[13]=X[7],J[14]=X[11],J[15]=X[15];return J}function rY0(J,X){var Y=X[0],Z=X[1],W=X[2],$=X[3],Q=X[4],K=X[5],G=X[6],F=X[7],q=X[8],H=X[9],z=X[10],V=X[11],M=X[12],R=X[13],L=X[14],w=X[15],P=Y*K-Z*Q,N=Y*G-W*Q,v=Y*F-$*Q,j=Z*G-W*K,O=Z*F-$*K,D=W*F-$*G,_=q*R-H*M,C=q*L-z*M,S=q*w-V*M,I=H*L-z*R,f=H*w-V*R,y=z*w-V*L,h=P*y-N*f+v*I+j*S-O*C+D*_;if(!h)return null;return h=1/h,J[0]=(K*y-G*f+F*I)*h,J[1]=(W*f-Z*y-$*I)*h,J[2]=(R*D-L*O+w*j)*h,J[3]=(z*O-H*D-V*j)*h,J[4]=(G*S-Q*y-F*C)*h,J[5]=(Y*y-W*S+$*C)*h,J[6]=(L*v-M*D-w*N)*h,J[7]=(q*D-z*v+V*N)*h,J[8]=(Q*f-K*S+F*_)*h,J[9]=(Z*S-Y*f-$*_)*h,J[10]=(M*O-R*v+w*P)*h,J[11]=(H*v-q*O-V*P)*h,J[12]=(K*C-Q*I-G*_)*h,J[13]=(Y*I-Z*C+W*_)*h,J[14]=(R*N-M*j-L*P)*h,J[15]=(q*j-H*N+z*P)*h,J}function tY0(J,X){var Y=X[0],Z=X[1],W=X[2],$=X[3],Q=X[4],K=X[5],G=X[6],F=X[7],q=X[8],H=X[9],z=X[10],V=X[11],M=X[12],R=X[13],L=X[14],w=X[15];return J[0]=K*(z*w-V*L)-H*(G*w-F*L)+R*(G*V-F*z),J[1]=-(Z*(z*w-V*L)-H*(W*w-$*L)+R*(W*V-$*z)),J[2]=Z*(G*w-F*L)-K*(W*w-$*L)+R*(W*F-$*G),J[3]=-(Z*(G*V-F*z)-K*(W*V-$*z)+H*(W*F-$*G)),J[4]=-(Q*(z*w-V*L)-q*(G*w-F*L)+M*(G*V-F*z)),J[5]=Y*(z*w-V*L)-q*(W*w-$*L)+M*(W*V-$*z),J[6]=-(Y*(G*w-F*L)-Q*(W*w-$*L)+M*(W*F-$*G)),J[7]=Y*(G*V-F*z)-Q*(W*V-$*z)+q*(W*F-$*G),J[8]=Q*(H*w-V*R)-q*(K*w-F*R)+M*(K*V-F*H),J[9]=-(Y*(H*w-V*R)-q*(Z*w-$*R)+M*(Z*V-$*H)),J[10]=Y*(K*w-F*R)-Q*(Z*w-$*R)+M*(Z*F-$*K),J[11]=-(Y*(K*V-F*H)-Q*(Z*V-$*H)+q*(Z*F-$*K)),J[12]=-(Q*(H*L-z*R)-q*(K*L-G*R)+M*(K*z-G*H)),J[13]=Y*(H*L-z*R)-q*(Z*L-W*R)+M*(Z*z-W*H),J[14]=-(Y*(K*L-G*R)-Q*(Z*L-W*R)+M*(Z*G-W*K)),J[15]=Y*(K*z-G*H)-Q*(Z*z-W*H)+q*(Z*G-W*K),J}function eY0(J){var X=J[0],Y=J[1],Z=J[2],W=J[3],$=J[4],Q=J[5],K=J[6],G=J[7],F=J[8],q=J[9],H=J[10],z=J[11],V=J[12],M=J[13],R=J[14],L=J[15],w=X*Q-Y*$,P=X*K-Z*$,N=X*G-W*$,v=Y*K-Z*Q,j=Y*G-W*Q,O=Z*G-W*K,D=F*M-q*V,_=F*R-H*V,C=F*L-z*V,S=q*R-H*M,I=q*L-z*M,f=H*L-z*R;return w*f-P*I+N*S+v*C-j*_+O*D}function bC(J,X,Y){var Z=X[0],W=X[1],$=X[2],Q=X[3],K=X[4],G=X[5],F=X[6],q=X[7],H=X[8],z=X[9],V=X[10],M=X[11],R=X[12],L=X[13],w=X[14],P=X[15],N=Y[0],v=Y[1],j=Y[2],O=Y[3];return J[0]=N*Z+v*K+j*H+O*R,J[1]=N*W+v*G+j*z+O*L,J[2]=N*$+v*F+j*V+O*w,J[3]=N*Q+v*q+j*M+O*P,N=Y[4],v=Y[5],j=Y[6],O=Y[7],J[4]=N*Z+v*K+j*H+O*R,J[5]=N*W+v*G+j*z+O*L,J[6]=N*$+v*F+j*V+O*w,J[7]=N*Q+v*q+j*M+O*P,N=Y[8],v=Y[9],j=Y[10],O=Y[11],J[8]=N*Z+v*K+j*H+O*R,J[9]=N*W+v*G+j*z+O*L,J[10]=N*$+v*F+j*V+O*w,J[11]=N*Q+v*q+j*M+O*P,N=Y[12],v=Y[13],j=Y[14],O=Y[15],J[12]=N*Z+v*K+j*H+O*R,J[13]=N*W+v*G+j*z+O*L,J[14]=N*$+v*F+j*V+O*w,J[15]=N*Q+v*q+j*M+O*P,J}function JZ0(J,X,Y){var Z=Y[0],W=Y[1],$=Y[2],Q,K,G,F,q,H,z,V,M,R,L,w;if(X===J)J[12]=X[0]*Z+X[4]*W+X[8]*$+X[12],J[13]=X[1]*Z+X[5]*W+X[9]*$+X[13],J[14]=X[2]*Z+X[6]*W+X[10]*$+X[14],J[15]=X[3]*Z+X[7]*W+X[11]*$+X[15];else Q=X[0],K=X[1],G=X[2],F=X[3],q=X[4],H=X[5],z=X[6],V=X[7],M=X[8],R=X[9],L=X[10],w=X[11],J[0]=Q,J[1]=K,J[2]=G,J[3]=F,J[4]=q,J[5]=H,J[6]=z,J[7]=V,J[8]=M,J[9]=R,J[10]=L,J[11]=w,J[12]=Q*Z+q*W+M*$+X[12],J[13]=K*Z+H*W+R*$+X[13],J[14]=G*Z+z*W+L*$+X[14],J[15]=F*Z+V*W+w*$+X[15];return J}function XZ0(J,X,Y){var Z=Y[0],W=Y[1],$=Y[2];return J[0]=X[0]*Z,J[1]=X[1]*Z,J[2]=X[2]*Z,J[3]=X[3]*Z,J[4]=X[4]*W,J[5]=X[5]*W,J[6]=X[6]*W,J[7]=X[7]*W,J[8]=X[8]*$,J[9]=X[9]*$,J[10]=X[10]*$,J[11]=X[11]*$,J[12]=X[12],J[13]=X[13],J[14]=X[14],J[15]=X[15],J}function YZ0(J,X,Y,Z){var W=Z[0],$=Z[1],Q=Z[2],K=Math.hypot(W,$,Q),G,F,q,H,z,V,M,R,L,w,P,N,v,j,O,D,_,C,S,I,f,y,h,g;if(K<l)return null;if(K=1/K,W*=K,$*=K,Q*=K,G=Math.sin(Y),F=Math.cos(Y),q=1-F,H=X[0],z=X[1],V=X[2],M=X[3],R=X[4],L=X[5],w=X[6],P=X[7],N=X[8],v=X[9],j=X[10],O=X[11],D=W*W*q+F,_=$*W*q+Q*G,C=Q*W*q-$*G,S=W*$*q-Q*G,I=$*$*q+F,f=Q*$*q+W*G,y=W*Q*q+$*G,h=$*Q*q-W*G,g=Q*Q*q+F,J[0]=H*D+R*_+N*C,J[1]=z*D+L*_+v*C,J[2]=V*D+w*_+j*C,J[3]=M*D+P*_+O*C,J[4]=H*S+R*I+N*f,J[5]=z*S+L*I+v*f,J[6]=V*S+w*I+j*f,J[7]=M*S+P*I+O*f,J[8]=H*y+R*h+N*g,J[9]=z*y+L*h+v*g,J[10]=V*y+w*h+j*g,J[11]=M*y+P*h+O*g,X!==J)J[12]=X[12],J[13]=X[13],J[14]=X[14],J[15]=X[15];return J}function ZZ0(J,X,Y){var Z=Math.sin(Y),W=Math.cos(Y),$=X[4],Q=X[5],K=X[6],G=X[7],F=X[8],q=X[9],H=X[10],z=X[11];if(X!==J)J[0]=X[0],J[1]=X[1],J[2]=X[2],J[3]=X[3],J[12]=X[12],J[13]=X[13],J[14]=X[14],J[15]=X[15];return J[4]=$*W+F*Z,J[5]=Q*W+q*Z,J[6]=K*W+H*Z,J[7]=G*W+z*Z,J[8]=F*W-$*Z,J[9]=q*W-Q*Z,J[10]=H*W-K*Z,J[11]=z*W-G*Z,J}function WZ0(J,X,Y){var Z=Math.sin(Y),W=Math.cos(Y),$=X[0],Q=X[1],K=X[2],G=X[3],F=X[8],q=X[9],H=X[10],z=X[11];if(X!==J)J[4]=X[4],J[5]=X[5],J[6]=X[6],J[7]=X[7],J[12]=X[12],J[13]=X[13],J[14]=X[14],J[15]=X[15];return J[0]=$*W-F*Z,J[1]=Q*W-q*Z,J[2]=K*W-H*Z,J[3]=G*W-z*Z,J[8]=$*Z+F*W,J[9]=Q*Z+q*W,J[10]=K*Z+H*W,J[11]=G*Z+z*W,J}function $Z0(J,X,Y){var Z=Math.sin(Y),W=Math.cos(Y),$=X[0],Q=X[1],K=X[2],G=X[3],F=X[4],q=X[5],H=X[6],z=X[7];if(X!==J)J[8]=X[8],J[9]=X[9],J[10]=X[10],J[11]=X[11],J[12]=X[12],J[13]=X[13],J[14]=X[14],J[15]=X[15];return J[0]=$*W+F*Z,J[1]=Q*W+q*Z,J[2]=K*W+H*Z,J[3]=G*W+z*Z,J[4]=F*W-$*Z,J[5]=q*W-Q*Z,J[6]=H*W-K*Z,J[7]=z*W-G*Z,J}function QZ0(J,X){return J[0]=1,J[1]=0,J[2]=0,J[3]=0,J[4]=0,J[5]=1,J[6]=0,J[7]=0,J[8]=0,J[9]=0,J[10]=1,J[11]=0,J[12]=X[0],J[13]=X[1],J[14]=X[2],J[15]=1,J}function KZ0(J,X){return J[0]=X[0],J[1]=0,J[2]=0,J[3]=0,J[4]=0,J[5]=X[1],J[6]=0,J[7]=0,J[8]=0,J[9]=0,J[10]=X[2],J[11]=0,J[12]=0,J[13]=0,J[14]=0,J[15]=1,J}function GZ0(J,X,Y){var Z=Y[0],W=Y[1],$=Y[2],Q=Math.hypot(Z,W,$),K,G,F;if(Q<l)return null;return Q=1/Q,Z*=Q,W*=Q,$*=Q,K=Math.sin(X),G=Math.cos(X),F=1-G,J[0]=Z*Z*F+G,J[1]=W*Z*F+$*K,J[2]=$*Z*F-W*K,J[3]=0,J[4]=Z*W*F-$*K,J[5]=W*W*F+G,J[6]=$*W*F+Z*K,J[7]=0,J[8]=Z*$*F+W*K,J[9]=W*$*F-Z*K,J[10]=$*$*F+G,J[11]=0,J[12]=0,J[13]=0,J[14]=0,J[15]=1,J}function FZ0(J,X){var Y=Math.sin(X),Z=Math.cos(X);return J[0]=1,J[1]=0,J[2]=0,J[3]=0,J[4]=0,J[5]=Z,J[6]=Y,J[7]=0,J[8]=0,J[9]=-Y,J[10]=Z,J[11]=0,J[12]=0,J[13]=0,J[14]=0,J[15]=1,J}function qZ0(J,X){var Y=Math.sin(X),Z=Math.cos(X);return J[0]=Z,J[1]=0,J[2]=-Y,J[3]=0,J[4]=0,J[5]=1,J[6]=0,J[7]=0,J[8]=Y,J[9]=0,J[10]=Z,J[11]=0,J[12]=0,J[13]=0,J[14]=0,J[15]=1,J}function HZ0(J,X){var Y=Math.sin(X),Z=Math.cos(X);return J[0]=Z,J[1]=Y,J[2]=0,J[3]=0,J[4]=-Y,J[5]=Z,J[6]=0,J[7]=0,J[8]=0,J[9]=0,J[10]=1,J[11]=0,J[12]=0,J[13]=0,J[14]=0,J[15]=1,J}function pC(J,X,Y){var Z=X[0],W=X[1],$=X[2],Q=X[3],K=Z+Z,G=W+W,F=$+$,q=Z*K,H=Z*G,z=Z*F,V=W*G,M=W*F,R=$*F,L=Q*K,w=Q*G,P=Q*F;return J[0]=1-(V+R),J[1]=H+P,J[2]=z-w,J[3]=0,J[4]=H-P,J[5]=1-(q+R),J[6]=M+L,J[7]=0,J[8]=z+w,J[9]=M-L,J[10]=1-(q+V),J[11]=0,J[12]=Y[0],J[13]=Y[1],J[14]=Y[2],J[15]=1,J}function zZ0(J,X){var Y=new Q0(3),Z=-X[0],W=-X[1],$=-X[2],Q=X[3],K=X[4],G=X[5],F=X[6],q=X[7],H=Z*Z+W*W+$*$+Q*Q;if(H>0)Y[0]=(K*Q+q*Z+G*$-F*W)*2/H,Y[1]=(G*Q+q*W+F*Z-K*$)*2/H,Y[2]=(F*Q+q*$+K*W-G*Z)*2/H;else Y[0]=(K*Q+q*Z+G*$-F*W)*2,Y[1]=(G*Q+q*W+F*Z-K*$)*2,Y[2]=(F*Q+q*$+K*W-G*Z)*2;return pC(J,X,Y),J}function LZ0(J,X){return J[0]=X[12],J[1]=X[13],J[2]=X[14],J}function AC(J,X){var Y=X[0],Z=X[1],W=X[2],$=X[4],Q=X[5],K=X[6],G=X[8],F=X[9],q=X[10];return J[0]=Math.hypot(Y,Z,W),J[1]=Math.hypot($,Q,K),J[2]=Math.hypot(G,F,q),J}function UZ0(J,X){var Y=new Q0(3);AC(Y,X);var Z=1/Y[0],W=1/Y[1],$=1/Y[2],Q=X[0]*Z,K=X[1]*W,G=X[2]*$,F=X[4]*Z,q=X[5]*W,H=X[6]*$,z=X[8]*Z,V=X[9]*W,M=X[10]*$,R=Q+q+M,L=0;if(R>0)L=Math.sqrt(R+1)*2,J[3]=0.25*L,J[0]=(H-V)/L,J[1]=(z-G)/L,J[2]=(K-F)/L;else if(Q>q&&Q>M)L=Math.sqrt(1+Q-q-M)*2,J[3]=(H-V)/L,J[0]=0.25*L,J[1]=(K+F)/L,J[2]=(z+G)/L;else if(q>M)L=Math.sqrt(1+q-Q-M)*2,J[3]=(z-G)/L,J[0]=(K+F)/L,J[1]=0.25*L,J[2]=(H+V)/L;else L=Math.sqrt(1+M-Q-q)*2,J[3]=(K-F)/L,J[0]=(z+G)/L,J[1]=(H+V)/L,J[2]=0.25*L;return J}function VZ0(J,X,Y,Z){var W=X[0],$=X[1],Q=X[2],K=X[3],G=W+W,F=$+$,q=Q+Q,H=W*G,z=W*F,V=W*q,M=$*F,R=$*q,L=Q*q,w=K*G,P=K*F,N=K*q,v=Z[0],j=Z[1],O=Z[2];return J[0]=(1-(M+L))*v,J[1]=(z+N)*v,J[2]=(V-P)*v,J[3]=0,J[4]=(z-N)*j,J[5]=(1-(H+L))*j,J[6]=(R+w)*j,J[7]=0,J[8]=(V+P)*O,J[9]=(R-w)*O,J[10]=(1-(H+M))*O,J[11]=0,J[12]=Y[0],J[13]=Y[1],J[14]=Y[2],J[15]=1,J}function MZ0(J,X,Y,Z,W){var $=X[0],Q=X[1],K=X[2],G=X[3],F=$+$,q=Q+Q,H=K+K,z=$*F,V=$*q,M=$*H,R=Q*q,L=Q*H,w=K*H,P=G*F,N=G*q,v=G*H,j=Z[0],O=Z[1],D=Z[2],_=W[0],C=W[1],S=W[2],I=(1-(R+w))*j,f=(V+v)*j,y=(M-N)*j,h=(V-v)*O,g=(1-(z+w))*O,J0=(L+P)*O,p0=(M+N)*D,a0=(L-P)*D,Q6=(1-(z+R))*D;return J[0]=I,J[1]=f,J[2]=y,J[3]=0,J[4]=h,J[5]=g,J[6]=J0,J[7]=0,J[8]=p0,J[9]=a0,J[10]=Q6,J[11]=0,J[12]=Y[0]+_-(I*_+h*C+p0*S),J[13]=Y[1]+C-(f*_+g*C+a0*S),J[14]=Y[2]+S-(y*_+J0*C+Q6*S),J[15]=1,J}function RZ0(J,X){var Y=X[0],Z=X[1],W=X[2],$=X[3],Q=Y+Y,K=Z+Z,G=W+W,F=Y*Q,q=Z*Q,H=Z*K,z=W*Q,V=W*K,M=W*G,R=$*Q,L=$*K,w=$*G;return J[0]=1-H-M,J[1]=q+w,J[2]=z-L,J[3]=0,J[4]=q-w,J[5]=1-F-M,J[6]=V+R,J[7]=0,J[8]=z+L,J[9]=V-R,J[10]=1-F-H,J[11]=0,J[12]=0,J[13]=0,J[14]=0,J[15]=1,J}function wZ0(J,X,Y,Z,W,$,Q){var K=1/(Y-X),G=1/(W-Z),F=1/($-Q);return J[0]=$*2*K,J[1]=0,J[2]=0,J[3]=0,J[4]=0,J[5]=$*2*G,J[6]=0,J[7]=0,J[8]=(Y+X)*K,J[9]=(W+Z)*G,J[10]=(Q+$)*F,J[11]=-1,J[12]=0,J[13]=0,J[14]=Q*$*2*F,J[15]=0,J}function yC(J,X,Y,Z,W){var $=1/Math.tan(X/2),Q;if(J[0]=$/Y,J[1]=0,J[2]=0,J[3]=0,J[4]=0,J[5]=$,J[6]=0,J[7]=0,J[8]=0,J[9]=0,J[11]=-1,J[12]=0,J[13]=0,J[15]=0,W!=null&&W!==1/0)Q=1/(Z-W),J[10]=(W+Z)*Q,J[14]=2*W*Z*Q;else J[10]=-1,J[14]=-2*Z;return J}var OZ0=yC;function xZ0(J,X,Y,Z,W){var $=1/Math.tan(X/2),Q;if(J[0]=$/Y,J[1]=0,J[2]=0,J[3]=0,J[4]=0,J[5]=$,J[6]=0,J[7]=0,J[8]=0,J[9]=0,J[11]=-1,J[12]=0,J[13]=0,J[15]=0,W!=null&&W!==1/0)Q=1/(Z-W),J[10]=W*Q,J[14]=W*Z*Q;else J[10]=-1,J[14]=-Z;return J}function PZ0(J,X,Y,Z){var W=Math.tan(X.upDegrees*Math.PI/180),$=Math.tan(X.downDegrees*Math.PI/180),Q=Math.tan(X.leftDegrees*Math.PI/180),K=Math.tan(X.rightDegrees*Math.PI/180),G=2/(Q+K),F=2/(W+$);return J[0]=G,J[1]=0,J[2]=0,J[3]=0,J[4]=0,J[5]=F,J[6]=0,J[7]=0,J[8]=-((Q-K)*G*0.5),J[9]=(W-$)*F*0.5,J[10]=Z/(Y-Z),J[11]=-1,J[12]=0,J[13]=0,J[14]=Z*Y/(Y-Z),J[15]=0,J}function gC(J,X,Y,Z,W,$,Q){var K=1/(X-Y),G=1/(Z-W),F=1/($-Q);return J[0]=-2*K,J[1]=0,J[2]=0,J[3]=0,J[4]=0,J[5]=-2*G,J[6]=0,J[7]=0,J[8]=0,J[9]=0,J[10]=2*F,J[11]=0,J[12]=(X+Y)*K,J[13]=(W+Z)*G,J[14]=(Q+$)*F,J[15]=1,J}var NZ0=gC;function vZ0(J,X,Y,Z,W,$,Q){var K=1/(X-Y),G=1/(Z-W),F=1/($-Q);return J[0]=-2*K,J[1]=0,J[2]=0,J[3]=0,J[4]=0,J[5]=-2*G,J[6]=0,J[7]=0,J[8]=0,J[9]=0,J[10]=F,J[11]=0,J[12]=(X+Y)*K,J[13]=(W+Z)*G,J[14]=$*F,J[15]=1,J}function BZ0(J,X,Y,Z){var W,$,Q,K,G,F,q,H,z,V,M=X[0],R=X[1],L=X[2],w=Z[0],P=Z[1],N=Z[2],v=Y[0],j=Y[1],O=Y[2];if(Math.abs(M-v)<l&&Math.abs(R-j)<l&&Math.abs(L-O)<l)return fC(J);if(q=M-v,H=R-j,z=L-O,V=1/Math.hypot(q,H,z),q*=V,H*=V,z*=V,W=P*z-N*H,$=N*q-w*z,Q=w*H-P*q,V=Math.hypot(W,$,Q),!V)W=0,$=0,Q=0;else V=1/V,W*=V,$*=V,Q*=V;if(K=H*Q-z*$,G=z*W-q*Q,F=q*$-H*W,V=Math.hypot(K,G,F),!V)K=0,G=0,F=0;else V=1/V,K*=V,G*=V,F*=V;return J[0]=W,J[1]=K,J[2]=q,J[3]=0,J[4]=$,J[5]=G,J[6]=H,J[7]=0,J[8]=Q,J[9]=F,J[10]=z,J[11]=0,J[12]=-(W*M+$*R+Q*L),J[13]=-(K*M+G*R+F*L),J[14]=-(q*M+H*R+z*L),J[15]=1,J}function jZ0(J,X,Y,Z){var W=X[0],$=X[1],Q=X[2],K=Z[0],G=Z[1],F=Z[2],q=W-Y[0],H=$-Y[1],z=Q-Y[2],V=q*q+H*H+z*z;if(V>0)V=1/Math.sqrt(V),q*=V,H*=V,z*=V;var M=G*z-F*H,R=F*q-K*z,L=K*H-G*q;if(V=M*M+R*R+L*L,V>0)V=1/Math.sqrt(V),M*=V,R*=V,L*=V;return J[0]=M,J[1]=R,J[2]=L,J[3]=0,J[4]=H*L-z*R,J[5]=z*M-q*L,J[6]=q*R-H*M,J[7]=0,J[8]=q,J[9]=H,J[10]=z,J[11]=0,J[12]=W,J[13]=$,J[14]=Q,J[15]=1,J}function kZ0(J){return"mat4("+J[0]+", "+J[1]+", "+J[2]+", "+J[3]+", "+J[4]+", "+J[5]+", "+J[6]+", "+J[7]+", "+J[8]+", "+J[9]+", "+J[10]+", "+J[11]+", "+J[12]+", "+J[13]+", "+J[14]+", "+J[15]+")"}function TZ0(J){return Math.hypot(J[0],J[1],J[2],J[3],J[4],J[5],J[6],J[7],J[8],J[9],J[10],J[11],J[12],J[13],J[14],J[15])}function DZ0(J,X,Y){return J[0]=X[0]+Y[0],J[1]=X[1]+Y[1],J[2]=X[2]+Y[2],J[3]=X[3]+Y[3],J[4]=X[4]+Y[4],J[5]=X[5]+Y[5],J[6]=X[6]+Y[6],J[7]=X[7]+Y[7],J[8]=X[8]+Y[8],J[9]=X[9]+Y[9],J[10]=X[10]+Y[10],J[11]=X[11]+Y[11],J[12]=X[12]+Y[12],J[13]=X[13]+Y[13],J[14]=X[14]+Y[14],J[15]=X[15]+Y[15],J}function cC(J,X,Y){return J[0]=X[0]-Y[0],J[1]=X[1]-Y[1],J[2]=X[2]-Y[2],J[3]=X[3]-Y[3],J[4]=X[4]-Y[4],J[5]=X[5]-Y[5],J[6]=X[6]-Y[6],J[7]=X[7]-Y[7],J[8]=X[8]-Y[8],J[9]=X[9]-Y[9],J[10]=X[10]-Y[10],J[11]=X[11]-Y[11],J[12]=X[12]-Y[12],J[13]=X[13]-Y[13],J[14]=X[14]-Y[14],J[15]=X[15]-Y[15],J}function _Z0(J,X,Y){return J[0]=X[0]*Y,J[1]=X[1]*Y,J[2]=X[2]*Y,J[3]=X[3]*Y,J[4]=X[4]*Y,J[5]=X[5]*Y,J[6]=X[6]*Y,J[7]=X[7]*Y,J[8]=X[8]*Y,J[9]=X[9]*Y,J[10]=X[10]*Y,J[11]=X[11]*Y,J[12]=X[12]*Y,J[13]=X[13]*Y,J[14]=X[14]*Y,J[15]=X[15]*Y,J}function EZ0(J,X,Y,Z){return J[0]=X[0]+Y[0]*Z,J[1]=X[1]+Y[1]*Z,J[2]=X[2]+Y[2]*Z,J[3]=X[3]+Y[3]*Z,J[4]=X[4]+Y[4]*Z,J[5]=X[5]+Y[5]*Z,J[6]=X[6]+Y[6]*Z,J[7]=X[7]+Y[7]*Z,J[8]=X[8]+Y[8]*Z,J[9]=X[9]+Y[9]*Z,J[10]=X[10]+Y[10]*Z,J[11]=X[11]+Y[11]*Z,J[12]=X[12]+Y[12]*Z,J[13]=X[13]+Y[13]*Z,J[14]=X[14]+Y[14]*Z,J[15]=X[15]+Y[15]*Z,J}function CZ0(J,X){return J[0]===X[0]&&J[1]===X[1]&&J[2]===X[2]&&J[3]===X[3]&&J[4]===X[4]&&J[5]===X[5]&&J[6]===X[6]&&J[7]===X[7]&&J[8]===X[8]&&J[9]===X[9]&&J[10]===X[10]&&J[11]===X[11]&&J[12]===X[12]&&J[13]===X[13]&&J[14]===X[14]&&J[15]===X[15]}function SZ0(J,X){var Y=J[0],Z=J[1],W=J[2],$=J[3],Q=J[4],K=J[5],G=J[6],F=J[7],q=J[8],H=J[9],z=J[10],V=J[11],M=J[12],R=J[13],L=J[14],w=J[15],P=X[0],N=X[1],v=X[2],j=X[3],O=X[4],D=X[5],_=X[6],C=X[7],S=X[8],I=X[9],f=X[10],y=X[11],h=X[12],g=X[13],J0=X[14],p0=X[15];return Math.abs(Y-P)<=l*Math.max(1,Math.abs(Y),Math.abs(P))&&Math.abs(Z-N)<=l*Math.max(1,Math.abs(Z),Math.abs(N))&&Math.abs(W-v)<=l*Math.max(1,Math.abs(W),Math.abs(v))&&Math.abs($-j)<=l*Math.max(1,Math.abs($),Math.abs(j))&&Math.abs(Q-O)<=l*Math.max(1,Math.abs(Q),Math.abs(O))&&Math.abs(K-D)<=l*Math.max(1,Math.abs(K),Math.abs(D))&&Math.abs(G-_)<=l*Math.max(1,Math.abs(G),Math.abs(_))&&Math.abs(F-C)<=l*Math.max(1,Math.abs(F),Math.abs(C))&&Math.abs(q-S)<=l*Math.max(1,Math.abs(q),Math.abs(S))&&Math.abs(H-I)<=l*Math.max(1,Math.abs(H),Math.abs(I))&&Math.abs(z-f)<=l*Math.max(1,Math.abs(z),Math.abs(f))&&Math.abs(V-y)<=l*Math.max(1,Math.abs(V),Math.abs(y))&&Math.abs(M-h)<=l*Math.max(1,Math.abs(M),Math.abs(h))&&Math.abs(R-g)<=l*Math.max(1,Math.abs(R),Math.abs(g))&&Math.abs(L-J0)<=l*Math.max(1,Math.abs(L),Math.abs(J0))&&Math.abs(w-p0)<=l*Math.max(1,Math.abs(w),Math.abs(p0))}var IZ0=bC,hZ0=cC;var N0={};k6(N0,{str:()=>EW0,squaredLength:()=>MS,sqrLen:()=>yW0,sqlerp:()=>lW0,slerp:()=>H$,setAxisAngle:()=>GS,setAxes:()=>uW0,set:()=>hW0,scale:()=>LS,rotationTo:()=>mW0,rotateZ:()=>vW0,rotateY:()=>NW0,rotateX:()=>PW0,random:()=>kW0,pow:()=>jW0,normalize:()=>kH,multiply:()=>FS,mul:()=>bW0,ln:()=>HS,lerp:()=>pW0,length:()=>VS,len:()=>AW0,invert:()=>TW0,identity:()=>wW0,getAxisAngle:()=>OW0,getAngle:()=>xW0,fromValues:()=>SW0,fromMat3:()=>zS,fromEuler:()=>_W0,exp:()=>qS,exactEquals:()=>gW0,equals:()=>cW0,dot:()=>US,create:()=>jH,copy:()=>IW0,conjugate:()=>DW0,clone:()=>CW0,calculateW:()=>BW0,add:()=>fW0});var W0={};k6(W0,{zero:()=>$W0,transformQuat:()=>JW0,transformMat4:()=>tZ0,transformMat3:()=>eZ0,subtract:()=>lC,sub:()=>FW0,str:()=>QW0,squaredLength:()=>aC,squaredDistance:()=>nC,sqrLen:()=>UW0,sqrDist:()=>LW0,set:()=>pZ0,scaleAndAdd:()=>dZ0,scale:()=>uZ0,round:()=>lZ0,rotateZ:()=>ZW0,rotateY:()=>YW0,rotateX:()=>XW0,random:()=>rZ0,normalize:()=>vH,negate:()=>iZ0,multiply:()=>uC,mul:()=>qW0,min:()=>cZ0,max:()=>mZ0,lerp:()=>aZ0,length:()=>mC,len:()=>BH,inverse:()=>nZ0,hermite:()=>sZ0,fromValues:()=>F$,forEach:()=>VW0,floor:()=>gZ0,exactEquals:()=>KW0,equals:()=>GW0,dot:()=>q$,divide:()=>dC,div:()=>HW0,distance:()=>iC,dist:()=>zW0,cross:()=>bJ,create:()=>G$,copy:()=>bZ0,clone:()=>fZ0,ceil:()=>yZ0,bezier:()=>oZ0,angle:()=>WW0,add:()=>AZ0});function G$(){var J=new Q0(3);if(Q0!=Float32Array)J[0]=0,J[1]=0,J[2]=0;return J}function fZ0(J){var X=new Q0(3);return X[0]=J[0],X[1]=J[1],X[2]=J[2],X}function mC(J){var X=J[0],Y=J[1],Z=J[2];return Math.hypot(X,Y,Z)}function F$(J,X,Y){var Z=new Q0(3);return Z[0]=J,Z[1]=X,Z[2]=Y,Z}function bZ0(J,X){return J[0]=X[0],J[1]=X[1],J[2]=X[2],J}function pZ0(J,X,Y,Z){return J[0]=X,J[1]=Y,J[2]=Z,J}function AZ0(J,X,Y){return J[0]=X[0]+Y[0],J[1]=X[1]+Y[1],J[2]=X[2]+Y[2],J}function lC(J,X,Y){return J[0]=X[0]-Y[0],J[1]=X[1]-Y[1],J[2]=X[2]-Y[2],J}function uC(J,X,Y){return J[0]=X[0]*Y[0],J[1]=X[1]*Y[1],J[2]=X[2]*Y[2],J}function dC(J,X,Y){return J[0]=X[0]/Y[0],J[1]=X[1]/Y[1],J[2]=X[2]/Y[2],J}function yZ0(J,X){return J[0]=Math.ceil(X[0]),J[1]=Math.ceil(X[1]),J[2]=Math.ceil(X[2]),J}function gZ0(J,X){return J[0]=Math.floor(X[0]),J[1]=Math.floor(X[1]),J[2]=Math.floor(X[2]),J}function cZ0(J,X,Y){return J[0]=Math.min(X[0],Y[0]),J[1]=Math.min(X[1],Y[1]),J[2]=Math.min(X[2],Y[2]),J}function mZ0(J,X,Y){return J[0]=Math.max(X[0],Y[0]),J[1]=Math.max(X[1],Y[1]),J[2]=Math.max(X[2],Y[2]),J}function lZ0(J,X){return J[0]=Math.round(X[0]),J[1]=Math.round(X[1]),J[2]=Math.round(X[2]),J}function uZ0(J,X,Y){return J[0]=X[0]*Y,J[1]=X[1]*Y,J[2]=X[2]*Y,J}function dZ0(J,X,Y,Z){return J[0]=X[0]+Y[0]*Z,J[1]=X[1]+Y[1]*Z,J[2]=X[2]+Y[2]*Z,J}function iC(J,X){var Y=X[0]-J[0],Z=X[1]-J[1],W=X[2]-J[2];return Math.hypot(Y,Z,W)}function nC(J,X){var Y=X[0]-J[0],Z=X[1]-J[1],W=X[2]-J[2];return Y*Y+Z*Z+W*W}function aC(J){var X=J[0],Y=J[1],Z=J[2];return X*X+Y*Y+Z*Z}function iZ0(J,X){return J[0]=-X[0],J[1]=-X[1],J[2]=-X[2],J}function nZ0(J,X){return J[0]=1/X[0],J[1]=1/X[1],J[2]=1/X[2],J}function vH(J,X){var Y=X[0],Z=X[1],W=X[2],$=Y*Y+Z*Z+W*W;if($>0)$=1/Math.sqrt($);return J[0]=X[0]*$,J[1]=X[1]*$,J[2]=X[2]*$,J}function q$(J,X){return J[0]*X[0]+J[1]*X[1]+J[2]*X[2]}function bJ(J,X,Y){var Z=X[0],W=X[1],$=X[2],Q=Y[0],K=Y[1],G=Y[2];return J[0]=W*G-$*K,J[1]=$*Q-Z*G,J[2]=Z*K-W*Q,J}function aZ0(J,X,Y,Z){var W=X[0],$=X[1],Q=X[2];return J[0]=W+Z*(Y[0]-W),J[1]=$+Z*(Y[1]-$),J[2]=Q+Z*(Y[2]-Q),J}function sZ0(J,X,Y,Z,W,$){var Q=$*$,K=Q*(2*$-3)+1,G=Q*($-2)+$,F=Q*($-1),q=Q*(3-2*$);return J[0]=X[0]*K+Y[0]*G+Z[0]*F+W[0]*q,J[1]=X[1]*K+Y[1]*G+Z[1]*F+W[1]*q,J[2]=X[2]*K+Y[2]*G+Z[2]*F+W[2]*q,J}function oZ0(J,X,Y,Z,W,$){var Q=1-$,K=Q*Q,G=$*$,F=K*Q,q=3*$*K,H=3*G*Q,z=G*$;return J[0]=X[0]*F+Y[0]*q+Z[0]*H+W[0]*z,J[1]=X[1]*F+Y[1]*q+Z[1]*H+W[1]*z,J[2]=X[2]*F+Y[2]*q+Z[2]*H+W[2]*z,J}function rZ0(J,X){X=X||1;var Y=d6()*2*Math.PI,Z=d6()*2-1,W=Math.sqrt(1-Z*Z)*X;return J[0]=Math.cos(Y)*W,J[1]=Math.sin(Y)*W,J[2]=Z*X,J}function tZ0(J,X,Y){var Z=X[0],W=X[1],$=X[2],Q=Y[3]*Z+Y[7]*W+Y[11]*$+Y[15];return Q=Q||1,J[0]=(Y[0]*Z+Y[4]*W+Y[8]*$+Y[12])/Q,J[1]=(Y[1]*Z+Y[5]*W+Y[9]*$+Y[13])/Q,J[2]=(Y[2]*Z+Y[6]*W+Y[10]*$+Y[14])/Q,J}function eZ0(J,X,Y){var Z=X[0],W=X[1],$=X[2];return J[0]=Z*Y[0]+W*Y[3]+$*Y[6],J[1]=Z*Y[1]+W*Y[4]+$*Y[7],J[2]=Z*Y[2]+W*Y[5]+$*Y[8],J}function JW0(J,X,Y){var Z=Y[0],W=Y[1],$=Y[2],Q=Y[3],K=X[0],G=X[1],F=X[2],q=W*F-$*G,H=$*K-Z*F,z=Z*G-W*K,V=W*z-$*H,M=$*q-Z*z,R=Z*H-W*q,L=Q*2;return q*=L,H*=L,z*=L,V*=2,M*=2,R*=2,J[0]=K+q+V,J[1]=G+H+M,J[2]=F+z+R,J}function XW0(J,X,Y,Z){var W=[],$=[];return W[0]=X[0]-Y[0],W[1]=X[1]-Y[1],W[2]=X[2]-Y[2],$[0]=W[0],$[1]=W[1]*Math.cos(Z)-W[2]*Math.sin(Z),$[2]=W[1]*Math.sin(Z)+W[2]*Math.cos(Z),J[0]=$[0]+Y[0],J[1]=$[1]+Y[1],J[2]=$[2]+Y[2],J}function YW0(J,X,Y,Z){var W=[],$=[];return W[0]=X[0]-Y[0],W[1]=X[1]-Y[1],W[2]=X[2]-Y[2],$[0]=W[2]*Math.sin(Z)+W[0]*Math.cos(Z),$[1]=W[1],$[2]=W[2]*Math.cos(Z)-W[0]*Math.sin(Z),J[0]=$[0]+Y[0],J[1]=$[1]+Y[1],J[2]=$[2]+Y[2],J}function ZW0(J,X,Y,Z){var W=[],$=[];return W[0]=X[0]-Y[0],W[1]=X[1]-Y[1],W[2]=X[2]-Y[2],$[0]=W[0]*Math.cos(Z)-W[1]*Math.sin(Z),$[1]=W[0]*Math.sin(Z)+W[1]*Math.cos(Z),$[2]=W[2],J[0]=$[0]+Y[0],J[1]=$[1]+Y[1],J[2]=$[2]+Y[2],J}function WW0(J,X){var Y=J[0],Z=J[1],W=J[2],$=X[0],Q=X[1],K=X[2],G=Math.sqrt(Y*Y+Z*Z+W*W),F=Math.sqrt($*$+Q*Q+K*K),q=G*F,H=q&&q$(J,X)/q;return Math.acos(Math.min(Math.max(H,-1),1))}function $W0(J){return J[0]=0,J[1]=0,J[2]=0,J}function QW0(J){return"vec3("+J[0]+", "+J[1]+", "+J[2]+")"}function KW0(J,X){return J[0]===X[0]&&J[1]===X[1]&&J[2]===X[2]}function GW0(J,X){var Y=J[0],Z=J[1],W=J[2],$=X[0],Q=X[1],K=X[2];return Math.abs(Y-$)<=l*Math.max(1,Math.abs(Y),Math.abs($))&&Math.abs(Z-Q)<=l*Math.max(1,Math.abs(Z),Math.abs(Q))&&Math.abs(W-K)<=l*Math.max(1,Math.abs(W),Math.abs(K))}var FW0=lC,qW0=uC,HW0=dC,zW0=iC,LW0=nC,BH=mC,UW0=aC,VW0=function(){var J=G$();return function(X,Y,Z,W,$,Q){var K,G;if(!Y)Y=3;if(!Z)Z=0;if(W)G=Math.min(W*Y+Z,X.length);else G=X.length;for(K=Z;K<G;K+=Y)J[0]=X[K],J[1]=X[K+1],J[2]=X[K+2],$(J,J,Q),X[K]=J[0],X[K+1]=J[1],X[K+2]=J[2];return X}}();function MW0(){var J=new Q0(4);if(Q0!=Float32Array)J[0]=0,J[1]=0,J[2]=0,J[3]=0;return J}function sC(J){var X=new Q0(4);return X[0]=J[0],X[1]=J[1],X[2]=J[2],X[3]=J[3],X}function oC(J,X,Y,Z){var W=new Q0(4);return W[0]=J,W[1]=X,W[2]=Y,W[3]=Z,W}function rC(J,X){return J[0]=X[0],J[1]=X[1],J[2]=X[2],J[3]=X[3],J}function tC(J,X,Y,Z,W){return J[0]=X,J[1]=Y,J[2]=Z,J[3]=W,J}function eC(J,X,Y){return J[0]=X[0]+Y[0],J[1]=X[1]+Y[1],J[2]=X[2]+Y[2],J[3]=X[3]+Y[3],J}function JS(J,X,Y){return J[0]=X[0]*Y,J[1]=X[1]*Y,J[2]=X[2]*Y,J[3]=X[3]*Y,J}function XS(J){var X=J[0],Y=J[1],Z=J[2],W=J[3];return Math.hypot(X,Y,Z,W)}function YS(J){var X=J[0],Y=J[1],Z=J[2],W=J[3];return X*X+Y*Y+Z*Z+W*W}function ZS(J,X){var Y=X[0],Z=X[1],W=X[2],$=X[3],Q=Y*Y+Z*Z+W*W+$*$;if(Q>0)Q=1/Math.sqrt(Q);return J[0]=Y*Q,J[1]=Z*Q,J[2]=W*Q,J[3]=$*Q,J}function WS(J,X){return J[0]*X[0]+J[1]*X[1]+J[2]*X[2]+J[3]*X[3]}function $S(J,X,Y,Z){var W=X[0],$=X[1],Q=X[2],K=X[3];return J[0]=W+Z*(Y[0]-W),J[1]=$+Z*(Y[1]-$),J[2]=Q+Z*(Y[2]-Q),J[3]=K+Z*(Y[3]-K),J}function QS(J,X){return J[0]===X[0]&&J[1]===X[1]&&J[2]===X[2]&&J[3]===X[3]}function KS(J,X){var Y=J[0],Z=J[1],W=J[2],$=J[3],Q=X[0],K=X[1],G=X[2],F=X[3];return Math.abs(Y-Q)<=l*Math.max(1,Math.abs(Y),Math.abs(Q))&&Math.abs(Z-K)<=l*Math.max(1,Math.abs(Z),Math.abs(K))&&Math.abs(W-G)<=l*Math.max(1,Math.abs(W),Math.abs(G))&&Math.abs($-F)<=l*Math.max(1,Math.abs($),Math.abs(F))}var U_0=function(){var J=MW0();return function(X,Y,Z,W,$,Q){var K,G;if(!Y)Y=4;if(!Z)Z=0;if(W)G=Math.min(W*Y+Z,X.length);else G=X.length;for(K=Z;K<G;K+=Y)J[0]=X[K],J[1]=X[K+1],J[2]=X[K+2],J[3]=X[K+3],$(J,J,Q),X[K]=J[0],X[K+1]=J[1],X[K+2]=J[2],X[K+3]=J[3];return X}}();function jH(){var J=new Q0(4);if(Q0!=Float32Array)J[0]=0,J[1]=0,J[2]=0;return J[3]=1,J}function wW0(J){return J[0]=0,J[1]=0,J[2]=0,J[3]=1,J}function GS(J,X,Y){Y=Y*0.5;var Z=Math.sin(Y);return J[0]=Z*X[0],J[1]=Z*X[1],J[2]=Z*X[2],J[3]=Math.cos(Y),J}function OW0(J,X){var Y=Math.acos(X[3])*2,Z=Math.sin(Y/2);if(Z>l)J[0]=X[0]/Z,J[1]=X[1]/Z,J[2]=X[2]/Z;else J[0]=1,J[1]=0,J[2]=0;return Y}function xW0(J,X){var Y=US(J,X);return Math.acos(2*Y*Y-1)}function FS(J,X,Y){var Z=X[0],W=X[1],$=X[2],Q=X[3],K=Y[0],G=Y[1],F=Y[2],q=Y[3];return J[0]=Z*q+Q*K+W*F-$*G,J[1]=W*q+Q*G+$*K-Z*F,J[2]=$*q+Q*F+Z*G-W*K,J[3]=Q*q-Z*K-W*G-$*F,J}function PW0(J,X,Y){Y*=0.5;var Z=X[0],W=X[1],$=X[2],Q=X[3],K=Math.sin(Y),G=Math.cos(Y);return J[0]=Z*G+Q*K,J[1]=W*G+$*K,J[2]=$*G-W*K,J[3]=Q*G-Z*K,J}function NW0(J,X,Y){Y*=0.5;var Z=X[0],W=X[1],$=X[2],Q=X[3],K=Math.sin(Y),G=Math.cos(Y);return J[0]=Z*G-$*K,J[1]=W*G+Q*K,J[2]=$*G+Z*K,J[3]=Q*G-W*K,J}function vW0(J,X,Y){Y*=0.5;var Z=X[0],W=X[1],$=X[2],Q=X[3],K=Math.sin(Y),G=Math.cos(Y);return J[0]=Z*G+W*K,J[1]=W*G-Z*K,J[2]=$*G+Q*K,J[3]=Q*G-$*K,J}function BW0(J,X){var Y=X[0],Z=X[1],W=X[2];return J[0]=Y,J[1]=Z,J[2]=W,J[3]=Math.sqrt(Math.abs(1-Y*Y-Z*Z-W*W)),J}function qS(J,X){var Y=X[0],Z=X[1],W=X[2],$=X[3],Q=Math.sqrt(Y*Y+Z*Z+W*W),K=Math.exp($),G=Q>0?K*Math.sin(Q)/Q:0;return J[0]=Y*G,J[1]=Z*G,J[2]=W*G,J[3]=K*Math.cos(Q),J}function HS(J,X){var Y=X[0],Z=X[1],W=X[2],$=X[3],Q=Math.sqrt(Y*Y+Z*Z+W*W),K=Q>0?Math.atan2(Q,$)/Q:0;return J[0]=Y*K,J[1]=Z*K,J[2]=W*K,J[3]=0.5*Math.log(Y*Y+Z*Z+W*W+$*$),J}function jW0(J,X,Y){return HS(J,X),LS(J,J,Y),qS(J,J),J}function H$(J,X,Y,Z){var W=X[0],$=X[1],Q=X[2],K=X[3],G=Y[0],F=Y[1],q=Y[2],H=Y[3],z,V,M,R,L;if(V=W*G+$*F+Q*q+K*H,V<0)V=-V,G=-G,F=-F,q=-q,H=-H;if(1-V>l)z=Math.acos(V),M=Math.sin(z),R=Math.sin((1-Z)*z)/M,L=Math.sin(Z*z)/M;else R=1-Z,L=Z;return J[0]=R*W+L*G,J[1]=R*$+L*F,J[2]=R*Q+L*q,J[3]=R*K+L*H,J}function kW0(J){var X=d6(),Y=d6(),Z=d6(),W=Math.sqrt(1-X),$=Math.sqrt(X);return J[0]=W*Math.sin(2*Math.PI*Y),J[1]=W*Math.cos(2*Math.PI*Y),J[2]=$*Math.sin(2*Math.PI*Z),J[3]=$*Math.cos(2*Math.PI*Z),J}function TW0(J,X){var Y=X[0],Z=X[1],W=X[2],$=X[3],Q=Y*Y+Z*Z+W*W+$*$,K=Q?1/Q:0;return J[0]=-Y*K,J[1]=-Z*K,J[2]=-W*K,J[3]=$*K,J}function DW0(J,X){return J[0]=-X[0],J[1]=-X[1],J[2]=-X[2],J[3]=X[3],J}function zS(J,X){var Y=X[0]+X[4]+X[8],Z;if(Y>0)Z=Math.sqrt(Y+1),J[3]=0.5*Z,Z=0.5/Z,J[0]=(X[5]-X[7])*Z,J[1]=(X[6]-X[2])*Z,J[2]=(X[1]-X[3])*Z;else{var W=0;if(X[4]>X[0])W=1;if(X[8]>X[W*3+W])W=2;var $=(W+1)%3,Q=(W+2)%3;Z=Math.sqrt(X[W*3+W]-X[$*3+$]-X[Q*3+Q]+1),J[W]=0.5*Z,Z=0.5/Z,J[3]=(X[$*3+Q]-X[Q*3+$])*Z,J[$]=(X[$*3+W]+X[W*3+$])*Z,J[Q]=(X[Q*3+W]+X[W*3+Q])*Z}return J}function _W0(J,X,Y,Z){var W=0.5*Math.PI/180;X*=W,Y*=W,Z*=W;var $=Math.sin(X),Q=Math.cos(X),K=Math.sin(Y),G=Math.cos(Y),F=Math.sin(Z),q=Math.cos(Z);return J[0]=$*G*q-Q*K*F,J[1]=Q*K*q+$*G*F,J[2]=Q*G*F-$*K*q,J[3]=Q*G*q+$*K*F,J}function EW0(J){return"quat("+J[0]+", "+J[1]+", "+J[2]+", "+J[3]+")"}var CW0=sC,SW0=oC,IW0=rC,hW0=tC,fW0=eC,bW0=FS,LS=JS,US=WS,pW0=$S,VS=XS,AW0=VS,MS=YS,yW0=MS,kH=ZS,gW0=QS,cW0=KS,mW0=function(){var J=G$(),X=F$(1,0,0),Y=F$(0,1,0);return function(Z,W,$){var Q=q$(W,$);if(Q<-0.999999){if(bJ(J,X,W),BH(J)<0.000001)bJ(J,Y,W);return vH(J,J),GS(Z,J,Math.PI),Z}else if(Q>0.999999)return Z[0]=0,Z[1]=0,Z[2]=0,Z[3]=1,Z;else return bJ(J,W,$),Z[0]=J[0],Z[1]=J[1],Z[2]=J[2],Z[3]=1+Q,kH(Z,Z)}}(),lW0=function(){var J=jH(),X=jH();return function(Y,Z,W,$,Q,K){return H$(J,Z,Q,K),H$(X,W,$,K),H$(Y,J,X,2*K*(1-K)),Y}}(),uW0=function(){var J=NH();return function(X,Y,Z,W){return J[0]=Z[0],J[3]=Z[1],J[6]=Z[2],J[1]=W[0],J[4]=W[1],J[7]=W[2],J[2]=-Y[0],J[5]=-Y[1],J[8]=-Y[2],kH(X,zS(X,J))}}();var q0={};k6(q0,{zero:()=>M$0,transformMat4:()=>L$0,transformMat3:()=>z$0,transformMat2d:()=>H$0,transformMat2:()=>q$0,subtract:()=>wS,sub:()=>P$0,str:()=>R$0,squaredLength:()=>BS,squaredDistance:()=>NS,sqrLen:()=>k$0,sqrDist:()=>j$0,set:()=>aW0,scaleAndAdd:()=>Y$0,scale:()=>X$0,round:()=>J$0,rotate:()=>U$0,random:()=>F$0,normalize:()=>$$0,negate:()=>Z$0,multiply:()=>OS,mul:()=>N$0,min:()=>tW0,max:()=>eW0,lerp:()=>G$0,length:()=>vS,len:()=>x$0,inverse:()=>W$0,fromValues:()=>iW0,forEach:()=>T$0,floor:()=>rW0,exactEquals:()=>w$0,equals:()=>O$0,dot:()=>Q$0,divide:()=>xS,div:()=>v$0,distance:()=>PS,dist:()=>B$0,cross:()=>K$0,create:()=>RS,copy:()=>nW0,clone:()=>dW0,ceil:()=>oW0,angle:()=>V$0,add:()=>sW0});function RS(){var J=new Q0(2);if(Q0!=Float32Array)J[0]=0,J[1]=0;return J}function dW0(J){var X=new Q0(2);return X[0]=J[0],X[1]=J[1],X}function iW0(J,X){var Y=new Q0(2);return Y[0]=J,Y[1]=X,Y}function nW0(J,X){return J[0]=X[0],J[1]=X[1],J}function aW0(J,X,Y){return J[0]=X,J[1]=Y,J}function sW0(J,X,Y){return J[0]=X[0]+Y[0],J[1]=X[1]+Y[1],J}function wS(J,X,Y){return J[0]=X[0]-Y[0],J[1]=X[1]-Y[1],J}function OS(J,X,Y){return J[0]=X[0]*Y[0],J[1]=X[1]*Y[1],J}function xS(J,X,Y){return J[0]=X[0]/Y[0],J[1]=X[1]/Y[1],J}function oW0(J,X){return J[0]=Math.ceil(X[0]),J[1]=Math.ceil(X[1]),J}function rW0(J,X){return J[0]=Math.floor(X[0]),J[1]=Math.floor(X[1]),J}function tW0(J,X,Y){return J[0]=Math.min(X[0],Y[0]),J[1]=Math.min(X[1],Y[1]),J}function eW0(J,X,Y){return J[0]=Math.max(X[0],Y[0]),J[1]=Math.max(X[1],Y[1]),J}function J$0(J,X){return J[0]=Math.round(X[0]),J[1]=Math.round(X[1]),J}function X$0(J,X,Y){return J[0]=X[0]*Y,J[1]=X[1]*Y,J}function Y$0(J,X,Y,Z){return J[0]=X[0]+Y[0]*Z,J[1]=X[1]+Y[1]*Z,J}function PS(J,X){var Y=X[0]-J[0],Z=X[1]-J[1];return Math.hypot(Y,Z)}function NS(J,X){var Y=X[0]-J[0],Z=X[1]-J[1];return Y*Y+Z*Z}function vS(J){var X=J[0],Y=J[1];return Math.hypot(X,Y)}function BS(J){var X=J[0],Y=J[1];return X*X+Y*Y}function Z$0(J,X){return J[0]=-X[0],J[1]=-X[1],J}function W$0(J,X){return J[0]=1/X[0],J[1]=1/X[1],J}function $$0(J,X){var Y=X[0],Z=X[1],W=Y*Y+Z*Z;if(W>0)W=1/Math.sqrt(W);return J[0]=X[0]*W,J[1]=X[1]*W,J}function Q$0(J,X){return J[0]*X[0]+J[1]*X[1]}function K$0(J,X,Y){var Z=X[0]*Y[1]-X[1]*Y[0];return J[0]=J[1]=0,J[2]=Z,J}function G$0(J,X,Y,Z){var W=X[0],$=X[1];return J[0]=W+Z*(Y[0]-W),J[1]=$+Z*(Y[1]-$),J}function F$0(J,X){X=X||1;var Y=d6()*2*Math.PI;return J[0]=Math.cos(Y)*X,J[1]=Math.sin(Y)*X,J}function q$0(J,X,Y){var Z=X[0],W=X[1];return J[0]=Y[0]*Z+Y[2]*W,J[1]=Y[1]*Z+Y[3]*W,J}function H$0(J,X,Y){var Z=X[0],W=X[1];return J[0]=Y[0]*Z+Y[2]*W+Y[4],J[1]=Y[1]*Z+Y[3]*W+Y[5],J}function z$0(J,X,Y){var Z=X[0],W=X[1];return J[0]=Y[0]*Z+Y[3]*W+Y[6],J[1]=Y[1]*Z+Y[4]*W+Y[7],J}function L$0(J,X,Y){var Z=X[0],W=X[1];return J[0]=Y[0]*Z+Y[4]*W+Y[12],J[1]=Y[1]*Z+Y[5]*W+Y[13],J}function U$0(J,X,Y,Z){var W=X[0]-Y[0],$=X[1]-Y[1],Q=Math.sin(Z),K=Math.cos(Z);return J[0]=W*K-$*Q+Y[0],J[1]=W*Q+$*K+Y[1],J}function V$0(J,X){var Y=J[0],Z=J[1],W=X[0],$=X[1],Q=Math.sqrt(Y*Y+Z*Z)*Math.sqrt(W*W+$*$),K=Q&&(Y*W+Z*$)/Q;return Math.acos(Math.min(Math.max(K,-1),1))}function M$0(J){return J[0]=0,J[1]=0,J}function R$0(J){return"vec2("+J[0]+", "+J[1]+")"}function w$0(J,X){return J[0]===X[0]&&J[1]===X[1]}function O$0(J,X){var Y=J[0],Z=J[1],W=X[0],$=X[1];return Math.abs(Y-W)<=l*Math.max(1,Math.abs(Y),Math.abs(W))&&Math.abs(Z-$)<=l*Math.max(1,Math.abs(Z),Math.abs($))}var x$0=vS,P$0=wS,N$0=OS,v$0=xS,B$0=PS,j$0=NS,k$0=BS,T$0=function(){var J=RS();return function(X,Y,Z,W,$,Q){var K,G;if(!Y)Y=2;if(!Z)Z=0;if(W)G=Math.min(W*Y+Z,X.length);else G=X.length;for(K=Z;K<G;K+=Y)J[0]=X[K],J[1]=X[K+1],$(J,J,Q),X[K]=J[0],X[K+1]=J[1];return X}}();class A9 extends Float32Array{constructor(J,X,Y,Z){super([J,X,Y,Z])}get determinant(){return e0.determinant(this)}get frobeniusNorm(){return e0.frob(this)}static create(){let J=new A9(0,0,0,0);return e0.identity(J),J}static fromRotation(J){let X=A9.create();return e0.fromRotation(X,J),X}static fromScaling(J){let X=A9.create();return e0.fromScaling(X,J),X}add(J){return e0.add(this,this,J),this}adjoint(){return e0.adjoint(this,this),this}clone(){return new A9(this[0],this[1],this[2],this[3])}copy(J){return e0.copy(this,J),this}equals(J){return e0.equals(this,J)}exactEquals(J){return e0.exactEquals(this,J)}identity(){return e0.identity(this),this}invert(){return e0.invert(this,this),this}multiply(J){return e0.mul(this,this,J),this}multiplyScalar(J){return e0.multiplyScalar(this,this,J),this}rotate(J){return e0.rotate(this,this,J),this}subtract(J){return e0.sub(this,this,J),this}toString(){return`[${this[0]},${this[1]}][${this[2]},${this[3]}]`}transpose(){return e0.transpose(this,this),this}}class i6 extends Float32Array{constructor(J,X,Y,Z,W,$,Q,K,G){super([J,X,Y,Z,W,$,Q,K,G])}get determinant(){return h0.determinant(this)}get frobeniusNorm(){return h0.frob(this)}static create(){let J=new i6(0,0,0,0,0,0,0,0,0);return h0.identity(J),J}static fromMatrix4(J){let X=i6.create();return h0.fromMat4(X,J),X}static fromQuaternion(J){let X=i6.create();return h0.fromQuat(X,J),X}static fromRotation(J){let X=i6.create();return h0.fromRotation(X,J),X}static fromScaling(J){let X=i6.create();return h0.fromScaling(X,J),X}static fromTranslation(J){let X=i6.create();return h0.fromTranslation(X,J),X}add(J){return h0.add(this,this,J),this}adjoint(){return h0.adjoint(this,this),this}clone(){return new i6(this[0],this[1],this[2],this[3],this[4],this[5],this[6],this[7],this[8])}copy(J){return h0.copy(this,J),this}equals(J){return h0.equals(this,J)}exactEquals(J){return h0.exactEquals(this,J)}identity(){return h0.identity(this),this}invert(){return h0.invert(this,this),this}multiply(J){return h0.mul(this,this,J),this}multiplyScalar(J){return h0.multiplyScalar(this,this,J),this}transformVector(J){return J.transformMatrix3(this)}projection(J,X){return h0.projection(this,J,X),this}rotate(J){return h0.rotate(this,this,J),this}subtract(J){return h0.sub(this,this,J),this}toString(){return`[${this[0]},${this[1]},${this[2]}][${this[3]},${this[4]},${this[5]}][${this[6]},${this[7]},${this[8]}]`}transpose(){return h0.transpose(this,this),this}}class E8 extends Float32Array{constructor(J,X,Y,Z,W,$,Q,K,G,F,q,H,z,V,M,R){super([J,X,Y,Z,W,$,Q,K,G,F,q,H,z,V,M,R])}get determinant(){return Y0.determinant(this)}get frobeniusNorm(){return Y0.frob(this)}static create(){let J=new E8(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);return Y0.identity(J),J}static fromQuaternion(J){let X=E8.create();return Y0.fromQuat(X,J),X}static fromRotation(J,X){let Y=E8.create();return Y0.fromRotation(Y,J,X),Y}static fromRotationTranslation(J,X){let Y=E8.create();return Y0.fromRotationTranslation(Y,J,X),Y}static fromRotationTranslationScale(J,X,Y){let Z=E8.create();return Y0.fromRotationTranslationScale(Z,J,X,Y),Z}static fromRotationTranslationScaleOrigin(J,X,Y,Z){let W=E8.create();return Y0.fromRotationTranslationScaleOrigin(W,J,X,Y,Z),W}static fromScaling(J){let X=E8.create();return Y0.fromScaling(X,J),X}static fromTranslation(J){let X=E8.create();return Y0.fromTranslation(X,J),X}static fromXRotation(J){let X=E8.create();return Y0.fromXRotation(X,J),X}static fromYRotation(J){let X=E8.create();return Y0.fromYRotation(X,J),X}static fromZRotation(J){let X=E8.create();return Y0.fromZRotation(X,J),X}add(J){return Y0.add(this,this,J),this}adjoint(){return Y0.adjoint(this,this),this}clone(){return new E8(this[0],this[1],this[2],this[3],this[4],this[5],this[6],this[7],this[8],this[9],this[10],this[11],this[12],this[13],this[14],this[15])}copy(J){return Y0.copy(this,J),this}equals(J){return Y0.equals(this,J)}exactEquals(J){return Y0.exactEquals(this,J)}frustrum(J,X,Y,Z,W,$){return Y0.frustum(this,J,X,Y,Z,W,$),this}identity(){return Y0.identity(this),this}invert(){return Y0.invert(this,this),this}lookAt(J,X,Y){return Y0.lookAt(this,J,X,Y),this}multiply(J){return Y0.mul(this,this,J),this}multiplyScalar(J){return Y0.multiplyScalar(this,this,J),this}orthographic(J,X,Y,Z,W,$){return Y0.ortho(this,J,X,Y,Z,W,$),this}perspective(J,X,Y,Z){return Y0.perspective(this,J,X,Y,Z),this}rotate(J,X){return Y0.rotate(this,this,J,X),this}rotateX(J){return Y0.rotateX(this,this,J),this}rotateY(J){return Y0.rotateY(this,this,J),this}rotateZ(J){return Y0.rotateZ(this,this,J),this}scale(J){return Y0.scale(this,this,J),this}subtract(J){return Y0.sub(this,this,J),this}targetTo(J,X,Y){return Y0.targetTo(this,J,X,Y),this}toString(){return`[${this[0]},${this[1]},${this[2]},${this[3]}][${this[4]},${this[5]},${this[6]},${this[7]}][${this[8]},${this[9]},${this[10]},${this[11]}][${this[12]},${this[13]},${this[14]},${this[15]}]`}translate(J){return Y0.translate(this,this,J),this}transpose(){return Y0.transpose(this,this),this}}class J4 extends Float32Array{constructor(J,X,Y,Z){super([J,X,Y,Z])}get length(){return N0.length(this)}get squaredLength(){return N0.squaredLength(this)}get magnitude(){return N0.length(this)}get squaredMagnitude(){return N0.squaredLength(this)}get x(){return this[0]}set x(J){this[0]=J}get y(){return this[1]}set y(J){this[1]=J}get z(){return this[2]}set z(J){this[2]=J}get w(){return this[3]}set w(J){this[3]=J}static fromEuler(J,X,Y){let Z=N0.fromEuler(new Float32Array(4),J,X,Y);return new J4(Z[0],Z[1],Z[2],Z[3])}static fromQuaternionLike(J){return new J4(J.x,J.y,J.z,J.w)}clone(){return new J4(this.x,this.y,this.z,this.w)}conjugate(){return N0.conjugate(this,this),this}copy(J){return N0.copy(this,J),this}dot(J){return N0.dot(this,J)}exponential(){return N0.exp(this,this),this}equals(J){return N0.equals(this,J)}exactEquals(J){return N0.exactEquals(this,J)}getAngle(J){return N0.getAngle(this,J)}identity(){return N0.identity(this),this}invert(){return N0.invert(this,this),this}lerp(J,X){return N0.lerp(this,this,J,X),this}logarithm(){return N0.ln(this,this),this}multiply(J){return N0.multiply(this,this,J),this}transformVector(J){return J.transformQuaternion(this)}normalize(){return N0.normalize(this,this),this}power(J){return N0.pow(this,this,J),this}randomize(){return N0.random(this),this}rotateX(J){return N0.rotateX(this,this,J),this}rotateY(J){return N0.rotateY(this,this,J),this}rotateZ(J){return N0.rotateZ(this,this,J),this}scale(J){return N0.scale(this,this,J),this}setAxisAngle(J,X){return N0.setAxisAngle(this,J,X),this}slerp(J,X){return N0.slerp(this,this,J,X),this}toString(){return`${this.x},${this.y},${this.z},${this.w}`}}class pJ extends Float32Array{constructor(J,X){super([J,X])}get length(){return q0.length(this)}get squaredLength(){return q0.squaredLength(this)}get magnitude(){return q0.length(this)}get squaredMagnitude(){return q0.squaredLength(this)}get x(){return this[0]}set x(J){this[0]=J}get y(){return this[1]}set y(J){this[1]=J}static create(){return new pJ(0,0)}add(J){return q0.add(this,this,J),this}angle(J){return q0.angle(this,J)}ceil(){return q0.ceil(this,this),this}clone(){return new pJ(this.x,this.y)}copy(J){return q0.copy(this,J),this}distance(J){return q0.distance(this,J)}divide(J){return q0.divide(this,this,J),this}dot(J){return q0.dot(this,J)}equals(J){return q0.equals(this,J)}exactEquals(J){return q0.exactEquals(this,J)}floor(){return q0.floor(this,this),this}invert(){return q0.inverse(this,this),this}lerp(J,X){return q0.lerp(this,this,J,X),this}max(J){return q0.max(this,this,J),this}min(J){return q0.min(this,this,J),this}multiply(J){return q0.mul(this,this,J),this}negate(){return q0.negate(this,this),this}normalize(){return q0.normalize(this,this),this}randomize(J){return q0.random(this,J),this}rotate(J,X){return q0.rotate(this,this,J,X),this}round(){return q0.round(this,this),this}scale(J){return q0.scale(this,this,J),this}scaleAndAdd(J,X){return q0.scaleAndAdd(this,this,J,X),this}subtract(J){return q0.sub(this,this,J),this}toString(){return`${this.x},${this.y}`}transformMatrix2(J){return q0.transformMat2(this,this,J),this}transformMatrix3(J){return q0.transformMat3(this,this,J),this}transformMatrix4(J){return q0.transformMat4(this,this,J),this}zero(){return q0.zero(this),this}}class X4 extends Float32Array{constructor(J,X,Y){super([J,X,Y])}get length(){return W0.length(this)}get squaredLength(){return W0.squaredLength(this)}get magnitude(){return W0.length(this)}get squaredMagnitude(){return W0.squaredLength(this)}get x(){return this[0]}set x(J){this[0]=J}get y(){return this[1]}set y(J){this[1]=J}get z(){return this[2]}set z(J){this[2]=J}static create(){return new X4(0,0,0)}static fromVector3Like(J){return new X4(J.x,J.y,J.z)}add(J){return W0.add(this,this,J),this}ceil(){return W0.ceil(this,this),this}clone(){return new X4(this.x,this.y,this.z)}copy(J){return W0.copy(this,J),this}cross(J){return W0.cross(this,this,J),this}distance(J){return W0.distance(this,J)}divide(J){return W0.div(this,this,J),this}dot(J){return W0.dot(this,J)}equals(J){return W0.equals(this,J)}exactEquals(J){return W0.exactEquals(this,J)}floor(){return W0.floor(this,this),this}invert(){return W0.inverse(this,this),this}lerp(J,X){return W0.lerp(this,this,J,X),this}max(J){return W0.max(this,this,J),this}min(J){return W0.min(this,this,J),this}multiply(J){return W0.mul(this,this,J),this}negate(){return W0.negate(this,this),this}normalize(){return W0.normalize(this,this),this}randomize(J){return W0.random(this,J),this}rotateX(J,X){return W0.rotateX(this,this,J,X),this}rotateY(J,X){return W0.rotateY(this,this,J,X),this}rotateZ(J,X){return W0.rotateZ(this,this,J,X),this}round(){return W0.round(this,this),this}scale(J){return W0.scale(this,this,J),this}scaleAndAdd(J,X){return W0.scaleAndAdd(this,this,J,X),this}subtract(J){return W0.sub(this,this,J),this}toString(){return`${this.x},${this.y},${this.z}`}transformMatrix3(J){return W0.transformMat3(this,this,J),this}transformMatrix4(J){return W0.transformMat4(this,this,J),this}transformQuaternion(J){return W0.transformQuat(this,this,J),this}zero(){return W0.zero(this),this}}var v0=function(J,X,Y,Z){function W($){return $ instanceof Y?$:new Y(function(Q){Q($)})}return new(Y||(Y=Promise))(function($,Q){function K(q){try{F(Z.next(q))}catch(H){Q(H)}}function G(q){try{F(Z.throw(q))}catch(H){Q(H)}}function F(q){q.done?$(q.value):W(q.value).then(K,G)}F((Z=Z.apply(J,X||[])).next())})},P0=function(J,X){var Y={label:0,sent:function(){if($[0]&1)throw $[1];return $[1]},trys:[],ops:[]},Z,W,$,Q=Object.create((typeof Iterator==="function"?Iterator:Object).prototype);return Q.next=K(0),Q.throw=K(1),Q.return=K(2),typeof Symbol==="function"&&(Q[Symbol.iterator]=function(){return this}),Q;function K(F){return function(q){return G([F,q])}}function G(F){if(Z)throw new TypeError("Generator is already executing.");while(Q&&(Q=0,F[0]&&(Y=0)),Y)try{if(Z=1,W&&($=F[0]&2?W.return:F[0]?W.throw||(($=W.return)&&$.call(W),0):W.next)&&!($=$.call(W,F[1])).done)return $;if(W=0,$)F=[F[0]&2,$.value];switch(F[0]){case 0:case 1:$=F;break;case 4:return Y.label++,{value:F[1],done:!1};case 5:Y.label++,W=F[1],F=[0];continue;case 7:F=Y.ops.pop(),Y.trys.pop();continue;default:if(($=Y.trys,!($=$.length>0&&$[$.length-1]))&&(F[0]===6||F[0]===2)){Y=0;continue}if(F[0]===3&&(!$||F[1]>$[0]&&F[1]<$[3])){Y.label=F[1];break}if(F[0]===6&&Y.label<$[1]){Y.label=$[1],$=F;break}if($&&Y.label<$[2]){Y.label=$[2],Y.ops.push(F);break}if($[2])Y.ops.pop();Y.trys.pop();continue}F=X.call(J,Y)}catch(q){F=[6,q],W=0}finally{Z=$=0}if(F[0]&5)throw F[1];return{value:F[0]?F[1]:void 0,done:!0}}},c8=function(J,X){var Y=typeof Symbol==="function"&&J[Symbol.iterator];if(!Y)return J;var Z=Y.call(J),W,$=[],Q;try{while((X===void 0||X-- >0)&&!(W=Z.next()).done)$.push(W.value)}catch(K){Q={error:K}}finally{try{if(W&&!W.done&&(Y=Z.return))Y.call(Z)}finally{if(Q)throw Q.error}}return $},$6=function(J,X,Y){if(Y||arguments.length===2){for(var Z=0,W=X.length,$;Z<W;Z++)if($||!(Z in X)){if(!$)$=Array.prototype.slice.call(X,0,Z);$[Z]=X[Z]}}return J.concat($||Array.prototype.slice.call(X))},jS=function(J){var X=typeof Symbol==="function"&&Symbol.iterator,Y=X&&J[X],Z=0;if(Y)return Y.call(J);if(J&&typeof J.length==="number")return{next:function(){if(J&&Z>=J.length)J=void 0;return{value:J&&J[Z++],done:!J}}};throw new TypeError(X?"Object is not iterable.":"Symbol.iterator is not defined.")},P_0=function(){function J(X){if(X===void 0)X=J.minComparator;var Y=this;this.compare=X,this.heapArray=[],this._limit=0,this.offer=this.add,this.element=this.peek,this.poll=this.pop,this._invertedCompare=function(Z,W){return Y.compare(Z,W).then(function($){return-1*$})}}return J.getChildrenIndexOf=function(X){return[X*2+1,X*2+2]},J.getParentIndexOf=function(X){if(X<=0)return-1;var Y=X%2?1:2;return Math.floor((X-Y)/2)},J.getSiblingIndexOf=function(X){if(X<=0)return-1;var Y=X%2?1:-1;return X+Y},J.minComparator=function(X,Y){return v0(this,void 0,void 0,function(){return P0(this,function(Z){if(X>Y)return[2,1];else if(X<Y)return[2,-1];else return[2,0]})})},J.maxComparator=function(X,Y){return v0(this,void 0,void 0,function(){return P0(this,function(Z){if(Y>X)return[2,1];else if(Y<X)return[2,-1];else return[2,0]})})},J.minComparatorNumber=function(X,Y){return v0(this,void 0,void 0,function(){return P0(this,function(Z){return[2,X-Y]})})},J.maxComparatorNumber=function(X,Y){return v0(this,void 0,void 0,function(){return P0(this,function(Z){return[2,Y-X]})})},J.defaultIsEqual=function(X,Y){return v0(this,void 0,void 0,function(){return P0(this,function(Z){return[2,X===Y]})})},J.print=function(X){function Y(q){var H=J.getParentIndexOf(q);return Math.floor(Math.log2(H+1))}function Z(q,H){var z="";for(;H>0;--H)z+=q;return z}var W=0,$=[],Q=Y(X.length-1)+2,K=0;while(W<X.length){var G=Y(W)+1;if(W===0)G=0;var F=String(X.get(W));if(F.length>K)K=F.length;$[G]=$[G]||[],$[G].push(F),W+=1}return $.map(function(q,H){var z=Math.pow(2,Q-H)-1;return Z(" ",Math.floor(z/2)*K)+q.map(function(V){var M=(K-V.length)/2;return Z(" ",Math.ceil(M))+V+Z(" ",Math.floor(M))}).join(Z(" ",z*K))}).join(`
386
386
  `)},J.heapify=function(X,Y){return v0(this,void 0,void 0,function(){var Z;return P0(this,function(W){switch(W.label){case 0:return Z=new J(Y),Z.heapArray=X,[4,Z.init()];case 1:return W.sent(),[2,Z]}})})},J.heappop=function(X,Y){var Z=new J(Y);return Z.heapArray=X,Z.pop()},J.heappush=function(X,Y,Z){return v0(this,void 0,void 0,function(){var W;return P0(this,function($){switch($.label){case 0:return W=new J(Z),W.heapArray=X,[4,W.push(Y)];case 1:return $.sent(),[2]}})})},J.heappushpop=function(X,Y,Z){var W=new J(Z);return W.heapArray=X,W.pushpop(Y)},J.heapreplace=function(X,Y,Z){var W=new J(Z);return W.heapArray=X,W.replace(Y)},J.heaptop=function(X,Y,Z){if(Y===void 0)Y=1;var W=new J(Z);return W.heapArray=X,W.top(Y)},J.heapbottom=function(X,Y,Z){if(Y===void 0)Y=1;var W=new J(Z);return W.heapArray=X,W.bottom(Y)},J.nlargest=function(X,Y,Z){return v0(this,void 0,void 0,function(){var W;return P0(this,function($){switch($.label){case 0:return W=new J(Z),W.heapArray=$6([],c8(Y),!1),[4,W.init()];case 1:return $.sent(),[2,W.top(X)]}})})},J.nsmallest=function(X,Y,Z){return v0(this,void 0,void 0,function(){var W;return P0(this,function($){switch($.label){case 0:return W=new J(Z),W.heapArray=$6([],c8(Y),!1),[4,W.init()];case 1:return $.sent(),[2,W.bottom(X)]}})})},J.prototype.add=function(X){return v0(this,void 0,void 0,function(){return P0(this,function(Y){switch(Y.label){case 0:return[4,this._sortNodeUp(this.heapArray.push(X)-1)];case 1:return Y.sent(),this._applyLimit(),[2,!0]}})})},J.prototype.addAll=function(X){return v0(this,void 0,void 0,function(){var Y,Z,W;return P0(this,function($){switch($.label){case 0:Y=this.length,(W=this.heapArray).push.apply(W,$6([],c8(X),!1)),Z=this.length,$.label=1;case 1:if(!(Y<Z))return[3,4];return[4,this._sortNodeUp(Y)];case 2:$.sent(),$.label=3;case 3:return++Y,[3,1];case 4:return this._applyLimit(),[2,!0]}})})},J.prototype.bottom=function(){return v0(this,arguments,void 0,function(X){if(X===void 0)X=1;return P0(this,function(Y){if(this.heapArray.length===0||X<=0)return[2,[]];else if(this.heapArray.length===1)return[2,[this.heapArray[0]]];else if(X>=this.heapArray.length)return[2,$6([],c8(this.heapArray),!1)];else return[2,this._bottomN_push(~~X)]})})},J.prototype.check=function(){return v0(this,void 0,void 0,function(){var X,Y,Z,W,$,Q,K,G,F;return P0(this,function(q){switch(q.label){case 0:X=0,q.label=1;case 1:if(!(X<this.heapArray.length))return[3,10];Y=this.heapArray[X],Z=this.getChildrenOf(X),q.label=2;case 2:q.trys.push([2,7,8,9]),W=(G=void 0,jS(Z)),$=W.next(),q.label=3;case 3:if($.done)return[3,6];return Q=$.value,[4,this.compare(Y,Q)];case 4:if(q.sent()>0)return[2,Y];q.label=5;case 5:return $=W.next(),[3,3];case 6:return[3,9];case 7:return K=q.sent(),G={error:K},[3,9];case 8:try{if($&&!$.done&&(F=W.return))F.call(W)}finally{if(G)throw G.error}return[7];case 9:return++X,[3,1];case 10:return[2]}})})},J.prototype.clear=function(){this.heapArray=[]},J.prototype.clone=function(){var X=new J(this.comparator());return X.heapArray=this.toArray(),X._limit=this._limit,X},J.prototype.comparator=function(){return this.compare},J.prototype.contains=function(X){return v0(this,arguments,void 0,function(Y,Z){var W,$,Q,K,G,F;if(Z===void 0)Z=J.defaultIsEqual;return P0(this,function(q){switch(q.label){case 0:q.trys.push([0,5,6,7]),W=jS(this.heapArray),$=W.next(),q.label=1;case 1:if($.done)return[3,4];return Q=$.value,[4,Z(Q,Y)];case 2:if(q.sent())return[2,!0];q.label=3;case 3:return $=W.next(),[3,1];case 4:return[3,7];case 5:return K=q.sent(),G={error:K},[3,7];case 6:try{if($&&!$.done&&(F=W.return))F.call(W)}finally{if(G)throw G.error}return[7];case 7:return[2,!1]}})})},J.prototype.init=function(X){return v0(this,void 0,void 0,function(){var Y;return P0(this,function(Z){switch(Z.label){case 0:if(X)this.heapArray=$6([],c8(X),!1);Y=Math.floor(this.heapArray.length),Z.label=1;case 1:if(!(Y>=0))return[3,4];return[4,this._sortNodeDown(Y)];case 2:Z.sent(),Z.label=3;case 3:return--Y,[3,1];case 4:return this._applyLimit(),[2]}})})},J.prototype.isEmpty=function(){return this.length===0},J.prototype.leafs=function(){if(this.heapArray.length===0)return[];var X=J.getParentIndexOf(this.heapArray.length-1);return this.heapArray.slice(X+1)},Object.defineProperty(J.prototype,"length",{get:function(){return this.heapArray.length},enumerable:!1,configurable:!0}),Object.defineProperty(J.prototype,"limit",{get:function(){return this._limit},set:function(X){this._limit=~~X,this._applyLimit()},enumerable:!1,configurable:!0}),J.prototype.peek=function(){return this.heapArray[0]},J.prototype.pop=function(){return v0(this,void 0,void 0,function(){var X;return P0(this,function(Y){if(X=this.heapArray.pop(),this.length>0&&X!==void 0)return[2,this.replace(X)];return[2,X]})})},J.prototype.push=function(){var X=[];for(var Y=0;Y<arguments.length;Y++)X[Y]=arguments[Y];return v0(this,void 0,void 0,function(){return P0(this,function(Z){if(X.length<1)return[2,!1];else if(X.length===1)return[2,this.add(X[0])];else return[2,this.addAll(X)]})})},J.prototype.pushpop=function(X){return v0(this,void 0,void 0,function(){var Y;return P0(this,function(Z){switch(Z.label){case 0:return[4,this.compare(this.heapArray[0],X)];case 1:if(!(Z.sent()<0))return[3,3];return Y=c8([this.heapArray[0],X],2),X=Y[0],this.heapArray[0]=Y[1],[4,this._sortNodeDown(0)];case 2:Z.sent(),Z.label=3;case 3:return[2,X]}})})},J.prototype.remove=function(X){return v0(this,arguments,void 0,function(Y,Z){var W,$,Q,K=this;if(Z===void 0)Z=J.defaultIsEqual;return P0(this,function(G){switch(G.label){case 0:if(!this.heapArray.length)return[2,!1];if(Y!==void 0)return[3,2];return[4,this.pop()];case 1:return G.sent(),[2,!0];case 2:W=[0],G.label=3;case 3:if(!W.length)return[3,13];return $=W.shift(),[4,Z(this.heapArray[$],Y)];case 4:if(!G.sent())return[3,11];if($!==0)return[3,6];return[4,this.pop()];case 5:return G.sent(),[3,10];case 6:if($!==this.heapArray.length-1)return[3,7];return this.heapArray.pop(),[3,10];case 7:return this.heapArray.splice($,1,this.heapArray.pop()),[4,this._sortNodeUp($)];case 8:return G.sent(),[4,this._sortNodeDown($)];case 9:G.sent(),G.label=10;case 10:return[2,!0];case 11:Q=J.getChildrenIndexOf($).filter(function(F){return F<K.heapArray.length}),W.push.apply(W,$6([],c8(Q),!1)),G.label=12;case 12:return[3,3];case 13:return[2,!1]}})})},J.prototype.replace=function(X){return v0(this,void 0,void 0,function(){var Y;return P0(this,function(Z){switch(Z.label){case 0:return Y=this.heapArray[0],this.heapArray[0]=X,[4,this._sortNodeDown(0)];case 1:return Z.sent(),[2,Y]}})})},J.prototype.size=function(){return this.length},J.prototype.top=function(){return v0(this,arguments,void 0,function(X){if(X===void 0)X=1;return P0(this,function(Y){if(this.heapArray.length===0||X<=0)return[2,[]];else if(this.heapArray.length===1||X===1)return[2,[this.heapArray[0]]];else if(X>=this.heapArray.length)return[2,$6([],c8(this.heapArray),!1)];else return[2,this._topN_push(~~X)]})})},J.prototype.toArray=function(){return $6([],c8(this.heapArray),!1)},J.prototype.toString=function(){return this.heapArray.toString()},J.prototype.get=function(X){return this.heapArray[X]},J.prototype.getChildrenOf=function(X){var Y=this;return J.getChildrenIndexOf(X).map(function(Z){return Y.heapArray[Z]}).filter(function(Z){return Z!==void 0})},J.prototype.getParentOf=function(X){var Y=J.getParentIndexOf(X);return this.heapArray[Y]},J.prototype[Symbol.iterator]=function(){return P0(this,function(X){switch(X.label){case 0:if(!this.length)return[3,2];return[4,this.pop()];case 1:return X.sent(),[3,0];case 2:return[2]}})},J.prototype.iterator=function(){return this},J.prototype._applyLimit=function(){if(this._limit&&this._limit<this.heapArray.length){var X=this.heapArray.length-this._limit;while(X)this.heapArray.pop(),--X}},J.prototype._bottomN_push=function(X){return v0(this,void 0,void 0,function(){var Y,Z,W,$,K,Q,K;return P0(this,function(G){switch(G.label){case 0:return Y=new J(this.compare),Y.limit=X,Y.heapArray=this.heapArray.slice(-X),[4,Y.init()];case 1:G.sent(),Z=this.heapArray.length-1-X,W=J.getParentIndexOf(Z),$=[];for(K=Z;K>W;--K)$.push(K);Q=this.heapArray,G.label=2;case 2:if(!$.length)return[3,6];return K=$.shift(),[4,this.compare(Q[K],Y.peek())];case 3:if(!(G.sent()>0))return[3,5];return[4,Y.replace(Q[K])];case 4:if(G.sent(),K%2)$.push(J.getParentIndexOf(K));G.label=5;case 5:return[3,2];case 6:return[2,Y.toArray()]}})})},J.prototype._moveNode=function(X,Y){var Z;Z=c8([this.heapArray[Y],this.heapArray[X]],2),this.heapArray[X]=Z[0],this.heapArray[Y]=Z[1]},J.prototype._sortNodeDown=function(X){return v0(this,void 0,void 0,function(){var Y,Z,W,$,Q,K;return P0(this,function(G){switch(G.label){case 0:Y=this.heapArray.length,G.label=1;case 1:if(Z=2*X+1,W=Z+1,$=X,Q=Z<Y,!Q)return[3,3];return[4,this.compare(this.heapArray[Z],this.heapArray[$])];case 2:Q=G.sent()<0,G.label=3;case 3:if(Q)$=Z;if(K=W<Y,!K)return[3,5];return[4,this.compare(this.heapArray[W],this.heapArray[$])];case 4:K=G.sent()<0,G.label=5;case 5:if(K)$=W;if($===X)return[3,7];this._moveNode(X,$),X=$,G.label=6;case 6:return[3,1];case 7:return[2]}})})},J.prototype._sortNodeUp=function(X){return v0(this,void 0,void 0,function(){var Y;return P0(this,function(Z){switch(Z.label){case 0:if(!(X>0))return[3,2];return Y=J.getParentIndexOf(X),[4,this.compare(this.heapArray[X],this.heapArray[Y])];case 1:if(Z.sent()<0)this._moveNode(X,Y),X=Y;else return[3,2];return[3,0];case 2:return[2]}})})},J.prototype._topN_push=function(X){return v0(this,void 0,void 0,function(){var Y,Z,W,$;return P0(this,function(Q){switch(Q.label){case 0:Y=new J(this._invertedCompare),Y.limit=X,Z=[0],W=this.heapArray,Q.label=1;case 1:if(!Z.length)return[3,7];if($=Z.shift(),!($<W.length))return[3,6];if(!(Y.length<X))return[3,3];return[4,Y.push(W[$])];case 2:return Q.sent(),Z.push.apply(Z,$6([],c8(J.getChildrenIndexOf($)),!1)),[3,6];case 3:return[4,this.compare(W[$],Y.peek())];case 4:if(!(Q.sent()<0))return[3,6];return[4,Y.replace(W[$])];case 5:Q.sent(),Z.push.apply(Z,$6([],c8(J.getChildrenIndexOf($)),!1)),Q.label=6;case 6:return[3,1];case 7:return[2,Y.toArray()]}})})},J.prototype._topN_fill=function(X){return v0(this,void 0,void 0,function(){var Y,Z,W,$,Q,Q;return P0(this,function(K){switch(K.label){case 0:return Y=this.heapArray,Z=new J(this._invertedCompare),Z.limit=X,Z.heapArray=Y.slice(0,X),[4,Z.init()];case 1:K.sent(),W=J.getParentIndexOf(X-1)+1,$=[];for(Q=W;Q<X;++Q)$.push.apply($,$6([],c8(J.getChildrenIndexOf(Q).filter(function(G){return G<Y.length})),!1));if((X-1)%2)$.push(X);K.label=2;case 2:if(!$.length)return[3,6];if(Q=$.shift(),!(Q<Y.length))return[3,5];return[4,this.compare(Y[Q],Z.peek())];case 3:if(!(K.sent()<0))return[3,5];return[4,Z.replace(Y[Q])];case 4:K.sent(),$.push.apply($,$6([],c8(J.getChildrenIndexOf(Q)),!1)),K.label=5;case 5:return[3,2];case 6:return[2,Z.toArray()]}})})},J.prototype._topN_heap=function(X){return v0(this,void 0,void 0,function(){var Y,Z,W,$,Q;return P0(this,function(K){switch(K.label){case 0:Y=this.clone(),Z=[],W=0,K.label=1;case 1:if(!(W<X))return[3,4];return Q=($=Z).push,[4,Y.pop()];case 2:Q.apply($,[K.sent()]),K.label=3;case 3:return++W,[3,1];case 4:return[2,Z]}})})},J.prototype._topIdxOf=function(X){return v0(this,void 0,void 0,function(){var Y,Z,W,$;return P0(this,function(Q){switch(Q.label){case 0:if(!X.length)return[2,-1];Y=0,Z=X[Y],W=1,Q.label=1;case 1:if(!(W<X.length))return[3,4];return[4,this.compare(X[W],Z)];case 2:if($=Q.sent(),$<0)Y=W,Z=X[W];Q.label=3;case 3:return++W,[3,1];case 4:return[2,Y]}})})},J.prototype._topOf=function(){var X=[];for(var Y=0;Y<arguments.length;Y++)X[Y]=arguments[Y];return v0(this,void 0,void 0,function(){var Z;return P0(this,function(W){switch(W.label){case 0:return Z=new J(this.compare),[4,Z.init(X)];case 1:return W.sent(),[2,Z.peek()]}})})},J}(),D$0=function(J,X){var Y={label:0,sent:function(){if($[0]&1)throw $[1];return $[1]},trys:[],ops:[]},Z,W,$,Q=Object.create((typeof Iterator==="function"?Iterator:Object).prototype);return Q.next=K(0),Q.throw=K(1),Q.return=K(2),typeof Symbol==="function"&&(Q[Symbol.iterator]=function(){return this}),Q;function K(F){return function(q){return G([F,q])}}function G(F){if(Z)throw new TypeError("Generator is already executing.");while(Q&&(Q=0,F[0]&&(Y=0)),Y)try{if(Z=1,W&&($=F[0]&2?W.return:F[0]?W.throw||(($=W.return)&&$.call(W),0):W.next)&&!($=$.call(W,F[1])).done)return $;if(W=0,$)F=[F[0]&2,$.value];switch(F[0]){case 0:case 1:$=F;break;case 4:return Y.label++,{value:F[1],done:!1};case 5:Y.label++,W=F[1],F=[0];continue;case 7:F=Y.ops.pop(),Y.trys.pop();continue;default:if(($=Y.trys,!($=$.length>0&&$[$.length-1]))&&(F[0]===6||F[0]===2)){Y=0;continue}if(F[0]===3&&(!$||F[1]>$[0]&&F[1]<$[3])){Y.label=F[1];break}if(F[0]===6&&Y.label<$[1]){Y.label=$[1],$=F;break}if($&&Y.label<$[2]){Y.label=$[2],Y.ops.push(F);break}if($[2])Y.ops.pop();Y.trys.pop();continue}F=X.call(J,Y)}catch(q){F=[6,q],W=0}finally{Z=$=0}if(F[0]&5)throw F[1];return{value:F[0]?F[1]:void 0,done:!0}}},L8=function(J,X){var Y=typeof Symbol==="function"&&J[Symbol.iterator];if(!Y)return J;var Z=Y.call(J),W,$=[],Q;try{while((X===void 0||X-- >0)&&!(W=Z.next()).done)$.push(W.value)}catch(K){Q={error:K}}finally{try{if(W&&!W.done&&(Y=Z.return))Y.call(Z)}finally{if(Q)throw Q.error}}return $},C8=function(J,X,Y){if(Y||arguments.length===2){for(var Z=0,W=X.length,$;Z<W;Z++)if($||!(Z in X)){if(!$)$=Array.prototype.slice.call(X,0,Z);$[Z]=X[Z]}}return J.concat($||Array.prototype.slice.call(X))};var kS=function(){function J(X){if(X===void 0)X=J.minComparator;var Y=this;this.compare=X,this.heapArray=[],this._limit=0,this.offer=this.add,this.element=this.peek,this.poll=this.pop,this.removeAll=this.clear,this._invertedCompare=function(Z,W){return-1*Y.compare(Z,W)}}return J.getChildrenIndexOf=function(X){return[X*2+1,X*2+2]},J.getParentIndexOf=function(X){if(X<=0)return-1;var Y=X%2?1:2;return Math.floor((X-Y)/2)},J.getSiblingIndexOf=function(X){if(X<=0)return-1;var Y=X%2?1:-1;return X+Y},J.minComparator=function(X,Y){if(X>Y)return 1;else if(X<Y)return-1;else return 0},J.maxComparator=function(X,Y){if(Y>X)return 1;else if(Y<X)return-1;else return 0},J.minComparatorNumber=function(X,Y){return X-Y},J.maxComparatorNumber=function(X,Y){return Y-X},J.defaultIsEqual=function(X,Y){return X===Y},J.print=function(X){function Y(q){var H=J.getParentIndexOf(q);return Math.floor(Math.log2(H+1))}function Z(q,H){var z="";for(;H>0;--H)z+=q;return z}var W=0,$=[],Q=Y(X.length-1)+2,K=0;while(W<X.length){var G=Y(W)+1;if(W===0)G=0;var F=String(X.get(W));if(F.length>K)K=F.length;$[G]=$[G]||[],$[G].push(F),W+=1}return $.map(function(q,H){var z=Math.pow(2,Q-H)-1;return Z(" ",Math.floor(z/2)*K)+q.map(function(V){var M=(K-V.length)/2;return Z(" ",Math.ceil(M))+V+Z(" ",Math.floor(M))}).join(Z(" ",z*K))}).join(`
387
387
  `)},J.heapify=function(X,Y){var Z=new J(Y);return Z.heapArray=X,Z.init(),Z},J.heappop=function(X,Y){var Z=new J(Y);return Z.heapArray=X,Z.pop()},J.heappush=function(X,Y,Z){var W=new J(Z);W.heapArray=X,W.push(Y)},J.heappushpop=function(X,Y,Z){var W=new J(Z);return W.heapArray=X,W.pushpop(Y)},J.heapreplace=function(X,Y,Z){var W=new J(Z);return W.heapArray=X,W.replace(Y)},J.heaptop=function(X,Y,Z){if(Y===void 0)Y=1;var W=new J(Z);return W.heapArray=X,W.top(Y)},J.heapbottom=function(X,Y,Z){if(Y===void 0)Y=1;var W=new J(Z);return W.heapArray=X,W.bottom(Y)},J.nlargest=function(X,Y,Z){var W=new J(Z);return W.heapArray=C8([],L8(Y),!1),W.init(),W.top(X)},J.nsmallest=function(X,Y,Z){var W=new J(Z);return W.heapArray=C8([],L8(Y),!1),W.init(),W.bottom(X)},J.prototype.add=function(X){return this._sortNodeUp(this.heapArray.push(X)-1),this._applyLimit(),!0},J.prototype.addAll=function(X){var Y,Z=this.length;(Y=this.heapArray).push.apply(Y,C8([],L8(X),!1));for(var W=this.length;Z<W;++Z)this._sortNodeUp(Z);return this._applyLimit(),!0},J.prototype.bottom=function(X){if(X===void 0)X=1;if(this.heapArray.length===0||X<=0)return[];else if(this.heapArray.length===1)return[this.heapArray[0]];else if(X>=this.heapArray.length)return C8([],L8(this.heapArray),!1);else return this._bottomN_push(~~X)},J.prototype.check=function(){var X=this;return this.heapArray.find(function(Y,Z){return!!X.getChildrenOf(Z).find(function(W){return X.compare(Y,W)>0})})},J.prototype.clear=function(){this.heapArray=[]},J.prototype.clone=function(){var X=new J(this.comparator());return X.heapArray=this.toArray(),X._limit=this._limit,X},J.prototype.comparator=function(){return this.compare},J.prototype.contains=function(X,Y){if(Y===void 0)Y=J.defaultIsEqual;return this.indexOf(X,Y)!==-1},J.prototype.init=function(X){if(X)this.heapArray=C8([],L8(X),!1);for(var Y=Math.floor(this.heapArray.length);Y>=0;--Y)this._sortNodeDown(Y);this._applyLimit()},J.prototype.isEmpty=function(){return this.length===0},J.prototype.indexOf=function(X,Y){if(Y===void 0)Y=J.defaultIsEqual;if(this.heapArray.length===0)return-1;var Z=[],W=0;while(W<this.heapArray.length){var $=this.heapArray[W];if(Y($,X))return W;else if(this.compare($,X)<=0)Z.push.apply(Z,C8([],L8(J.getChildrenIndexOf(W)),!1));W=Z.shift()||this.heapArray.length}return-1},J.prototype.indexOfEvery=function(X,Y){if(Y===void 0)Y=J.defaultIsEqual;if(this.heapArray.length===0)return[];var Z=[],W=[],$=0;while($<this.heapArray.length){var Q=this.heapArray[$];if(Y(Q,X))W.push($),Z.push.apply(Z,C8([],L8(J.getChildrenIndexOf($)),!1));else if(this.compare(Q,X)<=0)Z.push.apply(Z,C8([],L8(J.getChildrenIndexOf($)),!1));$=Z.shift()||this.heapArray.length}return W},J.prototype.leafs=function(){if(this.heapArray.length===0)return[];var X=J.getParentIndexOf(this.heapArray.length-1);return this.heapArray.slice(X+1)},Object.defineProperty(J.prototype,"length",{get:function(){return this.heapArray.length},enumerable:!1,configurable:!0}),Object.defineProperty(J.prototype,"limit",{get:function(){return this._limit},set:function(X){if(X<0||isNaN(X))this._limit=0;else this._limit=~~X;this._applyLimit()},enumerable:!1,configurable:!0}),J.prototype.setLimit=function(X){if(this.limit=X,X<0||isNaN(X))return NaN;else return this._limit},J.prototype.peek=function(){return this.heapArray[0]},J.prototype.pop=function(){var X=this.heapArray.pop();if(this.length>0&&X!==void 0)return this.replace(X);return X},J.prototype.push=function(){var X=[];for(var Y=0;Y<arguments.length;Y++)X[Y]=arguments[Y];if(X.length<1)return!1;else if(X.length===1)return this.add(X[0]);else return this.addAll(X)},J.prototype.pushpop=function(X){var Y;if(this.compare(this.heapArray[0],X)<0)Y=L8([this.heapArray[0],X],2),X=Y[0],this.heapArray[0]=Y[1],this._sortNodeDown(0);return X},J.prototype.remove=function(X,Y){var Z=this;if(Y===void 0)Y=J.defaultIsEqual;if(!this.heapArray.length)return!1;if(X===void 0)return this.pop(),!0;var W=[0];while(W.length){var $=W.shift();if(Y(this.heapArray[$],X)){if($===0)this.pop();else if($===this.heapArray.length-1)this.heapArray.pop();else this.heapArray.splice($,1,this.heapArray.pop()),this._sortNodeUp($),this._sortNodeDown($);return!0}else if(this.compare(this.heapArray[$],X)<=0){var Q=J.getChildrenIndexOf($).filter(function(K){return K<Z.heapArray.length});W.push.apply(W,C8([],L8(Q),!1))}}return!1},J.prototype.replace=function(X){var Y=this.heapArray[0];return this.heapArray[0]=X,this._sortNodeDown(0),Y},J.prototype.size=function(){return this.length},J.prototype.top=function(X){if(X===void 0)X=1;if(this.heapArray.length===0||X<=0)return[];else if(this.heapArray.length===1||X===1)return[this.heapArray[0]];else if(X>=this.heapArray.length)return C8([],L8(this.heapArray),!1);else return this._topN_push(~~X)},J.prototype.toArray=function(){return C8([],L8(this.heapArray),!1)},J.prototype.toString=function(){return this.heapArray.toString()},J.prototype.get=function(X){return this.heapArray[X]},J.prototype.getChildrenOf=function(X){var Y=this;return J.getChildrenIndexOf(X).map(function(Z){return Y.heapArray[Z]}).filter(function(Z){return Z!==void 0})},J.prototype.getParentOf=function(X){var Y=J.getParentIndexOf(X);return this.heapArray[Y]},J.prototype[Symbol.iterator]=function(){return D$0(this,function(X){switch(X.label){case 0:if(!this.length)return[3,2];return[4,this.pop()];case 1:return X.sent(),[3,0];case 2:return[2]}})},J.prototype.iterator=function(){return this.toArray()},J.prototype._applyLimit=function(){if(this._limit>0&&this._limit<this.heapArray.length){var X=this.heapArray.length-this._limit;while(X)this.heapArray.pop(),--X}},J.prototype._bottomN_push=function(X){var Y=new J(this.compare);Y.limit=X,Y.heapArray=this.heapArray.slice(-X),Y.init();var Z=this.heapArray.length-1-X,W=J.getParentIndexOf(Z),$=[];for(var Q=Z;Q>W;--Q)$.push(Q);var K=this.heapArray;while($.length){var Q=$.shift();if(this.compare(K[Q],Y.peek())>0){if(Y.replace(K[Q]),Q%2)$.push(J.getParentIndexOf(Q))}}return Y.toArray()},J.prototype._moveNode=function(X,Y){var Z;Z=L8([this.heapArray[Y],this.heapArray[X]],2),this.heapArray[X]=Z[0],this.heapArray[Y]=Z[1]},J.prototype._sortNodeDown=function(X){var Y=this.heapArray.length;while(!0){var Z=2*X+1,W=Z+1,$=X;if(Z<Y&&this.compare(this.heapArray[Z],this.heapArray[$])<0)$=Z;if(W<Y&&this.compare(this.heapArray[W],this.heapArray[$])<0)$=W;if($===X)break;this._moveNode(X,$),X=$}},J.prototype._sortNodeUp=function(X){while(X>0){var Y=J.getParentIndexOf(X);if(this.compare(this.heapArray[X],this.heapArray[Y])<0)this._moveNode(X,Y),X=Y;else break}},J.prototype._topN_push=function(X){var Y=new J(this._invertedCompare);Y.limit=X;var Z=[0],W=this.heapArray;while(Z.length){var $=Z.shift();if($<W.length){if(Y.length<X)Y.push(W[$]),Z.push.apply(Z,C8([],L8(J.getChildrenIndexOf($)),!1));else if(this.compare(W[$],Y.peek())<0)Y.replace(W[$]),Z.push.apply(Z,C8([],L8(J.getChildrenIndexOf($)),!1))}}return Y.toArray()},J.prototype._topN_fill=function(X){var Y=this.heapArray,Z=new J(this._invertedCompare);Z.limit=X,Z.heapArray=Y.slice(0,X),Z.init();var W=J.getParentIndexOf(X-1)+1,$=[];for(var Q=W;Q<X;++Q)$.push.apply($,C8([],L8(J.getChildrenIndexOf(Q).filter(function(K){return K<Y.length})),!1));if((X-1)%2)$.push(X);while($.length){var Q=$.shift();if(Q<Y.length){if(this.compare(Y[Q],Z.peek())<0)Z.replace(Y[Q]),$.push.apply($,C8([],L8(J.getChildrenIndexOf(Q)),!1))}}return Z.toArray()},J.prototype._topN_heap=function(X){var Y=this.clone(),Z=[];for(var W=0;W<X;++W)Z.push(Y.pop());return Z},J.prototype._topIdxOf=function(X){if(!X.length)return-1;var Y=0,Z=X[Y];for(var W=1;W<X.length;++W){var $=this.compare(X[W],Z);if($<0)Y=W,Z=X[W]}return Y},J.prototype._topOf=function(){var X=[];for(var Y=0;Y<arguments.length;Y++)X[Y]=arguments[Y];var Z=new J(this.compare);return Z.init(X),Z.peek()},J}();class AJ extends a1{_faceSpeed=0;_faceTarget;_jumpHeight=0;_moveSpeed=0;_moveTarget;_moveIgnoreAxes={};_onFace;_onFaceComplete;_onMove;_onMoveComplete;face(J,X,Y){this._faceTarget=J,this._faceSpeed=X,this._onFace=Y?.faceCallback,this._onFaceComplete=Y?.faceCompleteCallback}jump(J){this._jumpHeight=J}move(J,X,Y){this._moveTarget=J,this._moveSpeed=X,this._moveIgnoreAxes=Y?.moveIgnoreAxes??{},this._onMove=Y?.moveCallback,this._onMoveComplete=Y?.moveCompleteCallback}tick(J,X){if(super.tick(J,X),!this._moveTarget&&!this._faceTarget&&!this._jumpHeight)return;let Y=X/1000,Z=J.position;if(J.isDynamic&&this._jumpHeight>0){let W=Math.abs(J.world.simulation.gravity.y),$=Math.sqrt(2*W*this._jumpHeight);J.applyImpulse({x:0,y:$*J.mass,z:0}),this._jumpHeight=0}if(this._moveTarget){let W={x:this._moveIgnoreAxes.x?0:this._moveTarget.x-Z.x,y:this._moveIgnoreAxes.y?0:this._moveTarget.y-Z.y,z:this._moveIgnoreAxes.z?0:this._moveTarget.z-Z.z},$=W.x*W.x+W.y*W.y+W.z*W.z;if($>0.1){let Q=Math.sqrt($),K=this._moveSpeed*Y,F=Math.min(Q,K)/Q,q={x:Z.x+W.x*F,y:Z.y+W.y*F,z:Z.z+W.z*F};if(J.setPosition(q),this._onMove)this._onMove(q,this._moveTarget)}else if(this._moveTarget=void 0,this._onMoveComplete){let Q=this._onMoveComplete;this._onMove=void 0,this._onMoveComplete=void 0,Q(Z)}}if(this._faceTarget){let W={x:this._faceTarget.x-Z.x,z:this._faceTarget.z-Z.z},$=Math.atan2(-W.x,-W.z),Q=J.rotation,K=Math.atan2(2*(Q.w*Q.y),1-2*(Q.y*Q.y)),G=$-K;while(G>Math.PI)G-=2*Math.PI;while(G<-Math.PI)G+=2*Math.PI;if(Math.abs(G)>0.01){let F=this._faceSpeed*Y,q=Math.abs(G)<F?G:Math.sign(G)*F,z=(K+q)/2,V={x:0,y:Math.fround(Math.sin(z)),z:0,w:Math.fround(Math.cos(z))};if(J.setRotation(V),this._onFace)this._onFace(Q,V)}else if(this._faceTarget=void 0,this._onFaceComplete){let F=this._onFaceComplete;this._onFaceComplete=void 0,F(J.rotation)}}}}class TH extends AJ{_debug=!1;_entity;_maxFall=0;_maxJump=0;_maxOpenSetIterations=200;_onPathfindAbort;_onPathfindComplete;_onWaypointMoveComplete;_onWaypointMoveSkipped;_speed=0;_target;_verticalPenalty=0;_waypoints=[];_waypointNextIndex=0;_waypointTimeoutMs=2000;get debug(){return this._debug}get maxFall(){return this._maxFall}get maxJump(){return this._maxJump}get maxOpenSetIterations(){return this._maxOpenSetIterations}get speed(){return this._speed}get target(){return this._target}get verticalPenalty(){return this._verticalPenalty}get waypoints(){return this._waypoints}get waypointNextIndex(){return this._waypointNextIndex}get waypointTimeoutMs(){return this._waypointTimeoutMs}pathfind(J,X,Y){if(this._target=J,this._speed=X,this._debug=Y?.debug??!1,this._maxFall=Y?.maxFall?-Math.abs(Y.maxFall):0,this._maxJump=Y?.maxJump?Math.abs(Y.maxJump):0,this._maxOpenSetIterations=Y?.maxOpenSetIterations??200,this._onPathfindAbort=Y?.pathfindAbortCallback,this._onPathfindComplete=Y?.pathfindCompleteCallback,this._onWaypointMoveComplete=Y?.waypointMoveCompleteCallback,this._onWaypointMoveSkipped=Y?.waypointMoveSkippedCallback,this._verticalPenalty=Y?.verticalPenalty??0,this._waypoints=[],this._waypointNextIndex=0,this._waypointTimeoutMs=Y?.waypointTimeoutMs??2000/X,!this._calculatePath())return!1;return this._moveToNextWaypoint(),!0}attach(J){super.attach(J),this._entity=J}detach(J){super.detach(J),this._entity=void 0}tick(J,X){super.tick(J,X)}_calculatePath(){if(!this._target||!this._entity?.world)return E.error("PathfindingEntityController._calculatePath: No target or world"),!1;let J=this._entity.height,X=this._findGroundedStart();if(!X){if(this._debug)E.warning(`PathfindingEntityController._calculatePath: No valid grounded start found within maxFall distance, path search aborted. Start: ${this._coordinateToKey(this._target)}, Target: ${this._coordinateToKey(this._target)}`);return!1}let Y={x:Math.floor(this._target.x),y:Math.floor(this._target.y),z:Math.floor(this._target.z)},Z=Math.abs(Y.x-X.x),W=Math.abs(Y.y-X.y),$=Math.abs(Y.z-X.z);if(Z<=2&&W<=2&&$<=2&&!this._isNeighborCoordinateBlocked(X,Y,this._entity.height))return this._waypoints=[{x:X.x+0.5,y:X.y+J/2,z:X.z+0.5},{x:Y.x+0.5,y:Y.y+J/2,z:Y.z+0.5}],!0;if(X.x===Y.x&&X.y===Y.y&&X.z===Y.z)return this._waypoints=[{x:X.x+0.5,y:X.y+J/2,z:X.z+0.5}],!0;let K=this._coordinateToKey(X),G=new Map,F=new Map([[K,0]]),q=new Map([[K,this._pathfindingHeuristic(X,Y)]]),H=new Set,z=new kS((N,v)=>{let j=q.get(N[0])??1/0,O=q.get(v[0])??1/0;return j-O});z.push([K,X]);let V=[{x:0,y:0,z:1},{x:1,y:0,z:0},{x:0,y:0,z:-1},{x:-1,y:0,z:0},{x:1,y:0,z:1},{x:1,y:0,z:-1},{x:-1,y:0,z:1},{x:-1,y:0,z:-1}],M=[];for(let N=this._maxJump;N>=this._maxFall;N--){if(N===0)continue;let v=Math.abs(X.y+N-Y.y);M.push({y:N,distanceToTargetY:v})}M.sort((N,v)=>N.distanceToTargetY-v.distanceToTargetY);let R=[...V,...M.flatMap(({y:N})=>V.map((v)=>({...v,y:N})))],L=0,w=Math.abs(Y.x-X.x)+Math.abs(Y.y-X.y)+Math.abs(Y.z-X.z),P=Math.min(this._maxOpenSetIterations,w*20);while(!z.isEmpty()&&L<P){L++;let[N,v]=z.pop();if(v.x===Y.x&&v.y===Y.y&&v.z===Y.z){let D=this._reconstructPath(G,v);if(this._waypoints=D.map((_)=>({x:_.x+0.5,y:_.y+J/2,z:_.z+0.5})),this._debug)console.log(`PathfindingEntityController._calculatePath: Path found after ${L} open set iterations. Start: ${this._coordinateToKey(X)}, Target: ${this._coordinateToKey(this._target)}`);return!0}H.add(N);let j=F.get(N),O=new Map;for(let D of R){let _=`${D.x},${D.z}`,C=D.y<0;if(C&&O.has(_))continue;let S={x:v.x+D.x,y:v.y+D.y,z:v.z+D.z};if(Math.abs(Y.x-S.x)+Math.abs(Y.y-S.y)+Math.abs(Y.z-S.z)>w*1.5)continue;let f=this._coordinateToKey(S);if(H.has(f))continue;let y=this._isNeighborCoordinateBlocked(v,S,this._entity.height);if(C&&y){O.set(_,!0);continue}if(y)continue;let h=Math.abs(D.x),g=Math.abs(D.y),J0=Math.abs(D.z),p0=g===0?0:this._verticalPenalty,a0=(Math.max(h,g,J0)===1&&h+g+J0>1?1.4:1)+p0,Q6=j+a0,n6=F.get(f)??1/0;if(Q6>=n6)continue;G.set(f,v),F.set(f,Q6);let Y4=Q6+this._pathfindingHeuristic(S,Y);q.set(f,Y4),z.push([f,S])}}if(L>=P){if(this._onPathfindAbort?.(),this._debug)E.warning(`PathfindingEntityController._calculatePath: Maximum open set iterations reached (${P}), path search aborted. Start: ${this._coordinateToKey(X)}, Target: ${this._coordinateToKey(this._target)}`)}else if(this._debug)E.warning(`PathfindingEntityController._calculatePath: No valid path found. Start: ${this._coordinateToKey(X)}, Target: ${this._coordinateToKey(this._target)}`);return this._target=void 0,this._waypoints=[],!1}_reconstructPath(J,X){let Y=[X],Z=X;while(J.has(this._coordinateToKey(Z)))Z=J.get(this._coordinateToKey(Z)),Y.unshift(Z);return Y}_coordinateToKey(J){return`${J.x},${J.y},${J.z}`}_moveToNextWaypoint(){let J=this._waypointNextIndex>0?this._waypoints[this._waypointNextIndex-1]:void 0,X=this._waypoints[this._waypointNextIndex];if(!X||!this._entity)return;let Y=0;if(this._entity.isDynamic&&J&&X.y>J.y){let Z=X.y-J.y,W=Math.min(Z,this._maxJump)+0.75;this.jump(W);let $=Math.abs(this._entity.world.simulation.gravity.y),Q=Math.sqrt(2*$*W),K=J.x+0.5,G=J.z+0.5,F=X.x+0.5,q=X.z+0.5,H=F-K,z=q-G,V=Math.sqrt(H*H+z*z),M=Q/$,R=V/this._speed;Y=Math.min(M*0.8,R)*1000}setTimeout(()=>{if(!this._entity)return;let Z=Date.now();this.face(X,this._speed),this.move(X,this._speed,{moveIgnoreAxes:{y:this._entity.isDynamic},moveCallback:()=>{if(Date.now()-Z>this._waypointTimeoutMs&&this._waypointNextIndex<this._waypoints.length-1)this._onWaypointMoveSkipped?.(X,this._waypointNextIndex),this._waypointNextIndex++,this._moveToNextWaypoint()},moveCompleteCallback:()=>{if(this._waypointNextIndex<this._waypoints.length-1)this._onWaypointMoveComplete?.(X,this._waypointNextIndex),this._waypointNextIndex++,this._moveToNextWaypoint();else this._onPathfindComplete?.()}})},Y)}_pathfindingHeuristic(J,X){return Math.abs(J.x-X.x)+Math.abs(J.y-X.y)+Math.abs(J.z-X.z)}_isNeighborCoordinateBlocked(J,X,Y){if(!this._entity?.world)return!1;let Z=this._entity.world,W=Math.floor(X.x),$=Math.floor(X.y),Q=Math.floor(X.z),K=Math.floor(J.x),G=Math.floor(J.z);if(!Z.chunkLattice.hasBlock({x:W,y:$-1,z:Q}))return!0;for(let F=0;F<Y;F++)if(Z.chunkLattice.hasBlock({x:W,y:$+F,z:Q}))return!0;if(W!==K&&Q!==G)for(let F=0;F<Y;F++){let q=Z.chunkLattice.hasBlock({x:W,y:$+F,z:G}),H=Z.chunkLattice.hasBlock({x:K,y:$+F,z:Q});if(q||H)return!0}return!1}_findGroundedStart(){if(!this._entity?.world)return;let{x:J,y:X,z:Y}=this._entity.position,Z={x:Math.floor(J),y:Math.floor(X),z:Math.floor(Y)};for(let W=0;W<=Math.abs(this._maxFall);W++)if(this._entity.world.chunkLattice.hasBlock({...Z,y:Z.y-W-1}))return{...Z,y:Z.y-W};return}}export{dX0 as startServer,DC as WorldLoopEvent,IJ as WorldLoop,xH as WorldEvent,hJ as World,HH as WebServerEvent,o5 as WebServer,X4 as Vector3,pJ as Vector2,SJ as Ticker,OH as SimulationEvent,EJ as Simulation,AJ as SimpleEntityController,CJ as SceneUIManager,UH as SceneUIEvent,vJ as SceneUI,EC as SUPPORTED_INPUT_KEYS,W$ as RigidBodyType,f9 as RigidBody,jC as ROTATION_UPDATE_THRESHOLD,J4 as Quaternion,Q$ as PlayerUIEvent,DJ as PlayerUI,xC as PlayerManagerEvent,j6 as PlayerManager,BJ as PlayerEvent,NJ as PlayerEntityController,n1 as PlayerEntity,TC as PlayerCameraMode,RH as PlayerCameraEvent,TJ as PlayerCamera,r5 as Player,b9 as PersistenceManager,TH as PathfindingEntityController,BC as POSITION_UPDATE_THRESHOLD_SQ,qH as PORT,U6 as ModelRegistry,E8 as Matrix4,i6 as Matrix3,A9 as Matrix2,kC as LightType,kJ as LightManager,VH as LightEvent,MH as Light,_C as GameServerEvent,R1 as GameServer,s as EventRouter,E as ErrorHandler,jJ as EntityManager,$$ as EntityEvent,Y8 as Entity,vC as DEFAULT_ENTITY_RIGID_BODY_OPTIONS,q6 as CollisionGroupsBuilder,e1 as CollisionGroup,XZ as ColliderShape,_J as ColliderMap,d8 as Collider,zG as CoefficientCombineRule,PJ as ChunkLattice,LH as ChunkEvent,w8 as Chunk,fJ as ChatManager,PH as ChatEvent,UG as BlockTypeRegistryEvent,d4 as BlockTypeRegistry,LG as BlockTypeEvent,V6 as BlockType,y9 as Block,IH as BaseEntityControllerEvent,a1 as BaseEntityController,Q4 as AudioManager,V$ as AudioEvent,$4 as Audio};