hytopia 0.4.0 → 0.4.1

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 +1 -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.0",
3
+ "version": "0.4.1",
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": {
package/server.js CHANGED
@@ -388,6 +388,6 @@ Instead, \`yield\` should either be called with a value, or not be called at all
388
388
  `),Z.write(`Content-Length: ${K.length}\r
389
389
  `),Z.write(`Connection: close\r
390
390
  `),Z.write(`\r
391
- `),Z.write(K),Z.end();return}Z.setNoDelay(!0),this.emitWithGlobal("WEBSERVER.UPGRADE",{req:J,socket:Z,head:X})};_onError=(J)=>{this.emitWithGlobal("WEBSERVER.ERROR",{error:J})};_onStopped=()=>{this.emitWithGlobal("WEBSERVER.STOPPED",{})}}class TJ extends J0{static instance=new TJ;_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):41024;_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 pa0({noServer:!0}),this._wss.on("connection",this._onConnection),this._wss.on("error",this._onError),this._initWrtc(),b6.on("WEBSERVER.UPGRADE",({req:J,socket:Z,head:X})=>this._onUpgrade(J,Z,X))}get isWrtcEnabled(){return this._wrtcWorker&&!this._wrtcWorker.died&&this._wrtcRouter}get wrtcRouter(){return this._wrtcRouter}async createWrtcTransports(){if(!this.isWrtcEnabled)I.fatalError("Socket.createWrtcTransports(): WebRTC not enabled, unable to create transports.");let J={listenIps:[{ip:"0.0.0.0",announcedIp:this._wrtcPublicIpv4},{ip:"::",announcedIp:this._wrtcPublicIpv6}],preferUdp:!0,enableSctp:!0,enableTcp:!1},Z=await this._wrtcRouter.createDirectTransport(),X=await this._wrtcRouter.createWebRtcTransport(J),Y=await this._wrtcRouter.createWebRtcTransport(J);return{directTransport:Z,clientServerTransport:X,serverClientTransport:Y}}async _initWrtc(){if(!this._wrtcPublicIpv4||!this._wrtcPublicIpv6)return I.warning("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 UX0.default.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,Z)=>{new yZ(J,Z)};_onError=(J,Z)=>{this.emitWithGlobal("SOCKET.ERROR",{ws:J,error:Z})};_onUpgrade=(J,Z,X)=>{this._wss.handleUpgrade(J,Z,X,(Y)=>{this._wss.emit("connection",Y,J)})};_onWrtcWorkerDied=(J)=>{I.warning(`Socket._onWrtcWorkerDied(): WebRTC worker unexpectedly died, falling back to Websockets for all players. Internal error: ${J}`),j5.instance.getConnectedPlayers().forEach((Z)=>{Z.connection.closeWrtc()}),this._wrtcRouter?.close(),this._wrtcRouter=null,this._wrtcWorker?.close(),this._wrtcWorker=null}}class yZ extends J0{static _serializedPackets=new WeakMap;_wrtcDirectTransport=null;_wrtcClientServerTransport=null;_wrtcClientServerDataProducers=[];_wrtcClientServerDataConsumers=[];_wrtcServerClientTransport=null;_wrtcServerClientReliableDataProducer=null;_wrtcServerClientUnreliableDataProducer=null;_wrtcServerClientDataConsumers=[];_ws;id;constructor(J,Z){super();if(this.id=km(),this._ws=J,this._ws.binaryType="nodebuffer",this._ws.onmessage=(X)=>this._onMessage(X.data),this._ws.onclose=this._onWsClose,this._ws.onerror=this._onWsError,this.onPacket(c.PacketId.CONNECTION,this._onConnectionPacket),TJ.instance.isWrtcEnabled)this._upgradeToWRTC();b6.emit("CONNECTION.OPENED",{connection:this,req:Z})}static serializePackets(J){for(let $ of J)if(!c.isValidPacket($))I.fatalError(`Invalid packet payload: ${JSON.stringify($)}`);let Z=yZ._serializedPackets.get(J);if(Z)return Z;let X=Xq(J),Y=Buffer.from(X.buffer,X.byteOffset,X.byteLength);return yZ._serializedPackets.set(J,Y),Y}send(J,Z=!0){if(this._ws.readyState!==la0.OPEN)return I.warning("Connection.send(): Connection is not open.");try{let X=yZ.serializePackets(J);if(this._wrtcServerClientTransport?.iceState==="completed")try{(Z?this._wrtcServerClientReliableDataProducer:this._wrtcServerClientUnreliableDataProducer).send(X)}catch{this._ws.send(X)}else this._ws.send(X);this.emitWithGlobal("CONNECTION.PACKETS_SENT",{connection:this,packets:J})}catch(X){I.error(`Connection.send(): Packet send failed. Error: ${X}`)}}close(){try{this.offAll(),this._ws.close()}catch(J){I.error(`Connection.close(): Connection close failed. Error: ${J}`)}}closeWrtc(){this._closeWrtcClientServerTransport(),this._closeWrtcServerClientTransport()}onPacket(J,Z){this.on("CONNECTION.PACKET_RECEIVED",({packet:X})=>{if(X[0]===J)Z(X)})}_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 Z=J[1],X=Z.c,Y=Z.d;if(X){let{i:$,d:K}=X,Q=!1;if($==this._wrtcClientServerTransport?.id)await this._wrtcClientServerTransport.connect({dtlsParameters:K}),Q=!0;if($==this._wrtcServerClientTransport?.id)await this._wrtcServerClientTransport.connect({dtlsParameters:K}),Q=!0;if(Q)this.send([c.createPacket(c.bidirectionalPackets.connectionPacketDefinition,{ca:{i:$}})])}if(Y)for(let $ of Y){let{s:K,l:Q}=$,W=await this._wrtcClientServerTransport.produceData({label:Q,sctpStreamParameters:K}),G=await this._wrtcDirectTransport.consumeData({dataProducerId:W.id});this._wrtcClientServerDataProducers.push(W),this._wrtcClientServerDataConsumers.push(G),G.on("message",(V)=>this._onMessage(V)),this.send([c.createPacket(c.bidirectionalPackets.connectionPacketDefinition,{pa:{i:W.id,l:Q}})])}};_onMessage=(J)=>{try{let Z=this._deserialize(J);this.emitWithGlobal("CONNECTION.PACKET_RECEIVED",{connection:this,packet:Z})}catch(Z){I.error(`Connection._ws.onmessage(): Error: ${Z}`)}};_onWrtcIceStateChange=(J,Z)=>{if(["disconnected","closed"].includes(Z)){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 TJ.instance.createWrtcTransports();if(!J)return!1;let{directTransport:Z,clientServerTransport:X,serverClientTransport:Y}=J;this._wrtcDirectTransport=Z,this._wrtcClientServerTransport=X,this._wrtcClientServerTransport.on("icestatechange",(Q)=>{this._onWrtcIceStateChange(this._wrtcClientServerTransport,Q)}),this._wrtcServerClientTransport=Y,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 $=await this._wrtcServerClientTransport.consumeData({dataProducerId:this._wrtcServerClientReliableDataProducer.id}),K=await this._wrtcServerClientTransport.consumeData({dataProducerId:this._wrtcServerClientUnreliableDataProducer.id});return this._wrtcServerClientDataConsumers.push($,K),this.send([c.createPacket(c.bidirectionalPackets.connectionPacketDefinition,{d:[{i:$.id,pi:$.dataProducerId,l:"scr",s:$.sctpStreamParameters},{i:K.id,pi:K.dataProducerId,l:"scu",s:K.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 Z=Qq(J);if(!Z||typeof Z!=="object"||typeof Z[0]!=="number")I.fatalError(`Connection._deserialize(): Invalid packet format. Packet: ${JSON.stringify(Z)}`);if(!c.isValidPacket(Z))I.fatalError(`Connection._deserialize(): Invalid packet payload. Packet: ${JSON.stringify(Z)}`);return Z}}var FX0;((X)=>{X.PLAYER_CONNECTED="PLAYER_MANAGER.PLAYER_CONNECTED";X.PLAYER_DISCONNECTED="PLAYER_MANAGER.PLAYER_DISCONNECTED"})(FX0||={});class j5{static instance=new j5;_connectionPlayers=new Map;constructor(){b6.on("CONNECTION.OPENED",({connection:J,req:Z})=>{this._onConnectionOpened(J,Z.session)}),b6.on("CONNECTION.CLOSED",({connection:J})=>{this._onConnectionClosed(J)})}getConnectedPlayers(){return Array.from(this._connectionPlayers.values())}getConnectedPlayersByWorld(J){return this.getConnectedPlayers().filter((Z)=>Z.world===J)}getConnectedPlayerByUsername(J){return Array.from(this._connectionPlayers.values()).find((Z)=>{return Z.username.toLowerCase()===J.toLowerCase()})}_onConnectionOpened(J,Z){let X=new vY(J,Z);this._connectionPlayers.set(J,X),b6.emit("PLAYER_MANAGER.PLAYER_CONNECTED",{player:X})}_onConnectionClosed(J){let Z=this._connectionPlayers.get(J);if(Z)Z.disconnect(),this._connectionPlayers.delete(J),b6.emit("PLAYER_MANAGER.PLAYER_DISCONNECTED",{player:Z});else I.warning(`PlayerManager._onConnectionClosed(): Connection ${J.id} but was not in the PlayerManager._connectionPlayers map.`)}}var HH;(($)=>{$.DYNAMIC="dynamic";$.FIXED="fixed";$.KINEMATIC_POSITION="kinematic_position";$.KINEMATIC_VELOCITY="kinematic_velocity"})(HH||={});var xE=0.001,wX0="dynamic";class gZ extends J0{_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??=wX0,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:Z,z:X,w:Y}=this.rotation;return{x:2*(J*X+Y*Z),y:2*(Z*X-Y*J),z:1-2*(J*J+Z*Z)}}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:Z,centerOfMass:X,principalAngularInertia:Y,principalAngularInertiaLocalFrame:$}=J;this._rigidBody?this._rigidBody.setAdditionalMassProperties(Z,X,Y,$,!this._explicitSleep):this._rigidBodyDesc.setAdditionalMassProperties(Z,X,Y,$)}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((Z)=>{if(Z.isSensor)return;Z.setCollisionGroups(J)})}setCollisionGroupsForSensorColliders(J){if(!this._requireNotRemoved("setCollisionGroupsForSensorColliders"))return;this._colliders.forEach((Z)=>{if(!Z.isSensor)return;Z.setCollisionGroups(J)})}setType(J){if(!this._requireNotRemoved("setType"))return;let X={["dynamic"]:B0.RigidBodyType.Dynamic,["fixed"]:B0.RigidBodyType.Fixed,["kinematic_position"]:B0.RigidBodyType.KinematicPositionBased,["kinematic_velocity"]:B0.RigidBodyType.KinematicVelocityBased}[J];if(X===void 0)return I.error(`Invalid RigidBodyType: ${J}`);this._rigidBody?this._rigidBody.setBodyType(X,!this._explicitSleep):this._rigidBodyDesc.status=X,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 I.error("RigidBody.addToSimulation(): Rigid body already exists in the simulation!");this._simulation=J,this._rigidBody=this._simulation.createRawRigidBody(this._rigidBodyDesc),this._colliders.forEach((Z)=>{if(!Z.isSimulated)Z.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,Z){if(!this._requireNotRemoved("applyImpulseAtPoint"))return;if(!this._requireCreated("applyImpulseAtPoint"))return;if(!this._requireDynamic("applyImpulseAtPoint"))return;if(this._isNegligibleVector(J))return;this._rigidBody.applyImpulseAtPoint(J,Z,!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 o6({...J,parentRigidBody:this,simulation:this._simulation}):this._createAndAddPendingChildCollider(J)}createAndAddChildCollidersToSimulation(J){let Z=[];return J.forEach((X)=>{let Y=this.createAndAddChildCollider(X);if(Y)Z.push(Y)}),Z}getCollidersByTag(J){let Z=[];for(let X of this._colliders)if(X.tag===J)Z.push(X);return Z}linkCollider(J){if(!this._requireNotRemoved("linkCollider"))return;if(J.parentRigidBody!==this)return I.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 I.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 I.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(([X,Y])=>{if(X in J)Y(J[X])})}_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 Z=new o6(J);return this._colliders.add(Z),Z}_createAndAddPendingChildColliders(J){let Z=[];return J.forEach((X)=>{let Y=this._createAndAddPendingChildCollider(X);if(Y)Z.push(Y)}),Z}_createRigidBodyDesc(J){let Z=J.type??wX0;return{["dynamic"]:()=>B0.RigidBodyDesc.dynamic(),["fixed"]:()=>B0.RigidBodyDesc.fixed(),["kinematic_position"]:()=>B0.RigidBodyDesc.kinematicPositionBased(),["kinematic_velocity"]:()=>B0.RigidBodyDesc.kinematicVelocityBased()}[Z]()}_requireCreated(J){if(!this._rigidBody||!this._simulation)I.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)I.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)I.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)I.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)I.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)I.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)<xE&&Math.abs(J.y)<xE&&Math.abs(J.z)<xE}}var H8=16,xY=H8-1,LX0=H8**3,ua0=[{neighborOffset:[-1,0,0],generateVertices:(J,Z,X)=>[J+0,Z+0,X+0,J+0,Z+0,X+1,J+0,Z+1,X+0,J+0,Z+1,X+0,J+0,Z+0,X+1,J+0,Z+1,X+1]},{neighborOffset:[1,0,0],generateVertices:(J,Z,X)=>[J+1,Z+0,X+0,J+1,Z+1,X+0,J+1,Z+0,X+1,J+1,Z+1,X+0,J+1,Z+1,X+1,J+1,Z+0,X+1]},{neighborOffset:[0,-1,0],generateVertices:(J,Z,X)=>[J+0,Z+0,X+0,J+1,Z+0,X+0,J+0,Z+0,X+1,J+1,Z+0,X+0,J+1,Z+0,X+1,J+0,Z+0,X+1]},{neighborOffset:[0,1,0],generateVertices:(J,Z,X)=>[J+0,Z+1,X+0,J+0,Z+1,X+1,J+1,Z+1,X+0,J+1,Z+1,X+0,J+0,Z+1,X+1,J+1,Z+1,X+1]},{neighborOffset:[0,0,-1],generateVertices:(J,Z,X)=>[J+0,Z+0,X+0,J+0,Z+1,X+0,J+1,Z+0,X+0,J+0,Z+1,X+0,J+1,Z+1,X+0,J+1,Z+0,X+0]},{neighborOffset:[0,0,1],generateVertices:(J,Z,X)=>[J+0,Z+0,X+1,J+1,Z+0,X+1,J+0,Z+1,X+1,J+0,Z+1,X+1,J+1,Z+0,X+1,J+1,Z+1,X+1]}],CE;((Y)=>{Y.DESPAWN="CHUNK.DESPAWN";Y.SET_BLOCK="CHUNK.SET_BLOCK";Y.SPAWN="CHUNK.SPAWN"})(CE||={});class Y6 extends J0{_blocks;_originCoordinate;_requiresUpdate=!1;_rigidBody;_world;constructor(){super();this._blocks=new Uint8Array(LX0)}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%H8,y:(J/H8|0)%H8,z:J/(H8*H8)|0}}static globalCoordinateToLocalCoordinate(J){return{x:J.x&H8-1,y:J.y&H8-1,z:J.z&H8-1}}static globalCoordinateToOriginCoordinate(J){return{x:J.x&~(H8-1),y:J.y&~(H8-1),z:J.z&~(H8-1)}}static isValidOriginCoordinate(J){return J.x%H8===0&&J.y%H8===0&&J.z%H8===0}spawn(J,Z){if(this.isSpawned){let{x:X,y:Y,z:$}=this.originCoordinate;return I.error(`Chunk.spawn(): Chunk is already spawned at origin ${X}, ${Y}, ${$}!`)}if(!Y6.isValidOriginCoordinate(Z))return I.error(`Chunk.spawn(): Chunk coordinates must be divisible by ${H8}`);this._originCoordinate=Z,this._world=J,this._world.chunkLattice.registerChunk(this),this._requiresUpdate=!0}despawn(){if(!this.isSpawned)return I.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,Z){if(!this._isValidLocalCoordinate(J))return I.error("Chunk.setBlock(): Block local coordinate is out of bounds");if(this._blocks[this._getIndex(J)]===Z)return;if(this._blocks[this._getIndex(J)]=Z,this.isSpawned&&this.isSimulated){this.emitWithWorld(this._world,"CHUNK.SET_BLOCK",{chunk:this,globalCoordinate:this._getGlobalCoordinate(J),localCoordinate:J,blockTypeId:Z});let X=this._getGlobalCoordinate(J),Y=[];if(J.x===0)Y.push({x:-1,y:0,z:0});if(J.y===0)Y.push({x:0,y:-1,z:0});if(J.z===0)Y.push({x:0,y:0,z:-1});if(J.x===xY)Y.push({x:1,y:0,z:0});if(J.y===xY)Y.push({x:0,y:1,z:0});if(J.z===xY)Y.push({x:0,y:0,z:1});for(let $ of Y){let K={x:X.x+$.x,y:X.y+$.y,z:X.z+$.z},Q=Y6.globalCoordinateToOriginCoordinate(K),W=this._world?.chunkLattice.getChunk(Q);if(!W?.hasBlock(Y6.globalCoordinateToLocalCoordinate(K)))continue;W.setRequiresUpdate(!0)}}this._requiresUpdate=!0}setRequiresUpdate(J){this._requiresUpdate=J}update(){if(!this._requiresUpdate)return;if(!this.isSpawned)return I.error("Chunk.update(): Chunk is not spawned and cannot be updated.");let J=!this._rigidBody,Z=this._world.simulation;if(this._removeFromSimulation(),this._rigidBody=new gZ({type:"fixed",position:this._originCoordinate,simulation:this._world.simulation}),this._meshColliders().map(([X,Y])=>{if(!X.isSimulated)X.addToSimulation(Z,this._rigidBody);Z.colliderMap.setColliderBlockType(X,Y)}),this._requiresUpdate=!1,J)this.emitWithWorld(this._world,"CHUNK.SPAWN",{chunk:this})}serialize(){return $0.serializeChunk(this)}_meshColliders(){if(!this._world)return I.error("Chunk._meshColliders(): Chunk is not spawned and cannot be meshed."),[];let J=new Map,Z=[];for(let Y=0;Y<LX0;Y++){if(this._blocks[Y]===0)continue;let $=this._blocks[Y],K=this._world.blockTypeRegistry.getBlockType($),{x:Q,y:W,z:G}=Y6.blockIndexToLocalCoordinate(Y);if(!K.isMeshable){let z=K.createCollider();z.setRelativePosition({x:Q,y:W,z:G}),Z.push([z,K]);continue}let V=J.get(K)??{indices:[],vertices:[]};J.set(K,V);for(let z of ua0){let[H,U,F]=z.neighborOffset,q={x:Q+H,y:W+U,z:G+F},N=this._getGlobalCoordinate(q),w=this._world.chunkLattice.getBlockType(N);if(w&&!w.isLiquid)continue;let k=V.indices.length;V.indices.push(k,k+1,k+2,k+3,k+4,k+5),V.vertices.push(...z.generateVertices(Q,W,G))}}let X=[];return J.forEach((Y,$)=>{if(!Y.indices.length)return;let K=$.createCollider(new Uint32Array(Y.indices),new Float32Array(Y.vertices));X.push([K,$])}),[...Z,...X]}_removeFromSimulation(){if(!this._rigidBody||!this._world)return;this._rigidBody.removeFromSimulation(),this._rigidBody=void 0}_getGlobalCoordinate(J){if(!this.originCoordinate)I.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+H8*(J.y+H8*J.z)}_isValidLocalCoordinate(J){return J.x>=0&&J.x<=xY&&J.y>=0&&J.y<=xY&&J.z>=0&&J.z<=xY}}class xQ{_chunks=new Map;_world;constructor(J){this._world=J}registerChunk(J){if(!J.isSpawned)return I.error("ChunkLattice.registerChunk(): Chunk is not spawned.");if(this.hasChunk(J.originCoordinate)){let{x:Z,y:X,z:Y}=J.originCoordinate;return I.error(`ChunkLattice.registerChunk(): Chunk exists at origin (${Z}, ${X}, ${Y}), despawn the current chunk before registering another at the same origin.`)}if(J.world.id!==this._world.id)return I.error("ChunkLattice.registerChunk(): Chunk world does not match lattice world.");this._chunks.set(this._getChunkKey(J.originCoordinate),J)}unregisterChunk(J){if(!J.isSpawned)return I.error("ChunkLattice.unregisterChunk(): Chunk is not spawned.");if(J.world.id!==this._world.id)return I.error("ChunkLattice.unregisterChunk(): Chunk world does not match lattice world.");this._chunks.delete(this._getChunkKey(J.originCoordinate))}getBlockId(J){let Z=this.getChunk(Y6.globalCoordinateToOriginCoordinate(J));if(!Z)return 0;return Z.getBlockId(Y6.globalCoordinateToLocalCoordinate(J))}getBlockType(J){let Z=this.getBlockId(J);return Z?this._world.blockTypeRegistry.getBlockType(Z):null}getChunk(J){if(!Y6.isValidOriginCoordinate(J)){I.error(`ChunkLattice.getChunk(): Chunk coordinates must be divisible by CHUNK_SIZE (${H8})`);return}return this._chunks.get(this._getChunkKey(J))}getAllChunks(){return Array.from(this._chunks.values())}hasBlock(J){let Z=this.getChunk(Y6.globalCoordinateToOriginCoordinate(J));if(!Z)return!1;return Z.hasBlock(Y6.globalCoordinateToLocalCoordinate(J))}hasChunk(J){return this._chunks.has(this._getChunkKey(J))}setBlock(J,Z){let X=Y6.globalCoordinateToLocalCoordinate(J),Y=Y6.globalCoordinateToOriginCoordinate(J),$=this.getChunk(Y);if(!$)$=new Y6,$.spawn(this._world,Y);$.setBlock(X,Z)}updateChunks(){this._chunks.forEach((J)=>{if(J.requiresUpdate)J.update()})}_getChunkKey(J){return`${J.x},${J.y},${J.z}`}}var qX0={type:"dynamic",softCcdPrediction:1},MX0=0.0025000000000000005,NX0=Math.cos(0.005),UH;((k)=>{k.BLOCK_COLLISION="ENTITY.BLOCK_COLLISION";k.BLOCK_CONTACT_FORCE="ENTITY.BLOCK_CONTACT_FORCE";k.DESPAWN="ENTITY.DESPAWN";k.ENTITY_COLLISION="ENTITY.ENTITY_COLLISION";k.ENTITY_CONTACT_FORCE="ENTITY.ENTITY_CONTACT_FORCE";k.SET_MODEL_ANIMATIONS_PLAYBACK_RATE="ENTITY.SET_MODEL_ANIMATIONS_PLAYBACK_RATE";k.SET_MODEL_HIDDEN_NODES="ENTITY.SET_MODEL_HIDDEN_NODES";k.SET_OPACITY="ENTITY.SET_OPACITY";k.SET_PARENT="ENTITY.SET_PARENT";k.SET_TINT_COLOR="ENTITY.SET_TINT_COLOR";k.SPAWN="ENTITY.SPAWN";k.START_MODEL_LOOPED_ANIMATIONS="ENTITY.START_MODEL_LOOPED_ANIMATIONS";k.START_MODEL_ONESHOT_ANIMATIONS="ENTITY.START_MODEL_ONESHOT_ANIMATIONS";k.STOP_MODEL_ANIMATIONS="ENTITY.STOP_MODEL_ANIMATIONS";k.TICK="ENTITY.TICK";k.UPDATE_POSITION="ENTITY.UPDATE_POSITION";k.UPDATE_ROTATION="ENTITY.UPDATE_ROTATION"})(UH||={});class E8 extends gZ{_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 Z="blockTextureUri"in J,X="modelUri"in J;if(!Z===!X)I.fatalError("Entity.constructor(): Entity data must include a blockTextureUri or modelUri, but not both.");if(Z&&!J.blockHalfExtents)I.fatalError("Entity.constructor(): Block entity must have blockHalfExtents!");if(J.parent&&!J.parent.isSpawned)I.fatalError("Entity.constructor(): Parent entity must be spawned before child entity!");if(J.parent?.modelUri&&J.parentNodeName&&!o1.instance.modelHasNode(J.parent.modelUri,J.parentNodeName))I.fatalError(`Entity.constructor(): Parent node name ${J.parentNodeName} not found in parent model ${J.parent.modelUri}!`);super(J.rigidBodyOptions??qX0);if(Z)this._blockHalfExtents=J.blockHalfExtents,this._blockTextureUri=J.blockTextureUri;if(X)this._modelAnimationsPlaybackRate=J.modelAnimationsPlaybackRate??1,this._modelScale=J.modelScale,this._modelUri=J.modelUri,J.modelHiddenNodes?.forEach((Y)=>this._modelHiddenNodes.add(Y.toLowerCase())),J.modelLoopedAnimations?.forEach((Y)=>this._modelLoopedAnimations.add(Y));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?o1.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,Z,X){if(this.isSpawned)return I.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 o6(o6.optionsFromBlockHalfExtents(this._blockHalfExtents)));if(this._modelUri&&this.numColliders===0)this.addChildColliderToSimulation(new o6(o6.optionsFromModelUri(this._modelUri,this._modelScale)));if(this.colliders.forEach((Y)=>{if(this.hasListeners("ENTITY.BLOCK_COLLISION")||this.hasListeners("ENTITY.ENTITY_COLLISION"))Y.enableCollisionEvents(!0);if(this.hasListeners("ENTITY.BLOCK_CONTACT_FORCE")||this.hasListeners("ENTITY.ENTITY_CONTACT_FORCE"))Y.enableContactForceEvents(!0);if(b1.isDefaultCollisionGroups(Y.collisionGroups))Y.setCollisionGroups({belongsTo:[Y.isSensor?4:2],collidesWith:[65535]})}),this.setPosition(Z),X)this.setRotation(X);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,Z,X);this.colliders.forEach((Y)=>{J.simulation.colliderMap.setColliderEntity(Y,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((Z)=>Z.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,Z,X,Y){if(!this._requireSpawned("setParent"))return;if(J&&!J.isSpawned)return I.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=Z,this.colliders.forEach(($)=>$.setEnabled(!J)),this.setType(!J?this._lastParentlessType:"kinematic_velocity"),this.setPosition(X??{x:0,y:0,z:0}),this.setRotation(Y??{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:Z})}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((Z)=>!this._modelLoopedAnimations.has(Z)))return;J.forEach((Z)=>{this._modelLoopedAnimations.add(Z)}),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((Z)=>{this._modelOneshotAnimations.add(Z)}),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((Z)=>this._modelLoopedAnimations.has(Z))&&!J.some((Z)=>this._modelOneshotAnimations.has(Z)))return;J.forEach((Z)=>{this._modelLoopedAnimations.delete(Z),this._modelOneshotAnimations.delete(Z)}),this.emitWithWorld(this._world,"ENTITY.STOP_MODEL_ANIMATIONS",{entity:this,animations:new Set(J)})}serialize(){return $0.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,Z=this.rotation;if(this._rotationExceedsThreshold(Z,this._lastUpdatedRotation))this._lastUpdatedRotation=Z,this.emitWithWorld(this._world,"ENTITY.UPDATE_ROTATION",{entity:this,rotation:Z});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)I.error(`Entity._requireSpawned(): Entity ${this._name} is not spawned, cannot invoke ${J}()!`);return this.isSpawned}_positionExceedsThreshold(J,Z){let X=J.x-Z.x,Y=J.y-Z.y,$=J.z-Z.z;return X*X+Y*Y+$*$>MX0}_rotationExceedsThreshold(J,Z){return Math.abs(J.x*Z.x+J.y*Z.y+J.z*Z.z+J.w*Z.w)<NX0}}class CQ extends SJ{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 AY({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 I.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:(Z,X)=>{if(!J.isSpawned)return;if(this._groundContactCount+=X?1:-1,!this._groundContactCount)J.startModelOneshotAnimations(this.jumpOneshotAnimations);else J.stopModelAnimations(this.jumpOneshotAnimations);if(!(Z instanceof E8)||!Z.isKinematic)return;if(X&&this.sticksToPlatforms)this._platform=Z;else if(Z===this._platform&&!X)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,Z,X,Y){if(!J.isSpawned||!J.world)return;if(super.tickWithPlayerInput(J,Z,X,Y),J.parent)return;let{w:$,a:K,s:Q,d:W,sp:G,sh:V,ml:z}=Z,{yaw:H}=X,U=J.linearVelocity,F={x:0,y:0,z:0},q=V;if(this.isGrounded&&($||K||Q||W)){if(q)J.stopModelAnimations(Array.from(J.modelLoopedAnimations).filter((B)=>!this.runLoopedAnimations.includes(B))),J.startModelLoopedAnimations(this.runLoopedAnimations),this._stepAudio?.setPlaybackRate(0.75);else J.stopModelAnimations(Array.from(J.modelLoopedAnimations).filter((B)=>!this.walkLoopedAnimations.includes(B))),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((B)=>!this.idleLoopedAnimations.includes(B))),J.startModelLoopedAnimations(this.idleLoopedAnimations);if(z)J.startModelOneshotAnimations(this.interactOneshotAnimations),Z.ml=!this.autoCancelMouseLeftClick;if(q&&this.canRun(this)||!q&&this.canWalk(this)){let B=q?this.runVelocity:this.walkVelocity;if($)F.x-=B*Math.sin(H),F.z-=B*Math.cos(H);if(Q)F.x+=B*Math.sin(H),F.z+=B*Math.cos(H);if(K)F.x-=B*Math.cos(H),F.z+=B*Math.sin(H);if(W)F.x+=B*Math.cos(H),F.z-=B*Math.sin(H);let j=Math.sqrt(F.x*F.x+F.z*F.z);if(j>B){let D=B/j;F.x*=D,F.z*=D}}if(G&&this.canJump(this)){if(this.isGrounded&&U.y>-0.001&&U.y<=3)F.y=this.jumpVelocity}let N=this._platform?this._platform.linearVelocity:{x:0,y:0,z:0},w={x:F.x-U.x+N.x,y:F.y+N.y,z:F.z-U.z+N.z};if(!(this.runVelocity>0&&Math.abs(U.x)>this.runVelocity||this.jumpVelocity>0&&Math.abs(U.y)>this.jumpVelocity||this.runVelocity>0&&Math.abs(U.z)>this.runVelocity)||this.isOnPlatform){if(Object.values(w).some((B)=>B!==0)){let B=J.mass;J.applyImpulse({x:w.x*B,y:w.y*B,z:w.z*B})}}if(H!==void 0){let B=H/2;J.setRotation({x:0,y:Math.fround(Math.sin(B)),z:0,w:Math.fround(Math.cos(B))})}}}var TE;((W)=>{W.LOAD="SCENE_UI.LOAD";W.SET_ATTACHED_TO_ENTITY="SCENE_UI.SET_ATTACHED_TO_ENTITY";W.SET_OFFSET="SCENE_UI.SET_OFFSET";W.SET_POSITION="SCENE_UI.SET_POSITION";W.SET_STATE="SCENE_UI.SET_STATE";W.SET_VIEW_DISTANCE="SCENE_UI.SET_VIEW_DISTANCE";W.UNLOAD="SCENE_UI.UNLOAD"})(TE||={});class TQ extends J0{_id;_attachedToEntity;_offset;_position;_state={};_templateId;_viewDistance;_world;constructor(J){if(!!J.attachedToEntity===!!J.position)I.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 I.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 I.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 $0.serializeSceneUI(this)}}class RJ extends E8{player;nametagSceneUI;constructor(J){super(J);if(this.player=J.player,this.nametagSceneUI=new TQ({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 CQ)}spawn(J,Z,X){super.spawn(J,Z,X),this.nametagSceneUI.load(J),this.player.on("PLAYER.CHAT_MESSAGE_SEND",({message:Y})=>{this.nametagSceneUI.setState({chat:Y})})}tick(J){if(!this.isSpawned||!this.world||!this.controller)return;let{input:Z,camera:X}=this.player;this.controller.tickWithPlayerInput(this,Z,X.orientation,J),super.tick(J)}}class SQ{_entities=new Map;_nextEntityId=1;_world;constructor(J){this._world=J}get world(){return this._world}registerEntity(J){if(J.id!==void 0)I.fatalError(`EntityManager.registerEntity(): Entity ${J.name} is already assigned the id ${J.id}!`);let Z=this._nextEntityId;return this._entities.set(Z,J),this._nextEntityId++,Z}unregisterEntity(J){if(J.id===void 0)return I.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((Z)=>{if(Z instanceof RJ)J.push(Z)}),J}getPlayerEntitiesByPlayer(J){let Z=[];return this._entities.forEach((X)=>{if(X instanceof RJ&&X.player===J)Z.push(X)}),Z}getEntity(J){return this._entities.get(J)}getEntitiesByTag(J){let Z=[];return this._entities.forEach((X)=>{if(X.tag===J)Z.push(X)}),Z}getEntitiesByTagSubstring(J){let Z=[];return this._entities.forEach((X)=>{if(X.tag?.includes(J))Z.push(X)}),Z}getEntityChildren(J){let Z=[];return this._entities.forEach((X)=>{if(X.parent===J)Z.push(X)}),Z}tickEntities(J){this._entities.forEach((Z)=>{Z.tick(J)})}checkAndEmitUpdates(){this._entities.forEach((J)=>{if(!J.isSpawned)return;J.checkAndEmitUpdates()})}}class IQ{_lights=new Map;_nextLightId=1;_world;constructor(J){this._world=J}get world(){return this._world}despawnEntityAttachedLights(J){this.getAllEntityAttachedLights(J).forEach((Z)=>{Z.despawn()})}getAllLights(){return Array.from(this._lights.values())}getAllEntityAttachedLights(J){return this.getAllLights().filter((Z)=>Z.attachedToEntity===J)}registerLight(J){if(J.id!==void 0)return J.id;let Z=this._nextLightId;return this._lights.set(Z,J),this._nextLightId++,Z}unregisterLight(J){if(J.id===void 0)return;this._lights.delete(J.id)}}var kX0;((X)=>{X[X.POINTLIGHT=0]="POINTLIGHT";X[X.SPOTLIGHT=1]="SPOTLIGHT"})(kX0||={});var RE;((U)=>{U.DESPAWN="LIGHT.DESPAWN";U.SET_ANGLE="LIGHT.SET_ANGLE";U.SET_ATTACHED_TO_ENTITY="LIGHT.SET_ATTACHED_TO_ENTITY";U.SET_COLOR="LIGHT.SET_COLOR";U.SET_DISTANCE="LIGHT.SET_DISTANCE";U.SET_INTENSITY="LIGHT.SET_INTENSITY";U.SET_OFFSET="LIGHT.SET_OFFSET";U.SET_PENUMBRA="LIGHT.SET_PENUMBRA";U.SET_POSITION="LIGHT.SET_POSITION";U.SET_TRACKED_ENTITY="LIGHT.SET_TRACKED_ENTITY";U.SET_TRACKED_POSITION="LIGHT.SET_TRACKED_POSITION";U.SPAWN="LIGHT.SPAWN"})(RE||={});class SE extends J0{_id;_angle;_attachedToEntity;_color;_distance;_intensity;_offset;_penumbra;_position;_trackedEntity;_trackedPosition;_type;_world;constructor(J){if(!!J.attachedToEntity===!!J.position)I.fatalError("Either attachedToEntity or position must be set, but not both");super();I.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 I.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 I.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 I.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 $0.serializeLight(this)}}var BX0;((Y)=>{Y[Y.FIRST_PERSON=0]="FIRST_PERSON";Y[Y.THIRD_PERSON=1]="THIRD_PERSON";Y[Y.SPECTATOR=2]="SPECTATOR"})(BX0||={});var IE;((F)=>{F.LOOK_AT_ENTITY="PLAYER_CAMERA.LOOK_AT_ENTITY";F.LOOK_AT_POSITION="PLAYER_CAMERA.LOOK_AT_POSITION";F.SET_ATTACHED_TO_ENTITY="PLAYER_CAMERA.SET_ATTACHED_TO_ENTITY";F.SET_ATTACHED_TO_POSITION="PLAYER_CAMERA.SET_ATTACHED_TO_POSITION";F.SET_FILM_OFFSET="PLAYER_CAMERA.SET_FILM_OFFSET";F.SET_FORWARD_OFFSET="PLAYER_CAMERA.SET_FORWARD_OFFSET";F.SET_FOV="PLAYER_CAMERA.SET_FOV";F.SET_MODEL_HIDDEN_NODES="PLAYER_CAMERA.SET_MODEL_HIDDEN_NODES";F.SET_MODE="PLAYER_CAMERA.SET_MODE";F.SET_OFFSET="PLAYER_CAMERA.SET_OFFSET";F.SET_TRACKED_ENTITY="PLAYER_CAMERA.SET_TRACKED_ENTITY";F.SET_TRACKED_POSITION="PLAYER_CAMERA.SET_TRACKED_POSITION";F.SET_ZOOM="PLAYER_CAMERA.SET_ZOOM"})(IE||={});class hQ extends J0{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 I.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((Z)=>Z.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 $0.serializePlayerCamera(this)}_requirePlayerWorld(){if(!this.player.world)I.error(`PlayerCamera._requirePlayerWorld(): Player ${this.player.id} is not in a world!`);return!!this.player.world}}var FH;(($)=>{$.DATA="PLAYER_UI.DATA";$.LOAD="PLAYER_UI.LOAD";$.LOCK_POINTER="PLAYER_UI.LOCK_POINTER";$.SEND_DATA="PLAYER_UI.SEND_DATA"})(FH||={});class _Q extends J0{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 AQ{_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,Z){if(!this._requireSimulatedCollider(J))return;this.setColliderHandleBlockType(J.rawCollider.handle,Z)}setColliderCollisionCallback(J,Z){if(!this._requireSimulatedCollider(J))return;this.setColliderHandleCollisionCallback(J.rawCollider.handle,Z)}setColliderEntity(J,Z){if(!this._requireSimulatedCollider(J))return;this.setColliderHandleEntity(J.rawCollider.handle,Z)}setColliderHandleBlockType(J,Z){this._colliderHandleBlockTypeMap.set(J,Z),this._cleanupBlockTypeColliderHandles.delete(J),this._pendingCleanupBlockTypeColliderHandles.delete(J)}setColliderHandleCollisionCallback(J,Z){this._colliderHandleCollisionCallbackMap.set(J,Z),this._cleanupCollisionCallbackColliderHandles.delete(J),this._pendingCleanupCollisionCallbackColliderHandles.delete(J)}setColliderHandleEntity(J,Z){this._colliderHandleEntityMap.set(J,Z),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,Z])=>{for(let X of J.keys())Z.add(X);J.clear()})}_requireSimulatedCollider(J){if(!J.rawCollider)I.error("ColliderMap._requireSimulatedCollider(): Collider is not in the simulation.");return!!J.rawCollider}}var da0={x:0,y:-32,z:0},hE=60,_E;(($)=>{$.STEP_START="SIMULATION.STEP_START";$.STEP_END="SIMULATION.STEP_END";$.DEBUG_RAYCAST="SIMULATION.DEBUG_RAYCAST";$.DEBUG_RENDER="SIMULATION.DEBUG_RENDER"})(_E||={});class yQ extends J0{_colliderMap=new AQ;_debugRaycastingEnabled=!1;_debugRenderingEnabled=!1;_rapierEventQueue;_rapierSimulation;_world;constructor(J,Z=hE,X=da0){super();this._rapierEventQueue=new B0.EventQueue(!0),this._rapierSimulation=new B0.World(X),this._rapierSimulation.timestep=Math.fround(1/Z),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,Z,X,Y={}){let $=new B0.Ray(J,Z),K=this._rapierSimulation.castRay($,X,Y.ignoresSensors??!0,Y.filterFlags,Y.filterGroups,Y.filterExcludeCollider,Y.filterExcludeRigidBody,Y.filterPredicate);if(this._debugRaycastingEnabled)this.emitWithWorld(this._world,"SIMULATION.DEBUG_RAYCAST",{simulation:this,origin:J,direction:Z,length:X,hit:!!K});if(!K)return null;let Q=$.pointAt(K.timeOfImpact),W=K.timeOfImpact,G=K.collider,V=this._colliderMap.getColliderHandleBlockType(G.handle);if(V)return{hitBlock:pZ.fromGlobalCoordinate({x:Math.floor(Q.x-($.dir.x<0?0.0001:-0.0001)),y:Math.floor(Q.y-($.dir.y<0?0.0001:-0.0001)),z:Math.floor(Q.z-($.dir.z<0?0.0001:-0.0001))},V),hitPoint:Q,hitDistance:W};let z=this._colliderMap.getColliderHandleEntity(G.handle);if(z)return{hitEntity:z,hitPoint:Q,hitDistance:W};return null}createRawCollider(J,Z){return this._rapierSimulation.createCollider(J,Z)}createRawRigidBody(J){return this._rapierSimulation.createRigidBody(J)}enableDebugRaycasting(J){this._debugRaycastingEnabled=J}enableDebugRendering(J){this._debugRenderingEnabled=J}getContactManifolds(J,Z){let X=[];return this._rapierSimulation.narrowPhase.contactPair(J,Z,(Y,$)=>{if(Y.numContacts()===0)return;let K=Y.normal(),Q=[];for(let W=0;W<Y.numSolverContacts();W++)Q.push(Y.solverContactPoint(W));X.push({contactPoints:Q,localNormalA:!$?Y.localNormal1():Y.localNormal2(),localNormalB:!$?Y.localNormal2():Y.localNormal1(),normal:!$?K:{x:-K.x,y:-K.y,z:-K.z}})}),X}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 Z=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()-Z}),this._debugRenderingEnabled)this.emitWithWorld(this._world,"SIMULATION.DEBUG_RENDER",{simulation:this,...this._rapierSimulation.debugRender()})};_onCollisionEvent=(J,Z,X)=>{let[Y,$]=this._getCollisionObjects(J,Z);if(!Y||!$)return;let K=(Q,W)=>{if(Q instanceof s1&&W instanceof E8&&Q.hasListeners("BLOCK_TYPE.ENTITY_COLLISION"))Q.emit("BLOCK_TYPE.ENTITY_COLLISION",{blockType:Q,entity:W,started:X,colliderHandleA:J,colliderHandleB:Z});else if(Q instanceof E8&&W instanceof s1&&Q.hasListeners("ENTITY.BLOCK_COLLISION"))Q.emit("ENTITY.BLOCK_COLLISION",{entity:Q,blockType:W,started:X,colliderHandleA:J,colliderHandleB:Z});else if(Q instanceof E8&&W instanceof E8&&Q.hasListeners("ENTITY.ENTITY_COLLISION"))Q.emit("ENTITY.ENTITY_COLLISION",{entity:Q,otherEntity:W,started:X,colliderHandleA:J,colliderHandleB:Z});else if(typeof Q==="function"&&(W instanceof E8||W instanceof s1))Q(W,X,J,Z)};K(Y,$),K($,Y)};_onContactForceEvent=(J)=>{let[Z,X]=this._getCollisionObjects(J.collider1(),J.collider2());if(!Z||typeof Z==="function"||!X||typeof X==="function")return;let Y={totalForce:J.totalForce(),totalForceMagnitude:J.totalForceMagnitude(),maxForceDirection:J.maxForceDirection(),maxForceMagnitude:J.maxForceMagnitude()},$=(K,Q)=>{if(K instanceof s1&&Q instanceof E8&&K.hasListeners("BLOCK_TYPE.ENTITY_CONTACT_FORCE"))K.emit("BLOCK_TYPE.ENTITY_CONTACT_FORCE",{blockType:K,entity:Q,contactForceData:Y});else if(K instanceof E8&&Q instanceof s1&&K.hasListeners("ENTITY.BLOCK_CONTACT_FORCE"))K.emit("ENTITY.BLOCK_CONTACT_FORCE",{entity:K,blockType:Q,contactForceData:Y});else if(K instanceof E8&&Q instanceof E8&&K.hasListeners("ENTITY.ENTITY_CONTACT_FORCE"))K.emit("ENTITY.ENTITY_CONTACT_FORCE",{entity:K,otherEntity:Q,contactForceData:Y})};$(Z,X),$(X,Z)};_getCollisionObjects(J,Z){let X=this._colliderMap.getColliderHandleBlockType(J)??this._colliderMap.getColliderHandleCollisionCallback(J)??this._colliderMap.getColliderHandleEntity(J),Y=this._colliderMap.getColliderHandleBlockType(Z)??this._colliderMap.getColliderHandleCollisionCallback(Z)??this._colliderMap.getColliderHandleEntity(Z);return[X,Y]}}class wH{_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=[],Z=[],X=this._world.loop.currentTick;this._queuedPerPlayerSynchronizations.forEach((U,F)=>{this._createOrGetSynchronizedPlayerReliablePackets(F,J).push(...U)});let Y=Object.values(this._queuedEntitySynchronizations);if(Y.length>0){let[U,F]=Y.reduce(([q,N],w)=>{for(let k in w)if(k!=="i"&&k!=="p"&&k!=="r")return q.push(w),[q,N];return N.push(w),[q,N]},[[],[]]);if(F.length>0){let q=c.createPacket(c.outboundPackets.entitiesPacketDefinition,F,X);Z.push(q)}if(U.length>0){let q=c.createPacket(c.outboundPackets.entitiesPacketDefinition,U,X);J.push(q),this._synchronizedPlayerReliablePackets.forEach((N)=>N.push(q))}}let $=Object.values(this._queuedAudioSynchronizations);if($.length>0){let U=c.createPacket(c.outboundPackets.audiosPacketDefinition,$,X);J.push(U),this._synchronizedPlayerReliablePackets.forEach((F)=>F.push(U))}let K=Object.values(this._queuedBlockTypeSynchronizations);if(K.length>0){let U=c.createPacket(c.outboundPackets.blockTypesPacketDefinition,K,X);J.push(U),this._synchronizedPlayerReliablePackets.forEach((F)=>F.push(U))}let Q=Object.values(this._queuedBlockSynchronizations);if(Q.length>0){let U=c.createPacket(c.outboundPackets.blocksPacketDefinition,Q,X);J.push(U),this._synchronizedPlayerReliablePackets.forEach((F)=>F.push(U))}let W=Object.values(this._queuedChunkSynchronizations);if(W.length>0){let U=c.createPacket(c.outboundPackets.chunksPacketDefinition,W,X);J.push(U),this._synchronizedPlayerReliablePackets.forEach((F)=>F.push(U))}let G=Object.values(this._queuedLightSynchronizations);if(G.length>0){let U=c.createPacket(c.outboundPackets.lightsPacketDefinition,G,X);J.push(U),this._synchronizedPlayerReliablePackets.forEach((F)=>F.push(U))}this._queuedPerPlayerUISynchronizations.forEach((U,F)=>{let q=c.createPacket(c.outboundPackets.uiPacketDefinition,U,X);this._createOrGetSynchronizedPlayerReliablePackets(F,J).push(q)}),this._queuedPerPlayerUIDatasSynchronizations.forEach((U,F)=>{let q=c.createPacket(c.outboundPackets.uiDatasPacketDefinition,U,X);this._createOrGetSynchronizedPlayerReliablePackets(F,J).push(q)});let V=Object.values(this._queuedSceneUISynchronizations);if(V.length>0){let U=c.createPacket(c.outboundPackets.sceneUIsPacketDefinition,V,X);J.push(U),this._synchronizedPlayerReliablePackets.forEach((F)=>F.push(U))}if(this._queuedWorldSynchronization){let U=c.createPacket(c.outboundPackets.worldPacketDefinition,this._queuedWorldSynchronization,X);J.push(U),this._synchronizedPlayerReliablePackets.forEach((F)=>F.push(U))}this._queuedPerPlayerCameraSynchronizations.forEach((U,F)=>{let q=c.createPacket(c.outboundPackets.cameraPacketDefinition,U,X);this._createOrGetSynchronizedPlayerReliablePackets(F,J).push(q)});let z=Object.values(this._queuedPlayerSynchronizations);if(z.length>0){let U=c.createPacket(c.outboundPackets.playersPacketDefinition,z,X);J.push(U),this._synchronizedPlayerReliablePackets.forEach((F)=>F.push(U))}this._queuedBroadcasts.forEach((U)=>{J.push(U),this._synchronizedPlayerReliablePackets.forEach((F)=>F.push(U))});let H=this._queuedDebugRaycastSynchronizations;if(H.length>0){let U=c.createPacket(c.outboundPackets.physicsDebugRaycastsPacketDefinition,H,X);J.push(U),this._synchronizedPlayerReliablePackets.forEach((F)=>F.push(U))}j5.instance.getConnectedPlayersByWorld(this._world).forEach((U)=>{let F=this._synchronizedPlayerReliablePackets.get(U)??J;if(F.length>0)U.connection.send(F);if(Z.length>0)U.connection.send(Z,!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 Z=this._createOrGetQueuedAudioSync(J.audio);Z.pa=!0,delete Z.pl,delete Z.r};_onAudioPlay=(J)=>{let Z=J.audio.serialize();Z.pl=!0,delete Z.pa,delete Z.r,this._queuedAudioSynchronizations[Z.i]=Z};_onAudioPlayRestart=(J)=>{let Z=this._createOrGetQueuedAudioSync(J.audio);Z.r=!0,delete Z.pa,delete Z.pl,this._queuedAudioSynchronizations[Z.i]=Z};_onAudioSetAttachedToEntity=(J)=>{let Z=this._createOrGetQueuedAudioSync(J.audio);Z.e=J.entity?J.entity.id:void 0,Z.p=J.entity?void 0:Z.p};_onAudioSetCutoffDistance=(J)=>{let Z=this._createOrGetQueuedAudioSync(J.audio);Z.cd=J.cutoffDistance};_onAudioSetDetune=(J)=>{let Z=this._createOrGetQueuedAudioSync(J.audio);Z.de=J.detune};_onAudioSetDistortion=(J)=>{let Z=this._createOrGetQueuedAudioSync(J.audio);Z.di=J.distortion};_onAudioSetPosition=(J)=>{let Z=this._createOrGetQueuedAudioSync(J.audio);Z.e=J.position?void 0:Z.e,Z.p=J.position?$0.serializeVector(J.position):void 0};_onAudioSetPlaybackRate=(J)=>{let Z=this._createOrGetQueuedAudioSync(J.audio);Z.pr=J.playbackRate};_onAudioSetReferenceDistance=(J)=>{let Z=this._createOrGetQueuedAudioSync(J.audio);Z.rd=J.referenceDistance};_onAudioSetVolume=(J)=>{let Z=this._createOrGetQueuedAudioSync(J.audio);Z.v=J.volume};_onBlockTypeRegistryRegisterBlockType=(J)=>{let Z=J.blockType.serialize();this._queuedBlockTypeSynchronizations[J.blockType.id]=Z};_onChatSendBroadcastMessage=(J)=>{let{player:Z,message:X,color:Y}=J;this._queuedBroadcasts.push(c.createPacket(c.outboundPackets.chatMessagesPacketDefinition,[{m:X,c:Y,p:Z?.id}],this._world.loop.currentTick))};_onChatSendPlayerMessage=(J)=>{let{player:Z,message:X,color:Y}=J,$=this._queuedPerPlayerSynchronizations.get(Z)??[];$.push(c.createPacket(c.outboundPackets.chatMessagesPacketDefinition,[{m:X,c:Y}],this._world.loop.currentTick)),this._queuedPerPlayerSynchronizations.set(Z,$)};_onChunkSpawn=(J)=>{let Z=this._createOrGetQueuedChunkSync(J.chunk);Z.b=Array.from(J.chunk.blocks),Z.rm=void 0,this._spawnedChunks.add(Z.c.join(","))};_onChunkDespawn=(J)=>{let Z=this._createOrGetQueuedChunkSync(J.chunk),X=Z.c.join(",");if(this._spawnedChunks.has(X))delete this._queuedChunkSynchronizations[X],this._spawnedChunks.delete(X);else Z.rm=!0};_onChunkSetBlock=(J)=>{let Z=this._createOrGetQueuedBlockSync(J.globalCoordinate);Z.i=J.blockTypeId};_onEntitySetModelAnimationsPlaybackRate=(J)=>{let Z=this._createOrGetQueuedEntitySync(J.entity);Z.ap=J.playbackRate};_onEntitySpawn=(J)=>{let Z=J.entity.serialize();this._queuedEntitySynchronizations[Z.i]=Z,this._spawnedEntities.add(Z.i)};_onEntityDespawn=(J)=>{let Z=this._createOrGetQueuedEntitySync(J.entity);if(this._spawnedEntities.has(Z.i))delete this._queuedEntitySynchronizations[Z.i],this._spawnedEntities.delete(Z.i);else Z.rm=!0};_onEntitySetModelHiddenNodes=(J)=>{let Z=this._createOrGetQueuedEntitySync(J.entity);Z.h=Array.from(J.modelHiddenNodes)};_onEntitySetOpacity=(J)=>{let Z=this._createOrGetQueuedEntitySync(J.entity);Z.o=J.opacity};_onEntitySetParent=(J)=>{let Z=this._createOrGetQueuedEntitySync(J.entity);Z.pe=J.parent?J.parent.id:void 0,Z.pn=J.parentNodeName};_onEntitySetTintColor=(J)=>{let Z=this._createOrGetQueuedEntitySync(J.entity);Z.t=J.tintColor?$0.serializeRgbColor(J.tintColor):void 0};_onEntityStartModelLoopedAnimations=(J)=>{let Z=this._createOrGetQueuedEntitySync(J.entity);if(Z.al=Array.from(new Set([...Z.al??[],...J.animations])),Z.as)Z.as=Z.as.filter((X)=>!J.animations.has(X)).filter(Boolean)};_onEntityStartModelOneshotAnimations=(J)=>{let Z=this._createOrGetQueuedEntitySync(J.entity);if(Z.ao=Array.from(new Set([...Z.ao??[],...J.animations])),Z.as)Z.as=Z.as.filter((X)=>!J.animations.has(X)).filter(Boolean)};_onEntityStopModelAnimations=(J)=>{let Z=this._createOrGetQueuedEntitySync(J.entity);if(Z.al)Z.al=Z.al.filter((X)=>!J.animations.has(X)).filter(Boolean);if(Z.ao)Z.ao=Z.ao.filter((X)=>!J.animations.has(X)).filter(Boolean);Z.as=Array.from(new Set([...Z.as??[],...J.animations]))};_onEntityUpdateRotation=(J)=>{let Z=this._createOrGetQueuedEntitySync(J.entity);Z.r=[J.rotation.x,J.rotation.y,J.rotation.z,J.rotation.w]};_onEntityUpdatePosition=(J)=>{let Z=this._createOrGetQueuedEntitySync(J.entity);Z.p=[J.position.x,J.position.y,J.position.z]};_onLightDespawn=(J)=>{let Z=this._createOrGetQueuedLightSync(J.light);Z.rm=!0};_onLightSetAngle=(J)=>{let Z=this._createOrGetQueuedLightSync(J.light);Z.a=J.angle};_onLightSetAttachedToEntity=(J)=>{let Z=this._createOrGetQueuedLightSync(J.light);Z.e=J.entity?J.entity.id:void 0,Z.p=J.entity?void 0:Z.p};_onLightSetColor=(J)=>{let Z=this._createOrGetQueuedLightSync(J.light);Z.c=$0.serializeRgbColor(J.color)};_onLightSetDistance=(J)=>{let Z=this._createOrGetQueuedLightSync(J.light);Z.d=J.distance};_onLightSetIntensity=(J)=>{let Z=this._createOrGetQueuedLightSync(J.light);Z.n=J.intensity};_onLightSetOffset=(J)=>{let Z=this._createOrGetQueuedLightSync(J.light);Z.o=J.offset?$0.serializeVector(J.offset):void 0};_onLightSetPenumbra=(J)=>{let Z=this._createOrGetQueuedLightSync(J.light);Z.pe=J.penumbra};_onLightSetPosition=(J)=>{let Z=this._createOrGetQueuedLightSync(J.light);Z.p=J.position?$0.serializeVector(J.position):void 0,Z.e=J.position?void 0:Z.e};_onLightSetTrackedEntity=(J)=>{let Z=this._createOrGetQueuedLightSync(J.light);Z.te=J.entity?J.entity.id:void 0,Z.tp=J.entity?void 0:Z.tp};_onLightSetTrackedPosition=(J)=>{let Z=this._createOrGetQueuedLightSync(J.light);Z.tp=J.position?$0.serializeVector(J.position):void 0,Z.te=J.position?void 0:Z.te};_onLightSpawn=(J)=>{let Z=J.light.serialize();this._queuedLightSynchronizations[Z.i]=Z};_onPlayerCameraLookAtEntity=(J)=>{let Z=this._createOrGetQueuedPlayerCameraSync(J.playerCamera);Z.pl=$0.serializeVector(J.entity.position),delete Z.et,delete Z.pt};_onPlayerCameraLookAtPosition=(J)=>{let Z=this._createOrGetQueuedPlayerCameraSync(J.playerCamera);Z.pl=J.position?$0.serializeVector(J.position):void 0,delete Z.et,delete Z.pt};_onPlayerCameraSetAttachedToEntity=(J)=>{let Z=this._createOrGetQueuedPlayerCameraSync(J.playerCamera);Z.e=J.entity.id,delete Z.p};_onPlayerCameraSetAttachedToPosition=(J)=>{let Z=this._createOrGetQueuedPlayerCameraSync(J.playerCamera);Z.p=J.position?$0.serializeVector(J.position):void 0,delete Z.e};_onPlayerCameraSetFilmOffset=(J)=>{let Z=this._createOrGetQueuedPlayerCameraSync(J.playerCamera);Z.fo=J.filmOffset};_onPlayerCameraSetForwardOffset=(J)=>{let Z=this._createOrGetQueuedPlayerCameraSync(J.playerCamera);Z.ffo=J.forwardOffset};_onPlayerCameraSetFov=(J)=>{let Z=this._createOrGetQueuedPlayerCameraSync(J.playerCamera);Z.fv=J.fov};_onPlayerCameraSetModelHiddenNodes=(J)=>{let Z=this._createOrGetQueuedPlayerCameraSync(J.playerCamera);Z.h=Array.from(J.modelHiddenNodes)};_onPlayerCameraSetMode=(J)=>{let Z=this._createOrGetQueuedPlayerCameraSync(J.playerCamera);Z.m=J.mode};_onPlayerCameraSetOffset=(J)=>{let Z=this._createOrGetQueuedPlayerCameraSync(J.playerCamera);Z.o=J.offset?$0.serializeVector(J.offset):void 0};_onPlayerCameraSetTrackedEntity=(J)=>{let Z=this._createOrGetQueuedPlayerCameraSync(J.playerCamera);Z.et=J.entity?J.entity.id:void 0,delete Z.pl,delete Z.pt};_onPlayerCameraSetTrackedPosition=(J)=>{let Z=this._createOrGetQueuedPlayerCameraSync(J.playerCamera);Z.pt=J.position?$0.serializeVector(J.position):void 0,delete Z.et,delete Z.pl};_onPlayerCameraSetZoom=(J)=>{let Z=this._createOrGetQueuedPlayerCameraSync(J.playerCamera);Z.z=J.zoom};_onPlayerJoinedWorld=(J)=>{let{player:Z}=J,X=this._queuedPerPlayerSynchronizations.get(Z)??[];X.push(c.createPacket(c.outboundPackets.worldPacketDefinition,this._world.serialize(),this._world.loop.currentTick)),X.push(c.createPacket(c.outboundPackets.blockTypesPacketDefinition,this._world.blockTypeRegistry.serialize(),this._world.loop.currentTick)),X.push(c.createPacket(c.outboundPackets.chunksPacketDefinition,this._world.chunkLattice.getAllChunks().map(($)=>$.serialize()),this._world.loop.currentTick)),X.push(c.createPacket(c.outboundPackets.entitiesPacketDefinition,this._world.entityManager.getAllEntities().map(($)=>{if(Z.camera.attachedToEntity===void 0&&$ instanceof RJ&&$.player===Z)Z.camera.setAttachedToEntity($);return $.serialize()}),this._world.loop.currentTick)),X.push(c.createPacket(c.outboundPackets.audiosPacketDefinition,this._world.audioManager.getAllAudios().map(($)=>$.serialize()),this._world.loop.currentTick)),X.push(c.createPacket(c.outboundPackets.lightsPacketDefinition,this._world.lightManager.getAllLights().map(($)=>$.serialize()),this._world.loop.currentTick)),X.push(c.createPacket(c.outboundPackets.sceneUIsPacketDefinition,this._world.sceneUIManager.getAllSceneUIs().map(($)=>$.serialize()),this._world.loop.currentTick)),X.push(c.createPacket(c.outboundPackets.playersPacketDefinition,j5.instance.getConnectedPlayers().map(($)=>$.serialize()),this._world.loop.currentTick));let Y=this._createOrGetQueuedPlayerCameraSync(Z.camera);this._queuedPerPlayerCameraSynchronizations.set(Z,{...Z.camera.serialize(),...Y}),this._queuedPerPlayerSynchronizations.set(Z,X),this._queuedPlayerSynchronizations[Z.id]=Z.serialize()};_onPlayerLeftWorld=(J)=>{let Z=this._createOrGetQueuedPlayerSync(J.player);Z.rm=!0};_onPlayerRequestSync=(J)=>{J.player.connection.send([c.createPacket(c.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 Z=this._createOrGetQueuedPlayerUISync(J.playerUI);Z.u=J.htmlUri};_onPlayerUILockPointer=(J)=>{let Z=this._createOrGetQueuedPlayerUISync(J.playerUI);Z.p=J.lock};_onPlayerUISendData=(J)=>{this._createOrGetQueuedPlayerUIDatasSync(J.playerUI).push(J.data)};_onSceneUILoad=(J)=>{let Z=J.sceneUI.serialize();this._queuedSceneUISynchronizations[Z.i]=Z,this._loadedSceneUIs.add(Z.i)};_onSceneUISetAttachedToEntity=(J)=>{let Z=this._createOrGetQueuedSceneUISync(J.sceneUI);Z.e=J.entity?J.entity.id:void 0,Z.p=J.entity?void 0:Z.p};_onSceneUISetOffset=(J)=>{let Z=this._createOrGetQueuedSceneUISync(J.sceneUI);Z.o=J.offset?$0.serializeVector(J.offset):void 0};_onSceneUISetPosition=(J)=>{let Z=this._createOrGetQueuedSceneUISync(J.sceneUI);Z.p=J.position?$0.serializeVector(J.position):void 0,Z.e=J.position?void 0:Z.e};_onSceneUISetState=(J)=>{let Z=this._createOrGetQueuedSceneUISync(J.sceneUI);Z.s=J.state};_onSceneUISetViewDistance=(J)=>{let Z=this._createOrGetQueuedSceneUISync(J.sceneUI);Z.v=J.viewDistance};_onSceneUIUnload=(J)=>{let Z=this._createOrGetQueuedSceneUISync(J.sceneUI);if(this._loadedSceneUIs.has(Z.i))delete this._queuedSceneUISynchronizations[Z.i],this._loadedSceneUIs.delete(Z.i);else Z.rm=!0};_onSimulationDebugRaycast=(J)=>{this._queuedDebugRaycastSynchronizations.push($0.serializePhysicsDebugRaycast(J))};_onSimulationDebugRender=(J)=>{this._queuedBroadcasts.push(c.createPacket(c.outboundPackets.physicsDebugRenderPacketDefinition,{v:Array.from(J.vertices),c:Array.from(J.colors)},this._world.loop.currentTick))};_onWorldSetAmbientLightColor=(J)=>{let Z=this._createOrGetQueuedWorldSync(J.world);Z.ac=$0.serializeRgbColor(J.color)};_onWorldSetAmbientLightIntensity=(J)=>{let Z=this._createOrGetQueuedWorldSync(J.world);Z.ai=J.intensity};_onWorldSetDirectionalLightColor=(J)=>{let Z=this._createOrGetQueuedWorldSync(J.world);Z.dc=$0.serializeRgbColor(J.color)};_onWorldSetDirectionalLightIntensity=(J)=>{let Z=this._createOrGetQueuedWorldSync(J.world);Z.di=J.intensity};_onWorldSetDirectionalLightPosition=(J)=>{let Z=this._createOrGetQueuedWorldSync(J.world);Z.dp=$0.serializeVector(J.position)};_createOrGetQueuedAudioSync(J){if(J.id===void 0)I.fatalError("NetworkSynchronizer._createOrGetQueuedAudioSync(): Audio has no id!");return this._queuedAudioSynchronizations[J.id]??={i:J.id}}_createOrGetQueuedBlockSync(J){let{x:Z,y:X,z:Y}=J;return this._queuedBlockSynchronizations[`${Z},${X},${Y}`]??={i:0,c:[Z,X,Y]}}_createOrGetQueuedChunkSync(J){if(!J.originCoordinate)I.fatalError("NetworkSynchronizer._createOrGetQueuedChunkSync(): Chunk has no origin coordinate!");let{x:Z,y:X,z:Y}=J.originCoordinate;return this._queuedChunkSynchronizations[`${Z},${X},${Y}`]??={c:[Z,X,Y]}}_createOrGetQueuedEntitySync(J){if(J.id===void 0)I.fatalError("NetworkSynchronizer._createOrGetQueuedEntitySync(): Entity has no id!");return this._queuedEntitySynchronizations[J.id]??={i:J.id}}_createOrGetQueuedLightSync(J){if(J.id===void 0)I.fatalError("NetworkSynchronizer._createOrGetQueuedLightSync(): Light has no id!");return this._queuedLightSynchronizations[J.id]??={i:J.id}}_createOrGetQueuedPlayerSync(J){if(J.id===void 0)I.fatalError("NetworkSynchronizer._createOrGetQueuedPlayerSync(): Player has no id!");return this._queuedPlayerSynchronizations[J.id]??={i:J.id}}_createOrGetQueuedPlayerCameraSync(J){let Z=this._queuedPerPlayerCameraSynchronizations.get(J.player);if(!Z)Z={},this._queuedPerPlayerCameraSynchronizations.set(J.player,Z);return Z}_createOrGetQueuedPlayerUISync(J){let Z=this._queuedPerPlayerUISynchronizations.get(J.player);if(!Z)Z={},this._queuedPerPlayerUISynchronizations.set(J.player,Z);return Z}_createOrGetQueuedPlayerUIDatasSync(J){let Z=this._queuedPerPlayerUIDatasSynchronizations.get(J.player);if(!Z)Z=[],this._queuedPerPlayerUIDatasSynchronizations.set(J.player,Z);return Z}_createOrGetQueuedSceneUISync(J){if(J.id===void 0)I.fatalError("NetworkSynchronizer._createOrGetQueuedSceneUISync(): SceneUI has no id!");return this._queuedSceneUISynchronizations[J.id]??={i:J.id}}_createOrGetQueuedWorldSync(J){if(J.id!==this._world.id)I.fatalError("NetworkSynchronizer._createOrGetQueuedWorldSync(): World does not match this network synchronizer world!");return this._queuedWorldSynchronization??={i:J.id}}_createOrGetSynchronizedPlayerReliablePackets(J,Z){let X=this._synchronizedPlayerReliablePackets.get(J);if(!X)X=[...Z],this._synchronizedPlayerReliablePackets.set(J,X);return X}}class gQ{_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((Z)=>Z.attachedToEntity===J)}getSceneUIById(J){return this._sceneUIs.get(J)}registerSceneUI(J){if(J.id!==void 0)return J.id;let Z=this._nextSceneUIId;return this._sceneUIs.set(Z,J),this._nextSceneUIId++,Z}unloadEntityAttachedSceneUIs(J){this.getAllEntityAttachedSceneUIs(J).forEach((Z)=>{Z.unload()})}unregisterSceneUI(J){if(J.id===void 0)return;this._sceneUIs.delete(J.id)}}class mQ{_accumulatorMs=0;_targetTicksPerSecond;_fixedTimestepMs;_fixedTimestepS;_nextTickMs=0;_lastLoopTimeMs=0;_tickFunction;_tickErrorCallback;_tickHandle=null;constructor(J,Z,X){this._targetTicksPerSecond=J,this._fixedTimestepS=Math.fround(1/J),this._fixedTimestepMs=Math.fround(this._fixedTimestepS*1000),this._tickFunction=Z,this._tickErrorCallback=X}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 I.warning("Ticker.start(): ticker already running.");this._lastLoopTimeMs=performance.now();let J=()=>{let Z=performance.now(),X=Z-this._lastLoopTimeMs;if(this._lastLoopTimeMs=Z,X>250)X=250;this._accumulatorMs+=X;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 I.warning("Ticker.stop(): ticker not running.");clearTimeout(this._tickHandle),this._tickHandle=null}_tick(J){try{this._tickFunction(J)}catch(Z){if(Z instanceof Error&&this._tickErrorCallback)this._tickErrorCallback(Z);else I.warning(`Ticker._tick(): tick callback threw an error, but it was not an instance of Error. Error: ${Z}`)}}}var OX0;((K)=>{K.START="WORLD_LOOP.START";K.STOP="WORLD_LOOP.STOP";K.TICK_START="WORLD_LOOP.TICK_START";K.TICK_END="WORLD_LOOP.TICK_END";K.TICK_ERROR="WORLD_LOOP.TICK_ERROR"})(OX0||={});class fQ extends J0{_currentTick=0;_ticker;_world;constructor(J,Z=hE){super();this._ticker=new mQ(Z,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 Z=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()-Z})};_onTickError=(J)=>{I.error(`WorldLoop._onTickError(): Error: ${J}`),this.emitWithWorld(this._world,"WORLD_LOOP.TICK_ERROR",{worldLoop:this,error:J})}}var AE;((W)=>{W.SET_AMBIENT_LIGHT_COLOR="WORLD.SET_AMBIENT_LIGHT_COLOR";W.SET_AMBIENT_LIGHT_INTENSITY="WORLD.SET_AMBIENT_LIGHT_INTENSITY";W.SET_DIRECTIONAL_LIGHT_COLOR="WORLD.SET_DIRECTIONAL_LIGHT_COLOR";W.SET_DIRECTIONAL_LIGHT_INTENSITY="WORLD.SET_DIRECTIONAL_LIGHT_INTENSITY";W.SET_DIRECTIONAL_LIGHT_POSITION="WORLD.SET_DIRECTIONAL_LIGHT_POSITION";W.START="WORLD.START";W.STOP="WORLD.STOP"})(AE||={});class cQ extends J0{_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 yY(this),this._blockTypeRegistry=new k$(this),this._chatManager=new pQ(this),this._chunkLattice=new xQ(this),this._entityManager=new SQ(this),this._lightManager=new IQ(this),this._loop=new fQ(this,J.tickRate),this._networkSynchronizer=new wH(this),this._sceneUIManager=new gQ(this),this._simulation=new yQ(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 Z of J.blockTypes)this.blockTypeRegistry.registerGenericBlockType({id:Z.id,isLiquid:Z.isLiquid,name:Z.name,textureUri:Z.textureUri});if(J.blocks)for(let[Z,X]of Object.entries(J.blocks)){let[Y,$,K]=Z.split(",").map(Number);this.chunkLattice.setBlock({x:Y,y:$,z:K},X)}if(J.entities)for(let[Z,X]of Object.entries(J.entities)){let[Y,$,K]=Z.split(",").map(Number);new E8(X).spawn(this,{x:Y,y:$,z:K})}}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 $0.serializeWorld(this)}}var jX0;((X)=>{X.START="GAMESERVER.START";X.STOP="GAMESERVER.STOP"})(jX0||={});function ba0(J){B0.init().then(()=>{return _4.instance.modelRegistry.preloadModels()}).then(()=>{J(_4.instance.worlds[0]),_4.instance.start()}).catch((Z)=>{I.fatalError(`Failed to initialize the game engine, exiting. Error: ${Z}`)})}class _4{static _instance;_modelRegistry=o1.instance;_playerManager=j5.instance;_socket=TJ.instance;_webServer=EY.instance;_worlds={};constructor(){let J=new cQ({id:0,name:"Default World",skyboxUri:"skyboxes/partly-cloudy"});this._worlds[J.id]=J}static get instance(){if(!this._instance)this._instance=new _4;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(){b6.emit("GAMESERVER.START",{startedAtMs:performance.now()}),Object.values(this._worlds).forEach((J)=>J.start()),this._webServer.start()}stop(){b6.emit("GAMESERVER.STOP",{stoppedAtMs:performance.now()}),Object.values(this._worlds).forEach((J)=>J.stop())}}class mZ{static instance=new mZ;constructor(){}async getGlobalData(J){let Z=await z9.instance.getData(J);if(!Z||Z.error){if(Z?.error)I.warning(`PersistenceManager.getGlobalData(): ${Z.error.message}`);return}return Z}async getPlayerData(J){let Z=await z9.instance.getData(this._getPlayerKey(J));if(!Z||Z.error){if(Z?.error)I.warning(`PersistenceManager.getPlayerData(): ${Z.error.message}`);return}return Z}async setGlobalData(J,Z){let X=await z9.instance.setData(J,Z);if(!X||X.error){if(X?.error)I.warning(`PersistenceManager.setGlobalData(): ${X.error.message}`);return}return X}async setPlayerData(J,Z){let X=await z9.instance.setData(this._getPlayerKey(J),Z);if(!X||X.error){if(X?.error)I.warning(`PersistenceManager.setPlayerData(): ${X.error.message}`);return}return X}_getPlayerKey(J){return`player-${J.id}`}}var DX0=["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"],RQ;(($)=>{$.CHAT_MESSAGE_SEND="PLAYER.CHAT_MESSAGE_SEND";$.JOINED_WORLD="PLAYER.JOINED_WORLD";$.LEFT_WORLD="PLAYER.LEFT_WORLD";$.REQUEST_SYNC="PLAYER.REQUEST_SYNC"})(RQ||={});class vY extends J0{static _devNextPlayerId=1;id;username;profilePictureUrl;camera;connection;ui;_input={};_lastUnreliableInputSequenceNumber=0;_world;constructor(J,Z){super();this.id=Z?.user.id??`player-${vY._devNextPlayerId++}`,this.username=Z?.user.username??this.id,this.profilePictureUrl=Z?.user.profilePictureURL??void 0,this.camera=new hQ(this),this.connection=J,this.ui=new _Q(this),J.onPacket(c.PacketId.CHAT_MESSAGE_SEND,this._onChatMessageSendPacket),J.onPacket(c.PacketId.DEBUG_CONFIG,this._onDebugConfigPacket),J.onPacket(c.PacketId.INPUT,this._onInputPacket),J.onPacket(c.PacketId.SYNC_REQUEST,this._onSyncRequestPacket),J.onPacket(c.PacketId.UI_DATA_SEND,this._onUIDataSendPacket),this.joinWorld(_4.instance.worlds[0])}get input(){return this._input}get world(){return this._world}disconnect(){this.leaveWorld(),this.connection.close()}async getPersistedData(){return mZ.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 mZ.instance.setPlayerData(this,J)}serialize(){return $0.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 Z=J[1];if(Z.sq!==void 0){if(Z.sq<this._lastUnreliableInputSequenceNumber)return;this._lastUnreliableInputSequenceNumber=Z.sq}if(DX0.forEach((X)=>{let Y=X;if(Z[Y]!==void 0)this._input[Y]=Boolean(Z[Y])}),Z.cp!==void 0)this.camera.setOrientationPitch(Z.cp);if(Z.cy!==void 0)this.camera.setOrientationYaw(Z.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 yE;((X)=>{X.BROADCAST_MESSAGE="CHAT.BROADCAST_MESSAGE";X.PLAYER_MESSAGE="CHAT.PLAYER_MESSAGE"})(yE||={});class pQ extends J0{_commandCallbacks={};_world;constructor(J){super();this._world=J,this._subscribeToPlayerEvents()}registerCommand(J,Z){this._commandCallbacks[J]=Z}unregisterCommand(J){delete this._commandCallbacks[J]}sendBroadcastMessage(J,Z){this._sendBroadcastMessage(void 0,J,Z)}sendPlayerMessage(J,Z,X){this.emitWithWorld(this._world,"CHAT.PLAYER_MESSAGE",{player:J,message:Z,color:X})}_subscribeToPlayerEvents(){this._world.on("PLAYER.CHAT_MESSAGE_SEND",(J)=>{let{player:Z,message:X}=J,[Y,...$]=X.split(" "),K=this._commandCallbacks[Y];if(K){K(Z,$,X);return}this._sendBroadcastMessage(Z,X)})}_sendBroadcastMessage(J,Z,X){this.emitWithWorld(this._world,"CHAT.BROADCAST_MESSAGE",{player:J,message:Z,color:X})}}var n=0.000001,w0=typeof Float32Array!=="undefined"?Float32Array:Array,H9=Math.random;var tE8=Math.PI/180;if(!Math.hypot)Math.hypot=function(){var J=0,Z=arguments.length;while(Z--)J+=arguments[Z]*arguments[Z];return Math.sqrt(J)};var O8={};p1(O8,{transpose:()=>ta0,subtract:()=>EX0,sub:()=>Lo0,str:()=>Qo0,set:()=>ra0,scale:()=>Yo0,rotate:()=>Xo0,multiplyScalarAndAdd:()=>Fo0,multiplyScalar:()=>Uo0,multiply:()=>PX0,mul:()=>wo0,invert:()=>ea0,identity:()=>oa0,fromValues:()=>sa0,fromScaling:()=>Ko0,fromRotation:()=>$o0,frob:()=>Wo0,exactEquals:()=>zo0,equals:()=>Ho0,determinant:()=>Zo0,create:()=>na0,copy:()=>aa0,clone:()=>ia0,adjoint:()=>Jo0,add:()=>Vo0,LDU:()=>Go0});function na0(){var J=new w0(4);if(w0!=Float32Array)J[1]=0,J[2]=0;return J[0]=1,J[3]=1,J}function ia0(J){var Z=new w0(4);return Z[0]=J[0],Z[1]=J[1],Z[2]=J[2],Z[3]=J[3],Z}function aa0(J,Z){return J[0]=Z[0],J[1]=Z[1],J[2]=Z[2],J[3]=Z[3],J}function oa0(J){return J[0]=1,J[1]=0,J[2]=0,J[3]=1,J}function sa0(J,Z,X,Y){var $=new w0(4);return $[0]=J,$[1]=Z,$[2]=X,$[3]=Y,$}function ra0(J,Z,X,Y,$){return J[0]=Z,J[1]=X,J[2]=Y,J[3]=$,J}function ta0(J,Z){if(J===Z){var X=Z[1];J[1]=Z[2],J[2]=X}else J[0]=Z[0],J[1]=Z[2],J[2]=Z[1],J[3]=Z[3];return J}function ea0(J,Z){var X=Z[0],Y=Z[1],$=Z[2],K=Z[3],Q=X*K-$*Y;if(!Q)return null;return Q=1/Q,J[0]=K*Q,J[1]=-Y*Q,J[2]=-$*Q,J[3]=X*Q,J}function Jo0(J,Z){var X=Z[0];return J[0]=Z[3],J[1]=-Z[1],J[2]=-Z[2],J[3]=X,J}function Zo0(J){return J[0]*J[3]-J[2]*J[1]}function PX0(J,Z,X){var Y=Z[0],$=Z[1],K=Z[2],Q=Z[3],W=X[0],G=X[1],V=X[2],z=X[3];return J[0]=Y*W+K*G,J[1]=$*W+Q*G,J[2]=Y*V+K*z,J[3]=$*V+Q*z,J}function Xo0(J,Z,X){var Y=Z[0],$=Z[1],K=Z[2],Q=Z[3],W=Math.sin(X),G=Math.cos(X);return J[0]=Y*G+K*W,J[1]=$*G+Q*W,J[2]=Y*-W+K*G,J[3]=$*-W+Q*G,J}function Yo0(J,Z,X){var Y=Z[0],$=Z[1],K=Z[2],Q=Z[3],W=X[0],G=X[1];return J[0]=Y*W,J[1]=$*W,J[2]=K*G,J[3]=Q*G,J}function $o0(J,Z){var X=Math.sin(Z),Y=Math.cos(Z);return J[0]=Y,J[1]=X,J[2]=-X,J[3]=Y,J}function Ko0(J,Z){return J[0]=Z[0],J[1]=0,J[2]=0,J[3]=Z[1],J}function Qo0(J){return"mat2("+J[0]+", "+J[1]+", "+J[2]+", "+J[3]+")"}function Wo0(J){return Math.hypot(J[0],J[1],J[2],J[3])}function Go0(J,Z,X,Y){return J[2]=Y[2]/Y[0],X[0]=Y[0],X[1]=Y[1],X[3]=Y[3]-J[2]*X[1],[J,Z,X]}function Vo0(J,Z,X){return J[0]=Z[0]+X[0],J[1]=Z[1]+X[1],J[2]=Z[2]+X[2],J[3]=Z[3]+X[3],J}function EX0(J,Z,X){return J[0]=Z[0]-X[0],J[1]=Z[1]-X[1],J[2]=Z[2]-X[2],J[3]=Z[3]-X[3],J}function zo0(J,Z){return J[0]===Z[0]&&J[1]===Z[1]&&J[2]===Z[2]&&J[3]===Z[3]}function Ho0(J,Z){var X=J[0],Y=J[1],$=J[2],K=J[3],Q=Z[0],W=Z[1],G=Z[2],V=Z[3];return Math.abs(X-Q)<=n*Math.max(1,Math.abs(X),Math.abs(Q))&&Math.abs(Y-W)<=n*Math.max(1,Math.abs(Y),Math.abs(W))&&Math.abs($-G)<=n*Math.max(1,Math.abs($),Math.abs(G))&&Math.abs(K-V)<=n*Math.max(1,Math.abs(K),Math.abs(V))}function Uo0(J,Z,X){return J[0]=Z[0]*X,J[1]=Z[1]*X,J[2]=Z[2]*X,J[3]=Z[3]*X,J}function Fo0(J,Z,X,Y){return J[0]=Z[0]+X[0]*Y,J[1]=Z[1]+X[1]*Y,J[2]=Z[2]+X[2]*Y,J[3]=Z[3]+X[3]*Y,J}var wo0=PX0,Lo0=EX0;var o0={};p1(o0,{transpose:()=>jo0,translate:()=>vo0,subtract:()=>xX0,sub:()=>do0,str:()=>yo0,set:()=>Bo0,scale:()=>Co0,rotate:()=>xo0,projection:()=>Ao0,normalFromMat4:()=>_o0,multiplyScalarAndAdd:()=>co0,multiplyScalar:()=>fo0,multiply:()=>vX0,mul:()=>uo0,invert:()=>Do0,identity:()=>Oo0,fromValues:()=>ko0,fromTranslation:()=>To0,fromScaling:()=>So0,fromRotation:()=>Ro0,fromQuat:()=>ho0,fromMat4:()=>qo0,fromMat2d:()=>Io0,frob:()=>go0,exactEquals:()=>po0,equals:()=>lo0,determinant:()=>Eo0,create:()=>gE,copy:()=>No0,clone:()=>Mo0,adjoint:()=>Po0,add:()=>mo0});function gE(){var J=new w0(9);if(w0!=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 qo0(J,Z){return J[0]=Z[0],J[1]=Z[1],J[2]=Z[2],J[3]=Z[4],J[4]=Z[5],J[5]=Z[6],J[6]=Z[8],J[7]=Z[9],J[8]=Z[10],J}function Mo0(J){var Z=new w0(9);return Z[0]=J[0],Z[1]=J[1],Z[2]=J[2],Z[3]=J[3],Z[4]=J[4],Z[5]=J[5],Z[6]=J[6],Z[7]=J[7],Z[8]=J[8],Z}function No0(J,Z){return J[0]=Z[0],J[1]=Z[1],J[2]=Z[2],J[3]=Z[3],J[4]=Z[4],J[5]=Z[5],J[6]=Z[6],J[7]=Z[7],J[8]=Z[8],J}function ko0(J,Z,X,Y,$,K,Q,W,G){var V=new w0(9);return V[0]=J,V[1]=Z,V[2]=X,V[3]=Y,V[4]=$,V[5]=K,V[6]=Q,V[7]=W,V[8]=G,V}function Bo0(J,Z,X,Y,$,K,Q,W,G,V){return J[0]=Z,J[1]=X,J[2]=Y,J[3]=$,J[4]=K,J[5]=Q,J[6]=W,J[7]=G,J[8]=V,J}function Oo0(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 jo0(J,Z){if(J===Z){var X=Z[1],Y=Z[2],$=Z[5];J[1]=Z[3],J[2]=Z[6],J[3]=X,J[5]=Z[7],J[6]=Y,J[7]=$}else J[0]=Z[0],J[1]=Z[3],J[2]=Z[6],J[3]=Z[1],J[4]=Z[4],J[5]=Z[7],J[6]=Z[2],J[7]=Z[5],J[8]=Z[8];return J}function Do0(J,Z){var X=Z[0],Y=Z[1],$=Z[2],K=Z[3],Q=Z[4],W=Z[5],G=Z[6],V=Z[7],z=Z[8],H=z*Q-W*V,U=-z*K+W*G,F=V*K-Q*G,q=X*H+Y*U+$*F;if(!q)return null;return q=1/q,J[0]=H*q,J[1]=(-z*Y+$*V)*q,J[2]=(W*Y-$*Q)*q,J[3]=U*q,J[4]=(z*X-$*G)*q,J[5]=(-W*X+$*K)*q,J[6]=F*q,J[7]=(-V*X+Y*G)*q,J[8]=(Q*X-Y*K)*q,J}function Po0(J,Z){var X=Z[0],Y=Z[1],$=Z[2],K=Z[3],Q=Z[4],W=Z[5],G=Z[6],V=Z[7],z=Z[8];return J[0]=Q*z-W*V,J[1]=$*V-Y*z,J[2]=Y*W-$*Q,J[3]=W*G-K*z,J[4]=X*z-$*G,J[5]=$*K-X*W,J[6]=K*V-Q*G,J[7]=Y*G-X*V,J[8]=X*Q-Y*K,J}function Eo0(J){var Z=J[0],X=J[1],Y=J[2],$=J[3],K=J[4],Q=J[5],W=J[6],G=J[7],V=J[8];return Z*(V*K-Q*G)+X*(-V*$+Q*W)+Y*(G*$-K*W)}function vX0(J,Z,X){var Y=Z[0],$=Z[1],K=Z[2],Q=Z[3],W=Z[4],G=Z[5],V=Z[6],z=Z[7],H=Z[8],U=X[0],F=X[1],q=X[2],N=X[3],w=X[4],k=X[5],B=X[6],j=X[7],D=X[8];return J[0]=U*Y+F*Q+q*V,J[1]=U*$+F*W+q*z,J[2]=U*K+F*G+q*H,J[3]=N*Y+w*Q+k*V,J[4]=N*$+w*W+k*z,J[5]=N*K+w*G+k*H,J[6]=B*Y+j*Q+D*V,J[7]=B*$+j*W+D*z,J[8]=B*K+j*G+D*H,J}function vo0(J,Z,X){var Y=Z[0],$=Z[1],K=Z[2],Q=Z[3],W=Z[4],G=Z[5],V=Z[6],z=Z[7],H=Z[8],U=X[0],F=X[1];return J[0]=Y,J[1]=$,J[2]=K,J[3]=Q,J[4]=W,J[5]=G,J[6]=U*Y+F*Q+V,J[7]=U*$+F*W+z,J[8]=U*K+F*G+H,J}function xo0(J,Z,X){var Y=Z[0],$=Z[1],K=Z[2],Q=Z[3],W=Z[4],G=Z[5],V=Z[6],z=Z[7],H=Z[8],U=Math.sin(X),F=Math.cos(X);return J[0]=F*Y+U*Q,J[1]=F*$+U*W,J[2]=F*K+U*G,J[3]=F*Q-U*Y,J[4]=F*W-U*$,J[5]=F*G-U*K,J[6]=V,J[7]=z,J[8]=H,J}function Co0(J,Z,X){var Y=X[0],$=X[1];return J[0]=Y*Z[0],J[1]=Y*Z[1],J[2]=Y*Z[2],J[3]=$*Z[3],J[4]=$*Z[4],J[5]=$*Z[5],J[6]=Z[6],J[7]=Z[7],J[8]=Z[8],J}function To0(J,Z){return J[0]=1,J[1]=0,J[2]=0,J[3]=0,J[4]=1,J[5]=0,J[6]=Z[0],J[7]=Z[1],J[8]=1,J}function Ro0(J,Z){var X=Math.sin(Z),Y=Math.cos(Z);return J[0]=Y,J[1]=X,J[2]=0,J[3]=-X,J[4]=Y,J[5]=0,J[6]=0,J[7]=0,J[8]=1,J}function So0(J,Z){return J[0]=Z[0],J[1]=0,J[2]=0,J[3]=0,J[4]=Z[1],J[5]=0,J[6]=0,J[7]=0,J[8]=1,J}function Io0(J,Z){return J[0]=Z[0],J[1]=Z[1],J[2]=0,J[3]=Z[2],J[4]=Z[3],J[5]=0,J[6]=Z[4],J[7]=Z[5],J[8]=1,J}function ho0(J,Z){var X=Z[0],Y=Z[1],$=Z[2],K=Z[3],Q=X+X,W=Y+Y,G=$+$,V=X*Q,z=Y*Q,H=Y*W,U=$*Q,F=$*W,q=$*G,N=K*Q,w=K*W,k=K*G;return J[0]=1-H-q,J[3]=z-k,J[6]=U+w,J[1]=z+k,J[4]=1-V-q,J[7]=F-N,J[2]=U-w,J[5]=F+N,J[8]=1-V-H,J}function _o0(J,Z){var X=Z[0],Y=Z[1],$=Z[2],K=Z[3],Q=Z[4],W=Z[5],G=Z[6],V=Z[7],z=Z[8],H=Z[9],U=Z[10],F=Z[11],q=Z[12],N=Z[13],w=Z[14],k=Z[15],B=X*W-Y*Q,j=X*G-$*Q,D=X*V-K*Q,v=Y*G-$*W,O=Y*V-K*W,P=$*V-K*G,S=z*N-H*q,R=z*w-U*q,h=z*k-F*q,_=H*w-U*N,y=H*k-F*N,p=U*k-F*w,A=B*p-j*y+D*_+v*h-O*R+P*S;if(!A)return null;return A=1/A,J[0]=(W*p-G*y+V*_)*A,J[1]=(G*h-Q*p-V*R)*A,J[2]=(Q*y-W*h+V*S)*A,J[3]=($*y-Y*p-K*_)*A,J[4]=(X*p-$*h+K*R)*A,J[5]=(Y*h-X*y-K*S)*A,J[6]=(N*P-w*O+k*v)*A,J[7]=(w*D-q*P-k*j)*A,J[8]=(q*O-N*D+k*B)*A,J}function Ao0(J,Z,X){return J[0]=2/Z,J[1]=0,J[2]=0,J[3]=0,J[4]=-2/X,J[5]=0,J[6]=-1,J[7]=1,J[8]=1,J}function yo0(J){return"mat3("+J[0]+", "+J[1]+", "+J[2]+", "+J[3]+", "+J[4]+", "+J[5]+", "+J[6]+", "+J[7]+", "+J[8]+")"}function go0(J){return Math.hypot(J[0],J[1],J[2],J[3],J[4],J[5],J[6],J[7],J[8])}function mo0(J,Z,X){return J[0]=Z[0]+X[0],J[1]=Z[1]+X[1],J[2]=Z[2]+X[2],J[3]=Z[3]+X[3],J[4]=Z[4]+X[4],J[5]=Z[5]+X[5],J[6]=Z[6]+X[6],J[7]=Z[7]+X[7],J[8]=Z[8]+X[8],J}function xX0(J,Z,X){return J[0]=Z[0]-X[0],J[1]=Z[1]-X[1],J[2]=Z[2]-X[2],J[3]=Z[3]-X[3],J[4]=Z[4]-X[4],J[5]=Z[5]-X[5],J[6]=Z[6]-X[6],J[7]=Z[7]-X[7],J[8]=Z[8]-X[8],J}function fo0(J,Z,X){return J[0]=Z[0]*X,J[1]=Z[1]*X,J[2]=Z[2]*X,J[3]=Z[3]*X,J[4]=Z[4]*X,J[5]=Z[5]*X,J[6]=Z[6]*X,J[7]=Z[7]*X,J[8]=Z[8]*X,J}function co0(J,Z,X,Y){return J[0]=Z[0]+X[0]*Y,J[1]=Z[1]+X[1]*Y,J[2]=Z[2]+X[2]*Y,J[3]=Z[3]+X[3]*Y,J[4]=Z[4]+X[4]*Y,J[5]=Z[5]+X[5]*Y,J[6]=Z[6]+X[6]*Y,J[7]=Z[7]+X[7]*Y,J[8]=Z[8]+X[8]*Y,J}function po0(J,Z){return J[0]===Z[0]&&J[1]===Z[1]&&J[2]===Z[2]&&J[3]===Z[3]&&J[4]===Z[4]&&J[5]===Z[5]&&J[6]===Z[6]&&J[7]===Z[7]&&J[8]===Z[8]}function lo0(J,Z){var X=J[0],Y=J[1],$=J[2],K=J[3],Q=J[4],W=J[5],G=J[6],V=J[7],z=J[8],H=Z[0],U=Z[1],F=Z[2],q=Z[3],N=Z[4],w=Z[5],k=Z[6],B=Z[7],j=Z[8];return Math.abs(X-H)<=n*Math.max(1,Math.abs(X),Math.abs(H))&&Math.abs(Y-U)<=n*Math.max(1,Math.abs(Y),Math.abs(U))&&Math.abs($-F)<=n*Math.max(1,Math.abs($),Math.abs(F))&&Math.abs(K-q)<=n*Math.max(1,Math.abs(K),Math.abs(q))&&Math.abs(Q-N)<=n*Math.max(1,Math.abs(Q),Math.abs(N))&&Math.abs(W-w)<=n*Math.max(1,Math.abs(W),Math.abs(w))&&Math.abs(G-k)<=n*Math.max(1,Math.abs(G),Math.abs(k))&&Math.abs(V-B)<=n*Math.max(1,Math.abs(V),Math.abs(B))&&Math.abs(z-j)<=n*Math.max(1,Math.abs(z),Math.abs(j))}var uo0=vX0,do0=xX0;var z0={};p1(z0,{transpose:()=>so0,translate:()=>Js0,targetTo:()=>Es0,subtract:()=>_X0,sub:()=>_s0,str:()=>vs0,set:()=>oo0,scale:()=>Zs0,rotateZ:()=>Ks0,rotateY:()=>$s0,rotateX:()=>Ys0,rotate:()=>Xs0,perspectiveZO:()=>Bs0,perspectiveNO:()=>IX0,perspectiveFromFieldOfView:()=>Os0,perspective:()=>ks0,orthoZO:()=>Ds0,orthoNO:()=>hX0,ortho:()=>js0,multiplyScalarAndAdd:()=>Rs0,multiplyScalar:()=>Ts0,multiply:()=>TX0,mul:()=>hs0,lookAt:()=>Ps0,invert:()=>ro0,identity:()=>CX0,getTranslation:()=>Fs0,getScaling:()=>SX0,getRotation:()=>ws0,frustum:()=>Ns0,fromZRotation:()=>Hs0,fromYRotation:()=>zs0,fromXRotation:()=>Vs0,fromValues:()=>ao0,fromTranslation:()=>Qs0,fromScaling:()=>Ws0,fromRotationTranslationScaleOrigin:()=>qs0,fromRotationTranslationScale:()=>Ls0,fromRotationTranslation:()=>RX0,fromRotation:()=>Gs0,fromQuat2:()=>Us0,fromQuat:()=>Ms0,frob:()=>xs0,exactEquals:()=>Ss0,equals:()=>Is0,determinant:()=>eo0,create:()=>bo0,copy:()=>io0,clone:()=>no0,adjoint:()=>to0,add:()=>Cs0});function bo0(){var J=new w0(16);if(w0!=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 no0(J){var Z=new w0(16);return Z[0]=J[0],Z[1]=J[1],Z[2]=J[2],Z[3]=J[3],Z[4]=J[4],Z[5]=J[5],Z[6]=J[6],Z[7]=J[7],Z[8]=J[8],Z[9]=J[9],Z[10]=J[10],Z[11]=J[11],Z[12]=J[12],Z[13]=J[13],Z[14]=J[14],Z[15]=J[15],Z}function io0(J,Z){return J[0]=Z[0],J[1]=Z[1],J[2]=Z[2],J[3]=Z[3],J[4]=Z[4],J[5]=Z[5],J[6]=Z[6],J[7]=Z[7],J[8]=Z[8],J[9]=Z[9],J[10]=Z[10],J[11]=Z[11],J[12]=Z[12],J[13]=Z[13],J[14]=Z[14],J[15]=Z[15],J}function ao0(J,Z,X,Y,$,K,Q,W,G,V,z,H,U,F,q,N){var w=new w0(16);return w[0]=J,w[1]=Z,w[2]=X,w[3]=Y,w[4]=$,w[5]=K,w[6]=Q,w[7]=W,w[8]=G,w[9]=V,w[10]=z,w[11]=H,w[12]=U,w[13]=F,w[14]=q,w[15]=N,w}function oo0(J,Z,X,Y,$,K,Q,W,G,V,z,H,U,F,q,N,w){return J[0]=Z,J[1]=X,J[2]=Y,J[3]=$,J[4]=K,J[5]=Q,J[6]=W,J[7]=G,J[8]=V,J[9]=z,J[10]=H,J[11]=U,J[12]=F,J[13]=q,J[14]=N,J[15]=w,J}function CX0(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 so0(J,Z){if(J===Z){var X=Z[1],Y=Z[2],$=Z[3],K=Z[6],Q=Z[7],W=Z[11];J[1]=Z[4],J[2]=Z[8],J[3]=Z[12],J[4]=X,J[6]=Z[9],J[7]=Z[13],J[8]=Y,J[9]=K,J[11]=Z[14],J[12]=$,J[13]=Q,J[14]=W}else J[0]=Z[0],J[1]=Z[4],J[2]=Z[8],J[3]=Z[12],J[4]=Z[1],J[5]=Z[5],J[6]=Z[9],J[7]=Z[13],J[8]=Z[2],J[9]=Z[6],J[10]=Z[10],J[11]=Z[14],J[12]=Z[3],J[13]=Z[7],J[14]=Z[11],J[15]=Z[15];return J}function ro0(J,Z){var X=Z[0],Y=Z[1],$=Z[2],K=Z[3],Q=Z[4],W=Z[5],G=Z[6],V=Z[7],z=Z[8],H=Z[9],U=Z[10],F=Z[11],q=Z[12],N=Z[13],w=Z[14],k=Z[15],B=X*W-Y*Q,j=X*G-$*Q,D=X*V-K*Q,v=Y*G-$*W,O=Y*V-K*W,P=$*V-K*G,S=z*N-H*q,R=z*w-U*q,h=z*k-F*q,_=H*w-U*N,y=H*k-F*N,p=U*k-F*w,A=B*p-j*y+D*_+v*h-O*R+P*S;if(!A)return null;return A=1/A,J[0]=(W*p-G*y+V*_)*A,J[1]=($*y-Y*p-K*_)*A,J[2]=(N*P-w*O+k*v)*A,J[3]=(U*O-H*P-F*v)*A,J[4]=(G*h-Q*p-V*R)*A,J[5]=(X*p-$*h+K*R)*A,J[6]=(w*D-q*P-k*j)*A,J[7]=(z*P-U*D+F*j)*A,J[8]=(Q*y-W*h+V*S)*A,J[9]=(Y*h-X*y-K*S)*A,J[10]=(q*O-N*D+k*B)*A,J[11]=(H*D-z*O-F*B)*A,J[12]=(W*R-Q*_-G*S)*A,J[13]=(X*_-Y*R+$*S)*A,J[14]=(N*j-q*v-w*B)*A,J[15]=(z*v-H*j+U*B)*A,J}function to0(J,Z){var X=Z[0],Y=Z[1],$=Z[2],K=Z[3],Q=Z[4],W=Z[5],G=Z[6],V=Z[7],z=Z[8],H=Z[9],U=Z[10],F=Z[11],q=Z[12],N=Z[13],w=Z[14],k=Z[15];return J[0]=W*(U*k-F*w)-H*(G*k-V*w)+N*(G*F-V*U),J[1]=-(Y*(U*k-F*w)-H*($*k-K*w)+N*($*F-K*U)),J[2]=Y*(G*k-V*w)-W*($*k-K*w)+N*($*V-K*G),J[3]=-(Y*(G*F-V*U)-W*($*F-K*U)+H*($*V-K*G)),J[4]=-(Q*(U*k-F*w)-z*(G*k-V*w)+q*(G*F-V*U)),J[5]=X*(U*k-F*w)-z*($*k-K*w)+q*($*F-K*U),J[6]=-(X*(G*k-V*w)-Q*($*k-K*w)+q*($*V-K*G)),J[7]=X*(G*F-V*U)-Q*($*F-K*U)+z*($*V-K*G),J[8]=Q*(H*k-F*N)-z*(W*k-V*N)+q*(W*F-V*H),J[9]=-(X*(H*k-F*N)-z*(Y*k-K*N)+q*(Y*F-K*H)),J[10]=X*(W*k-V*N)-Q*(Y*k-K*N)+q*(Y*V-K*W),J[11]=-(X*(W*F-V*H)-Q*(Y*F-K*H)+z*(Y*V-K*W)),J[12]=-(Q*(H*w-U*N)-z*(W*w-G*N)+q*(W*U-G*H)),J[13]=X*(H*w-U*N)-z*(Y*w-$*N)+q*(Y*U-$*H),J[14]=-(X*(W*w-G*N)-Q*(Y*w-$*N)+q*(Y*G-$*W)),J[15]=X*(W*U-G*H)-Q*(Y*U-$*H)+z*(Y*G-$*W),J}function eo0(J){var Z=J[0],X=J[1],Y=J[2],$=J[3],K=J[4],Q=J[5],W=J[6],G=J[7],V=J[8],z=J[9],H=J[10],U=J[11],F=J[12],q=J[13],N=J[14],w=J[15],k=Z*Q-X*K,B=Z*W-Y*K,j=Z*G-$*K,D=X*W-Y*Q,v=X*G-$*Q,O=Y*G-$*W,P=V*q-z*F,S=V*N-H*F,R=V*w-U*F,h=z*N-H*q,_=z*w-U*q,y=H*w-U*N;return k*y-B*_+j*h+D*R-v*S+O*P}function TX0(J,Z,X){var Y=Z[0],$=Z[1],K=Z[2],Q=Z[3],W=Z[4],G=Z[5],V=Z[6],z=Z[7],H=Z[8],U=Z[9],F=Z[10],q=Z[11],N=Z[12],w=Z[13],k=Z[14],B=Z[15],j=X[0],D=X[1],v=X[2],O=X[3];return J[0]=j*Y+D*W+v*H+O*N,J[1]=j*$+D*G+v*U+O*w,J[2]=j*K+D*V+v*F+O*k,J[3]=j*Q+D*z+v*q+O*B,j=X[4],D=X[5],v=X[6],O=X[7],J[4]=j*Y+D*W+v*H+O*N,J[5]=j*$+D*G+v*U+O*w,J[6]=j*K+D*V+v*F+O*k,J[7]=j*Q+D*z+v*q+O*B,j=X[8],D=X[9],v=X[10],O=X[11],J[8]=j*Y+D*W+v*H+O*N,J[9]=j*$+D*G+v*U+O*w,J[10]=j*K+D*V+v*F+O*k,J[11]=j*Q+D*z+v*q+O*B,j=X[12],D=X[13],v=X[14],O=X[15],J[12]=j*Y+D*W+v*H+O*N,J[13]=j*$+D*G+v*U+O*w,J[14]=j*K+D*V+v*F+O*k,J[15]=j*Q+D*z+v*q+O*B,J}function Js0(J,Z,X){var Y=X[0],$=X[1],K=X[2],Q,W,G,V,z,H,U,F,q,N,w,k;if(Z===J)J[12]=Z[0]*Y+Z[4]*$+Z[8]*K+Z[12],J[13]=Z[1]*Y+Z[5]*$+Z[9]*K+Z[13],J[14]=Z[2]*Y+Z[6]*$+Z[10]*K+Z[14],J[15]=Z[3]*Y+Z[7]*$+Z[11]*K+Z[15];else Q=Z[0],W=Z[1],G=Z[2],V=Z[3],z=Z[4],H=Z[5],U=Z[6],F=Z[7],q=Z[8],N=Z[9],w=Z[10],k=Z[11],J[0]=Q,J[1]=W,J[2]=G,J[3]=V,J[4]=z,J[5]=H,J[6]=U,J[7]=F,J[8]=q,J[9]=N,J[10]=w,J[11]=k,J[12]=Q*Y+z*$+q*K+Z[12],J[13]=W*Y+H*$+N*K+Z[13],J[14]=G*Y+U*$+w*K+Z[14],J[15]=V*Y+F*$+k*K+Z[15];return J}function Zs0(J,Z,X){var Y=X[0],$=X[1],K=X[2];return J[0]=Z[0]*Y,J[1]=Z[1]*Y,J[2]=Z[2]*Y,J[3]=Z[3]*Y,J[4]=Z[4]*$,J[5]=Z[5]*$,J[6]=Z[6]*$,J[7]=Z[7]*$,J[8]=Z[8]*K,J[9]=Z[9]*K,J[10]=Z[10]*K,J[11]=Z[11]*K,J[12]=Z[12],J[13]=Z[13],J[14]=Z[14],J[15]=Z[15],J}function Xs0(J,Z,X,Y){var $=Y[0],K=Y[1],Q=Y[2],W=Math.hypot($,K,Q),G,V,z,H,U,F,q,N,w,k,B,j,D,v,O,P,S,R,h,_,y,p,A,d;if(W<n)return null;if(W=1/W,$*=W,K*=W,Q*=W,G=Math.sin(X),V=Math.cos(X),z=1-V,H=Z[0],U=Z[1],F=Z[2],q=Z[3],N=Z[4],w=Z[5],k=Z[6],B=Z[7],j=Z[8],D=Z[9],v=Z[10],O=Z[11],P=$*$*z+V,S=K*$*z+Q*G,R=Q*$*z-K*G,h=$*K*z-Q*G,_=K*K*z+V,y=Q*K*z+$*G,p=$*Q*z+K*G,A=K*Q*z-$*G,d=Q*Q*z+V,J[0]=H*P+N*S+j*R,J[1]=U*P+w*S+D*R,J[2]=F*P+k*S+v*R,J[3]=q*P+B*S+O*R,J[4]=H*h+N*_+j*y,J[5]=U*h+w*_+D*y,J[6]=F*h+k*_+v*y,J[7]=q*h+B*_+O*y,J[8]=H*p+N*A+j*d,J[9]=U*p+w*A+D*d,J[10]=F*p+k*A+v*d,J[11]=q*p+B*A+O*d,Z!==J)J[12]=Z[12],J[13]=Z[13],J[14]=Z[14],J[15]=Z[15];return J}function Ys0(J,Z,X){var Y=Math.sin(X),$=Math.cos(X),K=Z[4],Q=Z[5],W=Z[6],G=Z[7],V=Z[8],z=Z[9],H=Z[10],U=Z[11];if(Z!==J)J[0]=Z[0],J[1]=Z[1],J[2]=Z[2],J[3]=Z[3],J[12]=Z[12],J[13]=Z[13],J[14]=Z[14],J[15]=Z[15];return J[4]=K*$+V*Y,J[5]=Q*$+z*Y,J[6]=W*$+H*Y,J[7]=G*$+U*Y,J[8]=V*$-K*Y,J[9]=z*$-Q*Y,J[10]=H*$-W*Y,J[11]=U*$-G*Y,J}function $s0(J,Z,X){var Y=Math.sin(X),$=Math.cos(X),K=Z[0],Q=Z[1],W=Z[2],G=Z[3],V=Z[8],z=Z[9],H=Z[10],U=Z[11];if(Z!==J)J[4]=Z[4],J[5]=Z[5],J[6]=Z[6],J[7]=Z[7],J[12]=Z[12],J[13]=Z[13],J[14]=Z[14],J[15]=Z[15];return J[0]=K*$-V*Y,J[1]=Q*$-z*Y,J[2]=W*$-H*Y,J[3]=G*$-U*Y,J[8]=K*Y+V*$,J[9]=Q*Y+z*$,J[10]=W*Y+H*$,J[11]=G*Y+U*$,J}function Ks0(J,Z,X){var Y=Math.sin(X),$=Math.cos(X),K=Z[0],Q=Z[1],W=Z[2],G=Z[3],V=Z[4],z=Z[5],H=Z[6],U=Z[7];if(Z!==J)J[8]=Z[8],J[9]=Z[9],J[10]=Z[10],J[11]=Z[11],J[12]=Z[12],J[13]=Z[13],J[14]=Z[14],J[15]=Z[15];return J[0]=K*$+V*Y,J[1]=Q*$+z*Y,J[2]=W*$+H*Y,J[3]=G*$+U*Y,J[4]=V*$-K*Y,J[5]=z*$-Q*Y,J[6]=H*$-W*Y,J[7]=U*$-G*Y,J}function Qs0(J,Z){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]=Z[0],J[13]=Z[1],J[14]=Z[2],J[15]=1,J}function Ws0(J,Z){return J[0]=Z[0],J[1]=0,J[2]=0,J[3]=0,J[4]=0,J[5]=Z[1],J[6]=0,J[7]=0,J[8]=0,J[9]=0,J[10]=Z[2],J[11]=0,J[12]=0,J[13]=0,J[14]=0,J[15]=1,J}function Gs0(J,Z,X){var Y=X[0],$=X[1],K=X[2],Q=Math.hypot(Y,$,K),W,G,V;if(Q<n)return null;return Q=1/Q,Y*=Q,$*=Q,K*=Q,W=Math.sin(Z),G=Math.cos(Z),V=1-G,J[0]=Y*Y*V+G,J[1]=$*Y*V+K*W,J[2]=K*Y*V-$*W,J[3]=0,J[4]=Y*$*V-K*W,J[5]=$*$*V+G,J[6]=K*$*V+Y*W,J[7]=0,J[8]=Y*K*V+$*W,J[9]=$*K*V-Y*W,J[10]=K*K*V+G,J[11]=0,J[12]=0,J[13]=0,J[14]=0,J[15]=1,J}function Vs0(J,Z){var X=Math.sin(Z),Y=Math.cos(Z);return J[0]=1,J[1]=0,J[2]=0,J[3]=0,J[4]=0,J[5]=Y,J[6]=X,J[7]=0,J[8]=0,J[9]=-X,J[10]=Y,J[11]=0,J[12]=0,J[13]=0,J[14]=0,J[15]=1,J}function zs0(J,Z){var X=Math.sin(Z),Y=Math.cos(Z);return J[0]=Y,J[1]=0,J[2]=-X,J[3]=0,J[4]=0,J[5]=1,J[6]=0,J[7]=0,J[8]=X,J[9]=0,J[10]=Y,J[11]=0,J[12]=0,J[13]=0,J[14]=0,J[15]=1,J}function Hs0(J,Z){var X=Math.sin(Z),Y=Math.cos(Z);return J[0]=Y,J[1]=X,J[2]=0,J[3]=0,J[4]=-X,J[5]=Y,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 RX0(J,Z,X){var Y=Z[0],$=Z[1],K=Z[2],Q=Z[3],W=Y+Y,G=$+$,V=K+K,z=Y*W,H=Y*G,U=Y*V,F=$*G,q=$*V,N=K*V,w=Q*W,k=Q*G,B=Q*V;return J[0]=1-(F+N),J[1]=H+B,J[2]=U-k,J[3]=0,J[4]=H-B,J[5]=1-(z+N),J[6]=q+w,J[7]=0,J[8]=U+k,J[9]=q-w,J[10]=1-(z+F),J[11]=0,J[12]=X[0],J[13]=X[1],J[14]=X[2],J[15]=1,J}function Us0(J,Z){var X=new w0(3),Y=-Z[0],$=-Z[1],K=-Z[2],Q=Z[3],W=Z[4],G=Z[5],V=Z[6],z=Z[7],H=Y*Y+$*$+K*K+Q*Q;if(H>0)X[0]=(W*Q+z*Y+G*K-V*$)*2/H,X[1]=(G*Q+z*$+V*Y-W*K)*2/H,X[2]=(V*Q+z*K+W*$-G*Y)*2/H;else X[0]=(W*Q+z*Y+G*K-V*$)*2,X[1]=(G*Q+z*$+V*Y-W*K)*2,X[2]=(V*Q+z*K+W*$-G*Y)*2;return RX0(J,Z,X),J}function Fs0(J,Z){return J[0]=Z[12],J[1]=Z[13],J[2]=Z[14],J}function SX0(J,Z){var X=Z[0],Y=Z[1],$=Z[2],K=Z[4],Q=Z[5],W=Z[6],G=Z[8],V=Z[9],z=Z[10];return J[0]=Math.hypot(X,Y,$),J[1]=Math.hypot(K,Q,W),J[2]=Math.hypot(G,V,z),J}function ws0(J,Z){var X=new w0(3);SX0(X,Z);var Y=1/X[0],$=1/X[1],K=1/X[2],Q=Z[0]*Y,W=Z[1]*$,G=Z[2]*K,V=Z[4]*Y,z=Z[5]*$,H=Z[6]*K,U=Z[8]*Y,F=Z[9]*$,q=Z[10]*K,N=Q+z+q,w=0;if(N>0)w=Math.sqrt(N+1)*2,J[3]=0.25*w,J[0]=(H-F)/w,J[1]=(U-G)/w,J[2]=(W-V)/w;else if(Q>z&&Q>q)w=Math.sqrt(1+Q-z-q)*2,J[3]=(H-F)/w,J[0]=0.25*w,J[1]=(W+V)/w,J[2]=(U+G)/w;else if(z>q)w=Math.sqrt(1+z-Q-q)*2,J[3]=(U-G)/w,J[0]=(W+V)/w,J[1]=0.25*w,J[2]=(H+F)/w;else w=Math.sqrt(1+q-Q-z)*2,J[3]=(W-V)/w,J[0]=(U+G)/w,J[1]=(H+F)/w,J[2]=0.25*w;return J}function Ls0(J,Z,X,Y){var $=Z[0],K=Z[1],Q=Z[2],W=Z[3],G=$+$,V=K+K,z=Q+Q,H=$*G,U=$*V,F=$*z,q=K*V,N=K*z,w=Q*z,k=W*G,B=W*V,j=W*z,D=Y[0],v=Y[1],O=Y[2];return J[0]=(1-(q+w))*D,J[1]=(U+j)*D,J[2]=(F-B)*D,J[3]=0,J[4]=(U-j)*v,J[5]=(1-(H+w))*v,J[6]=(N+k)*v,J[7]=0,J[8]=(F+B)*O,J[9]=(N-k)*O,J[10]=(1-(H+q))*O,J[11]=0,J[12]=X[0],J[13]=X[1],J[14]=X[2],J[15]=1,J}function qs0(J,Z,X,Y,$){var K=Z[0],Q=Z[1],W=Z[2],G=Z[3],V=K+K,z=Q+Q,H=W+W,U=K*V,F=K*z,q=K*H,N=Q*z,w=Q*H,k=W*H,B=G*V,j=G*z,D=G*H,v=Y[0],O=Y[1],P=Y[2],S=$[0],R=$[1],h=$[2],_=(1-(N+k))*v,y=(F+D)*v,p=(q-j)*v,A=(F-D)*O,d=(1-(U+k))*O,Q0=(w+B)*O,t0=(q+j)*P,U8=(w-B)*P,c1=(1-(U+N))*P;return J[0]=_,J[1]=y,J[2]=p,J[3]=0,J[4]=A,J[5]=d,J[6]=Q0,J[7]=0,J[8]=t0,J[9]=U8,J[10]=c1,J[11]=0,J[12]=X[0]+S-(_*S+A*R+t0*h),J[13]=X[1]+R-(y*S+d*R+U8*h),J[14]=X[2]+h-(p*S+Q0*R+c1*h),J[15]=1,J}function Ms0(J,Z){var X=Z[0],Y=Z[1],$=Z[2],K=Z[3],Q=X+X,W=Y+Y,G=$+$,V=X*Q,z=Y*Q,H=Y*W,U=$*Q,F=$*W,q=$*G,N=K*Q,w=K*W,k=K*G;return J[0]=1-H-q,J[1]=z+k,J[2]=U-w,J[3]=0,J[4]=z-k,J[5]=1-V-q,J[6]=F+N,J[7]=0,J[8]=U+w,J[9]=F-N,J[10]=1-V-H,J[11]=0,J[12]=0,J[13]=0,J[14]=0,J[15]=1,J}function Ns0(J,Z,X,Y,$,K,Q){var W=1/(X-Z),G=1/($-Y),V=1/(K-Q);return J[0]=K*2*W,J[1]=0,J[2]=0,J[3]=0,J[4]=0,J[5]=K*2*G,J[6]=0,J[7]=0,J[8]=(X+Z)*W,J[9]=($+Y)*G,J[10]=(Q+K)*V,J[11]=-1,J[12]=0,J[13]=0,J[14]=Q*K*2*V,J[15]=0,J}function IX0(J,Z,X,Y,$){var K=1/Math.tan(Z/2),Q;if(J[0]=K/X,J[1]=0,J[2]=0,J[3]=0,J[4]=0,J[5]=K,J[6]=0,J[7]=0,J[8]=0,J[9]=0,J[11]=-1,J[12]=0,J[13]=0,J[15]=0,$!=null&&$!==1/0)Q=1/(Y-$),J[10]=($+Y)*Q,J[14]=2*$*Y*Q;else J[10]=-1,J[14]=-2*Y;return J}var ks0=IX0;function Bs0(J,Z,X,Y,$){var K=1/Math.tan(Z/2),Q;if(J[0]=K/X,J[1]=0,J[2]=0,J[3]=0,J[4]=0,J[5]=K,J[6]=0,J[7]=0,J[8]=0,J[9]=0,J[11]=-1,J[12]=0,J[13]=0,J[15]=0,$!=null&&$!==1/0)Q=1/(Y-$),J[10]=$*Q,J[14]=$*Y*Q;else J[10]=-1,J[14]=-Y;return J}function Os0(J,Z,X,Y){var $=Math.tan(Z.upDegrees*Math.PI/180),K=Math.tan(Z.downDegrees*Math.PI/180),Q=Math.tan(Z.leftDegrees*Math.PI/180),W=Math.tan(Z.rightDegrees*Math.PI/180),G=2/(Q+W),V=2/($+K);return J[0]=G,J[1]=0,J[2]=0,J[3]=0,J[4]=0,J[5]=V,J[6]=0,J[7]=0,J[8]=-((Q-W)*G*0.5),J[9]=($-K)*V*0.5,J[10]=Y/(X-Y),J[11]=-1,J[12]=0,J[13]=0,J[14]=Y*X/(X-Y),J[15]=0,J}function hX0(J,Z,X,Y,$,K,Q){var W=1/(Z-X),G=1/(Y-$),V=1/(K-Q);return J[0]=-2*W,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*V,J[11]=0,J[12]=(Z+X)*W,J[13]=($+Y)*G,J[14]=(Q+K)*V,J[15]=1,J}var js0=hX0;function Ds0(J,Z,X,Y,$,K,Q){var W=1/(Z-X),G=1/(Y-$),V=1/(K-Q);return J[0]=-2*W,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]=V,J[11]=0,J[12]=(Z+X)*W,J[13]=($+Y)*G,J[14]=K*V,J[15]=1,J}function Ps0(J,Z,X,Y){var $,K,Q,W,G,V,z,H,U,F,q=Z[0],N=Z[1],w=Z[2],k=Y[0],B=Y[1],j=Y[2],D=X[0],v=X[1],O=X[2];if(Math.abs(q-D)<n&&Math.abs(N-v)<n&&Math.abs(w-O)<n)return CX0(J);if(z=q-D,H=N-v,U=w-O,F=1/Math.hypot(z,H,U),z*=F,H*=F,U*=F,$=B*U-j*H,K=j*z-k*U,Q=k*H-B*z,F=Math.hypot($,K,Q),!F)$=0,K=0,Q=0;else F=1/F,$*=F,K*=F,Q*=F;if(W=H*Q-U*K,G=U*$-z*Q,V=z*K-H*$,F=Math.hypot(W,G,V),!F)W=0,G=0,V=0;else F=1/F,W*=F,G*=F,V*=F;return J[0]=$,J[1]=W,J[2]=z,J[3]=0,J[4]=K,J[5]=G,J[6]=H,J[7]=0,J[8]=Q,J[9]=V,J[10]=U,J[11]=0,J[12]=-($*q+K*N+Q*w),J[13]=-(W*q+G*N+V*w),J[14]=-(z*q+H*N+U*w),J[15]=1,J}function Es0(J,Z,X,Y){var $=Z[0],K=Z[1],Q=Z[2],W=Y[0],G=Y[1],V=Y[2],z=$-X[0],H=K-X[1],U=Q-X[2],F=z*z+H*H+U*U;if(F>0)F=1/Math.sqrt(F),z*=F,H*=F,U*=F;var q=G*U-V*H,N=V*z-W*U,w=W*H-G*z;if(F=q*q+N*N+w*w,F>0)F=1/Math.sqrt(F),q*=F,N*=F,w*=F;return J[0]=q,J[1]=N,J[2]=w,J[3]=0,J[4]=H*w-U*N,J[5]=U*q-z*w,J[6]=z*N-H*q,J[7]=0,J[8]=z,J[9]=H,J[10]=U,J[11]=0,J[12]=$,J[13]=K,J[14]=Q,J[15]=1,J}function vs0(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 xs0(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 Cs0(J,Z,X){return J[0]=Z[0]+X[0],J[1]=Z[1]+X[1],J[2]=Z[2]+X[2],J[3]=Z[3]+X[3],J[4]=Z[4]+X[4],J[5]=Z[5]+X[5],J[6]=Z[6]+X[6],J[7]=Z[7]+X[7],J[8]=Z[8]+X[8],J[9]=Z[9]+X[9],J[10]=Z[10]+X[10],J[11]=Z[11]+X[11],J[12]=Z[12]+X[12],J[13]=Z[13]+X[13],J[14]=Z[14]+X[14],J[15]=Z[15]+X[15],J}function _X0(J,Z,X){return J[0]=Z[0]-X[0],J[1]=Z[1]-X[1],J[2]=Z[2]-X[2],J[3]=Z[3]-X[3],J[4]=Z[4]-X[4],J[5]=Z[5]-X[5],J[6]=Z[6]-X[6],J[7]=Z[7]-X[7],J[8]=Z[8]-X[8],J[9]=Z[9]-X[9],J[10]=Z[10]-X[10],J[11]=Z[11]-X[11],J[12]=Z[12]-X[12],J[13]=Z[13]-X[13],J[14]=Z[14]-X[14],J[15]=Z[15]-X[15],J}function Ts0(J,Z,X){return J[0]=Z[0]*X,J[1]=Z[1]*X,J[2]=Z[2]*X,J[3]=Z[3]*X,J[4]=Z[4]*X,J[5]=Z[5]*X,J[6]=Z[6]*X,J[7]=Z[7]*X,J[8]=Z[8]*X,J[9]=Z[9]*X,J[10]=Z[10]*X,J[11]=Z[11]*X,J[12]=Z[12]*X,J[13]=Z[13]*X,J[14]=Z[14]*X,J[15]=Z[15]*X,J}function Rs0(J,Z,X,Y){return J[0]=Z[0]+X[0]*Y,J[1]=Z[1]+X[1]*Y,J[2]=Z[2]+X[2]*Y,J[3]=Z[3]+X[3]*Y,J[4]=Z[4]+X[4]*Y,J[5]=Z[5]+X[5]*Y,J[6]=Z[6]+X[6]*Y,J[7]=Z[7]+X[7]*Y,J[8]=Z[8]+X[8]*Y,J[9]=Z[9]+X[9]*Y,J[10]=Z[10]+X[10]*Y,J[11]=Z[11]+X[11]*Y,J[12]=Z[12]+X[12]*Y,J[13]=Z[13]+X[13]*Y,J[14]=Z[14]+X[14]*Y,J[15]=Z[15]+X[15]*Y,J}function Ss0(J,Z){return J[0]===Z[0]&&J[1]===Z[1]&&J[2]===Z[2]&&J[3]===Z[3]&&J[4]===Z[4]&&J[5]===Z[5]&&J[6]===Z[6]&&J[7]===Z[7]&&J[8]===Z[8]&&J[9]===Z[9]&&J[10]===Z[10]&&J[11]===Z[11]&&J[12]===Z[12]&&J[13]===Z[13]&&J[14]===Z[14]&&J[15]===Z[15]}function Is0(J,Z){var X=J[0],Y=J[1],$=J[2],K=J[3],Q=J[4],W=J[5],G=J[6],V=J[7],z=J[8],H=J[9],U=J[10],F=J[11],q=J[12],N=J[13],w=J[14],k=J[15],B=Z[0],j=Z[1],D=Z[2],v=Z[3],O=Z[4],P=Z[5],S=Z[6],R=Z[7],h=Z[8],_=Z[9],y=Z[10],p=Z[11],A=Z[12],d=Z[13],Q0=Z[14],t0=Z[15];return Math.abs(X-B)<=n*Math.max(1,Math.abs(X),Math.abs(B))&&Math.abs(Y-j)<=n*Math.max(1,Math.abs(Y),Math.abs(j))&&Math.abs($-D)<=n*Math.max(1,Math.abs($),Math.abs(D))&&Math.abs(K-v)<=n*Math.max(1,Math.abs(K),Math.abs(v))&&Math.abs(Q-O)<=n*Math.max(1,Math.abs(Q),Math.abs(O))&&Math.abs(W-P)<=n*Math.max(1,Math.abs(W),Math.abs(P))&&Math.abs(G-S)<=n*Math.max(1,Math.abs(G),Math.abs(S))&&Math.abs(V-R)<=n*Math.max(1,Math.abs(V),Math.abs(R))&&Math.abs(z-h)<=n*Math.max(1,Math.abs(z),Math.abs(h))&&Math.abs(H-_)<=n*Math.max(1,Math.abs(H),Math.abs(_))&&Math.abs(U-y)<=n*Math.max(1,Math.abs(U),Math.abs(y))&&Math.abs(F-p)<=n*Math.max(1,Math.abs(F),Math.abs(p))&&Math.abs(q-A)<=n*Math.max(1,Math.abs(q),Math.abs(A))&&Math.abs(N-d)<=n*Math.max(1,Math.abs(N),Math.abs(d))&&Math.abs(w-Q0)<=n*Math.max(1,Math.abs(w),Math.abs(Q0))&&Math.abs(k-t0)<=n*Math.max(1,Math.abs(k),Math.abs(t0))}var hs0=TX0,_s0=_X0;var I0={};p1(I0,{str:()=>Rr0,squaredLength:()=>VY0,sqrLen:()=>fr0,sqlerp:()=>ur0,slerp:()=>NH,setAxisAngle:()=>ZY0,setAxes:()=>dr0,set:()=>_r0,scale:()=>QY0,rotationTo:()=>lr0,rotateZ:()=>Dr0,rotateY:()=>jr0,rotateX:()=>Or0,random:()=>vr0,pow:()=>Er0,normalize:()=>pE,multiply:()=>XY0,mul:()=>yr0,ln:()=>$Y0,lerp:()=>gr0,length:()=>GY0,len:()=>mr0,invert:()=>xr0,identity:()=>Nr0,getAxisAngle:()=>kr0,getAngle:()=>Br0,fromValues:()=>Ir0,fromMat3:()=>KY0,fromEuler:()=>Tr0,exp:()=>YY0,exactEquals:()=>cr0,equals:()=>pr0,dot:()=>WY0,create:()=>cE,copy:()=>hr0,conjugate:()=>Cr0,clone:()=>Sr0,calculateW:()=>Pr0,add:()=>Ar0});var U0={};p1(U0,{zero:()=>Kr0,transformQuat:()=>Jr0,transformMat4:()=>ts0,transformMat3:()=>es0,subtract:()=>yX0,sub:()=>Vr0,str:()=>Qr0,squaredLength:()=>pX0,squaredDistance:()=>cX0,sqrLen:()=>wr0,sqrDist:()=>Fr0,set:()=>gs0,scaleAndAdd:()=>bs0,scale:()=>ds0,round:()=>us0,rotateZ:()=>Yr0,rotateY:()=>Xr0,rotateX:()=>Zr0,random:()=>rs0,normalize:()=>mE,negate:()=>ns0,multiply:()=>gX0,mul:()=>zr0,min:()=>ps0,max:()=>ls0,lerp:()=>as0,length:()=>AX0,len:()=>fE,inverse:()=>is0,hermite:()=>os0,fromValues:()=>qH,forEach:()=>Lr0,floor:()=>cs0,exactEquals:()=>Wr0,equals:()=>Gr0,dot:()=>MH,divide:()=>mX0,div:()=>Hr0,distance:()=>fX0,dist:()=>Ur0,cross:()=>lQ,create:()=>LH,copy:()=>ys0,clone:()=>As0,ceil:()=>fs0,bezier:()=>ss0,angle:()=>$r0,add:()=>ms0});function LH(){var J=new w0(3);if(w0!=Float32Array)J[0]=0,J[1]=0,J[2]=0;return J}function As0(J){var Z=new w0(3);return Z[0]=J[0],Z[1]=J[1],Z[2]=J[2],Z}function AX0(J){var Z=J[0],X=J[1],Y=J[2];return Math.hypot(Z,X,Y)}function qH(J,Z,X){var Y=new w0(3);return Y[0]=J,Y[1]=Z,Y[2]=X,Y}function ys0(J,Z){return J[0]=Z[0],J[1]=Z[1],J[2]=Z[2],J}function gs0(J,Z,X,Y){return J[0]=Z,J[1]=X,J[2]=Y,J}function ms0(J,Z,X){return J[0]=Z[0]+X[0],J[1]=Z[1]+X[1],J[2]=Z[2]+X[2],J}function yX0(J,Z,X){return J[0]=Z[0]-X[0],J[1]=Z[1]-X[1],J[2]=Z[2]-X[2],J}function gX0(J,Z,X){return J[0]=Z[0]*X[0],J[1]=Z[1]*X[1],J[2]=Z[2]*X[2],J}function mX0(J,Z,X){return J[0]=Z[0]/X[0],J[1]=Z[1]/X[1],J[2]=Z[2]/X[2],J}function fs0(J,Z){return J[0]=Math.ceil(Z[0]),J[1]=Math.ceil(Z[1]),J[2]=Math.ceil(Z[2]),J}function cs0(J,Z){return J[0]=Math.floor(Z[0]),J[1]=Math.floor(Z[1]),J[2]=Math.floor(Z[2]),J}function ps0(J,Z,X){return J[0]=Math.min(Z[0],X[0]),J[1]=Math.min(Z[1],X[1]),J[2]=Math.min(Z[2],X[2]),J}function ls0(J,Z,X){return J[0]=Math.max(Z[0],X[0]),J[1]=Math.max(Z[1],X[1]),J[2]=Math.max(Z[2],X[2]),J}function us0(J,Z){return J[0]=Math.round(Z[0]),J[1]=Math.round(Z[1]),J[2]=Math.round(Z[2]),J}function ds0(J,Z,X){return J[0]=Z[0]*X,J[1]=Z[1]*X,J[2]=Z[2]*X,J}function bs0(J,Z,X,Y){return J[0]=Z[0]+X[0]*Y,J[1]=Z[1]+X[1]*Y,J[2]=Z[2]+X[2]*Y,J}function fX0(J,Z){var X=Z[0]-J[0],Y=Z[1]-J[1],$=Z[2]-J[2];return Math.hypot(X,Y,$)}function cX0(J,Z){var X=Z[0]-J[0],Y=Z[1]-J[1],$=Z[2]-J[2];return X*X+Y*Y+$*$}function pX0(J){var Z=J[0],X=J[1],Y=J[2];return Z*Z+X*X+Y*Y}function ns0(J,Z){return J[0]=-Z[0],J[1]=-Z[1],J[2]=-Z[2],J}function is0(J,Z){return J[0]=1/Z[0],J[1]=1/Z[1],J[2]=1/Z[2],J}function mE(J,Z){var X=Z[0],Y=Z[1],$=Z[2],K=X*X+Y*Y+$*$;if(K>0)K=1/Math.sqrt(K);return J[0]=Z[0]*K,J[1]=Z[1]*K,J[2]=Z[2]*K,J}function MH(J,Z){return J[0]*Z[0]+J[1]*Z[1]+J[2]*Z[2]}function lQ(J,Z,X){var Y=Z[0],$=Z[1],K=Z[2],Q=X[0],W=X[1],G=X[2];return J[0]=$*G-K*W,J[1]=K*Q-Y*G,J[2]=Y*W-$*Q,J}function as0(J,Z,X,Y){var $=Z[0],K=Z[1],Q=Z[2];return J[0]=$+Y*(X[0]-$),J[1]=K+Y*(X[1]-K),J[2]=Q+Y*(X[2]-Q),J}function os0(J,Z,X,Y,$,K){var Q=K*K,W=Q*(2*K-3)+1,G=Q*(K-2)+K,V=Q*(K-1),z=Q*(3-2*K);return J[0]=Z[0]*W+X[0]*G+Y[0]*V+$[0]*z,J[1]=Z[1]*W+X[1]*G+Y[1]*V+$[1]*z,J[2]=Z[2]*W+X[2]*G+Y[2]*V+$[2]*z,J}function ss0(J,Z,X,Y,$,K){var Q=1-K,W=Q*Q,G=K*K,V=W*Q,z=3*K*W,H=3*G*Q,U=G*K;return J[0]=Z[0]*V+X[0]*z+Y[0]*H+$[0]*U,J[1]=Z[1]*V+X[1]*z+Y[1]*H+$[1]*U,J[2]=Z[2]*V+X[2]*z+Y[2]*H+$[2]*U,J}function rs0(J,Z){Z=Z||1;var X=H9()*2*Math.PI,Y=H9()*2-1,$=Math.sqrt(1-Y*Y)*Z;return J[0]=Math.cos(X)*$,J[1]=Math.sin(X)*$,J[2]=Y*Z,J}function ts0(J,Z,X){var Y=Z[0],$=Z[1],K=Z[2],Q=X[3]*Y+X[7]*$+X[11]*K+X[15];return Q=Q||1,J[0]=(X[0]*Y+X[4]*$+X[8]*K+X[12])/Q,J[1]=(X[1]*Y+X[5]*$+X[9]*K+X[13])/Q,J[2]=(X[2]*Y+X[6]*$+X[10]*K+X[14])/Q,J}function es0(J,Z,X){var Y=Z[0],$=Z[1],K=Z[2];return J[0]=Y*X[0]+$*X[3]+K*X[6],J[1]=Y*X[1]+$*X[4]+K*X[7],J[2]=Y*X[2]+$*X[5]+K*X[8],J}function Jr0(J,Z,X){var Y=X[0],$=X[1],K=X[2],Q=X[3],W=Z[0],G=Z[1],V=Z[2],z=$*V-K*G,H=K*W-Y*V,U=Y*G-$*W,F=$*U-K*H,q=K*z-Y*U,N=Y*H-$*z,w=Q*2;return z*=w,H*=w,U*=w,F*=2,q*=2,N*=2,J[0]=W+z+F,J[1]=G+H+q,J[2]=V+U+N,J}function Zr0(J,Z,X,Y){var $=[],K=[];return $[0]=Z[0]-X[0],$[1]=Z[1]-X[1],$[2]=Z[2]-X[2],K[0]=$[0],K[1]=$[1]*Math.cos(Y)-$[2]*Math.sin(Y),K[2]=$[1]*Math.sin(Y)+$[2]*Math.cos(Y),J[0]=K[0]+X[0],J[1]=K[1]+X[1],J[2]=K[2]+X[2],J}function Xr0(J,Z,X,Y){var $=[],K=[];return $[0]=Z[0]-X[0],$[1]=Z[1]-X[1],$[2]=Z[2]-X[2],K[0]=$[2]*Math.sin(Y)+$[0]*Math.cos(Y),K[1]=$[1],K[2]=$[2]*Math.cos(Y)-$[0]*Math.sin(Y),J[0]=K[0]+X[0],J[1]=K[1]+X[1],J[2]=K[2]+X[2],J}function Yr0(J,Z,X,Y){var $=[],K=[];return $[0]=Z[0]-X[0],$[1]=Z[1]-X[1],$[2]=Z[2]-X[2],K[0]=$[0]*Math.cos(Y)-$[1]*Math.sin(Y),K[1]=$[0]*Math.sin(Y)+$[1]*Math.cos(Y),K[2]=$[2],J[0]=K[0]+X[0],J[1]=K[1]+X[1],J[2]=K[2]+X[2],J}function $r0(J,Z){var X=J[0],Y=J[1],$=J[2],K=Z[0],Q=Z[1],W=Z[2],G=Math.sqrt(X*X+Y*Y+$*$),V=Math.sqrt(K*K+Q*Q+W*W),z=G*V,H=z&&MH(J,Z)/z;return Math.acos(Math.min(Math.max(H,-1),1))}function Kr0(J){return J[0]=0,J[1]=0,J[2]=0,J}function Qr0(J){return"vec3("+J[0]+", "+J[1]+", "+J[2]+")"}function Wr0(J,Z){return J[0]===Z[0]&&J[1]===Z[1]&&J[2]===Z[2]}function Gr0(J,Z){var X=J[0],Y=J[1],$=J[2],K=Z[0],Q=Z[1],W=Z[2];return Math.abs(X-K)<=n*Math.max(1,Math.abs(X),Math.abs(K))&&Math.abs(Y-Q)<=n*Math.max(1,Math.abs(Y),Math.abs(Q))&&Math.abs($-W)<=n*Math.max(1,Math.abs($),Math.abs(W))}var Vr0=yX0,zr0=gX0,Hr0=mX0,Ur0=fX0,Fr0=cX0,fE=AX0,wr0=pX0,Lr0=function(){var J=LH();return function(Z,X,Y,$,K,Q){var W,G;if(!X)X=3;if(!Y)Y=0;if($)G=Math.min($*X+Y,Z.length);else G=Z.length;for(W=Y;W<G;W+=X)J[0]=Z[W],J[1]=Z[W+1],J[2]=Z[W+2],K(J,J,Q),Z[W]=J[0],Z[W+1]=J[1],Z[W+2]=J[2];return Z}}();function qr0(){var J=new w0(4);if(w0!=Float32Array)J[0]=0,J[1]=0,J[2]=0,J[3]=0;return J}function lX0(J){var Z=new w0(4);return Z[0]=J[0],Z[1]=J[1],Z[2]=J[2],Z[3]=J[3],Z}function uX0(J,Z,X,Y){var $=new w0(4);return $[0]=J,$[1]=Z,$[2]=X,$[3]=Y,$}function dX0(J,Z){return J[0]=Z[0],J[1]=Z[1],J[2]=Z[2],J[3]=Z[3],J}function bX0(J,Z,X,Y,$){return J[0]=Z,J[1]=X,J[2]=Y,J[3]=$,J}function nX0(J,Z,X){return J[0]=Z[0]+X[0],J[1]=Z[1]+X[1],J[2]=Z[2]+X[2],J[3]=Z[3]+X[3],J}function iX0(J,Z,X){return J[0]=Z[0]*X,J[1]=Z[1]*X,J[2]=Z[2]*X,J[3]=Z[3]*X,J}function aX0(J){var Z=J[0],X=J[1],Y=J[2],$=J[3];return Math.hypot(Z,X,Y,$)}function oX0(J){var Z=J[0],X=J[1],Y=J[2],$=J[3];return Z*Z+X*X+Y*Y+$*$}function sX0(J,Z){var X=Z[0],Y=Z[1],$=Z[2],K=Z[3],Q=X*X+Y*Y+$*$+K*K;if(Q>0)Q=1/Math.sqrt(Q);return J[0]=X*Q,J[1]=Y*Q,J[2]=$*Q,J[3]=K*Q,J}function rX0(J,Z){return J[0]*Z[0]+J[1]*Z[1]+J[2]*Z[2]+J[3]*Z[3]}function tX0(J,Z,X,Y){var $=Z[0],K=Z[1],Q=Z[2],W=Z[3];return J[0]=$+Y*(X[0]-$),J[1]=K+Y*(X[1]-K),J[2]=Q+Y*(X[2]-Q),J[3]=W+Y*(X[3]-W),J}function eX0(J,Z){return J[0]===Z[0]&&J[1]===Z[1]&&J[2]===Z[2]&&J[3]===Z[3]}function JY0(J,Z){var X=J[0],Y=J[1],$=J[2],K=J[3],Q=Z[0],W=Z[1],G=Z[2],V=Z[3];return Math.abs(X-Q)<=n*Math.max(1,Math.abs(X),Math.abs(Q))&&Math.abs(Y-W)<=n*Math.max(1,Math.abs(Y),Math.abs(W))&&Math.abs($-G)<=n*Math.max(1,Math.abs($),Math.abs(G))&&Math.abs(K-V)<=n*Math.max(1,Math.abs(K),Math.abs(V))}var eE8=function(){var J=qr0();return function(Z,X,Y,$,K,Q){var W,G;if(!X)X=4;if(!Y)Y=0;if($)G=Math.min($*X+Y,Z.length);else G=Z.length;for(W=Y;W<G;W+=X)J[0]=Z[W],J[1]=Z[W+1],J[2]=Z[W+2],J[3]=Z[W+3],K(J,J,Q),Z[W]=J[0],Z[W+1]=J[1],Z[W+2]=J[2],Z[W+3]=J[3];return Z}}();function cE(){var J=new w0(4);if(w0!=Float32Array)J[0]=0,J[1]=0,J[2]=0;return J[3]=1,J}function Nr0(J){return J[0]=0,J[1]=0,J[2]=0,J[3]=1,J}function ZY0(J,Z,X){X=X*0.5;var Y=Math.sin(X);return J[0]=Y*Z[0],J[1]=Y*Z[1],J[2]=Y*Z[2],J[3]=Math.cos(X),J}function kr0(J,Z){var X=Math.acos(Z[3])*2,Y=Math.sin(X/2);if(Y>n)J[0]=Z[0]/Y,J[1]=Z[1]/Y,J[2]=Z[2]/Y;else J[0]=1,J[1]=0,J[2]=0;return X}function Br0(J,Z){var X=WY0(J,Z);return Math.acos(2*X*X-1)}function XY0(J,Z,X){var Y=Z[0],$=Z[1],K=Z[2],Q=Z[3],W=X[0],G=X[1],V=X[2],z=X[3];return J[0]=Y*z+Q*W+$*V-K*G,J[1]=$*z+Q*G+K*W-Y*V,J[2]=K*z+Q*V+Y*G-$*W,J[3]=Q*z-Y*W-$*G-K*V,J}function Or0(J,Z,X){X*=0.5;var Y=Z[0],$=Z[1],K=Z[2],Q=Z[3],W=Math.sin(X),G=Math.cos(X);return J[0]=Y*G+Q*W,J[1]=$*G+K*W,J[2]=K*G-$*W,J[3]=Q*G-Y*W,J}function jr0(J,Z,X){X*=0.5;var Y=Z[0],$=Z[1],K=Z[2],Q=Z[3],W=Math.sin(X),G=Math.cos(X);return J[0]=Y*G-K*W,J[1]=$*G+Q*W,J[2]=K*G+Y*W,J[3]=Q*G-$*W,J}function Dr0(J,Z,X){X*=0.5;var Y=Z[0],$=Z[1],K=Z[2],Q=Z[3],W=Math.sin(X),G=Math.cos(X);return J[0]=Y*G+$*W,J[1]=$*G-Y*W,J[2]=K*G+Q*W,J[3]=Q*G-K*W,J}function Pr0(J,Z){var X=Z[0],Y=Z[1],$=Z[2];return J[0]=X,J[1]=Y,J[2]=$,J[3]=Math.sqrt(Math.abs(1-X*X-Y*Y-$*$)),J}function YY0(J,Z){var X=Z[0],Y=Z[1],$=Z[2],K=Z[3],Q=Math.sqrt(X*X+Y*Y+$*$),W=Math.exp(K),G=Q>0?W*Math.sin(Q)/Q:0;return J[0]=X*G,J[1]=Y*G,J[2]=$*G,J[3]=W*Math.cos(Q),J}function $Y0(J,Z){var X=Z[0],Y=Z[1],$=Z[2],K=Z[3],Q=Math.sqrt(X*X+Y*Y+$*$),W=Q>0?Math.atan2(Q,K)/Q:0;return J[0]=X*W,J[1]=Y*W,J[2]=$*W,J[3]=0.5*Math.log(X*X+Y*Y+$*$+K*K),J}function Er0(J,Z,X){return $Y0(J,Z),QY0(J,J,X),YY0(J,J),J}function NH(J,Z,X,Y){var $=Z[0],K=Z[1],Q=Z[2],W=Z[3],G=X[0],V=X[1],z=X[2],H=X[3],U,F,q,N,w;if(F=$*G+K*V+Q*z+W*H,F<0)F=-F,G=-G,V=-V,z=-z,H=-H;if(1-F>n)U=Math.acos(F),q=Math.sin(U),N=Math.sin((1-Y)*U)/q,w=Math.sin(Y*U)/q;else N=1-Y,w=Y;return J[0]=N*$+w*G,J[1]=N*K+w*V,J[2]=N*Q+w*z,J[3]=N*W+w*H,J}function vr0(J){var Z=H9(),X=H9(),Y=H9(),$=Math.sqrt(1-Z),K=Math.sqrt(Z);return J[0]=$*Math.sin(2*Math.PI*X),J[1]=$*Math.cos(2*Math.PI*X),J[2]=K*Math.sin(2*Math.PI*Y),J[3]=K*Math.cos(2*Math.PI*Y),J}function xr0(J,Z){var X=Z[0],Y=Z[1],$=Z[2],K=Z[3],Q=X*X+Y*Y+$*$+K*K,W=Q?1/Q:0;return J[0]=-X*W,J[1]=-Y*W,J[2]=-$*W,J[3]=K*W,J}function Cr0(J,Z){return J[0]=-Z[0],J[1]=-Z[1],J[2]=-Z[2],J[3]=Z[3],J}function KY0(J,Z){var X=Z[0]+Z[4]+Z[8],Y;if(X>0)Y=Math.sqrt(X+1),J[3]=0.5*Y,Y=0.5/Y,J[0]=(Z[5]-Z[7])*Y,J[1]=(Z[6]-Z[2])*Y,J[2]=(Z[1]-Z[3])*Y;else{var $=0;if(Z[4]>Z[0])$=1;if(Z[8]>Z[$*3+$])$=2;var K=($+1)%3,Q=($+2)%3;Y=Math.sqrt(Z[$*3+$]-Z[K*3+K]-Z[Q*3+Q]+1),J[$]=0.5*Y,Y=0.5/Y,J[3]=(Z[K*3+Q]-Z[Q*3+K])*Y,J[K]=(Z[K*3+$]+Z[$*3+K])*Y,J[Q]=(Z[Q*3+$]+Z[$*3+Q])*Y}return J}function Tr0(J,Z,X,Y){var $=0.5*Math.PI/180;Z*=$,X*=$,Y*=$;var K=Math.sin(Z),Q=Math.cos(Z),W=Math.sin(X),G=Math.cos(X),V=Math.sin(Y),z=Math.cos(Y);return J[0]=K*G*z-Q*W*V,J[1]=Q*W*z+K*G*V,J[2]=Q*G*V-K*W*z,J[3]=Q*G*z+K*W*V,J}function Rr0(J){return"quat("+J[0]+", "+J[1]+", "+J[2]+", "+J[3]+")"}var Sr0=lX0,Ir0=uX0,hr0=dX0,_r0=bX0,Ar0=nX0,yr0=XY0,QY0=iX0,WY0=rX0,gr0=tX0,GY0=aX0,mr0=GY0,VY0=oX0,fr0=VY0,pE=sX0,cr0=eX0,pr0=JY0,lr0=function(){var J=LH(),Z=qH(1,0,0),X=qH(0,1,0);return function(Y,$,K){var Q=MH($,K);if(Q<-0.999999){if(lQ(J,Z,$),fE(J)<0.000001)lQ(J,X,$);return mE(J,J),ZY0(Y,J,Math.PI),Y}else if(Q>0.999999)return Y[0]=0,Y[1]=0,Y[2]=0,Y[3]=1,Y;else return lQ(J,$,K),Y[0]=J[0],Y[1]=J[1],Y[2]=J[2],Y[3]=1+Q,pE(Y,Y)}}(),ur0=function(){var J=cE(),Z=cE();return function(X,Y,$,K,Q,W){return NH(J,Y,Q,W),NH(Z,$,K,W),NH(X,J,Z,2*W*(1-W)),X}}(),dr0=function(){var J=gE();return function(Z,X,Y,$){return J[0]=Y[0],J[3]=Y[1],J[6]=Y[2],J[1]=$[0],J[4]=$[1],J[7]=$[2],J[2]=-X[0],J[5]=-X[1],J[8]=-X[2],pE(Z,KY0(Z,J))}}();var N0={};p1(N0,{zero:()=>qt0,transformMat4:()=>Ft0,transformMat3:()=>Ut0,transformMat2d:()=>Ht0,transformMat2:()=>zt0,subtract:()=>HY0,sub:()=>Ot0,str:()=>Mt0,squaredLength:()=>MY0,squaredDistance:()=>LY0,sqrLen:()=>vt0,sqrDist:()=>Et0,set:()=>ar0,scaleAndAdd:()=>Xt0,scale:()=>Zt0,round:()=>Jt0,rotate:()=>wt0,random:()=>Vt0,normalize:()=>Kt0,negate:()=>Yt0,multiply:()=>UY0,mul:()=>jt0,min:()=>tr0,max:()=>er0,lerp:()=>Gt0,length:()=>qY0,len:()=>Bt0,inverse:()=>$t0,fromValues:()=>nr0,forEach:()=>xt0,floor:()=>rr0,exactEquals:()=>Nt0,equals:()=>kt0,dot:()=>Qt0,divide:()=>FY0,div:()=>Dt0,distance:()=>wY0,dist:()=>Pt0,cross:()=>Wt0,create:()=>zY0,copy:()=>ir0,clone:()=>br0,ceil:()=>sr0,angle:()=>Lt0,add:()=>or0});function zY0(){var J=new w0(2);if(w0!=Float32Array)J[0]=0,J[1]=0;return J}function br0(J){var Z=new w0(2);return Z[0]=J[0],Z[1]=J[1],Z}function nr0(J,Z){var X=new w0(2);return X[0]=J,X[1]=Z,X}function ir0(J,Z){return J[0]=Z[0],J[1]=Z[1],J}function ar0(J,Z,X){return J[0]=Z,J[1]=X,J}function or0(J,Z,X){return J[0]=Z[0]+X[0],J[1]=Z[1]+X[1],J}function HY0(J,Z,X){return J[0]=Z[0]-X[0],J[1]=Z[1]-X[1],J}function UY0(J,Z,X){return J[0]=Z[0]*X[0],J[1]=Z[1]*X[1],J}function FY0(J,Z,X){return J[0]=Z[0]/X[0],J[1]=Z[1]/X[1],J}function sr0(J,Z){return J[0]=Math.ceil(Z[0]),J[1]=Math.ceil(Z[1]),J}function rr0(J,Z){return J[0]=Math.floor(Z[0]),J[1]=Math.floor(Z[1]),J}function tr0(J,Z,X){return J[0]=Math.min(Z[0],X[0]),J[1]=Math.min(Z[1],X[1]),J}function er0(J,Z,X){return J[0]=Math.max(Z[0],X[0]),J[1]=Math.max(Z[1],X[1]),J}function Jt0(J,Z){return J[0]=Math.round(Z[0]),J[1]=Math.round(Z[1]),J}function Zt0(J,Z,X){return J[0]=Z[0]*X,J[1]=Z[1]*X,J}function Xt0(J,Z,X,Y){return J[0]=Z[0]+X[0]*Y,J[1]=Z[1]+X[1]*Y,J}function wY0(J,Z){var X=Z[0]-J[0],Y=Z[1]-J[1];return Math.hypot(X,Y)}function LY0(J,Z){var X=Z[0]-J[0],Y=Z[1]-J[1];return X*X+Y*Y}function qY0(J){var Z=J[0],X=J[1];return Math.hypot(Z,X)}function MY0(J){var Z=J[0],X=J[1];return Z*Z+X*X}function Yt0(J,Z){return J[0]=-Z[0],J[1]=-Z[1],J}function $t0(J,Z){return J[0]=1/Z[0],J[1]=1/Z[1],J}function Kt0(J,Z){var X=Z[0],Y=Z[1],$=X*X+Y*Y;if($>0)$=1/Math.sqrt($);return J[0]=Z[0]*$,J[1]=Z[1]*$,J}function Qt0(J,Z){return J[0]*Z[0]+J[1]*Z[1]}function Wt0(J,Z,X){var Y=Z[0]*X[1]-Z[1]*X[0];return J[0]=J[1]=0,J[2]=Y,J}function Gt0(J,Z,X,Y){var $=Z[0],K=Z[1];return J[0]=$+Y*(X[0]-$),J[1]=K+Y*(X[1]-K),J}function Vt0(J,Z){Z=Z||1;var X=H9()*2*Math.PI;return J[0]=Math.cos(X)*Z,J[1]=Math.sin(X)*Z,J}function zt0(J,Z,X){var Y=Z[0],$=Z[1];return J[0]=X[0]*Y+X[2]*$,J[1]=X[1]*Y+X[3]*$,J}function Ht0(J,Z,X){var Y=Z[0],$=Z[1];return J[0]=X[0]*Y+X[2]*$+X[4],J[1]=X[1]*Y+X[3]*$+X[5],J}function Ut0(J,Z,X){var Y=Z[0],$=Z[1];return J[0]=X[0]*Y+X[3]*$+X[6],J[1]=X[1]*Y+X[4]*$+X[7],J}function Ft0(J,Z,X){var Y=Z[0],$=Z[1];return J[0]=X[0]*Y+X[4]*$+X[12],J[1]=X[1]*Y+X[5]*$+X[13],J}function wt0(J,Z,X,Y){var $=Z[0]-X[0],K=Z[1]-X[1],Q=Math.sin(Y),W=Math.cos(Y);return J[0]=$*W-K*Q+X[0],J[1]=$*Q+K*W+X[1],J}function Lt0(J,Z){var X=J[0],Y=J[1],$=Z[0],K=Z[1],Q=Math.sqrt(X*X+Y*Y)*Math.sqrt($*$+K*K),W=Q&&(X*$+Y*K)/Q;return Math.acos(Math.min(Math.max(W,-1),1))}function qt0(J){return J[0]=0,J[1]=0,J}function Mt0(J){return"vec2("+J[0]+", "+J[1]+")"}function Nt0(J,Z){return J[0]===Z[0]&&J[1]===Z[1]}function kt0(J,Z){var X=J[0],Y=J[1],$=Z[0],K=Z[1];return Math.abs(X-$)<=n*Math.max(1,Math.abs(X),Math.abs($))&&Math.abs(Y-K)<=n*Math.max(1,Math.abs(Y),Math.abs(K))}var Bt0=qY0,Ot0=HY0,jt0=UY0,Dt0=FY0,Pt0=wY0,Et0=LY0,vt0=MY0,xt0=function(){var J=zY0();return function(Z,X,Y,$,K,Q){var W,G;if(!X)X=2;if(!Y)Y=0;if($)G=Math.min($*X+Y,Z.length);else G=Z.length;for(W=Y;W<G;W+=X)J[0]=Z[W],J[1]=Z[W+1],K(J,J,Q),Z[W]=J[0],Z[W+1]=J[1];return Z}}();class cZ extends Float32Array{constructor(J,Z,X,Y){super([J,Z,X,Y])}get determinant(){return O8.determinant(this)}get frobeniusNorm(){return O8.frob(this)}static create(){let J=new cZ(0,0,0,0);return O8.identity(J),J}static fromRotation(J){let Z=cZ.create();return O8.fromRotation(Z,J),Z}static fromScaling(J){let Z=cZ.create();return O8.fromScaling(Z,J),Z}add(J){return O8.add(this,this,J),this}adjoint(){return O8.adjoint(this,this),this}clone(){return new cZ(this[0],this[1],this[2],this[3])}copy(J){return O8.copy(this,J),this}equals(J){return O8.equals(this,J)}exactEquals(J){return O8.exactEquals(this,J)}identity(){return O8.identity(this),this}invert(){return O8.invert(this,this),this}multiply(J){return O8.mul(this,this,J),this}multiplyScalar(J){return O8.multiplyScalar(this,this,J),this}rotate(J){return O8.rotate(this,this,J),this}subtract(J){return O8.sub(this,this,J),this}toString(){return`[${this[0]},${this[1]}][${this[2]},${this[3]}]`}transpose(){return O8.transpose(this,this),this}}class U9 extends Float32Array{constructor(J,Z,X,Y,$,K,Q,W,G){super([J,Z,X,Y,$,K,Q,W,G])}get determinant(){return o0.determinant(this)}get frobeniusNorm(){return o0.frob(this)}static create(){let J=new U9(0,0,0,0,0,0,0,0,0);return o0.identity(J),J}static fromMatrix4(J){let Z=U9.create();return o0.fromMat4(Z,J),Z}static fromQuaternion(J){let Z=U9.create();return o0.fromQuat(Z,J),Z}static fromRotation(J){let Z=U9.create();return o0.fromRotation(Z,J),Z}static fromScaling(J){let Z=U9.create();return o0.fromScaling(Z,J),Z}static fromTranslation(J){let Z=U9.create();return o0.fromTranslation(Z,J),Z}add(J){return o0.add(this,this,J),this}adjoint(){return o0.adjoint(this,this),this}clone(){return new U9(this[0],this[1],this[2],this[3],this[4],this[5],this[6],this[7],this[8])}copy(J){return o0.copy(this,J),this}equals(J){return o0.equals(this,J)}exactEquals(J){return o0.exactEquals(this,J)}identity(){return o0.identity(this),this}invert(){return o0.invert(this,this),this}multiply(J){return o0.mul(this,this,J),this}multiplyScalar(J){return o0.multiplyScalar(this,this,J),this}transformVector(J){return J.transformMatrix3(this)}projection(J,Z){return o0.projection(this,J,Z),this}rotate(J){return o0.rotate(this,this,J),this}subtract(J){return o0.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 o0.transpose(this,this),this}}class D6 extends Float32Array{constructor(J,Z,X,Y,$,K,Q,W,G,V,z,H,U,F,q,N){super([J,Z,X,Y,$,K,Q,W,G,V,z,H,U,F,q,N])}get determinant(){return z0.determinant(this)}get frobeniusNorm(){return z0.frob(this)}static create(){let J=new D6(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);return z0.identity(J),J}static fromQuaternion(J){let Z=D6.create();return z0.fromQuat(Z,J),Z}static fromRotation(J,Z){let X=D6.create();return z0.fromRotation(X,J,Z),X}static fromRotationTranslation(J,Z){let X=D6.create();return z0.fromRotationTranslation(X,J,Z),X}static fromRotationTranslationScale(J,Z,X){let Y=D6.create();return z0.fromRotationTranslationScale(Y,J,Z,X),Y}static fromRotationTranslationScaleOrigin(J,Z,X,Y){let $=D6.create();return z0.fromRotationTranslationScaleOrigin($,J,Z,X,Y),$}static fromScaling(J){let Z=D6.create();return z0.fromScaling(Z,J),Z}static fromTranslation(J){let Z=D6.create();return z0.fromTranslation(Z,J),Z}static fromXRotation(J){let Z=D6.create();return z0.fromXRotation(Z,J),Z}static fromYRotation(J){let Z=D6.create();return z0.fromYRotation(Z,J),Z}static fromZRotation(J){let Z=D6.create();return z0.fromZRotation(Z,J),Z}add(J){return z0.add(this,this,J),this}adjoint(){return z0.adjoint(this,this),this}clone(){return new D6(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 z0.copy(this,J),this}equals(J){return z0.equals(this,J)}exactEquals(J){return z0.exactEquals(this,J)}frustrum(J,Z,X,Y,$,K){return z0.frustum(this,J,Z,X,Y,$,K),this}identity(){return z0.identity(this),this}invert(){return z0.invert(this,this),this}lookAt(J,Z,X){return z0.lookAt(this,J,Z,X),this}multiply(J){return z0.mul(this,this,J),this}multiplyScalar(J){return z0.multiplyScalar(this,this,J),this}orthographic(J,Z,X,Y,$,K){return z0.ortho(this,J,Z,X,Y,$,K),this}perspective(J,Z,X,Y){return z0.perspective(this,J,Z,X,Y),this}rotate(J,Z){return z0.rotate(this,this,J,Z),this}rotateX(J){return z0.rotateX(this,this,J),this}rotateY(J){return z0.rotateY(this,this,J),this}rotateZ(J){return z0.rotateZ(this,this,J),this}scale(J){return z0.scale(this,this,J),this}subtract(J){return z0.sub(this,this,J),this}targetTo(J,Z,X){return z0.targetTo(this,J,Z,X),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 z0.translate(this,this,J),this}transpose(){return z0.transpose(this,this),this}}class TY extends Float32Array{constructor(J,Z,X,Y){super([J,Z,X,Y])}get length(){return I0.length(this)}get squaredLength(){return I0.squaredLength(this)}get magnitude(){return I0.length(this)}get squaredMagnitude(){return I0.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,Z,X){let Y=I0.fromEuler(new Float32Array(4),J,Z,X);return new TY(Y[0],Y[1],Y[2],Y[3])}static fromQuaternionLike(J){return new TY(J.x,J.y,J.z,J.w)}clone(){return new TY(this.x,this.y,this.z,this.w)}conjugate(){return I0.conjugate(this,this),this}copy(J){return I0.copy(this,J),this}dot(J){return I0.dot(this,J)}exponential(){return I0.exp(this,this),this}equals(J){return I0.equals(this,J)}exactEquals(J){return I0.exactEquals(this,J)}getAngle(J){return I0.getAngle(this,J)}identity(){return I0.identity(this),this}invert(){return I0.invert(this,this),this}lerp(J,Z){return I0.lerp(this,this,J,Z),this}logarithm(){return I0.ln(this,this),this}multiply(J){return I0.multiply(this,this,J),this}transformVector(J){return J.transformQuaternion(this)}normalize(){return I0.normalize(this,this),this}power(J){return I0.pow(this,this,J),this}randomize(){return I0.random(this),this}rotateX(J){return I0.rotateX(this,this,J),this}rotateY(J){return I0.rotateY(this,this,J),this}rotateZ(J){return I0.rotateZ(this,this,J),this}scale(J){return I0.scale(this,this,J),this}setAxisAngle(J,Z){return I0.setAxisAngle(this,J,Z),this}slerp(J,Z){return I0.slerp(this,this,J,Z),this}toString(){return`${this.x},${this.y},${this.z},${this.w}`}}class uQ extends Float32Array{constructor(J,Z){super([J,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}static create(){return new uQ(0,0)}add(J){return N0.add(this,this,J),this}angle(J){return N0.angle(this,J)}ceil(){return N0.ceil(this,this),this}clone(){return new uQ(this.x,this.y)}copy(J){return N0.copy(this,J),this}distance(J){return N0.distance(this,J)}divide(J){return N0.divide(this,this,J),this}dot(J){return N0.dot(this,J)}equals(J){return N0.equals(this,J)}exactEquals(J){return N0.exactEquals(this,J)}floor(){return N0.floor(this,this),this}invert(){return N0.inverse(this,this),this}lerp(J,Z){return N0.lerp(this,this,J,Z),this}max(J){return N0.max(this,this,J),this}min(J){return N0.min(this,this,J),this}multiply(J){return N0.mul(this,this,J),this}negate(){return N0.negate(this,this),this}normalize(){return N0.normalize(this,this),this}randomize(J){return N0.random(this,J),this}rotate(J,Z){return N0.rotate(this,this,J,Z),this}round(){return N0.round(this,this),this}scale(J){return N0.scale(this,this,J),this}scaleAndAdd(J,Z){return N0.scaleAndAdd(this,this,J,Z),this}subtract(J){return N0.sub(this,this,J),this}toString(){return`${this.x},${this.y}`}transformMatrix2(J){return N0.transformMat2(this,this,J),this}transformMatrix3(J){return N0.transformMat3(this,this,J),this}transformMatrix4(J){return N0.transformMat4(this,this,J),this}zero(){return N0.zero(this),this}}class RY extends Float32Array{constructor(J,Z,X){super([J,Z,X])}get length(){return U0.length(this)}get squaredLength(){return U0.squaredLength(this)}get magnitude(){return U0.length(this)}get squaredMagnitude(){return U0.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 RY(0,0,0)}static fromVector3Like(J){return new RY(J.x,J.y,J.z)}add(J){return U0.add(this,this,J),this}ceil(){return U0.ceil(this,this),this}clone(){return new RY(this.x,this.y,this.z)}copy(J){return U0.copy(this,J),this}cross(J){return U0.cross(this,this,J),this}distance(J){return U0.distance(this,J)}divide(J){return U0.div(this,this,J),this}dot(J){return U0.dot(this,J)}equals(J){return U0.equals(this,J)}exactEquals(J){return U0.exactEquals(this,J)}floor(){return U0.floor(this,this),this}invert(){return U0.inverse(this,this),this}lerp(J,Z){return U0.lerp(this,this,J,Z),this}max(J){return U0.max(this,this,J),this}min(J){return U0.min(this,this,J),this}multiply(J){return U0.mul(this,this,J),this}negate(){return U0.negate(this,this),this}normalize(){return U0.normalize(this,this),this}randomize(J){return U0.random(this,J),this}rotateX(J,Z){return U0.rotateX(this,this,J,Z),this}rotateY(J,Z){return U0.rotateY(this,this,J,Z),this}rotateZ(J,Z){return U0.rotateZ(this,this,J,Z),this}round(){return U0.round(this,this),this}scale(J){return U0.scale(this,this,J),this}scaleAndAdd(J,Z){return U0.scaleAndAdd(this,this,J,Z),this}subtract(J){return U0.sub(this,this,J),this}toString(){return`${this.x},${this.y},${this.z}`}transformMatrix3(J){return U0.transformMat3(this,this,J),this}transformMatrix4(J){return U0.transformMat4(this,this,J),this}transformQuaternion(J){return U0.transformQuat(this,this,J),this}zero(){return U0.zero(this),this}}var h0=function(J,Z,X,Y){function $(K){return K instanceof X?K:new X(function(Q){Q(K)})}return new(X||(X=Promise))(function(K,Q){function W(z){try{V(Y.next(z))}catch(H){Q(H)}}function G(z){try{V(Y.throw(z))}catch(H){Q(H)}}function V(z){z.done?K(z.value):$(z.value).then(W,G)}V((Y=Y.apply(J,Z||[])).next())})},S0=function(J,Z){var X={label:0,sent:function(){if(K[0]&1)throw K[1];return K[1]},trys:[],ops:[]},Y,$,K,Q=Object.create((typeof Iterator==="function"?Iterator:Object).prototype);return Q.next=W(0),Q.throw=W(1),Q.return=W(2),typeof Symbol==="function"&&(Q[Symbol.iterator]=function(){return this}),Q;function W(V){return function(z){return G([V,z])}}function G(V){if(Y)throw new TypeError("Generator is already executing.");while(Q&&(Q=0,V[0]&&(X=0)),X)try{if(Y=1,$&&(K=V[0]&2?$.return:V[0]?$.throw||((K=$.return)&&K.call($),0):$.next)&&!(K=K.call($,V[1])).done)return K;if($=0,K)V=[V[0]&2,K.value];switch(V[0]){case 0:case 1:K=V;break;case 4:return X.label++,{value:V[1],done:!1};case 5:X.label++,$=V[1],V=[0];continue;case 7:V=X.ops.pop(),X.trys.pop();continue;default:if((K=X.trys,!(K=K.length>0&&K[K.length-1]))&&(V[0]===6||V[0]===2)){X=0;continue}if(V[0]===3&&(!K||V[1]>K[0]&&V[1]<K[3])){X.label=V[1];break}if(V[0]===6&&X.label<K[1]){X.label=K[1],K=V;break}if(K&&X.label<K[2]){X.label=K[2],X.ops.push(V);break}if(K[2])X.ops.pop();X.trys.pop();continue}V=Z.call(J,X)}catch(z){V=[6,z],$=0}finally{Y=K=0}if(V[0]&5)throw V[1];return{value:V[0]?V[1]:void 0,done:!0}}},d6=function(J,Z){var X=typeof Symbol==="function"&&J[Symbol.iterator];if(!X)return J;var Y=X.call(J),$,K=[],Q;try{while((Z===void 0||Z-- >0)&&!($=Y.next()).done)K.push($.value)}catch(W){Q={error:W}}finally{try{if($&&!$.done&&(X=Y.return))X.call(Y)}finally{if(Q)throw Q.error}}return K},f1=function(J,Z,X){if(X||arguments.length===2){for(var Y=0,$=Z.length,K;Y<$;Y++)if(K||!(Y in Z)){if(!K)K=Array.prototype.slice.call(Z,0,Y);K[Y]=Z[Y]}}return J.concat(K||Array.prototype.slice.call(Z))},NY0=function(J){var Z=typeof Symbol==="function"&&Symbol.iterator,X=Z&&J[Z],Y=0;if(X)return X.call(J);if(J&&typeof J.length==="number")return{next:function(){if(J&&Y>=J.length)J=void 0;return{value:J&&J[Y++],done:!J}}};throw new TypeError(Z?"Object is not iterable.":"Symbol.iterator is not defined.")},Qv8=function(){function J(Z){if(Z===void 0)Z=J.minComparator;var X=this;this.compare=Z,this.heapArray=[],this._limit=0,this.offer=this.add,this.element=this.peek,this.poll=this.pop,this._invertedCompare=function(Y,$){return X.compare(Y,$).then(function(K){return-1*K})}}return J.getChildrenIndexOf=function(Z){return[Z*2+1,Z*2+2]},J.getParentIndexOf=function(Z){if(Z<=0)return-1;var X=Z%2?1:2;return Math.floor((Z-X)/2)},J.getSiblingIndexOf=function(Z){if(Z<=0)return-1;var X=Z%2?1:-1;return Z+X},J.minComparator=function(Z,X){return h0(this,void 0,void 0,function(){return S0(this,function(Y){if(Z>X)return[2,1];else if(Z<X)return[2,-1];else return[2,0]})})},J.maxComparator=function(Z,X){return h0(this,void 0,void 0,function(){return S0(this,function(Y){if(X>Z)return[2,1];else if(X<Z)return[2,-1];else return[2,0]})})},J.minComparatorNumber=function(Z,X){return h0(this,void 0,void 0,function(){return S0(this,function(Y){return[2,Z-X]})})},J.maxComparatorNumber=function(Z,X){return h0(this,void 0,void 0,function(){return S0(this,function(Y){return[2,X-Z]})})},J.defaultIsEqual=function(Z,X){return h0(this,void 0,void 0,function(){return S0(this,function(Y){return[2,Z===X]})})},J.print=function(Z){function X(z){var H=J.getParentIndexOf(z);return Math.floor(Math.log2(H+1))}function Y(z,H){var U="";for(;H>0;--H)U+=z;return U}var $=0,K=[],Q=X(Z.length-1)+2,W=0;while($<Z.length){var G=X($)+1;if($===0)G=0;var V=String(Z.get($));if(V.length>W)W=V.length;K[G]=K[G]||[],K[G].push(V),$+=1}return K.map(function(z,H){var U=Math.pow(2,Q-H)-1;return Y(" ",Math.floor(U/2)*W)+z.map(function(F){var q=(W-F.length)/2;return Y(" ",Math.ceil(q))+F+Y(" ",Math.floor(q))}).join(Y(" ",U*W))}).join(`
391
+ `),Z.write(K),Z.end();return}Z.setNoDelay(!0),this.emitWithGlobal("WEBSERVER.UPGRADE",{req:J,socket:Z,head:X})};_onError=(J)=>{this.emitWithGlobal("WEBSERVER.ERROR",{error:J})};_onStopped=()=>{this.emitWithGlobal("WEBSERVER.STOPPED",{})}}class TJ extends J0{static instance=new TJ;_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):41024;_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 pa0({noServer:!0}),this._wss.on("connection",this._onConnection),this._wss.on("error",this._onError),this._initWrtc().catch((J)=>{I.error(`Socket._initWrtc(): Error initializing WebRTC: ${J.message}`)}),b6.on("WEBSERVER.UPGRADE",({req:J,socket:Z,head:X})=>this._onUpgrade(J,Z,X))}get isWrtcEnabled(){return this._wrtcWorker&&!this._wrtcWorker.died&&this._wrtcRouter}get wrtcRouter(){return this._wrtcRouter}async createWrtcTransports(){if(!this.isWrtcEnabled)I.fatalError("Socket.createWrtcTransports(): WebRTC not enabled, unable to create transports.");let J={listenIps:[{ip:"0.0.0.0",announcedIp:this._wrtcPublicIpv4},{ip:"::",announcedIp:this._wrtcPublicIpv6}],preferUdp:!0,enableSctp:!0,enableTcp:!1},Z=await this._wrtcRouter.createDirectTransport(),X=await this._wrtcRouter.createWebRtcTransport(J),Y=await this._wrtcRouter.createWebRtcTransport(J);return{directTransport:Z,clientServerTransport:X,serverClientTransport:Y}}async _initWrtc(){if(!this._wrtcPublicIpv4||!this._wrtcPublicIpv6)return I.warning("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 UX0.default.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,Z)=>{new yZ(J,Z)};_onError=(J,Z)=>{this.emitWithGlobal("SOCKET.ERROR",{ws:J,error:Z})};_onUpgrade=(J,Z,X)=>{this._wss.handleUpgrade(J,Z,X,(Y)=>{this._wss.emit("connection",Y,J)})};_onWrtcWorkerDied=(J)=>{I.warning(`Socket._onWrtcWorkerDied(): WebRTC worker unexpectedly died, falling back to Websockets for all players. Internal error: ${J}`),j5.instance.getConnectedPlayers().forEach((Z)=>{Z.connection.closeWrtc()}),this._wrtcRouter?.close(),this._wrtcRouter=null,this._wrtcWorker?.close(),this._wrtcWorker=null}}class yZ extends J0{static _serializedPackets=new WeakMap;_wrtcDirectTransport=null;_wrtcClientServerTransport=null;_wrtcClientServerDataProducers=[];_wrtcClientServerDataConsumers=[];_wrtcServerClientTransport=null;_wrtcServerClientReliableDataProducer=null;_wrtcServerClientUnreliableDataProducer=null;_wrtcServerClientDataConsumers=[];_ws;id;constructor(J,Z){super();if(this.id=km(),this._ws=J,this._ws.binaryType="nodebuffer",this._ws.onmessage=(X)=>this._onMessage(X.data),this._ws.onclose=this._onWsClose,this._ws.onerror=this._onWsError,this.onPacket(c.PacketId.CONNECTION,this._onConnectionPacket),TJ.instance.isWrtcEnabled)this._upgradeToWRTC();b6.emit("CONNECTION.OPENED",{connection:this,req:Z})}static serializePackets(J){for(let $ of J)if(!c.isValidPacket($))I.fatalError(`Invalid packet payload: ${JSON.stringify($)}`);let Z=yZ._serializedPackets.get(J);if(Z)return Z;let X=Xq(J),Y=Buffer.from(X.buffer,X.byteOffset,X.byteLength);return yZ._serializedPackets.set(J,Y),Y}send(J,Z=!0){if(this._ws.readyState!==la0.OPEN)return I.warning("Connection.send(): Connection is not open.");try{let X=yZ.serializePackets(J);if(this._wrtcServerClientTransport?.iceState==="completed")try{(Z?this._wrtcServerClientReliableDataProducer:this._wrtcServerClientUnreliableDataProducer).send(X)}catch{this._ws.send(X)}else this._ws.send(X);this.emitWithGlobal("CONNECTION.PACKETS_SENT",{connection:this,packets:J})}catch(X){I.error(`Connection.send(): Packet send failed. Error: ${X}`)}}close(){try{this.offAll(),this._ws.close()}catch(J){I.error(`Connection.close(): Connection close failed. Error: ${J}`)}}closeWrtc(){this._closeWrtcClientServerTransport(),this._closeWrtcServerClientTransport()}onPacket(J,Z){this.on("CONNECTION.PACKET_RECEIVED",({packet:X})=>{if(X[0]===J)Z(X)})}_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 Z=J[1],X=Z.c,Y=Z.d;if(X){let{i:$,d:K}=X,Q=!1;if($==this._wrtcClientServerTransport?.id)await this._wrtcClientServerTransport.connect({dtlsParameters:K}),Q=!0;if($==this._wrtcServerClientTransport?.id)await this._wrtcServerClientTransport.connect({dtlsParameters:K}),Q=!0;if(Q)this.send([c.createPacket(c.bidirectionalPackets.connectionPacketDefinition,{ca:{i:$}})])}if(Y)for(let $ of Y){let{s:K,l:Q}=$,W=await this._wrtcClientServerTransport.produceData({label:Q,sctpStreamParameters:K}),G=await this._wrtcDirectTransport.consumeData({dataProducerId:W.id});this._wrtcClientServerDataProducers.push(W),this._wrtcClientServerDataConsumers.push(G),G.on("message",(V)=>this._onMessage(V)),this.send([c.createPacket(c.bidirectionalPackets.connectionPacketDefinition,{pa:{i:W.id,l:Q}})])}};_onMessage=(J)=>{try{let Z=this._deserialize(J);this.emitWithGlobal("CONNECTION.PACKET_RECEIVED",{connection:this,packet:Z})}catch(Z){I.error(`Connection._ws.onmessage(): Error: ${Z}`)}};_onWrtcIceStateChange=(J,Z)=>{if(["disconnected","closed"].includes(Z)){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 TJ.instance.createWrtcTransports();if(!J)return!1;let{directTransport:Z,clientServerTransport:X,serverClientTransport:Y}=J;this._wrtcDirectTransport=Z,this._wrtcClientServerTransport=X,this._wrtcClientServerTransport.on("icestatechange",(Q)=>{this._onWrtcIceStateChange(this._wrtcClientServerTransport,Q)}),this._wrtcServerClientTransport=Y,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 $=await this._wrtcServerClientTransport.consumeData({dataProducerId:this._wrtcServerClientReliableDataProducer.id}),K=await this._wrtcServerClientTransport.consumeData({dataProducerId:this._wrtcServerClientUnreliableDataProducer.id});return this._wrtcServerClientDataConsumers.push($,K),this.send([c.createPacket(c.bidirectionalPackets.connectionPacketDefinition,{d:[{i:$.id,pi:$.dataProducerId,l:"scr",s:$.sctpStreamParameters},{i:K.id,pi:K.dataProducerId,l:"scu",s:K.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 Z=Qq(J);if(!Z||typeof Z!=="object"||typeof Z[0]!=="number")I.fatalError(`Connection._deserialize(): Invalid packet format. Packet: ${JSON.stringify(Z)}`);if(!c.isValidPacket(Z))I.fatalError(`Connection._deserialize(): Invalid packet payload. Packet: ${JSON.stringify(Z)}`);return Z}}var FX0;((X)=>{X.PLAYER_CONNECTED="PLAYER_MANAGER.PLAYER_CONNECTED";X.PLAYER_DISCONNECTED="PLAYER_MANAGER.PLAYER_DISCONNECTED"})(FX0||={});class j5{static instance=new j5;_connectionPlayers=new Map;constructor(){b6.on("CONNECTION.OPENED",({connection:J,req:Z})=>{this._onConnectionOpened(J,Z.session)}),b6.on("CONNECTION.CLOSED",({connection:J})=>{this._onConnectionClosed(J)})}getConnectedPlayers(){return Array.from(this._connectionPlayers.values())}getConnectedPlayersByWorld(J){return this.getConnectedPlayers().filter((Z)=>Z.world===J)}getConnectedPlayerByUsername(J){return Array.from(this._connectionPlayers.values()).find((Z)=>{return Z.username.toLowerCase()===J.toLowerCase()})}_onConnectionOpened(J,Z){let X=new vY(J,Z);this._connectionPlayers.set(J,X),b6.emit("PLAYER_MANAGER.PLAYER_CONNECTED",{player:X})}_onConnectionClosed(J){let Z=this._connectionPlayers.get(J);if(Z)Z.disconnect(),this._connectionPlayers.delete(J),b6.emit("PLAYER_MANAGER.PLAYER_DISCONNECTED",{player:Z});else I.warning(`PlayerManager._onConnectionClosed(): Connection ${J.id} but was not in the PlayerManager._connectionPlayers map.`)}}var HH;(($)=>{$.DYNAMIC="dynamic";$.FIXED="fixed";$.KINEMATIC_POSITION="kinematic_position";$.KINEMATIC_VELOCITY="kinematic_velocity"})(HH||={});var xE=0.001,wX0="dynamic";class gZ extends J0{_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??=wX0,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:Z,z:X,w:Y}=this.rotation;return{x:2*(J*X+Y*Z),y:2*(Z*X-Y*J),z:1-2*(J*J+Z*Z)}}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:Z,centerOfMass:X,principalAngularInertia:Y,principalAngularInertiaLocalFrame:$}=J;this._rigidBody?this._rigidBody.setAdditionalMassProperties(Z,X,Y,$,!this._explicitSleep):this._rigidBodyDesc.setAdditionalMassProperties(Z,X,Y,$)}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((Z)=>{if(Z.isSensor)return;Z.setCollisionGroups(J)})}setCollisionGroupsForSensorColliders(J){if(!this._requireNotRemoved("setCollisionGroupsForSensorColliders"))return;this._colliders.forEach((Z)=>{if(!Z.isSensor)return;Z.setCollisionGroups(J)})}setType(J){if(!this._requireNotRemoved("setType"))return;let X={["dynamic"]:B0.RigidBodyType.Dynamic,["fixed"]:B0.RigidBodyType.Fixed,["kinematic_position"]:B0.RigidBodyType.KinematicPositionBased,["kinematic_velocity"]:B0.RigidBodyType.KinematicVelocityBased}[J];if(X===void 0)return I.error(`Invalid RigidBodyType: ${J}`);this._rigidBody?this._rigidBody.setBodyType(X,!this._explicitSleep):this._rigidBodyDesc.status=X,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 I.error("RigidBody.addToSimulation(): Rigid body already exists in the simulation!");this._simulation=J,this._rigidBody=this._simulation.createRawRigidBody(this._rigidBodyDesc),this._colliders.forEach((Z)=>{if(!Z.isSimulated)Z.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,Z){if(!this._requireNotRemoved("applyImpulseAtPoint"))return;if(!this._requireCreated("applyImpulseAtPoint"))return;if(!this._requireDynamic("applyImpulseAtPoint"))return;if(this._isNegligibleVector(J))return;this._rigidBody.applyImpulseAtPoint(J,Z,!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 o6({...J,parentRigidBody:this,simulation:this._simulation}):this._createAndAddPendingChildCollider(J)}createAndAddChildCollidersToSimulation(J){let Z=[];return J.forEach((X)=>{let Y=this.createAndAddChildCollider(X);if(Y)Z.push(Y)}),Z}getCollidersByTag(J){let Z=[];for(let X of this._colliders)if(X.tag===J)Z.push(X);return Z}linkCollider(J){if(!this._requireNotRemoved("linkCollider"))return;if(J.parentRigidBody!==this)return I.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 I.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 I.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(([X,Y])=>{if(X in J)Y(J[X])})}_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 Z=new o6(J);return this._colliders.add(Z),Z}_createAndAddPendingChildColliders(J){let Z=[];return J.forEach((X)=>{let Y=this._createAndAddPendingChildCollider(X);if(Y)Z.push(Y)}),Z}_createRigidBodyDesc(J){let Z=J.type??wX0;return{["dynamic"]:()=>B0.RigidBodyDesc.dynamic(),["fixed"]:()=>B0.RigidBodyDesc.fixed(),["kinematic_position"]:()=>B0.RigidBodyDesc.kinematicPositionBased(),["kinematic_velocity"]:()=>B0.RigidBodyDesc.kinematicVelocityBased()}[Z]()}_requireCreated(J){if(!this._rigidBody||!this._simulation)I.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)I.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)I.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)I.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)I.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)I.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)<xE&&Math.abs(J.y)<xE&&Math.abs(J.z)<xE}}var H8=16,xY=H8-1,LX0=H8**3,ua0=[{neighborOffset:[-1,0,0],generateVertices:(J,Z,X)=>[J+0,Z+0,X+0,J+0,Z+0,X+1,J+0,Z+1,X+0,J+0,Z+1,X+0,J+0,Z+0,X+1,J+0,Z+1,X+1]},{neighborOffset:[1,0,0],generateVertices:(J,Z,X)=>[J+1,Z+0,X+0,J+1,Z+1,X+0,J+1,Z+0,X+1,J+1,Z+1,X+0,J+1,Z+1,X+1,J+1,Z+0,X+1]},{neighborOffset:[0,-1,0],generateVertices:(J,Z,X)=>[J+0,Z+0,X+0,J+1,Z+0,X+0,J+0,Z+0,X+1,J+1,Z+0,X+0,J+1,Z+0,X+1,J+0,Z+0,X+1]},{neighborOffset:[0,1,0],generateVertices:(J,Z,X)=>[J+0,Z+1,X+0,J+0,Z+1,X+1,J+1,Z+1,X+0,J+1,Z+1,X+0,J+0,Z+1,X+1,J+1,Z+1,X+1]},{neighborOffset:[0,0,-1],generateVertices:(J,Z,X)=>[J+0,Z+0,X+0,J+0,Z+1,X+0,J+1,Z+0,X+0,J+0,Z+1,X+0,J+1,Z+1,X+0,J+1,Z+0,X+0]},{neighborOffset:[0,0,1],generateVertices:(J,Z,X)=>[J+0,Z+0,X+1,J+1,Z+0,X+1,J+0,Z+1,X+1,J+0,Z+1,X+1,J+1,Z+0,X+1,J+1,Z+1,X+1]}],CE;((Y)=>{Y.DESPAWN="CHUNK.DESPAWN";Y.SET_BLOCK="CHUNK.SET_BLOCK";Y.SPAWN="CHUNK.SPAWN"})(CE||={});class Y6 extends J0{_blocks;_originCoordinate;_requiresUpdate=!1;_rigidBody;_world;constructor(){super();this._blocks=new Uint8Array(LX0)}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%H8,y:(J/H8|0)%H8,z:J/(H8*H8)|0}}static globalCoordinateToLocalCoordinate(J){return{x:J.x&H8-1,y:J.y&H8-1,z:J.z&H8-1}}static globalCoordinateToOriginCoordinate(J){return{x:J.x&~(H8-1),y:J.y&~(H8-1),z:J.z&~(H8-1)}}static isValidOriginCoordinate(J){return J.x%H8===0&&J.y%H8===0&&J.z%H8===0}spawn(J,Z){if(this.isSpawned){let{x:X,y:Y,z:$}=this.originCoordinate;return I.error(`Chunk.spawn(): Chunk is already spawned at origin ${X}, ${Y}, ${$}!`)}if(!Y6.isValidOriginCoordinate(Z))return I.error(`Chunk.spawn(): Chunk coordinates must be divisible by ${H8}`);this._originCoordinate=Z,this._world=J,this._world.chunkLattice.registerChunk(this),this._requiresUpdate=!0}despawn(){if(!this.isSpawned)return I.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,Z){if(!this._isValidLocalCoordinate(J))return I.error("Chunk.setBlock(): Block local coordinate is out of bounds");if(this._blocks[this._getIndex(J)]===Z)return;if(this._blocks[this._getIndex(J)]=Z,this.isSpawned&&this.isSimulated){this.emitWithWorld(this._world,"CHUNK.SET_BLOCK",{chunk:this,globalCoordinate:this._getGlobalCoordinate(J),localCoordinate:J,blockTypeId:Z});let X=this._getGlobalCoordinate(J),Y=[];if(J.x===0)Y.push({x:-1,y:0,z:0});if(J.y===0)Y.push({x:0,y:-1,z:0});if(J.z===0)Y.push({x:0,y:0,z:-1});if(J.x===xY)Y.push({x:1,y:0,z:0});if(J.y===xY)Y.push({x:0,y:1,z:0});if(J.z===xY)Y.push({x:0,y:0,z:1});for(let $ of Y){let K={x:X.x+$.x,y:X.y+$.y,z:X.z+$.z},Q=Y6.globalCoordinateToOriginCoordinate(K),W=this._world?.chunkLattice.getChunk(Q);if(!W?.hasBlock(Y6.globalCoordinateToLocalCoordinate(K)))continue;W.setRequiresUpdate(!0)}}this._requiresUpdate=!0}setRequiresUpdate(J){this._requiresUpdate=J}update(){if(!this._requiresUpdate)return;if(!this.isSpawned)return I.error("Chunk.update(): Chunk is not spawned and cannot be updated.");let J=!this._rigidBody,Z=this._world.simulation;if(this._removeFromSimulation(),this._rigidBody=new gZ({type:"fixed",position:this._originCoordinate,simulation:this._world.simulation}),this._meshColliders().map(([X,Y])=>{if(!X.isSimulated)X.addToSimulation(Z,this._rigidBody);Z.colliderMap.setColliderBlockType(X,Y)}),this._requiresUpdate=!1,J)this.emitWithWorld(this._world,"CHUNK.SPAWN",{chunk:this})}serialize(){return $0.serializeChunk(this)}_meshColliders(){if(!this._world)return I.error("Chunk._meshColliders(): Chunk is not spawned and cannot be meshed."),[];let J=new Map,Z=[];for(let Y=0;Y<LX0;Y++){if(this._blocks[Y]===0)continue;let $=this._blocks[Y],K=this._world.blockTypeRegistry.getBlockType($),{x:Q,y:W,z:G}=Y6.blockIndexToLocalCoordinate(Y);if(!K.isMeshable){let z=K.createCollider();z.setRelativePosition({x:Q,y:W,z:G}),Z.push([z,K]);continue}let V=J.get(K)??{indices:[],vertices:[]};J.set(K,V);for(let z of ua0){let[H,U,F]=z.neighborOffset,q={x:Q+H,y:W+U,z:G+F},N=this._getGlobalCoordinate(q),w=this._world.chunkLattice.getBlockType(N);if(w&&!w.isLiquid)continue;let k=V.indices.length;V.indices.push(k,k+1,k+2,k+3,k+4,k+5),V.vertices.push(...z.generateVertices(Q,W,G))}}let X=[];return J.forEach((Y,$)=>{if(!Y.indices.length)return;let K=$.createCollider(new Uint32Array(Y.indices),new Float32Array(Y.vertices));X.push([K,$])}),[...Z,...X]}_removeFromSimulation(){if(!this._rigidBody||!this._world)return;this._rigidBody.removeFromSimulation(),this._rigidBody=void 0}_getGlobalCoordinate(J){if(!this.originCoordinate)I.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+H8*(J.y+H8*J.z)}_isValidLocalCoordinate(J){return J.x>=0&&J.x<=xY&&J.y>=0&&J.y<=xY&&J.z>=0&&J.z<=xY}}class xQ{_chunks=new Map;_world;constructor(J){this._world=J}registerChunk(J){if(!J.isSpawned)return I.error("ChunkLattice.registerChunk(): Chunk is not spawned.");if(this.hasChunk(J.originCoordinate)){let{x:Z,y:X,z:Y}=J.originCoordinate;return I.error(`ChunkLattice.registerChunk(): Chunk exists at origin (${Z}, ${X}, ${Y}), despawn the current chunk before registering another at the same origin.`)}if(J.world.id!==this._world.id)return I.error("ChunkLattice.registerChunk(): Chunk world does not match lattice world.");this._chunks.set(this._getChunkKey(J.originCoordinate),J)}unregisterChunk(J){if(!J.isSpawned)return I.error("ChunkLattice.unregisterChunk(): Chunk is not spawned.");if(J.world.id!==this._world.id)return I.error("ChunkLattice.unregisterChunk(): Chunk world does not match lattice world.");this._chunks.delete(this._getChunkKey(J.originCoordinate))}getBlockId(J){let Z=this.getChunk(Y6.globalCoordinateToOriginCoordinate(J));if(!Z)return 0;return Z.getBlockId(Y6.globalCoordinateToLocalCoordinate(J))}getBlockType(J){let Z=this.getBlockId(J);return Z?this._world.blockTypeRegistry.getBlockType(Z):null}getChunk(J){if(!Y6.isValidOriginCoordinate(J)){I.error(`ChunkLattice.getChunk(): Chunk coordinates must be divisible by CHUNK_SIZE (${H8})`);return}return this._chunks.get(this._getChunkKey(J))}getAllChunks(){return Array.from(this._chunks.values())}hasBlock(J){let Z=this.getChunk(Y6.globalCoordinateToOriginCoordinate(J));if(!Z)return!1;return Z.hasBlock(Y6.globalCoordinateToLocalCoordinate(J))}hasChunk(J){return this._chunks.has(this._getChunkKey(J))}setBlock(J,Z){let X=Y6.globalCoordinateToLocalCoordinate(J),Y=Y6.globalCoordinateToOriginCoordinate(J),$=this.getChunk(Y);if(!$)$=new Y6,$.spawn(this._world,Y);$.setBlock(X,Z)}updateChunks(){this._chunks.forEach((J)=>{if(J.requiresUpdate)J.update()})}_getChunkKey(J){return`${J.x},${J.y},${J.z}`}}var qX0={type:"dynamic",softCcdPrediction:1},MX0=0.0025000000000000005,NX0=Math.cos(0.005),UH;((k)=>{k.BLOCK_COLLISION="ENTITY.BLOCK_COLLISION";k.BLOCK_CONTACT_FORCE="ENTITY.BLOCK_CONTACT_FORCE";k.DESPAWN="ENTITY.DESPAWN";k.ENTITY_COLLISION="ENTITY.ENTITY_COLLISION";k.ENTITY_CONTACT_FORCE="ENTITY.ENTITY_CONTACT_FORCE";k.SET_MODEL_ANIMATIONS_PLAYBACK_RATE="ENTITY.SET_MODEL_ANIMATIONS_PLAYBACK_RATE";k.SET_MODEL_HIDDEN_NODES="ENTITY.SET_MODEL_HIDDEN_NODES";k.SET_OPACITY="ENTITY.SET_OPACITY";k.SET_PARENT="ENTITY.SET_PARENT";k.SET_TINT_COLOR="ENTITY.SET_TINT_COLOR";k.SPAWN="ENTITY.SPAWN";k.START_MODEL_LOOPED_ANIMATIONS="ENTITY.START_MODEL_LOOPED_ANIMATIONS";k.START_MODEL_ONESHOT_ANIMATIONS="ENTITY.START_MODEL_ONESHOT_ANIMATIONS";k.STOP_MODEL_ANIMATIONS="ENTITY.STOP_MODEL_ANIMATIONS";k.TICK="ENTITY.TICK";k.UPDATE_POSITION="ENTITY.UPDATE_POSITION";k.UPDATE_ROTATION="ENTITY.UPDATE_ROTATION"})(UH||={});class E8 extends gZ{_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 Z="blockTextureUri"in J,X="modelUri"in J;if(!Z===!X)I.fatalError("Entity.constructor(): Entity data must include a blockTextureUri or modelUri, but not both.");if(Z&&!J.blockHalfExtents)I.fatalError("Entity.constructor(): Block entity must have blockHalfExtents!");if(J.parent&&!J.parent.isSpawned)I.fatalError("Entity.constructor(): Parent entity must be spawned before child entity!");if(J.parent?.modelUri&&J.parentNodeName&&!o1.instance.modelHasNode(J.parent.modelUri,J.parentNodeName))I.fatalError(`Entity.constructor(): Parent node name ${J.parentNodeName} not found in parent model ${J.parent.modelUri}!`);super(J.rigidBodyOptions??qX0);if(Z)this._blockHalfExtents=J.blockHalfExtents,this._blockTextureUri=J.blockTextureUri;if(X)this._modelAnimationsPlaybackRate=J.modelAnimationsPlaybackRate??1,this._modelScale=J.modelScale,this._modelUri=J.modelUri,J.modelHiddenNodes?.forEach((Y)=>this._modelHiddenNodes.add(Y.toLowerCase())),J.modelLoopedAnimations?.forEach((Y)=>this._modelLoopedAnimations.add(Y));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?o1.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,Z,X){if(this.isSpawned)return I.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 o6(o6.optionsFromBlockHalfExtents(this._blockHalfExtents)));if(this._modelUri&&this.numColliders===0)this.addChildColliderToSimulation(new o6(o6.optionsFromModelUri(this._modelUri,this._modelScale)));if(this.colliders.forEach((Y)=>{if(this.hasListeners("ENTITY.BLOCK_COLLISION")||this.hasListeners("ENTITY.ENTITY_COLLISION"))Y.enableCollisionEvents(!0);if(this.hasListeners("ENTITY.BLOCK_CONTACT_FORCE")||this.hasListeners("ENTITY.ENTITY_CONTACT_FORCE"))Y.enableContactForceEvents(!0);if(b1.isDefaultCollisionGroups(Y.collisionGroups))Y.setCollisionGroups({belongsTo:[Y.isSensor?4:2],collidesWith:[65535]})}),this.setPosition(Z),X)this.setRotation(X);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,Z,X);this.colliders.forEach((Y)=>{J.simulation.colliderMap.setColliderEntity(Y,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((Z)=>Z.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,Z,X,Y){if(!this._requireSpawned("setParent"))return;if(J&&!J.isSpawned)return I.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=Z,this.colliders.forEach(($)=>$.setEnabled(!J)),this.setType(!J?this._lastParentlessType:"kinematic_velocity"),this.setPosition(X??{x:0,y:0,z:0}),this.setRotation(Y??{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:Z})}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((Z)=>!this._modelLoopedAnimations.has(Z)))return;J.forEach((Z)=>{this._modelLoopedAnimations.add(Z)}),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((Z)=>{this._modelOneshotAnimations.add(Z)}),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((Z)=>this._modelLoopedAnimations.has(Z))&&!J.some((Z)=>this._modelOneshotAnimations.has(Z)))return;J.forEach((Z)=>{this._modelLoopedAnimations.delete(Z),this._modelOneshotAnimations.delete(Z)}),this.emitWithWorld(this._world,"ENTITY.STOP_MODEL_ANIMATIONS",{entity:this,animations:new Set(J)})}serialize(){return $0.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,Z=this.rotation;if(this._rotationExceedsThreshold(Z,this._lastUpdatedRotation))this._lastUpdatedRotation=Z,this.emitWithWorld(this._world,"ENTITY.UPDATE_ROTATION",{entity:this,rotation:Z});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)I.error(`Entity._requireSpawned(): Entity ${this._name} is not spawned, cannot invoke ${J}()!`);return this.isSpawned}_positionExceedsThreshold(J,Z){let X=J.x-Z.x,Y=J.y-Z.y,$=J.z-Z.z;return X*X+Y*Y+$*$>MX0}_rotationExceedsThreshold(J,Z){return Math.abs(J.x*Z.x+J.y*Z.y+J.z*Z.z+J.w*Z.w)<NX0}}class CQ extends SJ{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 AY({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 I.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:(Z,X)=>{if(!J.isSpawned)return;if(this._groundContactCount+=X?1:-1,!this._groundContactCount)J.startModelOneshotAnimations(this.jumpOneshotAnimations);else J.stopModelAnimations(this.jumpOneshotAnimations);if(!(Z instanceof E8)||!Z.isKinematic)return;if(X&&this.sticksToPlatforms)this._platform=Z;else if(Z===this._platform&&!X)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,Z,X,Y){if(!J.isSpawned||!J.world)return;if(super.tickWithPlayerInput(J,Z,X,Y),J.parent)return;let{w:$,a:K,s:Q,d:W,sp:G,sh:V,ml:z}=Z,{yaw:H}=X,U=J.linearVelocity,F={x:0,y:0,z:0},q=V;if(this.isGrounded&&($||K||Q||W)){if(q)J.stopModelAnimations(Array.from(J.modelLoopedAnimations).filter((B)=>!this.runLoopedAnimations.includes(B))),J.startModelLoopedAnimations(this.runLoopedAnimations),this._stepAudio?.setPlaybackRate(0.75);else J.stopModelAnimations(Array.from(J.modelLoopedAnimations).filter((B)=>!this.walkLoopedAnimations.includes(B))),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((B)=>!this.idleLoopedAnimations.includes(B))),J.startModelLoopedAnimations(this.idleLoopedAnimations);if(z)J.startModelOneshotAnimations(this.interactOneshotAnimations),Z.ml=!this.autoCancelMouseLeftClick;if(q&&this.canRun(this)||!q&&this.canWalk(this)){let B=q?this.runVelocity:this.walkVelocity;if($)F.x-=B*Math.sin(H),F.z-=B*Math.cos(H);if(Q)F.x+=B*Math.sin(H),F.z+=B*Math.cos(H);if(K)F.x-=B*Math.cos(H),F.z+=B*Math.sin(H);if(W)F.x+=B*Math.cos(H),F.z-=B*Math.sin(H);let j=Math.sqrt(F.x*F.x+F.z*F.z);if(j>B){let D=B/j;F.x*=D,F.z*=D}}if(G&&this.canJump(this)){if(this.isGrounded&&U.y>-0.001&&U.y<=3)F.y=this.jumpVelocity}let N=this._platform?this._platform.linearVelocity:{x:0,y:0,z:0},w={x:F.x-U.x+N.x,y:F.y+N.y,z:F.z-U.z+N.z};if(!(this.runVelocity>0&&Math.abs(U.x)>this.runVelocity||this.jumpVelocity>0&&Math.abs(U.y)>this.jumpVelocity||this.runVelocity>0&&Math.abs(U.z)>this.runVelocity)||this.isOnPlatform){if(Object.values(w).some((B)=>B!==0)){let B=J.mass;J.applyImpulse({x:w.x*B,y:w.y*B,z:w.z*B})}}if(H!==void 0){let B=H/2;J.setRotation({x:0,y:Math.fround(Math.sin(B)),z:0,w:Math.fround(Math.cos(B))})}}}var TE;((W)=>{W.LOAD="SCENE_UI.LOAD";W.SET_ATTACHED_TO_ENTITY="SCENE_UI.SET_ATTACHED_TO_ENTITY";W.SET_OFFSET="SCENE_UI.SET_OFFSET";W.SET_POSITION="SCENE_UI.SET_POSITION";W.SET_STATE="SCENE_UI.SET_STATE";W.SET_VIEW_DISTANCE="SCENE_UI.SET_VIEW_DISTANCE";W.UNLOAD="SCENE_UI.UNLOAD"})(TE||={});class TQ extends J0{_id;_attachedToEntity;_offset;_position;_state={};_templateId;_viewDistance;_world;constructor(J){if(!!J.attachedToEntity===!!J.position)I.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 I.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 I.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 $0.serializeSceneUI(this)}}class RJ extends E8{player;nametagSceneUI;constructor(J){super(J);if(this.player=J.player,this.nametagSceneUI=new TQ({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 CQ)}spawn(J,Z,X){super.spawn(J,Z,X),this.nametagSceneUI.load(J),this.player.on("PLAYER.CHAT_MESSAGE_SEND",({message:Y})=>{this.nametagSceneUI.setState({chat:Y})})}tick(J){if(!this.isSpawned||!this.world||!this.controller)return;let{input:Z,camera:X}=this.player;this.controller.tickWithPlayerInput(this,Z,X.orientation,J),super.tick(J)}}class SQ{_entities=new Map;_nextEntityId=1;_world;constructor(J){this._world=J}get world(){return this._world}registerEntity(J){if(J.id!==void 0)I.fatalError(`EntityManager.registerEntity(): Entity ${J.name} is already assigned the id ${J.id}!`);let Z=this._nextEntityId;return this._entities.set(Z,J),this._nextEntityId++,Z}unregisterEntity(J){if(J.id===void 0)return I.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((Z)=>{if(Z instanceof RJ)J.push(Z)}),J}getPlayerEntitiesByPlayer(J){let Z=[];return this._entities.forEach((X)=>{if(X instanceof RJ&&X.player===J)Z.push(X)}),Z}getEntity(J){return this._entities.get(J)}getEntitiesByTag(J){let Z=[];return this._entities.forEach((X)=>{if(X.tag===J)Z.push(X)}),Z}getEntitiesByTagSubstring(J){let Z=[];return this._entities.forEach((X)=>{if(X.tag?.includes(J))Z.push(X)}),Z}getEntityChildren(J){let Z=[];return this._entities.forEach((X)=>{if(X.parent===J)Z.push(X)}),Z}tickEntities(J){this._entities.forEach((Z)=>{Z.tick(J)})}checkAndEmitUpdates(){this._entities.forEach((J)=>{if(!J.isSpawned)return;J.checkAndEmitUpdates()})}}class IQ{_lights=new Map;_nextLightId=1;_world;constructor(J){this._world=J}get world(){return this._world}despawnEntityAttachedLights(J){this.getAllEntityAttachedLights(J).forEach((Z)=>{Z.despawn()})}getAllLights(){return Array.from(this._lights.values())}getAllEntityAttachedLights(J){return this.getAllLights().filter((Z)=>Z.attachedToEntity===J)}registerLight(J){if(J.id!==void 0)return J.id;let Z=this._nextLightId;return this._lights.set(Z,J),this._nextLightId++,Z}unregisterLight(J){if(J.id===void 0)return;this._lights.delete(J.id)}}var kX0;((X)=>{X[X.POINTLIGHT=0]="POINTLIGHT";X[X.SPOTLIGHT=1]="SPOTLIGHT"})(kX0||={});var RE;((U)=>{U.DESPAWN="LIGHT.DESPAWN";U.SET_ANGLE="LIGHT.SET_ANGLE";U.SET_ATTACHED_TO_ENTITY="LIGHT.SET_ATTACHED_TO_ENTITY";U.SET_COLOR="LIGHT.SET_COLOR";U.SET_DISTANCE="LIGHT.SET_DISTANCE";U.SET_INTENSITY="LIGHT.SET_INTENSITY";U.SET_OFFSET="LIGHT.SET_OFFSET";U.SET_PENUMBRA="LIGHT.SET_PENUMBRA";U.SET_POSITION="LIGHT.SET_POSITION";U.SET_TRACKED_ENTITY="LIGHT.SET_TRACKED_ENTITY";U.SET_TRACKED_POSITION="LIGHT.SET_TRACKED_POSITION";U.SPAWN="LIGHT.SPAWN"})(RE||={});class SE extends J0{_id;_angle;_attachedToEntity;_color;_distance;_intensity;_offset;_penumbra;_position;_trackedEntity;_trackedPosition;_type;_world;constructor(J){if(!!J.attachedToEntity===!!J.position)I.fatalError("Either attachedToEntity or position must be set, but not both");super();I.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 I.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 I.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 I.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 $0.serializeLight(this)}}var BX0;((Y)=>{Y[Y.FIRST_PERSON=0]="FIRST_PERSON";Y[Y.THIRD_PERSON=1]="THIRD_PERSON";Y[Y.SPECTATOR=2]="SPECTATOR"})(BX0||={});var IE;((F)=>{F.LOOK_AT_ENTITY="PLAYER_CAMERA.LOOK_AT_ENTITY";F.LOOK_AT_POSITION="PLAYER_CAMERA.LOOK_AT_POSITION";F.SET_ATTACHED_TO_ENTITY="PLAYER_CAMERA.SET_ATTACHED_TO_ENTITY";F.SET_ATTACHED_TO_POSITION="PLAYER_CAMERA.SET_ATTACHED_TO_POSITION";F.SET_FILM_OFFSET="PLAYER_CAMERA.SET_FILM_OFFSET";F.SET_FORWARD_OFFSET="PLAYER_CAMERA.SET_FORWARD_OFFSET";F.SET_FOV="PLAYER_CAMERA.SET_FOV";F.SET_MODEL_HIDDEN_NODES="PLAYER_CAMERA.SET_MODEL_HIDDEN_NODES";F.SET_MODE="PLAYER_CAMERA.SET_MODE";F.SET_OFFSET="PLAYER_CAMERA.SET_OFFSET";F.SET_TRACKED_ENTITY="PLAYER_CAMERA.SET_TRACKED_ENTITY";F.SET_TRACKED_POSITION="PLAYER_CAMERA.SET_TRACKED_POSITION";F.SET_ZOOM="PLAYER_CAMERA.SET_ZOOM"})(IE||={});class hQ extends J0{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 I.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((Z)=>Z.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 $0.serializePlayerCamera(this)}_requirePlayerWorld(){if(!this.player.world)I.error(`PlayerCamera._requirePlayerWorld(): Player ${this.player.id} is not in a world!`);return!!this.player.world}}var FH;(($)=>{$.DATA="PLAYER_UI.DATA";$.LOAD="PLAYER_UI.LOAD";$.LOCK_POINTER="PLAYER_UI.LOCK_POINTER";$.SEND_DATA="PLAYER_UI.SEND_DATA"})(FH||={});class _Q extends J0{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 AQ{_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,Z){if(!this._requireSimulatedCollider(J))return;this.setColliderHandleBlockType(J.rawCollider.handle,Z)}setColliderCollisionCallback(J,Z){if(!this._requireSimulatedCollider(J))return;this.setColliderHandleCollisionCallback(J.rawCollider.handle,Z)}setColliderEntity(J,Z){if(!this._requireSimulatedCollider(J))return;this.setColliderHandleEntity(J.rawCollider.handle,Z)}setColliderHandleBlockType(J,Z){this._colliderHandleBlockTypeMap.set(J,Z),this._cleanupBlockTypeColliderHandles.delete(J),this._pendingCleanupBlockTypeColliderHandles.delete(J)}setColliderHandleCollisionCallback(J,Z){this._colliderHandleCollisionCallbackMap.set(J,Z),this._cleanupCollisionCallbackColliderHandles.delete(J),this._pendingCleanupCollisionCallbackColliderHandles.delete(J)}setColliderHandleEntity(J,Z){this._colliderHandleEntityMap.set(J,Z),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,Z])=>{for(let X of J.keys())Z.add(X);J.clear()})}_requireSimulatedCollider(J){if(!J.rawCollider)I.error("ColliderMap._requireSimulatedCollider(): Collider is not in the simulation.");return!!J.rawCollider}}var da0={x:0,y:-32,z:0},hE=60,_E;(($)=>{$.STEP_START="SIMULATION.STEP_START";$.STEP_END="SIMULATION.STEP_END";$.DEBUG_RAYCAST="SIMULATION.DEBUG_RAYCAST";$.DEBUG_RENDER="SIMULATION.DEBUG_RENDER"})(_E||={});class yQ extends J0{_colliderMap=new AQ;_debugRaycastingEnabled=!1;_debugRenderingEnabled=!1;_rapierEventQueue;_rapierSimulation;_world;constructor(J,Z=hE,X=da0){super();this._rapierEventQueue=new B0.EventQueue(!0),this._rapierSimulation=new B0.World(X),this._rapierSimulation.timestep=Math.fround(1/Z),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,Z,X,Y={}){let $=new B0.Ray(J,Z),K=this._rapierSimulation.castRay($,X,Y.ignoresSensors??!0,Y.filterFlags,Y.filterGroups,Y.filterExcludeCollider,Y.filterExcludeRigidBody,Y.filterPredicate);if(this._debugRaycastingEnabled)this.emitWithWorld(this._world,"SIMULATION.DEBUG_RAYCAST",{simulation:this,origin:J,direction:Z,length:X,hit:!!K});if(!K)return null;let Q=$.pointAt(K.timeOfImpact),W=K.timeOfImpact,G=K.collider,V=this._colliderMap.getColliderHandleBlockType(G.handle);if(V)return{hitBlock:pZ.fromGlobalCoordinate({x:Math.floor(Q.x-($.dir.x<0?0.0001:-0.0001)),y:Math.floor(Q.y-($.dir.y<0?0.0001:-0.0001)),z:Math.floor(Q.z-($.dir.z<0?0.0001:-0.0001))},V),hitPoint:Q,hitDistance:W};let z=this._colliderMap.getColliderHandleEntity(G.handle);if(z)return{hitEntity:z,hitPoint:Q,hitDistance:W};return null}createRawCollider(J,Z){return this._rapierSimulation.createCollider(J,Z)}createRawRigidBody(J){return this._rapierSimulation.createRigidBody(J)}enableDebugRaycasting(J){this._debugRaycastingEnabled=J}enableDebugRendering(J){this._debugRenderingEnabled=J}getContactManifolds(J,Z){let X=[];return this._rapierSimulation.narrowPhase.contactPair(J,Z,(Y,$)=>{if(Y.numContacts()===0)return;let K=Y.normal(),Q=[];for(let W=0;W<Y.numSolverContacts();W++)Q.push(Y.solverContactPoint(W));X.push({contactPoints:Q,localNormalA:!$?Y.localNormal1():Y.localNormal2(),localNormalB:!$?Y.localNormal2():Y.localNormal1(),normal:!$?K:{x:-K.x,y:-K.y,z:-K.z}})}),X}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 Z=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()-Z}),this._debugRenderingEnabled)this.emitWithWorld(this._world,"SIMULATION.DEBUG_RENDER",{simulation:this,...this._rapierSimulation.debugRender()})};_onCollisionEvent=(J,Z,X)=>{let[Y,$]=this._getCollisionObjects(J,Z);if(!Y||!$)return;let K=(Q,W)=>{if(Q instanceof s1&&W instanceof E8&&Q.hasListeners("BLOCK_TYPE.ENTITY_COLLISION"))Q.emit("BLOCK_TYPE.ENTITY_COLLISION",{blockType:Q,entity:W,started:X,colliderHandleA:J,colliderHandleB:Z});else if(Q instanceof E8&&W instanceof s1&&Q.hasListeners("ENTITY.BLOCK_COLLISION"))Q.emit("ENTITY.BLOCK_COLLISION",{entity:Q,blockType:W,started:X,colliderHandleA:J,colliderHandleB:Z});else if(Q instanceof E8&&W instanceof E8&&Q.hasListeners("ENTITY.ENTITY_COLLISION"))Q.emit("ENTITY.ENTITY_COLLISION",{entity:Q,otherEntity:W,started:X,colliderHandleA:J,colliderHandleB:Z});else if(typeof Q==="function"&&(W instanceof E8||W instanceof s1))Q(W,X,J,Z)};K(Y,$),K($,Y)};_onContactForceEvent=(J)=>{let[Z,X]=this._getCollisionObjects(J.collider1(),J.collider2());if(!Z||typeof Z==="function"||!X||typeof X==="function")return;let Y={totalForce:J.totalForce(),totalForceMagnitude:J.totalForceMagnitude(),maxForceDirection:J.maxForceDirection(),maxForceMagnitude:J.maxForceMagnitude()},$=(K,Q)=>{if(K instanceof s1&&Q instanceof E8&&K.hasListeners("BLOCK_TYPE.ENTITY_CONTACT_FORCE"))K.emit("BLOCK_TYPE.ENTITY_CONTACT_FORCE",{blockType:K,entity:Q,contactForceData:Y});else if(K instanceof E8&&Q instanceof s1&&K.hasListeners("ENTITY.BLOCK_CONTACT_FORCE"))K.emit("ENTITY.BLOCK_CONTACT_FORCE",{entity:K,blockType:Q,contactForceData:Y});else if(K instanceof E8&&Q instanceof E8&&K.hasListeners("ENTITY.ENTITY_CONTACT_FORCE"))K.emit("ENTITY.ENTITY_CONTACT_FORCE",{entity:K,otherEntity:Q,contactForceData:Y})};$(Z,X),$(X,Z)};_getCollisionObjects(J,Z){let X=this._colliderMap.getColliderHandleBlockType(J)??this._colliderMap.getColliderHandleCollisionCallback(J)??this._colliderMap.getColliderHandleEntity(J),Y=this._colliderMap.getColliderHandleBlockType(Z)??this._colliderMap.getColliderHandleCollisionCallback(Z)??this._colliderMap.getColliderHandleEntity(Z);return[X,Y]}}class wH{_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=[],Z=[],X=this._world.loop.currentTick;this._queuedPerPlayerSynchronizations.forEach((U,F)=>{this._createOrGetSynchronizedPlayerReliablePackets(F,J).push(...U)});let Y=Object.values(this._queuedEntitySynchronizations);if(Y.length>0){let[U,F]=Y.reduce(([q,N],w)=>{for(let k in w)if(k!=="i"&&k!=="p"&&k!=="r")return q.push(w),[q,N];return N.push(w),[q,N]},[[],[]]);if(F.length>0){let q=c.createPacket(c.outboundPackets.entitiesPacketDefinition,F,X);Z.push(q)}if(U.length>0){let q=c.createPacket(c.outboundPackets.entitiesPacketDefinition,U,X);J.push(q),this._synchronizedPlayerReliablePackets.forEach((N)=>N.push(q))}}let $=Object.values(this._queuedAudioSynchronizations);if($.length>0){let U=c.createPacket(c.outboundPackets.audiosPacketDefinition,$,X);J.push(U),this._synchronizedPlayerReliablePackets.forEach((F)=>F.push(U))}let K=Object.values(this._queuedBlockTypeSynchronizations);if(K.length>0){let U=c.createPacket(c.outboundPackets.blockTypesPacketDefinition,K,X);J.push(U),this._synchronizedPlayerReliablePackets.forEach((F)=>F.push(U))}let Q=Object.values(this._queuedBlockSynchronizations);if(Q.length>0){let U=c.createPacket(c.outboundPackets.blocksPacketDefinition,Q,X);J.push(U),this._synchronizedPlayerReliablePackets.forEach((F)=>F.push(U))}let W=Object.values(this._queuedChunkSynchronizations);if(W.length>0){let U=c.createPacket(c.outboundPackets.chunksPacketDefinition,W,X);J.push(U),this._synchronizedPlayerReliablePackets.forEach((F)=>F.push(U))}let G=Object.values(this._queuedLightSynchronizations);if(G.length>0){let U=c.createPacket(c.outboundPackets.lightsPacketDefinition,G,X);J.push(U),this._synchronizedPlayerReliablePackets.forEach((F)=>F.push(U))}this._queuedPerPlayerUISynchronizations.forEach((U,F)=>{let q=c.createPacket(c.outboundPackets.uiPacketDefinition,U,X);this._createOrGetSynchronizedPlayerReliablePackets(F,J).push(q)}),this._queuedPerPlayerUIDatasSynchronizations.forEach((U,F)=>{let q=c.createPacket(c.outboundPackets.uiDatasPacketDefinition,U,X);this._createOrGetSynchronizedPlayerReliablePackets(F,J).push(q)});let V=Object.values(this._queuedSceneUISynchronizations);if(V.length>0){let U=c.createPacket(c.outboundPackets.sceneUIsPacketDefinition,V,X);J.push(U),this._synchronizedPlayerReliablePackets.forEach((F)=>F.push(U))}if(this._queuedWorldSynchronization){let U=c.createPacket(c.outboundPackets.worldPacketDefinition,this._queuedWorldSynchronization,X);J.push(U),this._synchronizedPlayerReliablePackets.forEach((F)=>F.push(U))}this._queuedPerPlayerCameraSynchronizations.forEach((U,F)=>{let q=c.createPacket(c.outboundPackets.cameraPacketDefinition,U,X);this._createOrGetSynchronizedPlayerReliablePackets(F,J).push(q)});let z=Object.values(this._queuedPlayerSynchronizations);if(z.length>0){let U=c.createPacket(c.outboundPackets.playersPacketDefinition,z,X);J.push(U),this._synchronizedPlayerReliablePackets.forEach((F)=>F.push(U))}this._queuedBroadcasts.forEach((U)=>{J.push(U),this._synchronizedPlayerReliablePackets.forEach((F)=>F.push(U))});let H=this._queuedDebugRaycastSynchronizations;if(H.length>0){let U=c.createPacket(c.outboundPackets.physicsDebugRaycastsPacketDefinition,H,X);J.push(U),this._synchronizedPlayerReliablePackets.forEach((F)=>F.push(U))}j5.instance.getConnectedPlayersByWorld(this._world).forEach((U)=>{let F=this._synchronizedPlayerReliablePackets.get(U)??J;if(F.length>0)U.connection.send(F);if(Z.length>0)U.connection.send(Z,!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 Z=this._createOrGetQueuedAudioSync(J.audio);Z.pa=!0,delete Z.pl,delete Z.r};_onAudioPlay=(J)=>{let Z=J.audio.serialize();Z.pl=!0,delete Z.pa,delete Z.r,this._queuedAudioSynchronizations[Z.i]=Z};_onAudioPlayRestart=(J)=>{let Z=this._createOrGetQueuedAudioSync(J.audio);Z.r=!0,delete Z.pa,delete Z.pl,this._queuedAudioSynchronizations[Z.i]=Z};_onAudioSetAttachedToEntity=(J)=>{let Z=this._createOrGetQueuedAudioSync(J.audio);Z.e=J.entity?J.entity.id:void 0,Z.p=J.entity?void 0:Z.p};_onAudioSetCutoffDistance=(J)=>{let Z=this._createOrGetQueuedAudioSync(J.audio);Z.cd=J.cutoffDistance};_onAudioSetDetune=(J)=>{let Z=this._createOrGetQueuedAudioSync(J.audio);Z.de=J.detune};_onAudioSetDistortion=(J)=>{let Z=this._createOrGetQueuedAudioSync(J.audio);Z.di=J.distortion};_onAudioSetPosition=(J)=>{let Z=this._createOrGetQueuedAudioSync(J.audio);Z.e=J.position?void 0:Z.e,Z.p=J.position?$0.serializeVector(J.position):void 0};_onAudioSetPlaybackRate=(J)=>{let Z=this._createOrGetQueuedAudioSync(J.audio);Z.pr=J.playbackRate};_onAudioSetReferenceDistance=(J)=>{let Z=this._createOrGetQueuedAudioSync(J.audio);Z.rd=J.referenceDistance};_onAudioSetVolume=(J)=>{let Z=this._createOrGetQueuedAudioSync(J.audio);Z.v=J.volume};_onBlockTypeRegistryRegisterBlockType=(J)=>{let Z=J.blockType.serialize();this._queuedBlockTypeSynchronizations[J.blockType.id]=Z};_onChatSendBroadcastMessage=(J)=>{let{player:Z,message:X,color:Y}=J;this._queuedBroadcasts.push(c.createPacket(c.outboundPackets.chatMessagesPacketDefinition,[{m:X,c:Y,p:Z?.id}],this._world.loop.currentTick))};_onChatSendPlayerMessage=(J)=>{let{player:Z,message:X,color:Y}=J,$=this._queuedPerPlayerSynchronizations.get(Z)??[];$.push(c.createPacket(c.outboundPackets.chatMessagesPacketDefinition,[{m:X,c:Y}],this._world.loop.currentTick)),this._queuedPerPlayerSynchronizations.set(Z,$)};_onChunkSpawn=(J)=>{let Z=this._createOrGetQueuedChunkSync(J.chunk);Z.b=Array.from(J.chunk.blocks),Z.rm=void 0,this._spawnedChunks.add(Z.c.join(","))};_onChunkDespawn=(J)=>{let Z=this._createOrGetQueuedChunkSync(J.chunk),X=Z.c.join(",");if(this._spawnedChunks.has(X))delete this._queuedChunkSynchronizations[X],this._spawnedChunks.delete(X);else Z.rm=!0};_onChunkSetBlock=(J)=>{let Z=this._createOrGetQueuedBlockSync(J.globalCoordinate);Z.i=J.blockTypeId};_onEntitySetModelAnimationsPlaybackRate=(J)=>{let Z=this._createOrGetQueuedEntitySync(J.entity);Z.ap=J.playbackRate};_onEntitySpawn=(J)=>{let Z=J.entity.serialize();this._queuedEntitySynchronizations[Z.i]=Z,this._spawnedEntities.add(Z.i)};_onEntityDespawn=(J)=>{let Z=this._createOrGetQueuedEntitySync(J.entity);if(this._spawnedEntities.has(Z.i))delete this._queuedEntitySynchronizations[Z.i],this._spawnedEntities.delete(Z.i);else Z.rm=!0};_onEntitySetModelHiddenNodes=(J)=>{let Z=this._createOrGetQueuedEntitySync(J.entity);Z.h=Array.from(J.modelHiddenNodes)};_onEntitySetOpacity=(J)=>{let Z=this._createOrGetQueuedEntitySync(J.entity);Z.o=J.opacity};_onEntitySetParent=(J)=>{let Z=this._createOrGetQueuedEntitySync(J.entity);Z.pe=J.parent?J.parent.id:void 0,Z.pn=J.parentNodeName};_onEntitySetTintColor=(J)=>{let Z=this._createOrGetQueuedEntitySync(J.entity);Z.t=J.tintColor?$0.serializeRgbColor(J.tintColor):void 0};_onEntityStartModelLoopedAnimations=(J)=>{let Z=this._createOrGetQueuedEntitySync(J.entity);if(Z.al=Array.from(new Set([...Z.al??[],...J.animations])),Z.as)Z.as=Z.as.filter((X)=>!J.animations.has(X)).filter(Boolean)};_onEntityStartModelOneshotAnimations=(J)=>{let Z=this._createOrGetQueuedEntitySync(J.entity);if(Z.ao=Array.from(new Set([...Z.ao??[],...J.animations])),Z.as)Z.as=Z.as.filter((X)=>!J.animations.has(X)).filter(Boolean)};_onEntityStopModelAnimations=(J)=>{let Z=this._createOrGetQueuedEntitySync(J.entity);if(Z.al)Z.al=Z.al.filter((X)=>!J.animations.has(X)).filter(Boolean);if(Z.ao)Z.ao=Z.ao.filter((X)=>!J.animations.has(X)).filter(Boolean);Z.as=Array.from(new Set([...Z.as??[],...J.animations]))};_onEntityUpdateRotation=(J)=>{let Z=this._createOrGetQueuedEntitySync(J.entity);Z.r=[J.rotation.x,J.rotation.y,J.rotation.z,J.rotation.w]};_onEntityUpdatePosition=(J)=>{let Z=this._createOrGetQueuedEntitySync(J.entity);Z.p=[J.position.x,J.position.y,J.position.z]};_onLightDespawn=(J)=>{let Z=this._createOrGetQueuedLightSync(J.light);Z.rm=!0};_onLightSetAngle=(J)=>{let Z=this._createOrGetQueuedLightSync(J.light);Z.a=J.angle};_onLightSetAttachedToEntity=(J)=>{let Z=this._createOrGetQueuedLightSync(J.light);Z.e=J.entity?J.entity.id:void 0,Z.p=J.entity?void 0:Z.p};_onLightSetColor=(J)=>{let Z=this._createOrGetQueuedLightSync(J.light);Z.c=$0.serializeRgbColor(J.color)};_onLightSetDistance=(J)=>{let Z=this._createOrGetQueuedLightSync(J.light);Z.d=J.distance};_onLightSetIntensity=(J)=>{let Z=this._createOrGetQueuedLightSync(J.light);Z.n=J.intensity};_onLightSetOffset=(J)=>{let Z=this._createOrGetQueuedLightSync(J.light);Z.o=J.offset?$0.serializeVector(J.offset):void 0};_onLightSetPenumbra=(J)=>{let Z=this._createOrGetQueuedLightSync(J.light);Z.pe=J.penumbra};_onLightSetPosition=(J)=>{let Z=this._createOrGetQueuedLightSync(J.light);Z.p=J.position?$0.serializeVector(J.position):void 0,Z.e=J.position?void 0:Z.e};_onLightSetTrackedEntity=(J)=>{let Z=this._createOrGetQueuedLightSync(J.light);Z.te=J.entity?J.entity.id:void 0,Z.tp=J.entity?void 0:Z.tp};_onLightSetTrackedPosition=(J)=>{let Z=this._createOrGetQueuedLightSync(J.light);Z.tp=J.position?$0.serializeVector(J.position):void 0,Z.te=J.position?void 0:Z.te};_onLightSpawn=(J)=>{let Z=J.light.serialize();this._queuedLightSynchronizations[Z.i]=Z};_onPlayerCameraLookAtEntity=(J)=>{let Z=this._createOrGetQueuedPlayerCameraSync(J.playerCamera);Z.pl=$0.serializeVector(J.entity.position),delete Z.et,delete Z.pt};_onPlayerCameraLookAtPosition=(J)=>{let Z=this._createOrGetQueuedPlayerCameraSync(J.playerCamera);Z.pl=J.position?$0.serializeVector(J.position):void 0,delete Z.et,delete Z.pt};_onPlayerCameraSetAttachedToEntity=(J)=>{let Z=this._createOrGetQueuedPlayerCameraSync(J.playerCamera);Z.e=J.entity.id,delete Z.p};_onPlayerCameraSetAttachedToPosition=(J)=>{let Z=this._createOrGetQueuedPlayerCameraSync(J.playerCamera);Z.p=J.position?$0.serializeVector(J.position):void 0,delete Z.e};_onPlayerCameraSetFilmOffset=(J)=>{let Z=this._createOrGetQueuedPlayerCameraSync(J.playerCamera);Z.fo=J.filmOffset};_onPlayerCameraSetForwardOffset=(J)=>{let Z=this._createOrGetQueuedPlayerCameraSync(J.playerCamera);Z.ffo=J.forwardOffset};_onPlayerCameraSetFov=(J)=>{let Z=this._createOrGetQueuedPlayerCameraSync(J.playerCamera);Z.fv=J.fov};_onPlayerCameraSetModelHiddenNodes=(J)=>{let Z=this._createOrGetQueuedPlayerCameraSync(J.playerCamera);Z.h=Array.from(J.modelHiddenNodes)};_onPlayerCameraSetMode=(J)=>{let Z=this._createOrGetQueuedPlayerCameraSync(J.playerCamera);Z.m=J.mode};_onPlayerCameraSetOffset=(J)=>{let Z=this._createOrGetQueuedPlayerCameraSync(J.playerCamera);Z.o=J.offset?$0.serializeVector(J.offset):void 0};_onPlayerCameraSetTrackedEntity=(J)=>{let Z=this._createOrGetQueuedPlayerCameraSync(J.playerCamera);Z.et=J.entity?J.entity.id:void 0,delete Z.pl,delete Z.pt};_onPlayerCameraSetTrackedPosition=(J)=>{let Z=this._createOrGetQueuedPlayerCameraSync(J.playerCamera);Z.pt=J.position?$0.serializeVector(J.position):void 0,delete Z.et,delete Z.pl};_onPlayerCameraSetZoom=(J)=>{let Z=this._createOrGetQueuedPlayerCameraSync(J.playerCamera);Z.z=J.zoom};_onPlayerJoinedWorld=(J)=>{let{player:Z}=J,X=this._queuedPerPlayerSynchronizations.get(Z)??[];X.push(c.createPacket(c.outboundPackets.worldPacketDefinition,this._world.serialize(),this._world.loop.currentTick)),X.push(c.createPacket(c.outboundPackets.blockTypesPacketDefinition,this._world.blockTypeRegistry.serialize(),this._world.loop.currentTick)),X.push(c.createPacket(c.outboundPackets.chunksPacketDefinition,this._world.chunkLattice.getAllChunks().map(($)=>$.serialize()),this._world.loop.currentTick)),X.push(c.createPacket(c.outboundPackets.entitiesPacketDefinition,this._world.entityManager.getAllEntities().map(($)=>{if(Z.camera.attachedToEntity===void 0&&$ instanceof RJ&&$.player===Z)Z.camera.setAttachedToEntity($);return $.serialize()}),this._world.loop.currentTick)),X.push(c.createPacket(c.outboundPackets.audiosPacketDefinition,this._world.audioManager.getAllAudios().map(($)=>$.serialize()),this._world.loop.currentTick)),X.push(c.createPacket(c.outboundPackets.lightsPacketDefinition,this._world.lightManager.getAllLights().map(($)=>$.serialize()),this._world.loop.currentTick)),X.push(c.createPacket(c.outboundPackets.sceneUIsPacketDefinition,this._world.sceneUIManager.getAllSceneUIs().map(($)=>$.serialize()),this._world.loop.currentTick)),X.push(c.createPacket(c.outboundPackets.playersPacketDefinition,j5.instance.getConnectedPlayers().map(($)=>$.serialize()),this._world.loop.currentTick));let Y=this._createOrGetQueuedPlayerCameraSync(Z.camera);this._queuedPerPlayerCameraSynchronizations.set(Z,{...Z.camera.serialize(),...Y}),this._queuedPerPlayerSynchronizations.set(Z,X),this._queuedPlayerSynchronizations[Z.id]=Z.serialize()};_onPlayerLeftWorld=(J)=>{let Z=this._createOrGetQueuedPlayerSync(J.player);Z.rm=!0};_onPlayerRequestSync=(J)=>{J.player.connection.send([c.createPacket(c.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 Z=this._createOrGetQueuedPlayerUISync(J.playerUI);Z.u=J.htmlUri};_onPlayerUILockPointer=(J)=>{let Z=this._createOrGetQueuedPlayerUISync(J.playerUI);Z.p=J.lock};_onPlayerUISendData=(J)=>{this._createOrGetQueuedPlayerUIDatasSync(J.playerUI).push(J.data)};_onSceneUILoad=(J)=>{let Z=J.sceneUI.serialize();this._queuedSceneUISynchronizations[Z.i]=Z,this._loadedSceneUIs.add(Z.i)};_onSceneUISetAttachedToEntity=(J)=>{let Z=this._createOrGetQueuedSceneUISync(J.sceneUI);Z.e=J.entity?J.entity.id:void 0,Z.p=J.entity?void 0:Z.p};_onSceneUISetOffset=(J)=>{let Z=this._createOrGetQueuedSceneUISync(J.sceneUI);Z.o=J.offset?$0.serializeVector(J.offset):void 0};_onSceneUISetPosition=(J)=>{let Z=this._createOrGetQueuedSceneUISync(J.sceneUI);Z.p=J.position?$0.serializeVector(J.position):void 0,Z.e=J.position?void 0:Z.e};_onSceneUISetState=(J)=>{let Z=this._createOrGetQueuedSceneUISync(J.sceneUI);Z.s=J.state};_onSceneUISetViewDistance=(J)=>{let Z=this._createOrGetQueuedSceneUISync(J.sceneUI);Z.v=J.viewDistance};_onSceneUIUnload=(J)=>{let Z=this._createOrGetQueuedSceneUISync(J.sceneUI);if(this._loadedSceneUIs.has(Z.i))delete this._queuedSceneUISynchronizations[Z.i],this._loadedSceneUIs.delete(Z.i);else Z.rm=!0};_onSimulationDebugRaycast=(J)=>{this._queuedDebugRaycastSynchronizations.push($0.serializePhysicsDebugRaycast(J))};_onSimulationDebugRender=(J)=>{this._queuedBroadcasts.push(c.createPacket(c.outboundPackets.physicsDebugRenderPacketDefinition,{v:Array.from(J.vertices),c:Array.from(J.colors)},this._world.loop.currentTick))};_onWorldSetAmbientLightColor=(J)=>{let Z=this._createOrGetQueuedWorldSync(J.world);Z.ac=$0.serializeRgbColor(J.color)};_onWorldSetAmbientLightIntensity=(J)=>{let Z=this._createOrGetQueuedWorldSync(J.world);Z.ai=J.intensity};_onWorldSetDirectionalLightColor=(J)=>{let Z=this._createOrGetQueuedWorldSync(J.world);Z.dc=$0.serializeRgbColor(J.color)};_onWorldSetDirectionalLightIntensity=(J)=>{let Z=this._createOrGetQueuedWorldSync(J.world);Z.di=J.intensity};_onWorldSetDirectionalLightPosition=(J)=>{let Z=this._createOrGetQueuedWorldSync(J.world);Z.dp=$0.serializeVector(J.position)};_createOrGetQueuedAudioSync(J){if(J.id===void 0)I.fatalError("NetworkSynchronizer._createOrGetQueuedAudioSync(): Audio has no id!");return this._queuedAudioSynchronizations[J.id]??={i:J.id}}_createOrGetQueuedBlockSync(J){let{x:Z,y:X,z:Y}=J;return this._queuedBlockSynchronizations[`${Z},${X},${Y}`]??={i:0,c:[Z,X,Y]}}_createOrGetQueuedChunkSync(J){if(!J.originCoordinate)I.fatalError("NetworkSynchronizer._createOrGetQueuedChunkSync(): Chunk has no origin coordinate!");let{x:Z,y:X,z:Y}=J.originCoordinate;return this._queuedChunkSynchronizations[`${Z},${X},${Y}`]??={c:[Z,X,Y]}}_createOrGetQueuedEntitySync(J){if(J.id===void 0)I.fatalError("NetworkSynchronizer._createOrGetQueuedEntitySync(): Entity has no id!");return this._queuedEntitySynchronizations[J.id]??={i:J.id}}_createOrGetQueuedLightSync(J){if(J.id===void 0)I.fatalError("NetworkSynchronizer._createOrGetQueuedLightSync(): Light has no id!");return this._queuedLightSynchronizations[J.id]??={i:J.id}}_createOrGetQueuedPlayerSync(J){if(J.id===void 0)I.fatalError("NetworkSynchronizer._createOrGetQueuedPlayerSync(): Player has no id!");return this._queuedPlayerSynchronizations[J.id]??={i:J.id}}_createOrGetQueuedPlayerCameraSync(J){let Z=this._queuedPerPlayerCameraSynchronizations.get(J.player);if(!Z)Z={},this._queuedPerPlayerCameraSynchronizations.set(J.player,Z);return Z}_createOrGetQueuedPlayerUISync(J){let Z=this._queuedPerPlayerUISynchronizations.get(J.player);if(!Z)Z={},this._queuedPerPlayerUISynchronizations.set(J.player,Z);return Z}_createOrGetQueuedPlayerUIDatasSync(J){let Z=this._queuedPerPlayerUIDatasSynchronizations.get(J.player);if(!Z)Z=[],this._queuedPerPlayerUIDatasSynchronizations.set(J.player,Z);return Z}_createOrGetQueuedSceneUISync(J){if(J.id===void 0)I.fatalError("NetworkSynchronizer._createOrGetQueuedSceneUISync(): SceneUI has no id!");return this._queuedSceneUISynchronizations[J.id]??={i:J.id}}_createOrGetQueuedWorldSync(J){if(J.id!==this._world.id)I.fatalError("NetworkSynchronizer._createOrGetQueuedWorldSync(): World does not match this network synchronizer world!");return this._queuedWorldSynchronization??={i:J.id}}_createOrGetSynchronizedPlayerReliablePackets(J,Z){let X=this._synchronizedPlayerReliablePackets.get(J);if(!X)X=[...Z],this._synchronizedPlayerReliablePackets.set(J,X);return X}}class gQ{_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((Z)=>Z.attachedToEntity===J)}getSceneUIById(J){return this._sceneUIs.get(J)}registerSceneUI(J){if(J.id!==void 0)return J.id;let Z=this._nextSceneUIId;return this._sceneUIs.set(Z,J),this._nextSceneUIId++,Z}unloadEntityAttachedSceneUIs(J){this.getAllEntityAttachedSceneUIs(J).forEach((Z)=>{Z.unload()})}unregisterSceneUI(J){if(J.id===void 0)return;this._sceneUIs.delete(J.id)}}class mQ{_accumulatorMs=0;_targetTicksPerSecond;_fixedTimestepMs;_fixedTimestepS;_nextTickMs=0;_lastLoopTimeMs=0;_tickFunction;_tickErrorCallback;_tickHandle=null;constructor(J,Z,X){this._targetTicksPerSecond=J,this._fixedTimestepS=Math.fround(1/J),this._fixedTimestepMs=Math.fround(this._fixedTimestepS*1000),this._tickFunction=Z,this._tickErrorCallback=X}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 I.warning("Ticker.start(): ticker already running.");this._lastLoopTimeMs=performance.now();let J=()=>{let Z=performance.now(),X=Z-this._lastLoopTimeMs;if(this._lastLoopTimeMs=Z,X>250)X=250;this._accumulatorMs+=X;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 I.warning("Ticker.stop(): ticker not running.");clearTimeout(this._tickHandle),this._tickHandle=null}_tick(J){try{this._tickFunction(J)}catch(Z){if(Z instanceof Error&&this._tickErrorCallback)this._tickErrorCallback(Z);else I.warning(`Ticker._tick(): tick callback threw an error, but it was not an instance of Error. Error: ${Z}`)}}}var OX0;((K)=>{K.START="WORLD_LOOP.START";K.STOP="WORLD_LOOP.STOP";K.TICK_START="WORLD_LOOP.TICK_START";K.TICK_END="WORLD_LOOP.TICK_END";K.TICK_ERROR="WORLD_LOOP.TICK_ERROR"})(OX0||={});class fQ extends J0{_currentTick=0;_ticker;_world;constructor(J,Z=hE){super();this._ticker=new mQ(Z,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 Z=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()-Z})};_onTickError=(J)=>{I.error(`WorldLoop._onTickError(): Error: ${J}`),this.emitWithWorld(this._world,"WORLD_LOOP.TICK_ERROR",{worldLoop:this,error:J})}}var AE;((W)=>{W.SET_AMBIENT_LIGHT_COLOR="WORLD.SET_AMBIENT_LIGHT_COLOR";W.SET_AMBIENT_LIGHT_INTENSITY="WORLD.SET_AMBIENT_LIGHT_INTENSITY";W.SET_DIRECTIONAL_LIGHT_COLOR="WORLD.SET_DIRECTIONAL_LIGHT_COLOR";W.SET_DIRECTIONAL_LIGHT_INTENSITY="WORLD.SET_DIRECTIONAL_LIGHT_INTENSITY";W.SET_DIRECTIONAL_LIGHT_POSITION="WORLD.SET_DIRECTIONAL_LIGHT_POSITION";W.START="WORLD.START";W.STOP="WORLD.STOP"})(AE||={});class cQ extends J0{_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 yY(this),this._blockTypeRegistry=new k$(this),this._chatManager=new pQ(this),this._chunkLattice=new xQ(this),this._entityManager=new SQ(this),this._lightManager=new IQ(this),this._loop=new fQ(this,J.tickRate),this._networkSynchronizer=new wH(this),this._sceneUIManager=new gQ(this),this._simulation=new yQ(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 Z of J.blockTypes)this.blockTypeRegistry.registerGenericBlockType({id:Z.id,isLiquid:Z.isLiquid,name:Z.name,textureUri:Z.textureUri});if(J.blocks)for(let[Z,X]of Object.entries(J.blocks)){let[Y,$,K]=Z.split(",").map(Number);this.chunkLattice.setBlock({x:Y,y:$,z:K},X)}if(J.entities)for(let[Z,X]of Object.entries(J.entities)){let[Y,$,K]=Z.split(",").map(Number);new E8(X).spawn(this,{x:Y,y:$,z:K})}}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 $0.serializeWorld(this)}}var jX0;((X)=>{X.START="GAMESERVER.START";X.STOP="GAMESERVER.STOP"})(jX0||={});function ba0(J){B0.init().then(()=>{return _4.instance.modelRegistry.preloadModels()}).then(()=>{J(_4.instance.worlds[0]),_4.instance.start()}).catch((Z)=>{I.fatalError(`Failed to initialize the game engine, exiting. Error: ${Z}`)})}class _4{static _instance;_modelRegistry=o1.instance;_playerManager=j5.instance;_socket=TJ.instance;_webServer=EY.instance;_worlds={};constructor(){let J=new cQ({id:0,name:"Default World",skyboxUri:"skyboxes/partly-cloudy"});this._worlds[J.id]=J}static get instance(){if(!this._instance)this._instance=new _4;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(){b6.emit("GAMESERVER.START",{startedAtMs:performance.now()}),Object.values(this._worlds).forEach((J)=>J.start()),this._webServer.start()}stop(){b6.emit("GAMESERVER.STOP",{stoppedAtMs:performance.now()}),Object.values(this._worlds).forEach((J)=>J.stop())}}class mZ{static instance=new mZ;constructor(){}async getGlobalData(J){let Z=await z9.instance.getData(J);if(!Z||Z.error){if(Z?.error)I.warning(`PersistenceManager.getGlobalData(): ${Z.error.message}`);return}return Z}async getPlayerData(J){let Z=await z9.instance.getData(this._getPlayerKey(J));if(!Z||Z.error){if(Z?.error)I.warning(`PersistenceManager.getPlayerData(): ${Z.error.message}`);return}return Z}async setGlobalData(J,Z){let X=await z9.instance.setData(J,Z);if(!X||X.error){if(X?.error)I.warning(`PersistenceManager.setGlobalData(): ${X.error.message}`);return}return X}async setPlayerData(J,Z){let X=await z9.instance.setData(this._getPlayerKey(J),Z);if(!X||X.error){if(X?.error)I.warning(`PersistenceManager.setPlayerData(): ${X.error.message}`);return}return X}_getPlayerKey(J){return`player-${J.id}`}}var DX0=["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"],RQ;(($)=>{$.CHAT_MESSAGE_SEND="PLAYER.CHAT_MESSAGE_SEND";$.JOINED_WORLD="PLAYER.JOINED_WORLD";$.LEFT_WORLD="PLAYER.LEFT_WORLD";$.REQUEST_SYNC="PLAYER.REQUEST_SYNC"})(RQ||={});class vY extends J0{static _devNextPlayerId=1;id;username;profilePictureUrl;camera;connection;ui;_input={};_lastUnreliableInputSequenceNumber=0;_world;constructor(J,Z){super();this.id=Z?.user.id??`player-${vY._devNextPlayerId++}`,this.username=Z?.user.username??this.id,this.profilePictureUrl=Z?.user.profilePictureURL??void 0,this.camera=new hQ(this),this.connection=J,this.ui=new _Q(this),J.onPacket(c.PacketId.CHAT_MESSAGE_SEND,this._onChatMessageSendPacket),J.onPacket(c.PacketId.DEBUG_CONFIG,this._onDebugConfigPacket),J.onPacket(c.PacketId.INPUT,this._onInputPacket),J.onPacket(c.PacketId.SYNC_REQUEST,this._onSyncRequestPacket),J.onPacket(c.PacketId.UI_DATA_SEND,this._onUIDataSendPacket),this.joinWorld(_4.instance.worlds[0])}get input(){return this._input}get world(){return this._world}disconnect(){this.leaveWorld(),this.connection.close()}async getPersistedData(){return mZ.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 mZ.instance.setPlayerData(this,J)}serialize(){return $0.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 Z=J[1];if(Z.sq!==void 0){if(Z.sq<this._lastUnreliableInputSequenceNumber)return;this._lastUnreliableInputSequenceNumber=Z.sq}if(DX0.forEach((X)=>{let Y=X;if(Z[Y]!==void 0)this._input[Y]=Boolean(Z[Y])}),Z.cp!==void 0)this.camera.setOrientationPitch(Z.cp);if(Z.cy!==void 0)this.camera.setOrientationYaw(Z.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 yE;((X)=>{X.BROADCAST_MESSAGE="CHAT.BROADCAST_MESSAGE";X.PLAYER_MESSAGE="CHAT.PLAYER_MESSAGE"})(yE||={});class pQ extends J0{_commandCallbacks={};_world;constructor(J){super();this._world=J,this._subscribeToPlayerEvents()}registerCommand(J,Z){this._commandCallbacks[J]=Z}unregisterCommand(J){delete this._commandCallbacks[J]}sendBroadcastMessage(J,Z){this._sendBroadcastMessage(void 0,J,Z)}sendPlayerMessage(J,Z,X){this.emitWithWorld(this._world,"CHAT.PLAYER_MESSAGE",{player:J,message:Z,color:X})}_subscribeToPlayerEvents(){this._world.on("PLAYER.CHAT_MESSAGE_SEND",(J)=>{let{player:Z,message:X}=J,[Y,...$]=X.split(" "),K=this._commandCallbacks[Y];if(K){K(Z,$,X);return}this._sendBroadcastMessage(Z,X)})}_sendBroadcastMessage(J,Z,X){this.emitWithWorld(this._world,"CHAT.BROADCAST_MESSAGE",{player:J,message:Z,color:X})}}var n=0.000001,w0=typeof Float32Array!=="undefined"?Float32Array:Array,H9=Math.random;var tE8=Math.PI/180;if(!Math.hypot)Math.hypot=function(){var J=0,Z=arguments.length;while(Z--)J+=arguments[Z]*arguments[Z];return Math.sqrt(J)};var O8={};p1(O8,{transpose:()=>ta0,subtract:()=>EX0,sub:()=>Lo0,str:()=>Qo0,set:()=>ra0,scale:()=>Yo0,rotate:()=>Xo0,multiplyScalarAndAdd:()=>Fo0,multiplyScalar:()=>Uo0,multiply:()=>PX0,mul:()=>wo0,invert:()=>ea0,identity:()=>oa0,fromValues:()=>sa0,fromScaling:()=>Ko0,fromRotation:()=>$o0,frob:()=>Wo0,exactEquals:()=>zo0,equals:()=>Ho0,determinant:()=>Zo0,create:()=>na0,copy:()=>aa0,clone:()=>ia0,adjoint:()=>Jo0,add:()=>Vo0,LDU:()=>Go0});function na0(){var J=new w0(4);if(w0!=Float32Array)J[1]=0,J[2]=0;return J[0]=1,J[3]=1,J}function ia0(J){var Z=new w0(4);return Z[0]=J[0],Z[1]=J[1],Z[2]=J[2],Z[3]=J[3],Z}function aa0(J,Z){return J[0]=Z[0],J[1]=Z[1],J[2]=Z[2],J[3]=Z[3],J}function oa0(J){return J[0]=1,J[1]=0,J[2]=0,J[3]=1,J}function sa0(J,Z,X,Y){var $=new w0(4);return $[0]=J,$[1]=Z,$[2]=X,$[3]=Y,$}function ra0(J,Z,X,Y,$){return J[0]=Z,J[1]=X,J[2]=Y,J[3]=$,J}function ta0(J,Z){if(J===Z){var X=Z[1];J[1]=Z[2],J[2]=X}else J[0]=Z[0],J[1]=Z[2],J[2]=Z[1],J[3]=Z[3];return J}function ea0(J,Z){var X=Z[0],Y=Z[1],$=Z[2],K=Z[3],Q=X*K-$*Y;if(!Q)return null;return Q=1/Q,J[0]=K*Q,J[1]=-Y*Q,J[2]=-$*Q,J[3]=X*Q,J}function Jo0(J,Z){var X=Z[0];return J[0]=Z[3],J[1]=-Z[1],J[2]=-Z[2],J[3]=X,J}function Zo0(J){return J[0]*J[3]-J[2]*J[1]}function PX0(J,Z,X){var Y=Z[0],$=Z[1],K=Z[2],Q=Z[3],W=X[0],G=X[1],V=X[2],z=X[3];return J[0]=Y*W+K*G,J[1]=$*W+Q*G,J[2]=Y*V+K*z,J[3]=$*V+Q*z,J}function Xo0(J,Z,X){var Y=Z[0],$=Z[1],K=Z[2],Q=Z[3],W=Math.sin(X),G=Math.cos(X);return J[0]=Y*G+K*W,J[1]=$*G+Q*W,J[2]=Y*-W+K*G,J[3]=$*-W+Q*G,J}function Yo0(J,Z,X){var Y=Z[0],$=Z[1],K=Z[2],Q=Z[3],W=X[0],G=X[1];return J[0]=Y*W,J[1]=$*W,J[2]=K*G,J[3]=Q*G,J}function $o0(J,Z){var X=Math.sin(Z),Y=Math.cos(Z);return J[0]=Y,J[1]=X,J[2]=-X,J[3]=Y,J}function Ko0(J,Z){return J[0]=Z[0],J[1]=0,J[2]=0,J[3]=Z[1],J}function Qo0(J){return"mat2("+J[0]+", "+J[1]+", "+J[2]+", "+J[3]+")"}function Wo0(J){return Math.hypot(J[0],J[1],J[2],J[3])}function Go0(J,Z,X,Y){return J[2]=Y[2]/Y[0],X[0]=Y[0],X[1]=Y[1],X[3]=Y[3]-J[2]*X[1],[J,Z,X]}function Vo0(J,Z,X){return J[0]=Z[0]+X[0],J[1]=Z[1]+X[1],J[2]=Z[2]+X[2],J[3]=Z[3]+X[3],J}function EX0(J,Z,X){return J[0]=Z[0]-X[0],J[1]=Z[1]-X[1],J[2]=Z[2]-X[2],J[3]=Z[3]-X[3],J}function zo0(J,Z){return J[0]===Z[0]&&J[1]===Z[1]&&J[2]===Z[2]&&J[3]===Z[3]}function Ho0(J,Z){var X=J[0],Y=J[1],$=J[2],K=J[3],Q=Z[0],W=Z[1],G=Z[2],V=Z[3];return Math.abs(X-Q)<=n*Math.max(1,Math.abs(X),Math.abs(Q))&&Math.abs(Y-W)<=n*Math.max(1,Math.abs(Y),Math.abs(W))&&Math.abs($-G)<=n*Math.max(1,Math.abs($),Math.abs(G))&&Math.abs(K-V)<=n*Math.max(1,Math.abs(K),Math.abs(V))}function Uo0(J,Z,X){return J[0]=Z[0]*X,J[1]=Z[1]*X,J[2]=Z[2]*X,J[3]=Z[3]*X,J}function Fo0(J,Z,X,Y){return J[0]=Z[0]+X[0]*Y,J[1]=Z[1]+X[1]*Y,J[2]=Z[2]+X[2]*Y,J[3]=Z[3]+X[3]*Y,J}var wo0=PX0,Lo0=EX0;var o0={};p1(o0,{transpose:()=>jo0,translate:()=>vo0,subtract:()=>xX0,sub:()=>do0,str:()=>yo0,set:()=>Bo0,scale:()=>Co0,rotate:()=>xo0,projection:()=>Ao0,normalFromMat4:()=>_o0,multiplyScalarAndAdd:()=>co0,multiplyScalar:()=>fo0,multiply:()=>vX0,mul:()=>uo0,invert:()=>Do0,identity:()=>Oo0,fromValues:()=>ko0,fromTranslation:()=>To0,fromScaling:()=>So0,fromRotation:()=>Ro0,fromQuat:()=>ho0,fromMat4:()=>qo0,fromMat2d:()=>Io0,frob:()=>go0,exactEquals:()=>po0,equals:()=>lo0,determinant:()=>Eo0,create:()=>gE,copy:()=>No0,clone:()=>Mo0,adjoint:()=>Po0,add:()=>mo0});function gE(){var J=new w0(9);if(w0!=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 qo0(J,Z){return J[0]=Z[0],J[1]=Z[1],J[2]=Z[2],J[3]=Z[4],J[4]=Z[5],J[5]=Z[6],J[6]=Z[8],J[7]=Z[9],J[8]=Z[10],J}function Mo0(J){var Z=new w0(9);return Z[0]=J[0],Z[1]=J[1],Z[2]=J[2],Z[3]=J[3],Z[4]=J[4],Z[5]=J[5],Z[6]=J[6],Z[7]=J[7],Z[8]=J[8],Z}function No0(J,Z){return J[0]=Z[0],J[1]=Z[1],J[2]=Z[2],J[3]=Z[3],J[4]=Z[4],J[5]=Z[5],J[6]=Z[6],J[7]=Z[7],J[8]=Z[8],J}function ko0(J,Z,X,Y,$,K,Q,W,G){var V=new w0(9);return V[0]=J,V[1]=Z,V[2]=X,V[3]=Y,V[4]=$,V[5]=K,V[6]=Q,V[7]=W,V[8]=G,V}function Bo0(J,Z,X,Y,$,K,Q,W,G,V){return J[0]=Z,J[1]=X,J[2]=Y,J[3]=$,J[4]=K,J[5]=Q,J[6]=W,J[7]=G,J[8]=V,J}function Oo0(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 jo0(J,Z){if(J===Z){var X=Z[1],Y=Z[2],$=Z[5];J[1]=Z[3],J[2]=Z[6],J[3]=X,J[5]=Z[7],J[6]=Y,J[7]=$}else J[0]=Z[0],J[1]=Z[3],J[2]=Z[6],J[3]=Z[1],J[4]=Z[4],J[5]=Z[7],J[6]=Z[2],J[7]=Z[5],J[8]=Z[8];return J}function Do0(J,Z){var X=Z[0],Y=Z[1],$=Z[2],K=Z[3],Q=Z[4],W=Z[5],G=Z[6],V=Z[7],z=Z[8],H=z*Q-W*V,U=-z*K+W*G,F=V*K-Q*G,q=X*H+Y*U+$*F;if(!q)return null;return q=1/q,J[0]=H*q,J[1]=(-z*Y+$*V)*q,J[2]=(W*Y-$*Q)*q,J[3]=U*q,J[4]=(z*X-$*G)*q,J[5]=(-W*X+$*K)*q,J[6]=F*q,J[7]=(-V*X+Y*G)*q,J[8]=(Q*X-Y*K)*q,J}function Po0(J,Z){var X=Z[0],Y=Z[1],$=Z[2],K=Z[3],Q=Z[4],W=Z[5],G=Z[6],V=Z[7],z=Z[8];return J[0]=Q*z-W*V,J[1]=$*V-Y*z,J[2]=Y*W-$*Q,J[3]=W*G-K*z,J[4]=X*z-$*G,J[5]=$*K-X*W,J[6]=K*V-Q*G,J[7]=Y*G-X*V,J[8]=X*Q-Y*K,J}function Eo0(J){var Z=J[0],X=J[1],Y=J[2],$=J[3],K=J[4],Q=J[5],W=J[6],G=J[7],V=J[8];return Z*(V*K-Q*G)+X*(-V*$+Q*W)+Y*(G*$-K*W)}function vX0(J,Z,X){var Y=Z[0],$=Z[1],K=Z[2],Q=Z[3],W=Z[4],G=Z[5],V=Z[6],z=Z[7],H=Z[8],U=X[0],F=X[1],q=X[2],N=X[3],w=X[4],k=X[5],B=X[6],j=X[7],D=X[8];return J[0]=U*Y+F*Q+q*V,J[1]=U*$+F*W+q*z,J[2]=U*K+F*G+q*H,J[3]=N*Y+w*Q+k*V,J[4]=N*$+w*W+k*z,J[5]=N*K+w*G+k*H,J[6]=B*Y+j*Q+D*V,J[7]=B*$+j*W+D*z,J[8]=B*K+j*G+D*H,J}function vo0(J,Z,X){var Y=Z[0],$=Z[1],K=Z[2],Q=Z[3],W=Z[4],G=Z[5],V=Z[6],z=Z[7],H=Z[8],U=X[0],F=X[1];return J[0]=Y,J[1]=$,J[2]=K,J[3]=Q,J[4]=W,J[5]=G,J[6]=U*Y+F*Q+V,J[7]=U*$+F*W+z,J[8]=U*K+F*G+H,J}function xo0(J,Z,X){var Y=Z[0],$=Z[1],K=Z[2],Q=Z[3],W=Z[4],G=Z[5],V=Z[6],z=Z[7],H=Z[8],U=Math.sin(X),F=Math.cos(X);return J[0]=F*Y+U*Q,J[1]=F*$+U*W,J[2]=F*K+U*G,J[3]=F*Q-U*Y,J[4]=F*W-U*$,J[5]=F*G-U*K,J[6]=V,J[7]=z,J[8]=H,J}function Co0(J,Z,X){var Y=X[0],$=X[1];return J[0]=Y*Z[0],J[1]=Y*Z[1],J[2]=Y*Z[2],J[3]=$*Z[3],J[4]=$*Z[4],J[5]=$*Z[5],J[6]=Z[6],J[7]=Z[7],J[8]=Z[8],J}function To0(J,Z){return J[0]=1,J[1]=0,J[2]=0,J[3]=0,J[4]=1,J[5]=0,J[6]=Z[0],J[7]=Z[1],J[8]=1,J}function Ro0(J,Z){var X=Math.sin(Z),Y=Math.cos(Z);return J[0]=Y,J[1]=X,J[2]=0,J[3]=-X,J[4]=Y,J[5]=0,J[6]=0,J[7]=0,J[8]=1,J}function So0(J,Z){return J[0]=Z[0],J[1]=0,J[2]=0,J[3]=0,J[4]=Z[1],J[5]=0,J[6]=0,J[7]=0,J[8]=1,J}function Io0(J,Z){return J[0]=Z[0],J[1]=Z[1],J[2]=0,J[3]=Z[2],J[4]=Z[3],J[5]=0,J[6]=Z[4],J[7]=Z[5],J[8]=1,J}function ho0(J,Z){var X=Z[0],Y=Z[1],$=Z[2],K=Z[3],Q=X+X,W=Y+Y,G=$+$,V=X*Q,z=Y*Q,H=Y*W,U=$*Q,F=$*W,q=$*G,N=K*Q,w=K*W,k=K*G;return J[0]=1-H-q,J[3]=z-k,J[6]=U+w,J[1]=z+k,J[4]=1-V-q,J[7]=F-N,J[2]=U-w,J[5]=F+N,J[8]=1-V-H,J}function _o0(J,Z){var X=Z[0],Y=Z[1],$=Z[2],K=Z[3],Q=Z[4],W=Z[5],G=Z[6],V=Z[7],z=Z[8],H=Z[9],U=Z[10],F=Z[11],q=Z[12],N=Z[13],w=Z[14],k=Z[15],B=X*W-Y*Q,j=X*G-$*Q,D=X*V-K*Q,v=Y*G-$*W,O=Y*V-K*W,P=$*V-K*G,S=z*N-H*q,R=z*w-U*q,h=z*k-F*q,_=H*w-U*N,y=H*k-F*N,p=U*k-F*w,A=B*p-j*y+D*_+v*h-O*R+P*S;if(!A)return null;return A=1/A,J[0]=(W*p-G*y+V*_)*A,J[1]=(G*h-Q*p-V*R)*A,J[2]=(Q*y-W*h+V*S)*A,J[3]=($*y-Y*p-K*_)*A,J[4]=(X*p-$*h+K*R)*A,J[5]=(Y*h-X*y-K*S)*A,J[6]=(N*P-w*O+k*v)*A,J[7]=(w*D-q*P-k*j)*A,J[8]=(q*O-N*D+k*B)*A,J}function Ao0(J,Z,X){return J[0]=2/Z,J[1]=0,J[2]=0,J[3]=0,J[4]=-2/X,J[5]=0,J[6]=-1,J[7]=1,J[8]=1,J}function yo0(J){return"mat3("+J[0]+", "+J[1]+", "+J[2]+", "+J[3]+", "+J[4]+", "+J[5]+", "+J[6]+", "+J[7]+", "+J[8]+")"}function go0(J){return Math.hypot(J[0],J[1],J[2],J[3],J[4],J[5],J[6],J[7],J[8])}function mo0(J,Z,X){return J[0]=Z[0]+X[0],J[1]=Z[1]+X[1],J[2]=Z[2]+X[2],J[3]=Z[3]+X[3],J[4]=Z[4]+X[4],J[5]=Z[5]+X[5],J[6]=Z[6]+X[6],J[7]=Z[7]+X[7],J[8]=Z[8]+X[8],J}function xX0(J,Z,X){return J[0]=Z[0]-X[0],J[1]=Z[1]-X[1],J[2]=Z[2]-X[2],J[3]=Z[3]-X[3],J[4]=Z[4]-X[4],J[5]=Z[5]-X[5],J[6]=Z[6]-X[6],J[7]=Z[7]-X[7],J[8]=Z[8]-X[8],J}function fo0(J,Z,X){return J[0]=Z[0]*X,J[1]=Z[1]*X,J[2]=Z[2]*X,J[3]=Z[3]*X,J[4]=Z[4]*X,J[5]=Z[5]*X,J[6]=Z[6]*X,J[7]=Z[7]*X,J[8]=Z[8]*X,J}function co0(J,Z,X,Y){return J[0]=Z[0]+X[0]*Y,J[1]=Z[1]+X[1]*Y,J[2]=Z[2]+X[2]*Y,J[3]=Z[3]+X[3]*Y,J[4]=Z[4]+X[4]*Y,J[5]=Z[5]+X[5]*Y,J[6]=Z[6]+X[6]*Y,J[7]=Z[7]+X[7]*Y,J[8]=Z[8]+X[8]*Y,J}function po0(J,Z){return J[0]===Z[0]&&J[1]===Z[1]&&J[2]===Z[2]&&J[3]===Z[3]&&J[4]===Z[4]&&J[5]===Z[5]&&J[6]===Z[6]&&J[7]===Z[7]&&J[8]===Z[8]}function lo0(J,Z){var X=J[0],Y=J[1],$=J[2],K=J[3],Q=J[4],W=J[5],G=J[6],V=J[7],z=J[8],H=Z[0],U=Z[1],F=Z[2],q=Z[3],N=Z[4],w=Z[5],k=Z[6],B=Z[7],j=Z[8];return Math.abs(X-H)<=n*Math.max(1,Math.abs(X),Math.abs(H))&&Math.abs(Y-U)<=n*Math.max(1,Math.abs(Y),Math.abs(U))&&Math.abs($-F)<=n*Math.max(1,Math.abs($),Math.abs(F))&&Math.abs(K-q)<=n*Math.max(1,Math.abs(K),Math.abs(q))&&Math.abs(Q-N)<=n*Math.max(1,Math.abs(Q),Math.abs(N))&&Math.abs(W-w)<=n*Math.max(1,Math.abs(W),Math.abs(w))&&Math.abs(G-k)<=n*Math.max(1,Math.abs(G),Math.abs(k))&&Math.abs(V-B)<=n*Math.max(1,Math.abs(V),Math.abs(B))&&Math.abs(z-j)<=n*Math.max(1,Math.abs(z),Math.abs(j))}var uo0=vX0,do0=xX0;var z0={};p1(z0,{transpose:()=>so0,translate:()=>Js0,targetTo:()=>Es0,subtract:()=>_X0,sub:()=>_s0,str:()=>vs0,set:()=>oo0,scale:()=>Zs0,rotateZ:()=>Ks0,rotateY:()=>$s0,rotateX:()=>Ys0,rotate:()=>Xs0,perspectiveZO:()=>Bs0,perspectiveNO:()=>IX0,perspectiveFromFieldOfView:()=>Os0,perspective:()=>ks0,orthoZO:()=>Ds0,orthoNO:()=>hX0,ortho:()=>js0,multiplyScalarAndAdd:()=>Rs0,multiplyScalar:()=>Ts0,multiply:()=>TX0,mul:()=>hs0,lookAt:()=>Ps0,invert:()=>ro0,identity:()=>CX0,getTranslation:()=>Fs0,getScaling:()=>SX0,getRotation:()=>ws0,frustum:()=>Ns0,fromZRotation:()=>Hs0,fromYRotation:()=>zs0,fromXRotation:()=>Vs0,fromValues:()=>ao0,fromTranslation:()=>Qs0,fromScaling:()=>Ws0,fromRotationTranslationScaleOrigin:()=>qs0,fromRotationTranslationScale:()=>Ls0,fromRotationTranslation:()=>RX0,fromRotation:()=>Gs0,fromQuat2:()=>Us0,fromQuat:()=>Ms0,frob:()=>xs0,exactEquals:()=>Ss0,equals:()=>Is0,determinant:()=>eo0,create:()=>bo0,copy:()=>io0,clone:()=>no0,adjoint:()=>to0,add:()=>Cs0});function bo0(){var J=new w0(16);if(w0!=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 no0(J){var Z=new w0(16);return Z[0]=J[0],Z[1]=J[1],Z[2]=J[2],Z[3]=J[3],Z[4]=J[4],Z[5]=J[5],Z[6]=J[6],Z[7]=J[7],Z[8]=J[8],Z[9]=J[9],Z[10]=J[10],Z[11]=J[11],Z[12]=J[12],Z[13]=J[13],Z[14]=J[14],Z[15]=J[15],Z}function io0(J,Z){return J[0]=Z[0],J[1]=Z[1],J[2]=Z[2],J[3]=Z[3],J[4]=Z[4],J[5]=Z[5],J[6]=Z[6],J[7]=Z[7],J[8]=Z[8],J[9]=Z[9],J[10]=Z[10],J[11]=Z[11],J[12]=Z[12],J[13]=Z[13],J[14]=Z[14],J[15]=Z[15],J}function ao0(J,Z,X,Y,$,K,Q,W,G,V,z,H,U,F,q,N){var w=new w0(16);return w[0]=J,w[1]=Z,w[2]=X,w[3]=Y,w[4]=$,w[5]=K,w[6]=Q,w[7]=W,w[8]=G,w[9]=V,w[10]=z,w[11]=H,w[12]=U,w[13]=F,w[14]=q,w[15]=N,w}function oo0(J,Z,X,Y,$,K,Q,W,G,V,z,H,U,F,q,N,w){return J[0]=Z,J[1]=X,J[2]=Y,J[3]=$,J[4]=K,J[5]=Q,J[6]=W,J[7]=G,J[8]=V,J[9]=z,J[10]=H,J[11]=U,J[12]=F,J[13]=q,J[14]=N,J[15]=w,J}function CX0(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 so0(J,Z){if(J===Z){var X=Z[1],Y=Z[2],$=Z[3],K=Z[6],Q=Z[7],W=Z[11];J[1]=Z[4],J[2]=Z[8],J[3]=Z[12],J[4]=X,J[6]=Z[9],J[7]=Z[13],J[8]=Y,J[9]=K,J[11]=Z[14],J[12]=$,J[13]=Q,J[14]=W}else J[0]=Z[0],J[1]=Z[4],J[2]=Z[8],J[3]=Z[12],J[4]=Z[1],J[5]=Z[5],J[6]=Z[9],J[7]=Z[13],J[8]=Z[2],J[9]=Z[6],J[10]=Z[10],J[11]=Z[14],J[12]=Z[3],J[13]=Z[7],J[14]=Z[11],J[15]=Z[15];return J}function ro0(J,Z){var X=Z[0],Y=Z[1],$=Z[2],K=Z[3],Q=Z[4],W=Z[5],G=Z[6],V=Z[7],z=Z[8],H=Z[9],U=Z[10],F=Z[11],q=Z[12],N=Z[13],w=Z[14],k=Z[15],B=X*W-Y*Q,j=X*G-$*Q,D=X*V-K*Q,v=Y*G-$*W,O=Y*V-K*W,P=$*V-K*G,S=z*N-H*q,R=z*w-U*q,h=z*k-F*q,_=H*w-U*N,y=H*k-F*N,p=U*k-F*w,A=B*p-j*y+D*_+v*h-O*R+P*S;if(!A)return null;return A=1/A,J[0]=(W*p-G*y+V*_)*A,J[1]=($*y-Y*p-K*_)*A,J[2]=(N*P-w*O+k*v)*A,J[3]=(U*O-H*P-F*v)*A,J[4]=(G*h-Q*p-V*R)*A,J[5]=(X*p-$*h+K*R)*A,J[6]=(w*D-q*P-k*j)*A,J[7]=(z*P-U*D+F*j)*A,J[8]=(Q*y-W*h+V*S)*A,J[9]=(Y*h-X*y-K*S)*A,J[10]=(q*O-N*D+k*B)*A,J[11]=(H*D-z*O-F*B)*A,J[12]=(W*R-Q*_-G*S)*A,J[13]=(X*_-Y*R+$*S)*A,J[14]=(N*j-q*v-w*B)*A,J[15]=(z*v-H*j+U*B)*A,J}function to0(J,Z){var X=Z[0],Y=Z[1],$=Z[2],K=Z[3],Q=Z[4],W=Z[5],G=Z[6],V=Z[7],z=Z[8],H=Z[9],U=Z[10],F=Z[11],q=Z[12],N=Z[13],w=Z[14],k=Z[15];return J[0]=W*(U*k-F*w)-H*(G*k-V*w)+N*(G*F-V*U),J[1]=-(Y*(U*k-F*w)-H*($*k-K*w)+N*($*F-K*U)),J[2]=Y*(G*k-V*w)-W*($*k-K*w)+N*($*V-K*G),J[3]=-(Y*(G*F-V*U)-W*($*F-K*U)+H*($*V-K*G)),J[4]=-(Q*(U*k-F*w)-z*(G*k-V*w)+q*(G*F-V*U)),J[5]=X*(U*k-F*w)-z*($*k-K*w)+q*($*F-K*U),J[6]=-(X*(G*k-V*w)-Q*($*k-K*w)+q*($*V-K*G)),J[7]=X*(G*F-V*U)-Q*($*F-K*U)+z*($*V-K*G),J[8]=Q*(H*k-F*N)-z*(W*k-V*N)+q*(W*F-V*H),J[9]=-(X*(H*k-F*N)-z*(Y*k-K*N)+q*(Y*F-K*H)),J[10]=X*(W*k-V*N)-Q*(Y*k-K*N)+q*(Y*V-K*W),J[11]=-(X*(W*F-V*H)-Q*(Y*F-K*H)+z*(Y*V-K*W)),J[12]=-(Q*(H*w-U*N)-z*(W*w-G*N)+q*(W*U-G*H)),J[13]=X*(H*w-U*N)-z*(Y*w-$*N)+q*(Y*U-$*H),J[14]=-(X*(W*w-G*N)-Q*(Y*w-$*N)+q*(Y*G-$*W)),J[15]=X*(W*U-G*H)-Q*(Y*U-$*H)+z*(Y*G-$*W),J}function eo0(J){var Z=J[0],X=J[1],Y=J[2],$=J[3],K=J[4],Q=J[5],W=J[6],G=J[7],V=J[8],z=J[9],H=J[10],U=J[11],F=J[12],q=J[13],N=J[14],w=J[15],k=Z*Q-X*K,B=Z*W-Y*K,j=Z*G-$*K,D=X*W-Y*Q,v=X*G-$*Q,O=Y*G-$*W,P=V*q-z*F,S=V*N-H*F,R=V*w-U*F,h=z*N-H*q,_=z*w-U*q,y=H*w-U*N;return k*y-B*_+j*h+D*R-v*S+O*P}function TX0(J,Z,X){var Y=Z[0],$=Z[1],K=Z[2],Q=Z[3],W=Z[4],G=Z[5],V=Z[6],z=Z[7],H=Z[8],U=Z[9],F=Z[10],q=Z[11],N=Z[12],w=Z[13],k=Z[14],B=Z[15],j=X[0],D=X[1],v=X[2],O=X[3];return J[0]=j*Y+D*W+v*H+O*N,J[1]=j*$+D*G+v*U+O*w,J[2]=j*K+D*V+v*F+O*k,J[3]=j*Q+D*z+v*q+O*B,j=X[4],D=X[5],v=X[6],O=X[7],J[4]=j*Y+D*W+v*H+O*N,J[5]=j*$+D*G+v*U+O*w,J[6]=j*K+D*V+v*F+O*k,J[7]=j*Q+D*z+v*q+O*B,j=X[8],D=X[9],v=X[10],O=X[11],J[8]=j*Y+D*W+v*H+O*N,J[9]=j*$+D*G+v*U+O*w,J[10]=j*K+D*V+v*F+O*k,J[11]=j*Q+D*z+v*q+O*B,j=X[12],D=X[13],v=X[14],O=X[15],J[12]=j*Y+D*W+v*H+O*N,J[13]=j*$+D*G+v*U+O*w,J[14]=j*K+D*V+v*F+O*k,J[15]=j*Q+D*z+v*q+O*B,J}function Js0(J,Z,X){var Y=X[0],$=X[1],K=X[2],Q,W,G,V,z,H,U,F,q,N,w,k;if(Z===J)J[12]=Z[0]*Y+Z[4]*$+Z[8]*K+Z[12],J[13]=Z[1]*Y+Z[5]*$+Z[9]*K+Z[13],J[14]=Z[2]*Y+Z[6]*$+Z[10]*K+Z[14],J[15]=Z[3]*Y+Z[7]*$+Z[11]*K+Z[15];else Q=Z[0],W=Z[1],G=Z[2],V=Z[3],z=Z[4],H=Z[5],U=Z[6],F=Z[7],q=Z[8],N=Z[9],w=Z[10],k=Z[11],J[0]=Q,J[1]=W,J[2]=G,J[3]=V,J[4]=z,J[5]=H,J[6]=U,J[7]=F,J[8]=q,J[9]=N,J[10]=w,J[11]=k,J[12]=Q*Y+z*$+q*K+Z[12],J[13]=W*Y+H*$+N*K+Z[13],J[14]=G*Y+U*$+w*K+Z[14],J[15]=V*Y+F*$+k*K+Z[15];return J}function Zs0(J,Z,X){var Y=X[0],$=X[1],K=X[2];return J[0]=Z[0]*Y,J[1]=Z[1]*Y,J[2]=Z[2]*Y,J[3]=Z[3]*Y,J[4]=Z[4]*$,J[5]=Z[5]*$,J[6]=Z[6]*$,J[7]=Z[7]*$,J[8]=Z[8]*K,J[9]=Z[9]*K,J[10]=Z[10]*K,J[11]=Z[11]*K,J[12]=Z[12],J[13]=Z[13],J[14]=Z[14],J[15]=Z[15],J}function Xs0(J,Z,X,Y){var $=Y[0],K=Y[1],Q=Y[2],W=Math.hypot($,K,Q),G,V,z,H,U,F,q,N,w,k,B,j,D,v,O,P,S,R,h,_,y,p,A,d;if(W<n)return null;if(W=1/W,$*=W,K*=W,Q*=W,G=Math.sin(X),V=Math.cos(X),z=1-V,H=Z[0],U=Z[1],F=Z[2],q=Z[3],N=Z[4],w=Z[5],k=Z[6],B=Z[7],j=Z[8],D=Z[9],v=Z[10],O=Z[11],P=$*$*z+V,S=K*$*z+Q*G,R=Q*$*z-K*G,h=$*K*z-Q*G,_=K*K*z+V,y=Q*K*z+$*G,p=$*Q*z+K*G,A=K*Q*z-$*G,d=Q*Q*z+V,J[0]=H*P+N*S+j*R,J[1]=U*P+w*S+D*R,J[2]=F*P+k*S+v*R,J[3]=q*P+B*S+O*R,J[4]=H*h+N*_+j*y,J[5]=U*h+w*_+D*y,J[6]=F*h+k*_+v*y,J[7]=q*h+B*_+O*y,J[8]=H*p+N*A+j*d,J[9]=U*p+w*A+D*d,J[10]=F*p+k*A+v*d,J[11]=q*p+B*A+O*d,Z!==J)J[12]=Z[12],J[13]=Z[13],J[14]=Z[14],J[15]=Z[15];return J}function Ys0(J,Z,X){var Y=Math.sin(X),$=Math.cos(X),K=Z[4],Q=Z[5],W=Z[6],G=Z[7],V=Z[8],z=Z[9],H=Z[10],U=Z[11];if(Z!==J)J[0]=Z[0],J[1]=Z[1],J[2]=Z[2],J[3]=Z[3],J[12]=Z[12],J[13]=Z[13],J[14]=Z[14],J[15]=Z[15];return J[4]=K*$+V*Y,J[5]=Q*$+z*Y,J[6]=W*$+H*Y,J[7]=G*$+U*Y,J[8]=V*$-K*Y,J[9]=z*$-Q*Y,J[10]=H*$-W*Y,J[11]=U*$-G*Y,J}function $s0(J,Z,X){var Y=Math.sin(X),$=Math.cos(X),K=Z[0],Q=Z[1],W=Z[2],G=Z[3],V=Z[8],z=Z[9],H=Z[10],U=Z[11];if(Z!==J)J[4]=Z[4],J[5]=Z[5],J[6]=Z[6],J[7]=Z[7],J[12]=Z[12],J[13]=Z[13],J[14]=Z[14],J[15]=Z[15];return J[0]=K*$-V*Y,J[1]=Q*$-z*Y,J[2]=W*$-H*Y,J[3]=G*$-U*Y,J[8]=K*Y+V*$,J[9]=Q*Y+z*$,J[10]=W*Y+H*$,J[11]=G*Y+U*$,J}function Ks0(J,Z,X){var Y=Math.sin(X),$=Math.cos(X),K=Z[0],Q=Z[1],W=Z[2],G=Z[3],V=Z[4],z=Z[5],H=Z[6],U=Z[7];if(Z!==J)J[8]=Z[8],J[9]=Z[9],J[10]=Z[10],J[11]=Z[11],J[12]=Z[12],J[13]=Z[13],J[14]=Z[14],J[15]=Z[15];return J[0]=K*$+V*Y,J[1]=Q*$+z*Y,J[2]=W*$+H*Y,J[3]=G*$+U*Y,J[4]=V*$-K*Y,J[5]=z*$-Q*Y,J[6]=H*$-W*Y,J[7]=U*$-G*Y,J}function Qs0(J,Z){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]=Z[0],J[13]=Z[1],J[14]=Z[2],J[15]=1,J}function Ws0(J,Z){return J[0]=Z[0],J[1]=0,J[2]=0,J[3]=0,J[4]=0,J[5]=Z[1],J[6]=0,J[7]=0,J[8]=0,J[9]=0,J[10]=Z[2],J[11]=0,J[12]=0,J[13]=0,J[14]=0,J[15]=1,J}function Gs0(J,Z,X){var Y=X[0],$=X[1],K=X[2],Q=Math.hypot(Y,$,K),W,G,V;if(Q<n)return null;return Q=1/Q,Y*=Q,$*=Q,K*=Q,W=Math.sin(Z),G=Math.cos(Z),V=1-G,J[0]=Y*Y*V+G,J[1]=$*Y*V+K*W,J[2]=K*Y*V-$*W,J[3]=0,J[4]=Y*$*V-K*W,J[5]=$*$*V+G,J[6]=K*$*V+Y*W,J[7]=0,J[8]=Y*K*V+$*W,J[9]=$*K*V-Y*W,J[10]=K*K*V+G,J[11]=0,J[12]=0,J[13]=0,J[14]=0,J[15]=1,J}function Vs0(J,Z){var X=Math.sin(Z),Y=Math.cos(Z);return J[0]=1,J[1]=0,J[2]=0,J[3]=0,J[4]=0,J[5]=Y,J[6]=X,J[7]=0,J[8]=0,J[9]=-X,J[10]=Y,J[11]=0,J[12]=0,J[13]=0,J[14]=0,J[15]=1,J}function zs0(J,Z){var X=Math.sin(Z),Y=Math.cos(Z);return J[0]=Y,J[1]=0,J[2]=-X,J[3]=0,J[4]=0,J[5]=1,J[6]=0,J[7]=0,J[8]=X,J[9]=0,J[10]=Y,J[11]=0,J[12]=0,J[13]=0,J[14]=0,J[15]=1,J}function Hs0(J,Z){var X=Math.sin(Z),Y=Math.cos(Z);return J[0]=Y,J[1]=X,J[2]=0,J[3]=0,J[4]=-X,J[5]=Y,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 RX0(J,Z,X){var Y=Z[0],$=Z[1],K=Z[2],Q=Z[3],W=Y+Y,G=$+$,V=K+K,z=Y*W,H=Y*G,U=Y*V,F=$*G,q=$*V,N=K*V,w=Q*W,k=Q*G,B=Q*V;return J[0]=1-(F+N),J[1]=H+B,J[2]=U-k,J[3]=0,J[4]=H-B,J[5]=1-(z+N),J[6]=q+w,J[7]=0,J[8]=U+k,J[9]=q-w,J[10]=1-(z+F),J[11]=0,J[12]=X[0],J[13]=X[1],J[14]=X[2],J[15]=1,J}function Us0(J,Z){var X=new w0(3),Y=-Z[0],$=-Z[1],K=-Z[2],Q=Z[3],W=Z[4],G=Z[5],V=Z[6],z=Z[7],H=Y*Y+$*$+K*K+Q*Q;if(H>0)X[0]=(W*Q+z*Y+G*K-V*$)*2/H,X[1]=(G*Q+z*$+V*Y-W*K)*2/H,X[2]=(V*Q+z*K+W*$-G*Y)*2/H;else X[0]=(W*Q+z*Y+G*K-V*$)*2,X[1]=(G*Q+z*$+V*Y-W*K)*2,X[2]=(V*Q+z*K+W*$-G*Y)*2;return RX0(J,Z,X),J}function Fs0(J,Z){return J[0]=Z[12],J[1]=Z[13],J[2]=Z[14],J}function SX0(J,Z){var X=Z[0],Y=Z[1],$=Z[2],K=Z[4],Q=Z[5],W=Z[6],G=Z[8],V=Z[9],z=Z[10];return J[0]=Math.hypot(X,Y,$),J[1]=Math.hypot(K,Q,W),J[2]=Math.hypot(G,V,z),J}function ws0(J,Z){var X=new w0(3);SX0(X,Z);var Y=1/X[0],$=1/X[1],K=1/X[2],Q=Z[0]*Y,W=Z[1]*$,G=Z[2]*K,V=Z[4]*Y,z=Z[5]*$,H=Z[6]*K,U=Z[8]*Y,F=Z[9]*$,q=Z[10]*K,N=Q+z+q,w=0;if(N>0)w=Math.sqrt(N+1)*2,J[3]=0.25*w,J[0]=(H-F)/w,J[1]=(U-G)/w,J[2]=(W-V)/w;else if(Q>z&&Q>q)w=Math.sqrt(1+Q-z-q)*2,J[3]=(H-F)/w,J[0]=0.25*w,J[1]=(W+V)/w,J[2]=(U+G)/w;else if(z>q)w=Math.sqrt(1+z-Q-q)*2,J[3]=(U-G)/w,J[0]=(W+V)/w,J[1]=0.25*w,J[2]=(H+F)/w;else w=Math.sqrt(1+q-Q-z)*2,J[3]=(W-V)/w,J[0]=(U+G)/w,J[1]=(H+F)/w,J[2]=0.25*w;return J}function Ls0(J,Z,X,Y){var $=Z[0],K=Z[1],Q=Z[2],W=Z[3],G=$+$,V=K+K,z=Q+Q,H=$*G,U=$*V,F=$*z,q=K*V,N=K*z,w=Q*z,k=W*G,B=W*V,j=W*z,D=Y[0],v=Y[1],O=Y[2];return J[0]=(1-(q+w))*D,J[1]=(U+j)*D,J[2]=(F-B)*D,J[3]=0,J[4]=(U-j)*v,J[5]=(1-(H+w))*v,J[6]=(N+k)*v,J[7]=0,J[8]=(F+B)*O,J[9]=(N-k)*O,J[10]=(1-(H+q))*O,J[11]=0,J[12]=X[0],J[13]=X[1],J[14]=X[2],J[15]=1,J}function qs0(J,Z,X,Y,$){var K=Z[0],Q=Z[1],W=Z[2],G=Z[3],V=K+K,z=Q+Q,H=W+W,U=K*V,F=K*z,q=K*H,N=Q*z,w=Q*H,k=W*H,B=G*V,j=G*z,D=G*H,v=Y[0],O=Y[1],P=Y[2],S=$[0],R=$[1],h=$[2],_=(1-(N+k))*v,y=(F+D)*v,p=(q-j)*v,A=(F-D)*O,d=(1-(U+k))*O,Q0=(w+B)*O,t0=(q+j)*P,U8=(w-B)*P,c1=(1-(U+N))*P;return J[0]=_,J[1]=y,J[2]=p,J[3]=0,J[4]=A,J[5]=d,J[6]=Q0,J[7]=0,J[8]=t0,J[9]=U8,J[10]=c1,J[11]=0,J[12]=X[0]+S-(_*S+A*R+t0*h),J[13]=X[1]+R-(y*S+d*R+U8*h),J[14]=X[2]+h-(p*S+Q0*R+c1*h),J[15]=1,J}function Ms0(J,Z){var X=Z[0],Y=Z[1],$=Z[2],K=Z[3],Q=X+X,W=Y+Y,G=$+$,V=X*Q,z=Y*Q,H=Y*W,U=$*Q,F=$*W,q=$*G,N=K*Q,w=K*W,k=K*G;return J[0]=1-H-q,J[1]=z+k,J[2]=U-w,J[3]=0,J[4]=z-k,J[5]=1-V-q,J[6]=F+N,J[7]=0,J[8]=U+w,J[9]=F-N,J[10]=1-V-H,J[11]=0,J[12]=0,J[13]=0,J[14]=0,J[15]=1,J}function Ns0(J,Z,X,Y,$,K,Q){var W=1/(X-Z),G=1/($-Y),V=1/(K-Q);return J[0]=K*2*W,J[1]=0,J[2]=0,J[3]=0,J[4]=0,J[5]=K*2*G,J[6]=0,J[7]=0,J[8]=(X+Z)*W,J[9]=($+Y)*G,J[10]=(Q+K)*V,J[11]=-1,J[12]=0,J[13]=0,J[14]=Q*K*2*V,J[15]=0,J}function IX0(J,Z,X,Y,$){var K=1/Math.tan(Z/2),Q;if(J[0]=K/X,J[1]=0,J[2]=0,J[3]=0,J[4]=0,J[5]=K,J[6]=0,J[7]=0,J[8]=0,J[9]=0,J[11]=-1,J[12]=0,J[13]=0,J[15]=0,$!=null&&$!==1/0)Q=1/(Y-$),J[10]=($+Y)*Q,J[14]=2*$*Y*Q;else J[10]=-1,J[14]=-2*Y;return J}var ks0=IX0;function Bs0(J,Z,X,Y,$){var K=1/Math.tan(Z/2),Q;if(J[0]=K/X,J[1]=0,J[2]=0,J[3]=0,J[4]=0,J[5]=K,J[6]=0,J[7]=0,J[8]=0,J[9]=0,J[11]=-1,J[12]=0,J[13]=0,J[15]=0,$!=null&&$!==1/0)Q=1/(Y-$),J[10]=$*Q,J[14]=$*Y*Q;else J[10]=-1,J[14]=-Y;return J}function Os0(J,Z,X,Y){var $=Math.tan(Z.upDegrees*Math.PI/180),K=Math.tan(Z.downDegrees*Math.PI/180),Q=Math.tan(Z.leftDegrees*Math.PI/180),W=Math.tan(Z.rightDegrees*Math.PI/180),G=2/(Q+W),V=2/($+K);return J[0]=G,J[1]=0,J[2]=0,J[3]=0,J[4]=0,J[5]=V,J[6]=0,J[7]=0,J[8]=-((Q-W)*G*0.5),J[9]=($-K)*V*0.5,J[10]=Y/(X-Y),J[11]=-1,J[12]=0,J[13]=0,J[14]=Y*X/(X-Y),J[15]=0,J}function hX0(J,Z,X,Y,$,K,Q){var W=1/(Z-X),G=1/(Y-$),V=1/(K-Q);return J[0]=-2*W,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*V,J[11]=0,J[12]=(Z+X)*W,J[13]=($+Y)*G,J[14]=(Q+K)*V,J[15]=1,J}var js0=hX0;function Ds0(J,Z,X,Y,$,K,Q){var W=1/(Z-X),G=1/(Y-$),V=1/(K-Q);return J[0]=-2*W,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]=V,J[11]=0,J[12]=(Z+X)*W,J[13]=($+Y)*G,J[14]=K*V,J[15]=1,J}function Ps0(J,Z,X,Y){var $,K,Q,W,G,V,z,H,U,F,q=Z[0],N=Z[1],w=Z[2],k=Y[0],B=Y[1],j=Y[2],D=X[0],v=X[1],O=X[2];if(Math.abs(q-D)<n&&Math.abs(N-v)<n&&Math.abs(w-O)<n)return CX0(J);if(z=q-D,H=N-v,U=w-O,F=1/Math.hypot(z,H,U),z*=F,H*=F,U*=F,$=B*U-j*H,K=j*z-k*U,Q=k*H-B*z,F=Math.hypot($,K,Q),!F)$=0,K=0,Q=0;else F=1/F,$*=F,K*=F,Q*=F;if(W=H*Q-U*K,G=U*$-z*Q,V=z*K-H*$,F=Math.hypot(W,G,V),!F)W=0,G=0,V=0;else F=1/F,W*=F,G*=F,V*=F;return J[0]=$,J[1]=W,J[2]=z,J[3]=0,J[4]=K,J[5]=G,J[6]=H,J[7]=0,J[8]=Q,J[9]=V,J[10]=U,J[11]=0,J[12]=-($*q+K*N+Q*w),J[13]=-(W*q+G*N+V*w),J[14]=-(z*q+H*N+U*w),J[15]=1,J}function Es0(J,Z,X,Y){var $=Z[0],K=Z[1],Q=Z[2],W=Y[0],G=Y[1],V=Y[2],z=$-X[0],H=K-X[1],U=Q-X[2],F=z*z+H*H+U*U;if(F>0)F=1/Math.sqrt(F),z*=F,H*=F,U*=F;var q=G*U-V*H,N=V*z-W*U,w=W*H-G*z;if(F=q*q+N*N+w*w,F>0)F=1/Math.sqrt(F),q*=F,N*=F,w*=F;return J[0]=q,J[1]=N,J[2]=w,J[3]=0,J[4]=H*w-U*N,J[5]=U*q-z*w,J[6]=z*N-H*q,J[7]=0,J[8]=z,J[9]=H,J[10]=U,J[11]=0,J[12]=$,J[13]=K,J[14]=Q,J[15]=1,J}function vs0(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 xs0(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 Cs0(J,Z,X){return J[0]=Z[0]+X[0],J[1]=Z[1]+X[1],J[2]=Z[2]+X[2],J[3]=Z[3]+X[3],J[4]=Z[4]+X[4],J[5]=Z[5]+X[5],J[6]=Z[6]+X[6],J[7]=Z[7]+X[7],J[8]=Z[8]+X[8],J[9]=Z[9]+X[9],J[10]=Z[10]+X[10],J[11]=Z[11]+X[11],J[12]=Z[12]+X[12],J[13]=Z[13]+X[13],J[14]=Z[14]+X[14],J[15]=Z[15]+X[15],J}function _X0(J,Z,X){return J[0]=Z[0]-X[0],J[1]=Z[1]-X[1],J[2]=Z[2]-X[2],J[3]=Z[3]-X[3],J[4]=Z[4]-X[4],J[5]=Z[5]-X[5],J[6]=Z[6]-X[6],J[7]=Z[7]-X[7],J[8]=Z[8]-X[8],J[9]=Z[9]-X[9],J[10]=Z[10]-X[10],J[11]=Z[11]-X[11],J[12]=Z[12]-X[12],J[13]=Z[13]-X[13],J[14]=Z[14]-X[14],J[15]=Z[15]-X[15],J}function Ts0(J,Z,X){return J[0]=Z[0]*X,J[1]=Z[1]*X,J[2]=Z[2]*X,J[3]=Z[3]*X,J[4]=Z[4]*X,J[5]=Z[5]*X,J[6]=Z[6]*X,J[7]=Z[7]*X,J[8]=Z[8]*X,J[9]=Z[9]*X,J[10]=Z[10]*X,J[11]=Z[11]*X,J[12]=Z[12]*X,J[13]=Z[13]*X,J[14]=Z[14]*X,J[15]=Z[15]*X,J}function Rs0(J,Z,X,Y){return J[0]=Z[0]+X[0]*Y,J[1]=Z[1]+X[1]*Y,J[2]=Z[2]+X[2]*Y,J[3]=Z[3]+X[3]*Y,J[4]=Z[4]+X[4]*Y,J[5]=Z[5]+X[5]*Y,J[6]=Z[6]+X[6]*Y,J[7]=Z[7]+X[7]*Y,J[8]=Z[8]+X[8]*Y,J[9]=Z[9]+X[9]*Y,J[10]=Z[10]+X[10]*Y,J[11]=Z[11]+X[11]*Y,J[12]=Z[12]+X[12]*Y,J[13]=Z[13]+X[13]*Y,J[14]=Z[14]+X[14]*Y,J[15]=Z[15]+X[15]*Y,J}function Ss0(J,Z){return J[0]===Z[0]&&J[1]===Z[1]&&J[2]===Z[2]&&J[3]===Z[3]&&J[4]===Z[4]&&J[5]===Z[5]&&J[6]===Z[6]&&J[7]===Z[7]&&J[8]===Z[8]&&J[9]===Z[9]&&J[10]===Z[10]&&J[11]===Z[11]&&J[12]===Z[12]&&J[13]===Z[13]&&J[14]===Z[14]&&J[15]===Z[15]}function Is0(J,Z){var X=J[0],Y=J[1],$=J[2],K=J[3],Q=J[4],W=J[5],G=J[6],V=J[7],z=J[8],H=J[9],U=J[10],F=J[11],q=J[12],N=J[13],w=J[14],k=J[15],B=Z[0],j=Z[1],D=Z[2],v=Z[3],O=Z[4],P=Z[5],S=Z[6],R=Z[7],h=Z[8],_=Z[9],y=Z[10],p=Z[11],A=Z[12],d=Z[13],Q0=Z[14],t0=Z[15];return Math.abs(X-B)<=n*Math.max(1,Math.abs(X),Math.abs(B))&&Math.abs(Y-j)<=n*Math.max(1,Math.abs(Y),Math.abs(j))&&Math.abs($-D)<=n*Math.max(1,Math.abs($),Math.abs(D))&&Math.abs(K-v)<=n*Math.max(1,Math.abs(K),Math.abs(v))&&Math.abs(Q-O)<=n*Math.max(1,Math.abs(Q),Math.abs(O))&&Math.abs(W-P)<=n*Math.max(1,Math.abs(W),Math.abs(P))&&Math.abs(G-S)<=n*Math.max(1,Math.abs(G),Math.abs(S))&&Math.abs(V-R)<=n*Math.max(1,Math.abs(V),Math.abs(R))&&Math.abs(z-h)<=n*Math.max(1,Math.abs(z),Math.abs(h))&&Math.abs(H-_)<=n*Math.max(1,Math.abs(H),Math.abs(_))&&Math.abs(U-y)<=n*Math.max(1,Math.abs(U),Math.abs(y))&&Math.abs(F-p)<=n*Math.max(1,Math.abs(F),Math.abs(p))&&Math.abs(q-A)<=n*Math.max(1,Math.abs(q),Math.abs(A))&&Math.abs(N-d)<=n*Math.max(1,Math.abs(N),Math.abs(d))&&Math.abs(w-Q0)<=n*Math.max(1,Math.abs(w),Math.abs(Q0))&&Math.abs(k-t0)<=n*Math.max(1,Math.abs(k),Math.abs(t0))}var hs0=TX0,_s0=_X0;var I0={};p1(I0,{str:()=>Rr0,squaredLength:()=>VY0,sqrLen:()=>fr0,sqlerp:()=>ur0,slerp:()=>NH,setAxisAngle:()=>ZY0,setAxes:()=>dr0,set:()=>_r0,scale:()=>QY0,rotationTo:()=>lr0,rotateZ:()=>Dr0,rotateY:()=>jr0,rotateX:()=>Or0,random:()=>vr0,pow:()=>Er0,normalize:()=>pE,multiply:()=>XY0,mul:()=>yr0,ln:()=>$Y0,lerp:()=>gr0,length:()=>GY0,len:()=>mr0,invert:()=>xr0,identity:()=>Nr0,getAxisAngle:()=>kr0,getAngle:()=>Br0,fromValues:()=>Ir0,fromMat3:()=>KY0,fromEuler:()=>Tr0,exp:()=>YY0,exactEquals:()=>cr0,equals:()=>pr0,dot:()=>WY0,create:()=>cE,copy:()=>hr0,conjugate:()=>Cr0,clone:()=>Sr0,calculateW:()=>Pr0,add:()=>Ar0});var U0={};p1(U0,{zero:()=>Kr0,transformQuat:()=>Jr0,transformMat4:()=>ts0,transformMat3:()=>es0,subtract:()=>yX0,sub:()=>Vr0,str:()=>Qr0,squaredLength:()=>pX0,squaredDistance:()=>cX0,sqrLen:()=>wr0,sqrDist:()=>Fr0,set:()=>gs0,scaleAndAdd:()=>bs0,scale:()=>ds0,round:()=>us0,rotateZ:()=>Yr0,rotateY:()=>Xr0,rotateX:()=>Zr0,random:()=>rs0,normalize:()=>mE,negate:()=>ns0,multiply:()=>gX0,mul:()=>zr0,min:()=>ps0,max:()=>ls0,lerp:()=>as0,length:()=>AX0,len:()=>fE,inverse:()=>is0,hermite:()=>os0,fromValues:()=>qH,forEach:()=>Lr0,floor:()=>cs0,exactEquals:()=>Wr0,equals:()=>Gr0,dot:()=>MH,divide:()=>mX0,div:()=>Hr0,distance:()=>fX0,dist:()=>Ur0,cross:()=>lQ,create:()=>LH,copy:()=>ys0,clone:()=>As0,ceil:()=>fs0,bezier:()=>ss0,angle:()=>$r0,add:()=>ms0});function LH(){var J=new w0(3);if(w0!=Float32Array)J[0]=0,J[1]=0,J[2]=0;return J}function As0(J){var Z=new w0(3);return Z[0]=J[0],Z[1]=J[1],Z[2]=J[2],Z}function AX0(J){var Z=J[0],X=J[1],Y=J[2];return Math.hypot(Z,X,Y)}function qH(J,Z,X){var Y=new w0(3);return Y[0]=J,Y[1]=Z,Y[2]=X,Y}function ys0(J,Z){return J[0]=Z[0],J[1]=Z[1],J[2]=Z[2],J}function gs0(J,Z,X,Y){return J[0]=Z,J[1]=X,J[2]=Y,J}function ms0(J,Z,X){return J[0]=Z[0]+X[0],J[1]=Z[1]+X[1],J[2]=Z[2]+X[2],J}function yX0(J,Z,X){return J[0]=Z[0]-X[0],J[1]=Z[1]-X[1],J[2]=Z[2]-X[2],J}function gX0(J,Z,X){return J[0]=Z[0]*X[0],J[1]=Z[1]*X[1],J[2]=Z[2]*X[2],J}function mX0(J,Z,X){return J[0]=Z[0]/X[0],J[1]=Z[1]/X[1],J[2]=Z[2]/X[2],J}function fs0(J,Z){return J[0]=Math.ceil(Z[0]),J[1]=Math.ceil(Z[1]),J[2]=Math.ceil(Z[2]),J}function cs0(J,Z){return J[0]=Math.floor(Z[0]),J[1]=Math.floor(Z[1]),J[2]=Math.floor(Z[2]),J}function ps0(J,Z,X){return J[0]=Math.min(Z[0],X[0]),J[1]=Math.min(Z[1],X[1]),J[2]=Math.min(Z[2],X[2]),J}function ls0(J,Z,X){return J[0]=Math.max(Z[0],X[0]),J[1]=Math.max(Z[1],X[1]),J[2]=Math.max(Z[2],X[2]),J}function us0(J,Z){return J[0]=Math.round(Z[0]),J[1]=Math.round(Z[1]),J[2]=Math.round(Z[2]),J}function ds0(J,Z,X){return J[0]=Z[0]*X,J[1]=Z[1]*X,J[2]=Z[2]*X,J}function bs0(J,Z,X,Y){return J[0]=Z[0]+X[0]*Y,J[1]=Z[1]+X[1]*Y,J[2]=Z[2]+X[2]*Y,J}function fX0(J,Z){var X=Z[0]-J[0],Y=Z[1]-J[1],$=Z[2]-J[2];return Math.hypot(X,Y,$)}function cX0(J,Z){var X=Z[0]-J[0],Y=Z[1]-J[1],$=Z[2]-J[2];return X*X+Y*Y+$*$}function pX0(J){var Z=J[0],X=J[1],Y=J[2];return Z*Z+X*X+Y*Y}function ns0(J,Z){return J[0]=-Z[0],J[1]=-Z[1],J[2]=-Z[2],J}function is0(J,Z){return J[0]=1/Z[0],J[1]=1/Z[1],J[2]=1/Z[2],J}function mE(J,Z){var X=Z[0],Y=Z[1],$=Z[2],K=X*X+Y*Y+$*$;if(K>0)K=1/Math.sqrt(K);return J[0]=Z[0]*K,J[1]=Z[1]*K,J[2]=Z[2]*K,J}function MH(J,Z){return J[0]*Z[0]+J[1]*Z[1]+J[2]*Z[2]}function lQ(J,Z,X){var Y=Z[0],$=Z[1],K=Z[2],Q=X[0],W=X[1],G=X[2];return J[0]=$*G-K*W,J[1]=K*Q-Y*G,J[2]=Y*W-$*Q,J}function as0(J,Z,X,Y){var $=Z[0],K=Z[1],Q=Z[2];return J[0]=$+Y*(X[0]-$),J[1]=K+Y*(X[1]-K),J[2]=Q+Y*(X[2]-Q),J}function os0(J,Z,X,Y,$,K){var Q=K*K,W=Q*(2*K-3)+1,G=Q*(K-2)+K,V=Q*(K-1),z=Q*(3-2*K);return J[0]=Z[0]*W+X[0]*G+Y[0]*V+$[0]*z,J[1]=Z[1]*W+X[1]*G+Y[1]*V+$[1]*z,J[2]=Z[2]*W+X[2]*G+Y[2]*V+$[2]*z,J}function ss0(J,Z,X,Y,$,K){var Q=1-K,W=Q*Q,G=K*K,V=W*Q,z=3*K*W,H=3*G*Q,U=G*K;return J[0]=Z[0]*V+X[0]*z+Y[0]*H+$[0]*U,J[1]=Z[1]*V+X[1]*z+Y[1]*H+$[1]*U,J[2]=Z[2]*V+X[2]*z+Y[2]*H+$[2]*U,J}function rs0(J,Z){Z=Z||1;var X=H9()*2*Math.PI,Y=H9()*2-1,$=Math.sqrt(1-Y*Y)*Z;return J[0]=Math.cos(X)*$,J[1]=Math.sin(X)*$,J[2]=Y*Z,J}function ts0(J,Z,X){var Y=Z[0],$=Z[1],K=Z[2],Q=X[3]*Y+X[7]*$+X[11]*K+X[15];return Q=Q||1,J[0]=(X[0]*Y+X[4]*$+X[8]*K+X[12])/Q,J[1]=(X[1]*Y+X[5]*$+X[9]*K+X[13])/Q,J[2]=(X[2]*Y+X[6]*$+X[10]*K+X[14])/Q,J}function es0(J,Z,X){var Y=Z[0],$=Z[1],K=Z[2];return J[0]=Y*X[0]+$*X[3]+K*X[6],J[1]=Y*X[1]+$*X[4]+K*X[7],J[2]=Y*X[2]+$*X[5]+K*X[8],J}function Jr0(J,Z,X){var Y=X[0],$=X[1],K=X[2],Q=X[3],W=Z[0],G=Z[1],V=Z[2],z=$*V-K*G,H=K*W-Y*V,U=Y*G-$*W,F=$*U-K*H,q=K*z-Y*U,N=Y*H-$*z,w=Q*2;return z*=w,H*=w,U*=w,F*=2,q*=2,N*=2,J[0]=W+z+F,J[1]=G+H+q,J[2]=V+U+N,J}function Zr0(J,Z,X,Y){var $=[],K=[];return $[0]=Z[0]-X[0],$[1]=Z[1]-X[1],$[2]=Z[2]-X[2],K[0]=$[0],K[1]=$[1]*Math.cos(Y)-$[2]*Math.sin(Y),K[2]=$[1]*Math.sin(Y)+$[2]*Math.cos(Y),J[0]=K[0]+X[0],J[1]=K[1]+X[1],J[2]=K[2]+X[2],J}function Xr0(J,Z,X,Y){var $=[],K=[];return $[0]=Z[0]-X[0],$[1]=Z[1]-X[1],$[2]=Z[2]-X[2],K[0]=$[2]*Math.sin(Y)+$[0]*Math.cos(Y),K[1]=$[1],K[2]=$[2]*Math.cos(Y)-$[0]*Math.sin(Y),J[0]=K[0]+X[0],J[1]=K[1]+X[1],J[2]=K[2]+X[2],J}function Yr0(J,Z,X,Y){var $=[],K=[];return $[0]=Z[0]-X[0],$[1]=Z[1]-X[1],$[2]=Z[2]-X[2],K[0]=$[0]*Math.cos(Y)-$[1]*Math.sin(Y),K[1]=$[0]*Math.sin(Y)+$[1]*Math.cos(Y),K[2]=$[2],J[0]=K[0]+X[0],J[1]=K[1]+X[1],J[2]=K[2]+X[2],J}function $r0(J,Z){var X=J[0],Y=J[1],$=J[2],K=Z[0],Q=Z[1],W=Z[2],G=Math.sqrt(X*X+Y*Y+$*$),V=Math.sqrt(K*K+Q*Q+W*W),z=G*V,H=z&&MH(J,Z)/z;return Math.acos(Math.min(Math.max(H,-1),1))}function Kr0(J){return J[0]=0,J[1]=0,J[2]=0,J}function Qr0(J){return"vec3("+J[0]+", "+J[1]+", "+J[2]+")"}function Wr0(J,Z){return J[0]===Z[0]&&J[1]===Z[1]&&J[2]===Z[2]}function Gr0(J,Z){var X=J[0],Y=J[1],$=J[2],K=Z[0],Q=Z[1],W=Z[2];return Math.abs(X-K)<=n*Math.max(1,Math.abs(X),Math.abs(K))&&Math.abs(Y-Q)<=n*Math.max(1,Math.abs(Y),Math.abs(Q))&&Math.abs($-W)<=n*Math.max(1,Math.abs($),Math.abs(W))}var Vr0=yX0,zr0=gX0,Hr0=mX0,Ur0=fX0,Fr0=cX0,fE=AX0,wr0=pX0,Lr0=function(){var J=LH();return function(Z,X,Y,$,K,Q){var W,G;if(!X)X=3;if(!Y)Y=0;if($)G=Math.min($*X+Y,Z.length);else G=Z.length;for(W=Y;W<G;W+=X)J[0]=Z[W],J[1]=Z[W+1],J[2]=Z[W+2],K(J,J,Q),Z[W]=J[0],Z[W+1]=J[1],Z[W+2]=J[2];return Z}}();function qr0(){var J=new w0(4);if(w0!=Float32Array)J[0]=0,J[1]=0,J[2]=0,J[3]=0;return J}function lX0(J){var Z=new w0(4);return Z[0]=J[0],Z[1]=J[1],Z[2]=J[2],Z[3]=J[3],Z}function uX0(J,Z,X,Y){var $=new w0(4);return $[0]=J,$[1]=Z,$[2]=X,$[3]=Y,$}function dX0(J,Z){return J[0]=Z[0],J[1]=Z[1],J[2]=Z[2],J[3]=Z[3],J}function bX0(J,Z,X,Y,$){return J[0]=Z,J[1]=X,J[2]=Y,J[3]=$,J}function nX0(J,Z,X){return J[0]=Z[0]+X[0],J[1]=Z[1]+X[1],J[2]=Z[2]+X[2],J[3]=Z[3]+X[3],J}function iX0(J,Z,X){return J[0]=Z[0]*X,J[1]=Z[1]*X,J[2]=Z[2]*X,J[3]=Z[3]*X,J}function aX0(J){var Z=J[0],X=J[1],Y=J[2],$=J[3];return Math.hypot(Z,X,Y,$)}function oX0(J){var Z=J[0],X=J[1],Y=J[2],$=J[3];return Z*Z+X*X+Y*Y+$*$}function sX0(J,Z){var X=Z[0],Y=Z[1],$=Z[2],K=Z[3],Q=X*X+Y*Y+$*$+K*K;if(Q>0)Q=1/Math.sqrt(Q);return J[0]=X*Q,J[1]=Y*Q,J[2]=$*Q,J[3]=K*Q,J}function rX0(J,Z){return J[0]*Z[0]+J[1]*Z[1]+J[2]*Z[2]+J[3]*Z[3]}function tX0(J,Z,X,Y){var $=Z[0],K=Z[1],Q=Z[2],W=Z[3];return J[0]=$+Y*(X[0]-$),J[1]=K+Y*(X[1]-K),J[2]=Q+Y*(X[2]-Q),J[3]=W+Y*(X[3]-W),J}function eX0(J,Z){return J[0]===Z[0]&&J[1]===Z[1]&&J[2]===Z[2]&&J[3]===Z[3]}function JY0(J,Z){var X=J[0],Y=J[1],$=J[2],K=J[3],Q=Z[0],W=Z[1],G=Z[2],V=Z[3];return Math.abs(X-Q)<=n*Math.max(1,Math.abs(X),Math.abs(Q))&&Math.abs(Y-W)<=n*Math.max(1,Math.abs(Y),Math.abs(W))&&Math.abs($-G)<=n*Math.max(1,Math.abs($),Math.abs(G))&&Math.abs(K-V)<=n*Math.max(1,Math.abs(K),Math.abs(V))}var eE8=function(){var J=qr0();return function(Z,X,Y,$,K,Q){var W,G;if(!X)X=4;if(!Y)Y=0;if($)G=Math.min($*X+Y,Z.length);else G=Z.length;for(W=Y;W<G;W+=X)J[0]=Z[W],J[1]=Z[W+1],J[2]=Z[W+2],J[3]=Z[W+3],K(J,J,Q),Z[W]=J[0],Z[W+1]=J[1],Z[W+2]=J[2],Z[W+3]=J[3];return Z}}();function cE(){var J=new w0(4);if(w0!=Float32Array)J[0]=0,J[1]=0,J[2]=0;return J[3]=1,J}function Nr0(J){return J[0]=0,J[1]=0,J[2]=0,J[3]=1,J}function ZY0(J,Z,X){X=X*0.5;var Y=Math.sin(X);return J[0]=Y*Z[0],J[1]=Y*Z[1],J[2]=Y*Z[2],J[3]=Math.cos(X),J}function kr0(J,Z){var X=Math.acos(Z[3])*2,Y=Math.sin(X/2);if(Y>n)J[0]=Z[0]/Y,J[1]=Z[1]/Y,J[2]=Z[2]/Y;else J[0]=1,J[1]=0,J[2]=0;return X}function Br0(J,Z){var X=WY0(J,Z);return Math.acos(2*X*X-1)}function XY0(J,Z,X){var Y=Z[0],$=Z[1],K=Z[2],Q=Z[3],W=X[0],G=X[1],V=X[2],z=X[3];return J[0]=Y*z+Q*W+$*V-K*G,J[1]=$*z+Q*G+K*W-Y*V,J[2]=K*z+Q*V+Y*G-$*W,J[3]=Q*z-Y*W-$*G-K*V,J}function Or0(J,Z,X){X*=0.5;var Y=Z[0],$=Z[1],K=Z[2],Q=Z[3],W=Math.sin(X),G=Math.cos(X);return J[0]=Y*G+Q*W,J[1]=$*G+K*W,J[2]=K*G-$*W,J[3]=Q*G-Y*W,J}function jr0(J,Z,X){X*=0.5;var Y=Z[0],$=Z[1],K=Z[2],Q=Z[3],W=Math.sin(X),G=Math.cos(X);return J[0]=Y*G-K*W,J[1]=$*G+Q*W,J[2]=K*G+Y*W,J[3]=Q*G-$*W,J}function Dr0(J,Z,X){X*=0.5;var Y=Z[0],$=Z[1],K=Z[2],Q=Z[3],W=Math.sin(X),G=Math.cos(X);return J[0]=Y*G+$*W,J[1]=$*G-Y*W,J[2]=K*G+Q*W,J[3]=Q*G-K*W,J}function Pr0(J,Z){var X=Z[0],Y=Z[1],$=Z[2];return J[0]=X,J[1]=Y,J[2]=$,J[3]=Math.sqrt(Math.abs(1-X*X-Y*Y-$*$)),J}function YY0(J,Z){var X=Z[0],Y=Z[1],$=Z[2],K=Z[3],Q=Math.sqrt(X*X+Y*Y+$*$),W=Math.exp(K),G=Q>0?W*Math.sin(Q)/Q:0;return J[0]=X*G,J[1]=Y*G,J[2]=$*G,J[3]=W*Math.cos(Q),J}function $Y0(J,Z){var X=Z[0],Y=Z[1],$=Z[2],K=Z[3],Q=Math.sqrt(X*X+Y*Y+$*$),W=Q>0?Math.atan2(Q,K)/Q:0;return J[0]=X*W,J[1]=Y*W,J[2]=$*W,J[3]=0.5*Math.log(X*X+Y*Y+$*$+K*K),J}function Er0(J,Z,X){return $Y0(J,Z),QY0(J,J,X),YY0(J,J),J}function NH(J,Z,X,Y){var $=Z[0],K=Z[1],Q=Z[2],W=Z[3],G=X[0],V=X[1],z=X[2],H=X[3],U,F,q,N,w;if(F=$*G+K*V+Q*z+W*H,F<0)F=-F,G=-G,V=-V,z=-z,H=-H;if(1-F>n)U=Math.acos(F),q=Math.sin(U),N=Math.sin((1-Y)*U)/q,w=Math.sin(Y*U)/q;else N=1-Y,w=Y;return J[0]=N*$+w*G,J[1]=N*K+w*V,J[2]=N*Q+w*z,J[3]=N*W+w*H,J}function vr0(J){var Z=H9(),X=H9(),Y=H9(),$=Math.sqrt(1-Z),K=Math.sqrt(Z);return J[0]=$*Math.sin(2*Math.PI*X),J[1]=$*Math.cos(2*Math.PI*X),J[2]=K*Math.sin(2*Math.PI*Y),J[3]=K*Math.cos(2*Math.PI*Y),J}function xr0(J,Z){var X=Z[0],Y=Z[1],$=Z[2],K=Z[3],Q=X*X+Y*Y+$*$+K*K,W=Q?1/Q:0;return J[0]=-X*W,J[1]=-Y*W,J[2]=-$*W,J[3]=K*W,J}function Cr0(J,Z){return J[0]=-Z[0],J[1]=-Z[1],J[2]=-Z[2],J[3]=Z[3],J}function KY0(J,Z){var X=Z[0]+Z[4]+Z[8],Y;if(X>0)Y=Math.sqrt(X+1),J[3]=0.5*Y,Y=0.5/Y,J[0]=(Z[5]-Z[7])*Y,J[1]=(Z[6]-Z[2])*Y,J[2]=(Z[1]-Z[3])*Y;else{var $=0;if(Z[4]>Z[0])$=1;if(Z[8]>Z[$*3+$])$=2;var K=($+1)%3,Q=($+2)%3;Y=Math.sqrt(Z[$*3+$]-Z[K*3+K]-Z[Q*3+Q]+1),J[$]=0.5*Y,Y=0.5/Y,J[3]=(Z[K*3+Q]-Z[Q*3+K])*Y,J[K]=(Z[K*3+$]+Z[$*3+K])*Y,J[Q]=(Z[Q*3+$]+Z[$*3+Q])*Y}return J}function Tr0(J,Z,X,Y){var $=0.5*Math.PI/180;Z*=$,X*=$,Y*=$;var K=Math.sin(Z),Q=Math.cos(Z),W=Math.sin(X),G=Math.cos(X),V=Math.sin(Y),z=Math.cos(Y);return J[0]=K*G*z-Q*W*V,J[1]=Q*W*z+K*G*V,J[2]=Q*G*V-K*W*z,J[3]=Q*G*z+K*W*V,J}function Rr0(J){return"quat("+J[0]+", "+J[1]+", "+J[2]+", "+J[3]+")"}var Sr0=lX0,Ir0=uX0,hr0=dX0,_r0=bX0,Ar0=nX0,yr0=XY0,QY0=iX0,WY0=rX0,gr0=tX0,GY0=aX0,mr0=GY0,VY0=oX0,fr0=VY0,pE=sX0,cr0=eX0,pr0=JY0,lr0=function(){var J=LH(),Z=qH(1,0,0),X=qH(0,1,0);return function(Y,$,K){var Q=MH($,K);if(Q<-0.999999){if(lQ(J,Z,$),fE(J)<0.000001)lQ(J,X,$);return mE(J,J),ZY0(Y,J,Math.PI),Y}else if(Q>0.999999)return Y[0]=0,Y[1]=0,Y[2]=0,Y[3]=1,Y;else return lQ(J,$,K),Y[0]=J[0],Y[1]=J[1],Y[2]=J[2],Y[3]=1+Q,pE(Y,Y)}}(),ur0=function(){var J=cE(),Z=cE();return function(X,Y,$,K,Q,W){return NH(J,Y,Q,W),NH(Z,$,K,W),NH(X,J,Z,2*W*(1-W)),X}}(),dr0=function(){var J=gE();return function(Z,X,Y,$){return J[0]=Y[0],J[3]=Y[1],J[6]=Y[2],J[1]=$[0],J[4]=$[1],J[7]=$[2],J[2]=-X[0],J[5]=-X[1],J[8]=-X[2],pE(Z,KY0(Z,J))}}();var N0={};p1(N0,{zero:()=>qt0,transformMat4:()=>Ft0,transformMat3:()=>Ut0,transformMat2d:()=>Ht0,transformMat2:()=>zt0,subtract:()=>HY0,sub:()=>Ot0,str:()=>Mt0,squaredLength:()=>MY0,squaredDistance:()=>LY0,sqrLen:()=>vt0,sqrDist:()=>Et0,set:()=>ar0,scaleAndAdd:()=>Xt0,scale:()=>Zt0,round:()=>Jt0,rotate:()=>wt0,random:()=>Vt0,normalize:()=>Kt0,negate:()=>Yt0,multiply:()=>UY0,mul:()=>jt0,min:()=>tr0,max:()=>er0,lerp:()=>Gt0,length:()=>qY0,len:()=>Bt0,inverse:()=>$t0,fromValues:()=>nr0,forEach:()=>xt0,floor:()=>rr0,exactEquals:()=>Nt0,equals:()=>kt0,dot:()=>Qt0,divide:()=>FY0,div:()=>Dt0,distance:()=>wY0,dist:()=>Pt0,cross:()=>Wt0,create:()=>zY0,copy:()=>ir0,clone:()=>br0,ceil:()=>sr0,angle:()=>Lt0,add:()=>or0});function zY0(){var J=new w0(2);if(w0!=Float32Array)J[0]=0,J[1]=0;return J}function br0(J){var Z=new w0(2);return Z[0]=J[0],Z[1]=J[1],Z}function nr0(J,Z){var X=new w0(2);return X[0]=J,X[1]=Z,X}function ir0(J,Z){return J[0]=Z[0],J[1]=Z[1],J}function ar0(J,Z,X){return J[0]=Z,J[1]=X,J}function or0(J,Z,X){return J[0]=Z[0]+X[0],J[1]=Z[1]+X[1],J}function HY0(J,Z,X){return J[0]=Z[0]-X[0],J[1]=Z[1]-X[1],J}function UY0(J,Z,X){return J[0]=Z[0]*X[0],J[1]=Z[1]*X[1],J}function FY0(J,Z,X){return J[0]=Z[0]/X[0],J[1]=Z[1]/X[1],J}function sr0(J,Z){return J[0]=Math.ceil(Z[0]),J[1]=Math.ceil(Z[1]),J}function rr0(J,Z){return J[0]=Math.floor(Z[0]),J[1]=Math.floor(Z[1]),J}function tr0(J,Z,X){return J[0]=Math.min(Z[0],X[0]),J[1]=Math.min(Z[1],X[1]),J}function er0(J,Z,X){return J[0]=Math.max(Z[0],X[0]),J[1]=Math.max(Z[1],X[1]),J}function Jt0(J,Z){return J[0]=Math.round(Z[0]),J[1]=Math.round(Z[1]),J}function Zt0(J,Z,X){return J[0]=Z[0]*X,J[1]=Z[1]*X,J}function Xt0(J,Z,X,Y){return J[0]=Z[0]+X[0]*Y,J[1]=Z[1]+X[1]*Y,J}function wY0(J,Z){var X=Z[0]-J[0],Y=Z[1]-J[1];return Math.hypot(X,Y)}function LY0(J,Z){var X=Z[0]-J[0],Y=Z[1]-J[1];return X*X+Y*Y}function qY0(J){var Z=J[0],X=J[1];return Math.hypot(Z,X)}function MY0(J){var Z=J[0],X=J[1];return Z*Z+X*X}function Yt0(J,Z){return J[0]=-Z[0],J[1]=-Z[1],J}function $t0(J,Z){return J[0]=1/Z[0],J[1]=1/Z[1],J}function Kt0(J,Z){var X=Z[0],Y=Z[1],$=X*X+Y*Y;if($>0)$=1/Math.sqrt($);return J[0]=Z[0]*$,J[1]=Z[1]*$,J}function Qt0(J,Z){return J[0]*Z[0]+J[1]*Z[1]}function Wt0(J,Z,X){var Y=Z[0]*X[1]-Z[1]*X[0];return J[0]=J[1]=0,J[2]=Y,J}function Gt0(J,Z,X,Y){var $=Z[0],K=Z[1];return J[0]=$+Y*(X[0]-$),J[1]=K+Y*(X[1]-K),J}function Vt0(J,Z){Z=Z||1;var X=H9()*2*Math.PI;return J[0]=Math.cos(X)*Z,J[1]=Math.sin(X)*Z,J}function zt0(J,Z,X){var Y=Z[0],$=Z[1];return J[0]=X[0]*Y+X[2]*$,J[1]=X[1]*Y+X[3]*$,J}function Ht0(J,Z,X){var Y=Z[0],$=Z[1];return J[0]=X[0]*Y+X[2]*$+X[4],J[1]=X[1]*Y+X[3]*$+X[5],J}function Ut0(J,Z,X){var Y=Z[0],$=Z[1];return J[0]=X[0]*Y+X[3]*$+X[6],J[1]=X[1]*Y+X[4]*$+X[7],J}function Ft0(J,Z,X){var Y=Z[0],$=Z[1];return J[0]=X[0]*Y+X[4]*$+X[12],J[1]=X[1]*Y+X[5]*$+X[13],J}function wt0(J,Z,X,Y){var $=Z[0]-X[0],K=Z[1]-X[1],Q=Math.sin(Y),W=Math.cos(Y);return J[0]=$*W-K*Q+X[0],J[1]=$*Q+K*W+X[1],J}function Lt0(J,Z){var X=J[0],Y=J[1],$=Z[0],K=Z[1],Q=Math.sqrt(X*X+Y*Y)*Math.sqrt($*$+K*K),W=Q&&(X*$+Y*K)/Q;return Math.acos(Math.min(Math.max(W,-1),1))}function qt0(J){return J[0]=0,J[1]=0,J}function Mt0(J){return"vec2("+J[0]+", "+J[1]+")"}function Nt0(J,Z){return J[0]===Z[0]&&J[1]===Z[1]}function kt0(J,Z){var X=J[0],Y=J[1],$=Z[0],K=Z[1];return Math.abs(X-$)<=n*Math.max(1,Math.abs(X),Math.abs($))&&Math.abs(Y-K)<=n*Math.max(1,Math.abs(Y),Math.abs(K))}var Bt0=qY0,Ot0=HY0,jt0=UY0,Dt0=FY0,Pt0=wY0,Et0=LY0,vt0=MY0,xt0=function(){var J=zY0();return function(Z,X,Y,$,K,Q){var W,G;if(!X)X=2;if(!Y)Y=0;if($)G=Math.min($*X+Y,Z.length);else G=Z.length;for(W=Y;W<G;W+=X)J[0]=Z[W],J[1]=Z[W+1],K(J,J,Q),Z[W]=J[0],Z[W+1]=J[1];return Z}}();class cZ extends Float32Array{constructor(J,Z,X,Y){super([J,Z,X,Y])}get determinant(){return O8.determinant(this)}get frobeniusNorm(){return O8.frob(this)}static create(){let J=new cZ(0,0,0,0);return O8.identity(J),J}static fromRotation(J){let Z=cZ.create();return O8.fromRotation(Z,J),Z}static fromScaling(J){let Z=cZ.create();return O8.fromScaling(Z,J),Z}add(J){return O8.add(this,this,J),this}adjoint(){return O8.adjoint(this,this),this}clone(){return new cZ(this[0],this[1],this[2],this[3])}copy(J){return O8.copy(this,J),this}equals(J){return O8.equals(this,J)}exactEquals(J){return O8.exactEquals(this,J)}identity(){return O8.identity(this),this}invert(){return O8.invert(this,this),this}multiply(J){return O8.mul(this,this,J),this}multiplyScalar(J){return O8.multiplyScalar(this,this,J),this}rotate(J){return O8.rotate(this,this,J),this}subtract(J){return O8.sub(this,this,J),this}toString(){return`[${this[0]},${this[1]}][${this[2]},${this[3]}]`}transpose(){return O8.transpose(this,this),this}}class U9 extends Float32Array{constructor(J,Z,X,Y,$,K,Q,W,G){super([J,Z,X,Y,$,K,Q,W,G])}get determinant(){return o0.determinant(this)}get frobeniusNorm(){return o0.frob(this)}static create(){let J=new U9(0,0,0,0,0,0,0,0,0);return o0.identity(J),J}static fromMatrix4(J){let Z=U9.create();return o0.fromMat4(Z,J),Z}static fromQuaternion(J){let Z=U9.create();return o0.fromQuat(Z,J),Z}static fromRotation(J){let Z=U9.create();return o0.fromRotation(Z,J),Z}static fromScaling(J){let Z=U9.create();return o0.fromScaling(Z,J),Z}static fromTranslation(J){let Z=U9.create();return o0.fromTranslation(Z,J),Z}add(J){return o0.add(this,this,J),this}adjoint(){return o0.adjoint(this,this),this}clone(){return new U9(this[0],this[1],this[2],this[3],this[4],this[5],this[6],this[7],this[8])}copy(J){return o0.copy(this,J),this}equals(J){return o0.equals(this,J)}exactEquals(J){return o0.exactEquals(this,J)}identity(){return o0.identity(this),this}invert(){return o0.invert(this,this),this}multiply(J){return o0.mul(this,this,J),this}multiplyScalar(J){return o0.multiplyScalar(this,this,J),this}transformVector(J){return J.transformMatrix3(this)}projection(J,Z){return o0.projection(this,J,Z),this}rotate(J){return o0.rotate(this,this,J),this}subtract(J){return o0.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 o0.transpose(this,this),this}}class D6 extends Float32Array{constructor(J,Z,X,Y,$,K,Q,W,G,V,z,H,U,F,q,N){super([J,Z,X,Y,$,K,Q,W,G,V,z,H,U,F,q,N])}get determinant(){return z0.determinant(this)}get frobeniusNorm(){return z0.frob(this)}static create(){let J=new D6(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);return z0.identity(J),J}static fromQuaternion(J){let Z=D6.create();return z0.fromQuat(Z,J),Z}static fromRotation(J,Z){let X=D6.create();return z0.fromRotation(X,J,Z),X}static fromRotationTranslation(J,Z){let X=D6.create();return z0.fromRotationTranslation(X,J,Z),X}static fromRotationTranslationScale(J,Z,X){let Y=D6.create();return z0.fromRotationTranslationScale(Y,J,Z,X),Y}static fromRotationTranslationScaleOrigin(J,Z,X,Y){let $=D6.create();return z0.fromRotationTranslationScaleOrigin($,J,Z,X,Y),$}static fromScaling(J){let Z=D6.create();return z0.fromScaling(Z,J),Z}static fromTranslation(J){let Z=D6.create();return z0.fromTranslation(Z,J),Z}static fromXRotation(J){let Z=D6.create();return z0.fromXRotation(Z,J),Z}static fromYRotation(J){let Z=D6.create();return z0.fromYRotation(Z,J),Z}static fromZRotation(J){let Z=D6.create();return z0.fromZRotation(Z,J),Z}add(J){return z0.add(this,this,J),this}adjoint(){return z0.adjoint(this,this),this}clone(){return new D6(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 z0.copy(this,J),this}equals(J){return z0.equals(this,J)}exactEquals(J){return z0.exactEquals(this,J)}frustrum(J,Z,X,Y,$,K){return z0.frustum(this,J,Z,X,Y,$,K),this}identity(){return z0.identity(this),this}invert(){return z0.invert(this,this),this}lookAt(J,Z,X){return z0.lookAt(this,J,Z,X),this}multiply(J){return z0.mul(this,this,J),this}multiplyScalar(J){return z0.multiplyScalar(this,this,J),this}orthographic(J,Z,X,Y,$,K){return z0.ortho(this,J,Z,X,Y,$,K),this}perspective(J,Z,X,Y){return z0.perspective(this,J,Z,X,Y),this}rotate(J,Z){return z0.rotate(this,this,J,Z),this}rotateX(J){return z0.rotateX(this,this,J),this}rotateY(J){return z0.rotateY(this,this,J),this}rotateZ(J){return z0.rotateZ(this,this,J),this}scale(J){return z0.scale(this,this,J),this}subtract(J){return z0.sub(this,this,J),this}targetTo(J,Z,X){return z0.targetTo(this,J,Z,X),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 z0.translate(this,this,J),this}transpose(){return z0.transpose(this,this),this}}class TY extends Float32Array{constructor(J,Z,X,Y){super([J,Z,X,Y])}get length(){return I0.length(this)}get squaredLength(){return I0.squaredLength(this)}get magnitude(){return I0.length(this)}get squaredMagnitude(){return I0.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,Z,X){let Y=I0.fromEuler(new Float32Array(4),J,Z,X);return new TY(Y[0],Y[1],Y[2],Y[3])}static fromQuaternionLike(J){return new TY(J.x,J.y,J.z,J.w)}clone(){return new TY(this.x,this.y,this.z,this.w)}conjugate(){return I0.conjugate(this,this),this}copy(J){return I0.copy(this,J),this}dot(J){return I0.dot(this,J)}exponential(){return I0.exp(this,this),this}equals(J){return I0.equals(this,J)}exactEquals(J){return I0.exactEquals(this,J)}getAngle(J){return I0.getAngle(this,J)}identity(){return I0.identity(this),this}invert(){return I0.invert(this,this),this}lerp(J,Z){return I0.lerp(this,this,J,Z),this}logarithm(){return I0.ln(this,this),this}multiply(J){return I0.multiply(this,this,J),this}transformVector(J){return J.transformQuaternion(this)}normalize(){return I0.normalize(this,this),this}power(J){return I0.pow(this,this,J),this}randomize(){return I0.random(this),this}rotateX(J){return I0.rotateX(this,this,J),this}rotateY(J){return I0.rotateY(this,this,J),this}rotateZ(J){return I0.rotateZ(this,this,J),this}scale(J){return I0.scale(this,this,J),this}setAxisAngle(J,Z){return I0.setAxisAngle(this,J,Z),this}slerp(J,Z){return I0.slerp(this,this,J,Z),this}toString(){return`${this.x},${this.y},${this.z},${this.w}`}}class uQ extends Float32Array{constructor(J,Z){super([J,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}static create(){return new uQ(0,0)}add(J){return N0.add(this,this,J),this}angle(J){return N0.angle(this,J)}ceil(){return N0.ceil(this,this),this}clone(){return new uQ(this.x,this.y)}copy(J){return N0.copy(this,J),this}distance(J){return N0.distance(this,J)}divide(J){return N0.divide(this,this,J),this}dot(J){return N0.dot(this,J)}equals(J){return N0.equals(this,J)}exactEquals(J){return N0.exactEquals(this,J)}floor(){return N0.floor(this,this),this}invert(){return N0.inverse(this,this),this}lerp(J,Z){return N0.lerp(this,this,J,Z),this}max(J){return N0.max(this,this,J),this}min(J){return N0.min(this,this,J),this}multiply(J){return N0.mul(this,this,J),this}negate(){return N0.negate(this,this),this}normalize(){return N0.normalize(this,this),this}randomize(J){return N0.random(this,J),this}rotate(J,Z){return N0.rotate(this,this,J,Z),this}round(){return N0.round(this,this),this}scale(J){return N0.scale(this,this,J),this}scaleAndAdd(J,Z){return N0.scaleAndAdd(this,this,J,Z),this}subtract(J){return N0.sub(this,this,J),this}toString(){return`${this.x},${this.y}`}transformMatrix2(J){return N0.transformMat2(this,this,J),this}transformMatrix3(J){return N0.transformMat3(this,this,J),this}transformMatrix4(J){return N0.transformMat4(this,this,J),this}zero(){return N0.zero(this),this}}class RY extends Float32Array{constructor(J,Z,X){super([J,Z,X])}get length(){return U0.length(this)}get squaredLength(){return U0.squaredLength(this)}get magnitude(){return U0.length(this)}get squaredMagnitude(){return U0.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 RY(0,0,0)}static fromVector3Like(J){return new RY(J.x,J.y,J.z)}add(J){return U0.add(this,this,J),this}ceil(){return U0.ceil(this,this),this}clone(){return new RY(this.x,this.y,this.z)}copy(J){return U0.copy(this,J),this}cross(J){return U0.cross(this,this,J),this}distance(J){return U0.distance(this,J)}divide(J){return U0.div(this,this,J),this}dot(J){return U0.dot(this,J)}equals(J){return U0.equals(this,J)}exactEquals(J){return U0.exactEquals(this,J)}floor(){return U0.floor(this,this),this}invert(){return U0.inverse(this,this),this}lerp(J,Z){return U0.lerp(this,this,J,Z),this}max(J){return U0.max(this,this,J),this}min(J){return U0.min(this,this,J),this}multiply(J){return U0.mul(this,this,J),this}negate(){return U0.negate(this,this),this}normalize(){return U0.normalize(this,this),this}randomize(J){return U0.random(this,J),this}rotateX(J,Z){return U0.rotateX(this,this,J,Z),this}rotateY(J,Z){return U0.rotateY(this,this,J,Z),this}rotateZ(J,Z){return U0.rotateZ(this,this,J,Z),this}round(){return U0.round(this,this),this}scale(J){return U0.scale(this,this,J),this}scaleAndAdd(J,Z){return U0.scaleAndAdd(this,this,J,Z),this}subtract(J){return U0.sub(this,this,J),this}toString(){return`${this.x},${this.y},${this.z}`}transformMatrix3(J){return U0.transformMat3(this,this,J),this}transformMatrix4(J){return U0.transformMat4(this,this,J),this}transformQuaternion(J){return U0.transformQuat(this,this,J),this}zero(){return U0.zero(this),this}}var h0=function(J,Z,X,Y){function $(K){return K instanceof X?K:new X(function(Q){Q(K)})}return new(X||(X=Promise))(function(K,Q){function W(z){try{V(Y.next(z))}catch(H){Q(H)}}function G(z){try{V(Y.throw(z))}catch(H){Q(H)}}function V(z){z.done?K(z.value):$(z.value).then(W,G)}V((Y=Y.apply(J,Z||[])).next())})},S0=function(J,Z){var X={label:0,sent:function(){if(K[0]&1)throw K[1];return K[1]},trys:[],ops:[]},Y,$,K,Q=Object.create((typeof Iterator==="function"?Iterator:Object).prototype);return Q.next=W(0),Q.throw=W(1),Q.return=W(2),typeof Symbol==="function"&&(Q[Symbol.iterator]=function(){return this}),Q;function W(V){return function(z){return G([V,z])}}function G(V){if(Y)throw new TypeError("Generator is already executing.");while(Q&&(Q=0,V[0]&&(X=0)),X)try{if(Y=1,$&&(K=V[0]&2?$.return:V[0]?$.throw||((K=$.return)&&K.call($),0):$.next)&&!(K=K.call($,V[1])).done)return K;if($=0,K)V=[V[0]&2,K.value];switch(V[0]){case 0:case 1:K=V;break;case 4:return X.label++,{value:V[1],done:!1};case 5:X.label++,$=V[1],V=[0];continue;case 7:V=X.ops.pop(),X.trys.pop();continue;default:if((K=X.trys,!(K=K.length>0&&K[K.length-1]))&&(V[0]===6||V[0]===2)){X=0;continue}if(V[0]===3&&(!K||V[1]>K[0]&&V[1]<K[3])){X.label=V[1];break}if(V[0]===6&&X.label<K[1]){X.label=K[1],K=V;break}if(K&&X.label<K[2]){X.label=K[2],X.ops.push(V);break}if(K[2])X.ops.pop();X.trys.pop();continue}V=Z.call(J,X)}catch(z){V=[6,z],$=0}finally{Y=K=0}if(V[0]&5)throw V[1];return{value:V[0]?V[1]:void 0,done:!0}}},d6=function(J,Z){var X=typeof Symbol==="function"&&J[Symbol.iterator];if(!X)return J;var Y=X.call(J),$,K=[],Q;try{while((Z===void 0||Z-- >0)&&!($=Y.next()).done)K.push($.value)}catch(W){Q={error:W}}finally{try{if($&&!$.done&&(X=Y.return))X.call(Y)}finally{if(Q)throw Q.error}}return K},f1=function(J,Z,X){if(X||arguments.length===2){for(var Y=0,$=Z.length,K;Y<$;Y++)if(K||!(Y in Z)){if(!K)K=Array.prototype.slice.call(Z,0,Y);K[Y]=Z[Y]}}return J.concat(K||Array.prototype.slice.call(Z))},NY0=function(J){var Z=typeof Symbol==="function"&&Symbol.iterator,X=Z&&J[Z],Y=0;if(X)return X.call(J);if(J&&typeof J.length==="number")return{next:function(){if(J&&Y>=J.length)J=void 0;return{value:J&&J[Y++],done:!J}}};throw new TypeError(Z?"Object is not iterable.":"Symbol.iterator is not defined.")},Qv8=function(){function J(Z){if(Z===void 0)Z=J.minComparator;var X=this;this.compare=Z,this.heapArray=[],this._limit=0,this.offer=this.add,this.element=this.peek,this.poll=this.pop,this._invertedCompare=function(Y,$){return X.compare(Y,$).then(function(K){return-1*K})}}return J.getChildrenIndexOf=function(Z){return[Z*2+1,Z*2+2]},J.getParentIndexOf=function(Z){if(Z<=0)return-1;var X=Z%2?1:2;return Math.floor((Z-X)/2)},J.getSiblingIndexOf=function(Z){if(Z<=0)return-1;var X=Z%2?1:-1;return Z+X},J.minComparator=function(Z,X){return h0(this,void 0,void 0,function(){return S0(this,function(Y){if(Z>X)return[2,1];else if(Z<X)return[2,-1];else return[2,0]})})},J.maxComparator=function(Z,X){return h0(this,void 0,void 0,function(){return S0(this,function(Y){if(X>Z)return[2,1];else if(X<Z)return[2,-1];else return[2,0]})})},J.minComparatorNumber=function(Z,X){return h0(this,void 0,void 0,function(){return S0(this,function(Y){return[2,Z-X]})})},J.maxComparatorNumber=function(Z,X){return h0(this,void 0,void 0,function(){return S0(this,function(Y){return[2,X-Z]})})},J.defaultIsEqual=function(Z,X){return h0(this,void 0,void 0,function(){return S0(this,function(Y){return[2,Z===X]})})},J.print=function(Z){function X(z){var H=J.getParentIndexOf(z);return Math.floor(Math.log2(H+1))}function Y(z,H){var U="";for(;H>0;--H)U+=z;return U}var $=0,K=[],Q=X(Z.length-1)+2,W=0;while($<Z.length){var G=X($)+1;if($===0)G=0;var V=String(Z.get($));if(V.length>W)W=V.length;K[G]=K[G]||[],K[G].push(V),$+=1}return K.map(function(z,H){var U=Math.pow(2,Q-H)-1;return Y(" ",Math.floor(U/2)*W)+z.map(function(F){var q=(W-F.length)/2;return Y(" ",Math.ceil(q))+F+Y(" ",Math.floor(q))}).join(Y(" ",U*W))}).join(`
392
392
  `)},J.heapify=function(Z,X){return h0(this,void 0,void 0,function(){var Y;return S0(this,function($){switch($.label){case 0:return Y=new J(X),Y.heapArray=Z,[4,Y.init()];case 1:return $.sent(),[2,Y]}})})},J.heappop=function(Z,X){var Y=new J(X);return Y.heapArray=Z,Y.pop()},J.heappush=function(Z,X,Y){return h0(this,void 0,void 0,function(){var $;return S0(this,function(K){switch(K.label){case 0:return $=new J(Y),$.heapArray=Z,[4,$.push(X)];case 1:return K.sent(),[2]}})})},J.heappushpop=function(Z,X,Y){var $=new J(Y);return $.heapArray=Z,$.pushpop(X)},J.heapreplace=function(Z,X,Y){var $=new J(Y);return $.heapArray=Z,$.replace(X)},J.heaptop=function(Z,X,Y){if(X===void 0)X=1;var $=new J(Y);return $.heapArray=Z,$.top(X)},J.heapbottom=function(Z,X,Y){if(X===void 0)X=1;var $=new J(Y);return $.heapArray=Z,$.bottom(X)},J.nlargest=function(Z,X,Y){return h0(this,void 0,void 0,function(){var $;return S0(this,function(K){switch(K.label){case 0:return $=new J(Y),$.heapArray=f1([],d6(X),!1),[4,$.init()];case 1:return K.sent(),[2,$.top(Z)]}})})},J.nsmallest=function(Z,X,Y){return h0(this,void 0,void 0,function(){var $;return S0(this,function(K){switch(K.label){case 0:return $=new J(Y),$.heapArray=f1([],d6(X),!1),[4,$.init()];case 1:return K.sent(),[2,$.bottom(Z)]}})})},J.prototype.add=function(Z){return h0(this,void 0,void 0,function(){return S0(this,function(X){switch(X.label){case 0:return[4,this._sortNodeUp(this.heapArray.push(Z)-1)];case 1:return X.sent(),this._applyLimit(),[2,!0]}})})},J.prototype.addAll=function(Z){return h0(this,void 0,void 0,function(){var X,Y,$;return S0(this,function(K){switch(K.label){case 0:X=this.length,($=this.heapArray).push.apply($,f1([],d6(Z),!1)),Y=this.length,K.label=1;case 1:if(!(X<Y))return[3,4];return[4,this._sortNodeUp(X)];case 2:K.sent(),K.label=3;case 3:return++X,[3,1];case 4:return this._applyLimit(),[2,!0]}})})},J.prototype.bottom=function(){return h0(this,arguments,void 0,function(Z){if(Z===void 0)Z=1;return S0(this,function(X){if(this.heapArray.length===0||Z<=0)return[2,[]];else if(this.heapArray.length===1)return[2,[this.heapArray[0]]];else if(Z>=this.heapArray.length)return[2,f1([],d6(this.heapArray),!1)];else return[2,this._bottomN_push(~~Z)]})})},J.prototype.check=function(){return h0(this,void 0,void 0,function(){var Z,X,Y,$,K,Q,W,G,V;return S0(this,function(z){switch(z.label){case 0:Z=0,z.label=1;case 1:if(!(Z<this.heapArray.length))return[3,10];X=this.heapArray[Z],Y=this.getChildrenOf(Z),z.label=2;case 2:z.trys.push([2,7,8,9]),$=(G=void 0,NY0(Y)),K=$.next(),z.label=3;case 3:if(K.done)return[3,6];return Q=K.value,[4,this.compare(X,Q)];case 4:if(z.sent()>0)return[2,X];z.label=5;case 5:return K=$.next(),[3,3];case 6:return[3,9];case 7:return W=z.sent(),G={error:W},[3,9];case 8:try{if(K&&!K.done&&(V=$.return))V.call($)}finally{if(G)throw G.error}return[7];case 9:return++Z,[3,1];case 10:return[2]}})})},J.prototype.clear=function(){this.heapArray=[]},J.prototype.clone=function(){var Z=new J(this.comparator());return Z.heapArray=this.toArray(),Z._limit=this._limit,Z},J.prototype.comparator=function(){return this.compare},J.prototype.contains=function(Z){return h0(this,arguments,void 0,function(X,Y){var $,K,Q,W,G,V;if(Y===void 0)Y=J.defaultIsEqual;return S0(this,function(z){switch(z.label){case 0:z.trys.push([0,5,6,7]),$=NY0(this.heapArray),K=$.next(),z.label=1;case 1:if(K.done)return[3,4];return Q=K.value,[4,Y(Q,X)];case 2:if(z.sent())return[2,!0];z.label=3;case 3:return K=$.next(),[3,1];case 4:return[3,7];case 5:return W=z.sent(),G={error:W},[3,7];case 6:try{if(K&&!K.done&&(V=$.return))V.call($)}finally{if(G)throw G.error}return[7];case 7:return[2,!1]}})})},J.prototype.init=function(Z){return h0(this,void 0,void 0,function(){var X;return S0(this,function(Y){switch(Y.label){case 0:if(Z)this.heapArray=f1([],d6(Z),!1);X=Math.floor(this.heapArray.length),Y.label=1;case 1:if(!(X>=0))return[3,4];return[4,this._sortNodeDown(X)];case 2:Y.sent(),Y.label=3;case 3:return--X,[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 Z=J.getParentIndexOf(this.heapArray.length-1);return this.heapArray.slice(Z+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(Z){this._limit=~~Z,this._applyLimit()},enumerable:!1,configurable:!0}),J.prototype.peek=function(){return this.heapArray[0]},J.prototype.pop=function(){return h0(this,void 0,void 0,function(){var Z;return S0(this,function(X){if(Z=this.heapArray.pop(),this.length>0&&Z!==void 0)return[2,this.replace(Z)];return[2,Z]})})},J.prototype.push=function(){var Z=[];for(var X=0;X<arguments.length;X++)Z[X]=arguments[X];return h0(this,void 0,void 0,function(){return S0(this,function(Y){if(Z.length<1)return[2,!1];else if(Z.length===1)return[2,this.add(Z[0])];else return[2,this.addAll(Z)]})})},J.prototype.pushpop=function(Z){return h0(this,void 0,void 0,function(){var X;return S0(this,function(Y){switch(Y.label){case 0:return[4,this.compare(this.heapArray[0],Z)];case 1:if(!(Y.sent()<0))return[3,3];return X=d6([this.heapArray[0],Z],2),Z=X[0],this.heapArray[0]=X[1],[4,this._sortNodeDown(0)];case 2:Y.sent(),Y.label=3;case 3:return[2,Z]}})})},J.prototype.remove=function(Z){return h0(this,arguments,void 0,function(X,Y){var $,K,Q,W=this;if(Y===void 0)Y=J.defaultIsEqual;return S0(this,function(G){switch(G.label){case 0:if(!this.heapArray.length)return[2,!1];if(X!==void 0)return[3,2];return[4,this.pop()];case 1:return G.sent(),[2,!0];case 2:$=[0],G.label=3;case 3:if(!$.length)return[3,13];return K=$.shift(),[4,Y(this.heapArray[K],X)];case 4:if(!G.sent())return[3,11];if(K!==0)return[3,6];return[4,this.pop()];case 5:return G.sent(),[3,10];case 6:if(K!==this.heapArray.length-1)return[3,7];return this.heapArray.pop(),[3,10];case 7:return this.heapArray.splice(K,1,this.heapArray.pop()),[4,this._sortNodeUp(K)];case 8:return G.sent(),[4,this._sortNodeDown(K)];case 9:G.sent(),G.label=10;case 10:return[2,!0];case 11:Q=J.getChildrenIndexOf(K).filter(function(V){return V<W.heapArray.length}),$.push.apply($,f1([],d6(Q),!1)),G.label=12;case 12:return[3,3];case 13:return[2,!1]}})})},J.prototype.replace=function(Z){return h0(this,void 0,void 0,function(){var X;return S0(this,function(Y){switch(Y.label){case 0:return X=this.heapArray[0],this.heapArray[0]=Z,[4,this._sortNodeDown(0)];case 1:return Y.sent(),[2,X]}})})},J.prototype.size=function(){return this.length},J.prototype.top=function(){return h0(this,arguments,void 0,function(Z){if(Z===void 0)Z=1;return S0(this,function(X){if(this.heapArray.length===0||Z<=0)return[2,[]];else if(this.heapArray.length===1||Z===1)return[2,[this.heapArray[0]]];else if(Z>=this.heapArray.length)return[2,f1([],d6(this.heapArray),!1)];else return[2,this._topN_push(~~Z)]})})},J.prototype.toArray=function(){return f1([],d6(this.heapArray),!1)},J.prototype.toString=function(){return this.heapArray.toString()},J.prototype.get=function(Z){return this.heapArray[Z]},J.prototype.getChildrenOf=function(Z){var X=this;return J.getChildrenIndexOf(Z).map(function(Y){return X.heapArray[Y]}).filter(function(Y){return Y!==void 0})},J.prototype.getParentOf=function(Z){var X=J.getParentIndexOf(Z);return this.heapArray[X]},J.prototype[Symbol.iterator]=function(){return S0(this,function(Z){switch(Z.label){case 0:if(!this.length)return[3,2];return[4,this.pop()];case 1:return Z.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 Z=this.heapArray.length-this._limit;while(Z)this.heapArray.pop(),--Z}},J.prototype._bottomN_push=function(Z){return h0(this,void 0,void 0,function(){var X,Y,$,K,W,Q,W;return S0(this,function(G){switch(G.label){case 0:return X=new J(this.compare),X.limit=Z,X.heapArray=this.heapArray.slice(-Z),[4,X.init()];case 1:G.sent(),Y=this.heapArray.length-1-Z,$=J.getParentIndexOf(Y),K=[];for(W=Y;W>$;--W)K.push(W);Q=this.heapArray,G.label=2;case 2:if(!K.length)return[3,6];return W=K.shift(),[4,this.compare(Q[W],X.peek())];case 3:if(!(G.sent()>0))return[3,5];return[4,X.replace(Q[W])];case 4:if(G.sent(),W%2)K.push(J.getParentIndexOf(W));G.label=5;case 5:return[3,2];case 6:return[2,X.toArray()]}})})},J.prototype._moveNode=function(Z,X){var Y;Y=d6([this.heapArray[X],this.heapArray[Z]],2),this.heapArray[Z]=Y[0],this.heapArray[X]=Y[1]},J.prototype._sortNodeDown=function(Z){return h0(this,void 0,void 0,function(){var X,Y,$,K,Q,W;return S0(this,function(G){switch(G.label){case 0:X=this.heapArray.length,G.label=1;case 1:if(Y=2*Z+1,$=Y+1,K=Z,Q=Y<X,!Q)return[3,3];return[4,this.compare(this.heapArray[Y],this.heapArray[K])];case 2:Q=G.sent()<0,G.label=3;case 3:if(Q)K=Y;if(W=$<X,!W)return[3,5];return[4,this.compare(this.heapArray[$],this.heapArray[K])];case 4:W=G.sent()<0,G.label=5;case 5:if(W)K=$;if(K===Z)return[3,7];this._moveNode(Z,K),Z=K,G.label=6;case 6:return[3,1];case 7:return[2]}})})},J.prototype._sortNodeUp=function(Z){return h0(this,void 0,void 0,function(){var X;return S0(this,function(Y){switch(Y.label){case 0:if(!(Z>0))return[3,2];return X=J.getParentIndexOf(Z),[4,this.compare(this.heapArray[Z],this.heapArray[X])];case 1:if(Y.sent()<0)this._moveNode(Z,X),Z=X;else return[3,2];return[3,0];case 2:return[2]}})})},J.prototype._topN_push=function(Z){return h0(this,void 0,void 0,function(){var X,Y,$,K;return S0(this,function(Q){switch(Q.label){case 0:X=new J(this._invertedCompare),X.limit=Z,Y=[0],$=this.heapArray,Q.label=1;case 1:if(!Y.length)return[3,7];if(K=Y.shift(),!(K<$.length))return[3,6];if(!(X.length<Z))return[3,3];return[4,X.push($[K])];case 2:return Q.sent(),Y.push.apply(Y,f1([],d6(J.getChildrenIndexOf(K)),!1)),[3,6];case 3:return[4,this.compare($[K],X.peek())];case 4:if(!(Q.sent()<0))return[3,6];return[4,X.replace($[K])];case 5:Q.sent(),Y.push.apply(Y,f1([],d6(J.getChildrenIndexOf(K)),!1)),Q.label=6;case 6:return[3,1];case 7:return[2,X.toArray()]}})})},J.prototype._topN_fill=function(Z){return h0(this,void 0,void 0,function(){var X,Y,$,K,Q,Q;return S0(this,function(W){switch(W.label){case 0:return X=this.heapArray,Y=new J(this._invertedCompare),Y.limit=Z,Y.heapArray=X.slice(0,Z),[4,Y.init()];case 1:W.sent(),$=J.getParentIndexOf(Z-1)+1,K=[];for(Q=$;Q<Z;++Q)K.push.apply(K,f1([],d6(J.getChildrenIndexOf(Q).filter(function(G){return G<X.length})),!1));if((Z-1)%2)K.push(Z);W.label=2;case 2:if(!K.length)return[3,6];if(Q=K.shift(),!(Q<X.length))return[3,5];return[4,this.compare(X[Q],Y.peek())];case 3:if(!(W.sent()<0))return[3,5];return[4,Y.replace(X[Q])];case 4:W.sent(),K.push.apply(K,f1([],d6(J.getChildrenIndexOf(Q)),!1)),W.label=5;case 5:return[3,2];case 6:return[2,Y.toArray()]}})})},J.prototype._topN_heap=function(Z){return h0(this,void 0,void 0,function(){var X,Y,$,K,Q;return S0(this,function(W){switch(W.label){case 0:X=this.clone(),Y=[],$=0,W.label=1;case 1:if(!($<Z))return[3,4];return Q=(K=Y).push,[4,X.pop()];case 2:Q.apply(K,[W.sent()]),W.label=3;case 3:return++$,[3,1];case 4:return[2,Y]}})})},J.prototype._topIdxOf=function(Z){return h0(this,void 0,void 0,function(){var X,Y,$,K;return S0(this,function(Q){switch(Q.label){case 0:if(!Z.length)return[2,-1];X=0,Y=Z[X],$=1,Q.label=1;case 1:if(!($<Z.length))return[3,4];return[4,this.compare(Z[$],Y)];case 2:if(K=Q.sent(),K<0)X=$,Y=Z[$];Q.label=3;case 3:return++$,[3,1];case 4:return[2,X]}})})},J.prototype._topOf=function(){var Z=[];for(var X=0;X<arguments.length;X++)Z[X]=arguments[X];return h0(this,void 0,void 0,function(){var Y;return S0(this,function($){switch($.label){case 0:return Y=new J(this.compare),[4,Y.init(Z)];case 1:return $.sent(),[2,Y.peek()]}})})},J}(),Ct0=function(J,Z){var X={label:0,sent:function(){if(K[0]&1)throw K[1];return K[1]},trys:[],ops:[]},Y,$,K,Q=Object.create((typeof Iterator==="function"?Iterator:Object).prototype);return Q.next=W(0),Q.throw=W(1),Q.return=W(2),typeof Symbol==="function"&&(Q[Symbol.iterator]=function(){return this}),Q;function W(V){return function(z){return G([V,z])}}function G(V){if(Y)throw new TypeError("Generator is already executing.");while(Q&&(Q=0,V[0]&&(X=0)),X)try{if(Y=1,$&&(K=V[0]&2?$.return:V[0]?$.throw||((K=$.return)&&K.call($),0):$.next)&&!(K=K.call($,V[1])).done)return K;if($=0,K)V=[V[0]&2,K.value];switch(V[0]){case 0:case 1:K=V;break;case 4:return X.label++,{value:V[1],done:!1};case 5:X.label++,$=V[1],V=[0];continue;case 7:V=X.ops.pop(),X.trys.pop();continue;default:if((K=X.trys,!(K=K.length>0&&K[K.length-1]))&&(V[0]===6||V[0]===2)){X=0;continue}if(V[0]===3&&(!K||V[1]>K[0]&&V[1]<K[3])){X.label=V[1];break}if(V[0]===6&&X.label<K[1]){X.label=K[1],K=V;break}if(K&&X.label<K[2]){X.label=K[2],X.ops.push(V);break}if(K[2])X.ops.pop();X.trys.pop();continue}V=Z.call(J,X)}catch(z){V=[6,z],$=0}finally{Y=K=0}if(V[0]&5)throw V[1];return{value:V[0]?V[1]:void 0,done:!0}}},i8=function(J,Z){var X=typeof Symbol==="function"&&J[Symbol.iterator];if(!X)return J;var Y=X.call(J),$,K=[],Q;try{while((Z===void 0||Z-- >0)&&!($=Y.next()).done)K.push($.value)}catch(W){Q={error:W}}finally{try{if($&&!$.done&&(X=Y.return))X.call(Y)}finally{if(Q)throw Q.error}}return K},P6=function(J,Z,X){if(X||arguments.length===2){for(var Y=0,$=Z.length,K;Y<$;Y++)if(K||!(Y in Z)){if(!K)K=Array.prototype.slice.call(Z,0,Y);K[Y]=Z[Y]}}return J.concat(K||Array.prototype.slice.call(Z))};var kY0=function(){function J(Z){if(Z===void 0)Z=J.minComparator;var X=this;this.compare=Z,this.heapArray=[],this._limit=0,this.offer=this.add,this.element=this.peek,this.poll=this.pop,this.removeAll=this.clear,this._invertedCompare=function(Y,$){return-1*X.compare(Y,$)}}return J.getChildrenIndexOf=function(Z){return[Z*2+1,Z*2+2]},J.getParentIndexOf=function(Z){if(Z<=0)return-1;var X=Z%2?1:2;return Math.floor((Z-X)/2)},J.getSiblingIndexOf=function(Z){if(Z<=0)return-1;var X=Z%2?1:-1;return Z+X},J.minComparator=function(Z,X){if(Z>X)return 1;else if(Z<X)return-1;else return 0},J.maxComparator=function(Z,X){if(X>Z)return 1;else if(X<Z)return-1;else return 0},J.minComparatorNumber=function(Z,X){return Z-X},J.maxComparatorNumber=function(Z,X){return X-Z},J.defaultIsEqual=function(Z,X){return Z===X},J.print=function(Z){function X(z){var H=J.getParentIndexOf(z);return Math.floor(Math.log2(H+1))}function Y(z,H){var U="";for(;H>0;--H)U+=z;return U}var $=0,K=[],Q=X(Z.length-1)+2,W=0;while($<Z.length){var G=X($)+1;if($===0)G=0;var V=String(Z.get($));if(V.length>W)W=V.length;K[G]=K[G]||[],K[G].push(V),$+=1}return K.map(function(z,H){var U=Math.pow(2,Q-H)-1;return Y(" ",Math.floor(U/2)*W)+z.map(function(F){var q=(W-F.length)/2;return Y(" ",Math.ceil(q))+F+Y(" ",Math.floor(q))}).join(Y(" ",U*W))}).join(`
393
393
  `)},J.heapify=function(Z,X){var Y=new J(X);return Y.heapArray=Z,Y.init(),Y},J.heappop=function(Z,X){var Y=new J(X);return Y.heapArray=Z,Y.pop()},J.heappush=function(Z,X,Y){var $=new J(Y);$.heapArray=Z,$.push(X)},J.heappushpop=function(Z,X,Y){var $=new J(Y);return $.heapArray=Z,$.pushpop(X)},J.heapreplace=function(Z,X,Y){var $=new J(Y);return $.heapArray=Z,$.replace(X)},J.heaptop=function(Z,X,Y){if(X===void 0)X=1;var $=new J(Y);return $.heapArray=Z,$.top(X)},J.heapbottom=function(Z,X,Y){if(X===void 0)X=1;var $=new J(Y);return $.heapArray=Z,$.bottom(X)},J.nlargest=function(Z,X,Y){var $=new J(Y);return $.heapArray=P6([],i8(X),!1),$.init(),$.top(Z)},J.nsmallest=function(Z,X,Y){var $=new J(Y);return $.heapArray=P6([],i8(X),!1),$.init(),$.bottom(Z)},J.prototype.add=function(Z){return this._sortNodeUp(this.heapArray.push(Z)-1),this._applyLimit(),!0},J.prototype.addAll=function(Z){var X,Y=this.length;(X=this.heapArray).push.apply(X,P6([],i8(Z),!1));for(var $=this.length;Y<$;++Y)this._sortNodeUp(Y);return this._applyLimit(),!0},J.prototype.bottom=function(Z){if(Z===void 0)Z=1;if(this.heapArray.length===0||Z<=0)return[];else if(this.heapArray.length===1)return[this.heapArray[0]];else if(Z>=this.heapArray.length)return P6([],i8(this.heapArray),!1);else return this._bottomN_push(~~Z)},J.prototype.check=function(){var Z=this;return this.heapArray.find(function(X,Y){return!!Z.getChildrenOf(Y).find(function($){return Z.compare(X,$)>0})})},J.prototype.clear=function(){this.heapArray=[]},J.prototype.clone=function(){var Z=new J(this.comparator());return Z.heapArray=this.toArray(),Z._limit=this._limit,Z},J.prototype.comparator=function(){return this.compare},J.prototype.contains=function(Z,X){if(X===void 0)X=J.defaultIsEqual;return this.indexOf(Z,X)!==-1},J.prototype.init=function(Z){if(Z)this.heapArray=P6([],i8(Z),!1);for(var X=Math.floor(this.heapArray.length);X>=0;--X)this._sortNodeDown(X);this._applyLimit()},J.prototype.isEmpty=function(){return this.length===0},J.prototype.indexOf=function(Z,X){if(X===void 0)X=J.defaultIsEqual;if(this.heapArray.length===0)return-1;var Y=[],$=0;while($<this.heapArray.length){var K=this.heapArray[$];if(X(K,Z))return $;else if(this.compare(K,Z)<=0)Y.push.apply(Y,P6([],i8(J.getChildrenIndexOf($)),!1));$=Y.shift()||this.heapArray.length}return-1},J.prototype.indexOfEvery=function(Z,X){if(X===void 0)X=J.defaultIsEqual;if(this.heapArray.length===0)return[];var Y=[],$=[],K=0;while(K<this.heapArray.length){var Q=this.heapArray[K];if(X(Q,Z))$.push(K),Y.push.apply(Y,P6([],i8(J.getChildrenIndexOf(K)),!1));else if(this.compare(Q,Z)<=0)Y.push.apply(Y,P6([],i8(J.getChildrenIndexOf(K)),!1));K=Y.shift()||this.heapArray.length}return $},J.prototype.leafs=function(){if(this.heapArray.length===0)return[];var Z=J.getParentIndexOf(this.heapArray.length-1);return this.heapArray.slice(Z+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(Z){if(Z<0||isNaN(Z))this._limit=0;else this._limit=~~Z;this._applyLimit()},enumerable:!1,configurable:!0}),J.prototype.setLimit=function(Z){if(this.limit=Z,Z<0||isNaN(Z))return NaN;else return this._limit},J.prototype.peek=function(){return this.heapArray[0]},J.prototype.pop=function(){var Z=this.heapArray.pop();if(this.length>0&&Z!==void 0)return this.replace(Z);return Z},J.prototype.push=function(){var Z=[];for(var X=0;X<arguments.length;X++)Z[X]=arguments[X];if(Z.length<1)return!1;else if(Z.length===1)return this.add(Z[0]);else return this.addAll(Z)},J.prototype.pushpop=function(Z){var X;if(this.compare(this.heapArray[0],Z)<0)X=i8([this.heapArray[0],Z],2),Z=X[0],this.heapArray[0]=X[1],this._sortNodeDown(0);return Z},J.prototype.remove=function(Z,X){var Y=this;if(X===void 0)X=J.defaultIsEqual;if(!this.heapArray.length)return!1;if(Z===void 0)return this.pop(),!0;var $=[0];while($.length){var K=$.shift();if(X(this.heapArray[K],Z)){if(K===0)this.pop();else if(K===this.heapArray.length-1)this.heapArray.pop();else this.heapArray.splice(K,1,this.heapArray.pop()),this._sortNodeUp(K),this._sortNodeDown(K);return!0}else if(this.compare(this.heapArray[K],Z)<=0){var Q=J.getChildrenIndexOf(K).filter(function(W){return W<Y.heapArray.length});$.push.apply($,P6([],i8(Q),!1))}}return!1},J.prototype.replace=function(Z){var X=this.heapArray[0];return this.heapArray[0]=Z,this._sortNodeDown(0),X},J.prototype.size=function(){return this.length},J.prototype.top=function(Z){if(Z===void 0)Z=1;if(this.heapArray.length===0||Z<=0)return[];else if(this.heapArray.length===1||Z===1)return[this.heapArray[0]];else if(Z>=this.heapArray.length)return P6([],i8(this.heapArray),!1);else return this._topN_push(~~Z)},J.prototype.toArray=function(){return P6([],i8(this.heapArray),!1)},J.prototype.toString=function(){return this.heapArray.toString()},J.prototype.get=function(Z){return this.heapArray[Z]},J.prototype.getChildrenOf=function(Z){var X=this;return J.getChildrenIndexOf(Z).map(function(Y){return X.heapArray[Y]}).filter(function(Y){return Y!==void 0})},J.prototype.getParentOf=function(Z){var X=J.getParentIndexOf(Z);return this.heapArray[X]},J.prototype[Symbol.iterator]=function(){return Ct0(this,function(Z){switch(Z.label){case 0:if(!this.length)return[3,2];return[4,this.pop()];case 1:return Z.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 Z=this.heapArray.length-this._limit;while(Z)this.heapArray.pop(),--Z}},J.prototype._bottomN_push=function(Z){var X=new J(this.compare);X.limit=Z,X.heapArray=this.heapArray.slice(-Z),X.init();var Y=this.heapArray.length-1-Z,$=J.getParentIndexOf(Y),K=[];for(var Q=Y;Q>$;--Q)K.push(Q);var W=this.heapArray;while(K.length){var Q=K.shift();if(this.compare(W[Q],X.peek())>0){if(X.replace(W[Q]),Q%2)K.push(J.getParentIndexOf(Q))}}return X.toArray()},J.prototype._moveNode=function(Z,X){var Y;Y=i8([this.heapArray[X],this.heapArray[Z]],2),this.heapArray[Z]=Y[0],this.heapArray[X]=Y[1]},J.prototype._sortNodeDown=function(Z){var X=this.heapArray.length;while(!0){var Y=2*Z+1,$=Y+1,K=Z;if(Y<X&&this.compare(this.heapArray[Y],this.heapArray[K])<0)K=Y;if($<X&&this.compare(this.heapArray[$],this.heapArray[K])<0)K=$;if(K===Z)break;this._moveNode(Z,K),Z=K}},J.prototype._sortNodeUp=function(Z){while(Z>0){var X=J.getParentIndexOf(Z);if(this.compare(this.heapArray[Z],this.heapArray[X])<0)this._moveNode(Z,X),Z=X;else break}},J.prototype._topN_push=function(Z){var X=new J(this._invertedCompare);X.limit=Z;var Y=[0],$=this.heapArray;while(Y.length){var K=Y.shift();if(K<$.length){if(X.length<Z)X.push($[K]),Y.push.apply(Y,P6([],i8(J.getChildrenIndexOf(K)),!1));else if(this.compare($[K],X.peek())<0)X.replace($[K]),Y.push.apply(Y,P6([],i8(J.getChildrenIndexOf(K)),!1))}}return X.toArray()},J.prototype._topN_fill=function(Z){var X=this.heapArray,Y=new J(this._invertedCompare);Y.limit=Z,Y.heapArray=X.slice(0,Z),Y.init();var $=J.getParentIndexOf(Z-1)+1,K=[];for(var Q=$;Q<Z;++Q)K.push.apply(K,P6([],i8(J.getChildrenIndexOf(Q).filter(function(W){return W<X.length})),!1));if((Z-1)%2)K.push(Z);while(K.length){var Q=K.shift();if(Q<X.length){if(this.compare(X[Q],Y.peek())<0)Y.replace(X[Q]),K.push.apply(K,P6([],i8(J.getChildrenIndexOf(Q)),!1))}}return Y.toArray()},J.prototype._topN_heap=function(Z){var X=this.clone(),Y=[];for(var $=0;$<Z;++$)Y.push(X.pop());return Y},J.prototype._topIdxOf=function(Z){if(!Z.length)return-1;var X=0,Y=Z[X];for(var $=1;$<Z.length;++$){var K=this.compare(Z[$],Y);if(K<0)X=$,Y=Z[$]}return X},J.prototype._topOf=function(){var Z=[];for(var X=0;X<arguments.length;X++)Z[X]=arguments[X];var Y=new J(this.compare);return Y.init(Z),Y.peek()},J}();class dQ extends SJ{_faceSpeed=0;_faceTarget;_jumpHeight=0;_moveSpeed=0;_moveTarget;_moveIgnoreAxes={};_onFace;_onFaceComplete;_onMove;_onMoveComplete;face(J,Z,X){this._faceTarget=J,this._faceSpeed=Z,this._onFace=X?.faceCallback,this._onFaceComplete=X?.faceCompleteCallback}jump(J){this._jumpHeight=J}move(J,Z,X){this._moveTarget=J,this._moveSpeed=Z,this._moveIgnoreAxes=X?.moveIgnoreAxes??{},this._onMove=X?.moveCallback,this._onMoveComplete=X?.moveCompleteCallback}tick(J,Z){if(super.tick(J,Z),!this._moveTarget&&!this._faceTarget&&!this._jumpHeight)return;let X=Z/1000,Y=J.position;if(J.isDynamic&&this._jumpHeight>0){let $=Math.abs(J.world.simulation.gravity.y),K=Math.sqrt(2*$*this._jumpHeight);J.applyImpulse({x:0,y:K*J.mass,z:0}),this._jumpHeight=0}if(this._moveTarget){let $={x:this._moveIgnoreAxes.x?0:this._moveTarget.x-Y.x,y:this._moveIgnoreAxes.y?0:this._moveTarget.y-Y.y,z:this._moveIgnoreAxes.z?0:this._moveTarget.z-Y.z},K=$.x*$.x+$.y*$.y+$.z*$.z;if(K>0.1){let Q=Math.sqrt(K),W=this._moveSpeed*X,V=Math.min(Q,W)/Q,z={x:Y.x+$.x*V,y:Y.y+$.y*V,z:Y.z+$.z*V};if(J.setPosition(z),this._onMove)this._onMove(z,this._moveTarget)}else if(this._moveTarget=void 0,this._onMoveComplete){let Q=this._onMoveComplete;this._onMove=void 0,this._onMoveComplete=void 0,Q(Y)}}if(this._faceTarget){let $={x:this._faceTarget.x-Y.x,z:this._faceTarget.z-Y.z},K=Math.atan2(-$.x,-$.z),Q=J.rotation,W=Math.atan2(2*(Q.w*Q.y),1-2*(Q.y*Q.y)),G=K-W;while(G>Math.PI)G-=2*Math.PI;while(G<-Math.PI)G+=2*Math.PI;if(Math.abs(G)>0.01){let V=this._faceSpeed*X,z=Math.abs(G)<V?G:Math.sign(G)*V,U=(W+z)/2,F={x:0,y:Math.fround(Math.sin(U)),z:0,w:Math.fround(Math.cos(U))};if(J.setRotation(F),this._onFace)this._onFace(Q,F)}else if(this._faceTarget=void 0,this._onFaceComplete){let V=this._onFaceComplete;this._onFaceComplete=void 0,V(J.rotation)}}}}class lE extends dQ{_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,Z,X){if(this._target=J,this._speed=Z,this._debug=X?.debug??!1,this._maxFall=X?.maxFall?-Math.abs(X.maxFall):0,this._maxJump=X?.maxJump?Math.abs(X.maxJump):0,this._maxOpenSetIterations=X?.maxOpenSetIterations??200,this._onPathfindAbort=X?.pathfindAbortCallback,this._onPathfindComplete=X?.pathfindCompleteCallback,this._onWaypointMoveComplete=X?.waypointMoveCompleteCallback,this._onWaypointMoveSkipped=X?.waypointMoveSkippedCallback,this._verticalPenalty=X?.verticalPenalty??0,this._waypoints=[],this._waypointNextIndex=0,this._waypointTimeoutMs=X?.waypointTimeoutMs??2000/Z,!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,Z){super.tick(J,Z)}_calculatePath(){if(!this._target||!this._entity?.world)return I.error("PathfindingEntityController._calculatePath: No target or world"),!1;let J=this._entity.height,Z=this._findGroundedStart();if(!Z){if(this._debug)I.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 X={x:Math.floor(this._target.x),y:Math.floor(this._target.y),z:Math.floor(this._target.z)},Y=Math.abs(X.x-Z.x),$=Math.abs(X.y-Z.y),K=Math.abs(X.z-Z.z);if(Y<=2&&$<=2&&K<=2&&!this._isNeighborCoordinateBlocked(Z,X,this._entity.height))return this._waypoints=[{x:Z.x+0.5,y:Z.y+J/2,z:Z.z+0.5},{x:X.x+0.5,y:X.y+J/2,z:X.z+0.5}],!0;if(Z.x===X.x&&Z.y===X.y&&Z.z===X.z)return this._waypoints=[{x:Z.x+0.5,y:Z.y+J/2,z:Z.z+0.5}],!0;let W=this._coordinateToKey(Z),G=new Map,V=new Map([[W,0]]),z=new Map([[W,this._pathfindingHeuristic(Z,X)]]),H=new Set,U=new kY0((j,D)=>{let v=z.get(j[0])??1/0,O=z.get(D[0])??1/0;return v-O});U.push([W,Z]);let F=[{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}],q=[];for(let j=this._maxJump;j>=this._maxFall;j--){if(j===0)continue;let D=Math.abs(Z.y+j-X.y);q.push({y:j,distanceToTargetY:D})}q.sort((j,D)=>j.distanceToTargetY-D.distanceToTargetY);let N=[...F,...q.flatMap(({y:j})=>F.map((D)=>({...D,y:j})))],w=0,k=Math.abs(X.x-Z.x)+Math.abs(X.y-Z.y)+Math.abs(X.z-Z.z),B=Math.min(this._maxOpenSetIterations,k*20);while(!U.isEmpty()&&w<B){w++;let[j,D]=U.pop();if(D.x===X.x&&D.y===X.y&&D.z===X.z){let P=this._reconstructPath(G,D);if(this._waypoints=P.map((S)=>({x:S.x+0.5,y:S.y+J/2,z:S.z+0.5})),this._debug)console.log(`PathfindingEntityController._calculatePath: Path found after ${w} open set iterations. Start: ${this._coordinateToKey(Z)}, Target: ${this._coordinateToKey(this._target)}`);return!0}H.add(j);let v=V.get(j),O=new Map;for(let P of N){let S=`${P.x},${P.z}`,R=P.y<0;if(R&&O.has(S))continue;let h={x:D.x+P.x,y:D.y+P.y,z:D.z+P.z};if(Math.abs(X.x-h.x)+Math.abs(X.y-h.y)+Math.abs(X.z-h.z)>k*1.5)continue;let y=this._coordinateToKey(h);if(H.has(y))continue;let p=this._isNeighborCoordinateBlocked(D,h,this._entity.height);if(R&&p){O.set(S,!0);continue}if(p)continue;let A=Math.abs(P.x),d=Math.abs(P.y),Q0=Math.abs(P.z),t0=d===0?0:this._verticalPenalty,U8=(Math.max(A,d,Q0)===1&&A+d+Q0>1?1.4:1)+t0,c1=v+U8,F9=V.get(y)??1/0;if(c1>=F9)continue;G.set(y,D),V.set(y,c1);let SY=c1+this._pathfindingHeuristic(h,X);z.set(y,SY),U.push([y,h])}}if(w>=B){if(this._onPathfindAbort?.(),this._debug)I.warning(`PathfindingEntityController._calculatePath: Maximum open set iterations reached (${B}), path search aborted. Start: ${this._coordinateToKey(Z)}, Target: ${this._coordinateToKey(this._target)}`)}else if(this._debug)I.warning(`PathfindingEntityController._calculatePath: No valid path found. Start: ${this._coordinateToKey(Z)}, Target: ${this._coordinateToKey(this._target)}`);return this._target=void 0,this._waypoints=[],!1}_reconstructPath(J,Z){let X=[Z],Y=Z;while(J.has(this._coordinateToKey(Y)))Y=J.get(this._coordinateToKey(Y)),X.unshift(Y);return X}_coordinateToKey(J){return`${J.x},${J.y},${J.z}`}_moveToNextWaypoint(){let J=this._waypointNextIndex>0?this._waypoints[this._waypointNextIndex-1]:void 0,Z=this._waypoints[this._waypointNextIndex];if(!Z||!this._entity)return;let X=0;if(this._entity.isDynamic&&J&&Z.y>J.y){let Y=Z.y-J.y,$=Math.min(Y,this._maxJump)+0.75;this.jump($);let K=Math.abs(this._entity.world.simulation.gravity.y),Q=Math.sqrt(2*K*$),W=J.x+0.5,G=J.z+0.5,V=Z.x+0.5,z=Z.z+0.5,H=V-W,U=z-G,F=Math.sqrt(H*H+U*U),q=Q/K,N=F/this._speed;X=Math.min(q*0.8,N)*1000}setTimeout(()=>{if(!this._entity)return;let Y=Date.now();this.face(Z,this._speed),this.move(Z,this._speed,{moveIgnoreAxes:{y:this._entity.isDynamic},moveCallback:()=>{if(Date.now()-Y>this._waypointTimeoutMs&&this._waypointNextIndex<this._waypoints.length-1)this._onWaypointMoveSkipped?.(Z,this._waypointNextIndex),this._waypointNextIndex++,this._moveToNextWaypoint()},moveCompleteCallback:()=>{if(this._waypointNextIndex<this._waypoints.length-1)this._onWaypointMoveComplete?.(Z,this._waypointNextIndex),this._waypointNextIndex++,this._moveToNextWaypoint();else this._onPathfindComplete?.()}})},X)}_pathfindingHeuristic(J,Z){return Math.abs(J.x-Z.x)+Math.abs(J.y-Z.y)+Math.abs(J.z-Z.z)}_isNeighborCoordinateBlocked(J,Z,X){if(!this._entity?.world)return!1;let Y=this._entity.world,$=Math.floor(Z.x),K=Math.floor(Z.y),Q=Math.floor(Z.z),W=Math.floor(J.x),G=Math.floor(J.z);if(!Y.chunkLattice.hasBlock({x:$,y:K-1,z:Q}))return!0;for(let V=0;V<X;V++)if(Y.chunkLattice.hasBlock({x:$,y:K+V,z:Q}))return!0;if($!==W&&Q!==G)for(let V=0;V<X;V++){let z=Y.chunkLattice.hasBlock({x:$,y:K+V,z:G}),H=Y.chunkLattice.hasBlock({x:W,y:K+V,z:Q});if(z||H)return!0}return!1}_findGroundedStart(){if(!this._entity?.world)return;let{x:J,y:Z,z:X}=this._entity.position,Y={x:Math.floor(J),y:Math.floor(Z),z:Math.floor(X)};for(let $=0;$<=Math.abs(this._maxFall);$++)if(this._entity.world.chunkLattice.hasBlock({...Y,y:Y.y-$-1}))return{...Y,y:Y.y-$};return}}export{ba0 as startServer,OX0 as WorldLoopEvent,fQ as WorldLoop,AE as WorldEvent,cQ as World,vE as WebServerEvent,EY as WebServer,RY as Vector3,uQ as Vector2,mQ as Ticker,_E as SimulationEvent,yQ as Simulation,dQ as SimpleEntityController,gQ as SceneUIManager,TE as SceneUIEvent,TQ as SceneUI,DX0 as SUPPORTED_INPUT_KEYS,HH as RigidBodyType,gZ as RigidBody,NX0 as ROTATION_UPDATE_THRESHOLD,TY as Quaternion,FH as PlayerUIEvent,_Q as PlayerUI,FX0 as PlayerManagerEvent,j5 as PlayerManager,RQ as PlayerEvent,CQ as PlayerEntityController,RJ as PlayerEntity,BX0 as PlayerCameraMode,IE as PlayerCameraEvent,hQ as PlayerCamera,vY as Player,mZ as PersistenceManager,lE as PathfindingEntityController,MX0 as POSITION_UPDATE_THRESHOLD_SQ,EE as PORT,o1 as ModelRegistry,D6 as Matrix4,U9 as Matrix3,cZ as Matrix2,kX0 as LightType,IQ as LightManager,RE as LightEvent,SE as Light,jX0 as GameServerEvent,_4 as GameServer,J0 as EventRouter,I as ErrorHandler,SQ as EntityManager,UH as EntityEvent,E8 as Entity,qX0 as DEFAULT_ENTITY_RIGID_BODY_OPTIONS,b1 as CollisionGroupsBuilder,gJ as CollisionGroup,WG as ColliderShape,AQ as ColliderMap,o6 as Collider,Nw as CoefficientCombineRule,xQ as ChunkLattice,CE as ChunkEvent,Y6 as Chunk,pQ as ChatManager,yE as ChatEvent,Bw as BlockTypeRegistryEvent,k$ as BlockTypeRegistry,kw as BlockTypeEvent,s1 as BlockType,pZ as Block,rE as BaseEntityControllerEvent,SJ as BaseEntityController,yY as AudioManager,OH as AudioEvent,AY as Audio};