@zylem/game-lib 0.9.9 → 0.9.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -0
- package/dist/actions.d.ts +2 -2
- package/dist/api/game-lib.api.json +1150 -187
- package/dist/api/game-lib.api.md +65 -9
- package/dist/api/game-lib.d.ts +100 -11
- package/dist/api/game-lib.typedoc.json +63710 -72679
- package/dist/bake-IARN2D5W.js +1 -0
- package/dist/bridge.d.ts +3 -1
- package/dist/bridge.js +1 -1
- package/dist/catalog.js +1 -1
- package/dist/chunk-2I76JHSN.js +1 -0
- package/dist/{chunk-CI7A5N6G.js → chunk-3XIJCDII.js} +1 -1
- package/dist/{chunk-BJYXY2FB.js → chunk-DLIQ7RKB.js} +1 -1
- package/dist/{chunk-YW2GTHCV.js → chunk-HOLQZSW3.js} +1 -1
- package/dist/{chunk-3LXDHDJB.js → chunk-KGAXGWKQ.js} +1 -1
- package/dist/chunk-LUFSPEPZ.js +1 -0
- package/dist/{chunk-5NQGXW75.js → chunk-M47F6LKE.js} +1 -1
- package/dist/chunk-NA5SAMP2.js +1 -0
- package/dist/{chunk-YFXNZ2RS.js → chunk-O5N7VFYK.js} +1 -1
- package/dist/chunk-RPLJRBU3.js +1 -0
- package/dist/{chunk-JUA5KNND.js → chunk-RRYBT6NL.js} +2 -2
- package/dist/chunk-TLUGF3AS.js +1 -0
- package/dist/{chunk-273CUPEO.js → chunk-TRKPYAVB.js} +1 -1
- package/dist/{chunk-UNCP6V7I.js → chunk-VLGJAGMX.js} +1 -1
- package/dist/chunk-W6XV7CCC.js +1 -0
- package/dist/{chunk-JCGW5PIR.js → chunk-WM3NVEDX.js} +1 -1
- package/dist/{chunk-YWH5HQDT.js → chunk-X4TZ645S.js} +1 -1
- package/dist/{chunk-ICJ2E2OV.js → chunk-Y2NS4OJH.js} +1 -1
- package/dist/chunk-YETBTF6G.js +1 -0
- package/dist/cinematics.d.ts +5 -4
- package/dist/core.d.ts +8 -7
- package/dist/core.js +1 -1
- package/dist/{debug-state-JRneI6c2.d.ts → debug-state-CKrWEXUz.d.ts} +7 -1
- package/dist/debug.d.ts +2 -2
- package/dist/debug.js +1 -1
- package/dist/{entity-CY75JJSw.d.ts → entity-B8VygThO.d.ts} +7 -0
- package/dist/{entity-type-map-BMaPY8cd.d.ts → entity-type-map-CnxOtV01.d.ts} +1 -1
- package/dist/entity.d.ts +4 -4
- package/dist/entity.js +1 -1
- package/dist/{game-uQd7k6-m.d.ts → game-BqKsvmSH.d.ts} +2 -2
- package/dist/game-default-ENWXZSPB.js +1 -0
- package/dist/graphics.js +1 -1
- package/dist/nav-mesh-P7OR5WYX.js +1 -0
- package/dist/navigation-session-2rs6rHOw.d.ts +54 -0
- package/dist/navigation-worker.js +2 -0
- package/dist/navigation.d.ts +27 -0
- package/dist/navigation.js +1 -0
- package/dist/{placement-session-BNQoL7Jb.d.ts → placement-session-DfvCaGxX.d.ts} +1 -1
- package/dist/placement.d.ts +3 -3
- package/dist/placement.js +1 -1
- package/dist/public.d.ts +9 -6
- package/dist/public.js +1 -1
- package/dist/{stage-Dez16Gxm.d.ts → stage-DT8QQbGk.d.ts} +11 -14
- package/dist/web-components.d.ts +8 -7
- package/dist/web-components.js +1 -1
- package/package.json +12 -4
- package/dist/chunk-26EJFYDX.js +0 -1
- package/dist/chunk-UM5VNQPY.js +0 -1
- package/dist/chunk-VUTKEMIE.js +0 -1
- package/dist/game-default-FRKFJOJX.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a}from"./chunk-2I76JHSN.js";import"./chunk-WOT6VMZA.js";export{a as bakeNavigationData};
|
package/dist/bridge.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { N as NavigationSession } from './navigation-session-2rs6rHOw.js';
|
|
1
2
|
import { BridgePose, SceneOperationPayload, BridgeNdc, EntitySummaryPayload, EntityApplySwatchPayload, SwatchApplyResult, SceneOperationEntry, CutsceneLoadPayload, CameraPosePayload, LevelSyncPayload, LevelDocument, CutsceneStatusPayload, CutsceneViewPayload, GameConfigPayload, GameLoadingPayload, GameVariablePayload, GameNoticePayload, StageSnapshotPayload, EntityThumbnailPayload, EntityTypeDescriptor } from '@zylem/bridge';
|
|
2
3
|
export { BRIDGE_READY_EVENT, BridgeChannel, BridgeDebugTool, BridgeHandler, GameLoadingPayload as BridgeLoadingPayload, BridgeMessageType, BridgeMessages, BridgeNdc, BridgeVec3, CameraPosePayload, CutsceneLoadPayload, CutscenePlaybackState, CutsceneStatusPayload, CutsceneViewPayload, EditorToGameMessages, EntityApplySwatchPayload, EntityPickPayload, EntityPickResultPayload, EntitySummaryPayload, EntitySwatchAppliedPayload, EntityThumbnailPayload, GameConfigPayload, GameToEditorMessages, GameVariablePayload, StageConfigPayload, StageSnapshotPayload, SwatchApplyFailureReason, SwatchApplyResult, SwatchKind, SwatchSpec, ZylemBridge, announceBridgeReady, applySwatchesToSelection, getZylemBridge } from '@zylem/bridge';
|
|
3
|
-
import { G as GameEntity } from './entity-
|
|
4
|
+
import { G as GameEntity } from './entity-B8VygThO.js';
|
|
4
5
|
import 'three';
|
|
5
6
|
import '@zylem/behaviors/core';
|
|
6
7
|
import './simulation-body-zQw-emOr.js';
|
|
@@ -30,6 +31,7 @@ import 'mitt';
|
|
|
30
31
|
* live stage state without the bridge importing game internals.
|
|
31
32
|
*/
|
|
32
33
|
interface GameBridgeHost {
|
|
34
|
+
navigation?(): NavigationSession | null;
|
|
33
35
|
/** Resolve a live entity by UUID from the current stage. */
|
|
34
36
|
resolveEntity(uuid: string): GameEntity<any> | null;
|
|
35
37
|
/** Write a stage variable (editor `stage:variable:set`). */
|
package/dist/bridge.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as b,b as c,c as d,d as e}from"./chunk-FZNEWOC5.js";import{
|
|
1
|
+
import{a as b,b as c,c as d,d as e}from"./chunk-FZNEWOC5.js";import{o as a}from"./chunk-W6XV7CCC.js";import"./chunk-TRKPYAVB.js";import"./chunk-LUFSPEPZ.js";import"./chunk-WOT6VMZA.js";export{e as BRIDGE_READY_EVENT,a as GameBridge,c as announceBridgeReady,d as applySwatchesToSelection,b as getZylemBridge};
|
package/dist/catalog.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a,b as S,c as T}from"./chunk-
|
|
1
|
+
import{a,b as S,c as T}from"./chunk-Y2NS4OJH.js";import{a as t,b as e,c as r,d as i,e as o,f as y,g as c,h as s,i as p,j as h,k as n,l as g,m as w,n as u,o as E}from"./chunk-2HSR5XDQ.js";import"./chunk-X4TZ645S.js";import"./chunk-VLGJAGMX.js";import"./chunk-4QLJUQSJ.js";import"./chunk-3XIJCDII.js";import"./chunk-EVYHPR3J.js";import"./chunk-XRP4JJXL.js";import"./chunk-HOLQZSW3.js";import"./chunk-5WRFDAZN.js";import"./chunk-2NO4YCLR.js";import"./chunk-T6O2SGH5.js";import"./chunk-7WRQ2UAN.js";import"./chunk-AIQ6IVT5.js";import"./chunk-QXVH6POE.js";import"./chunk-UUOPT2N4.js";import"./chunk-VUJXR5K5.js";import"./chunk-WOT6VMZA.js";export{a as BUILT_IN_ENTITY_TYPES,o as buildCatalogDescriptors,c as clearEntityRegistry,w as clearSwatchRegistry,r as getEntityType,h as getSwatchSource,u as isBehaviorDescriptor,i as listEntityTypes,n as listSwatchSources,y as onEntityRegistryChanged,g as onSwatchRegistryChanged,T as registerBuiltInBehaviorSwatchSources,S as registerBuiltInEntityTypes,t as registerEntityType,e as registerEntityTypes,s as registerSwatchSource,p as registerSwatchSources,E as registerSwatchSourcesFromModule};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{validateNavigationSettings as S}from"@zylem/bridge";import{exportNavMesh as C,init as I,Raw as T,TileCacheMeshProcess as O}from"recast-navigation";import{generateTileCache as H}from"recast-navigation/generators";async function L(k){let{positions:a,indices:h,navigation:c}=k,t=c.settings;if(S(t),!a.length||!h.length)throw new Error("No solid geometry to bake.");if(a.length%3||h.length%3)throw new Error("Invalid triangle geometry.");let y=1/0,f=-1/0,g=1/0,w=-1/0;for(let e=0;e<a.length;e+=3){if(![a[e],a[e+1],a[e+2]].every(Number.isFinite))throw new Error("Geometry must be finite.");y=Math.min(y,a[e]),f=Math.max(f,a[e]),g=Math.min(g,a[e+2]),w=Math.max(w,a[e+2])}if(h.some(e=>e>=a.length/3))throw new Error("Triangle index outside geometry.");if(Math.ceil((f-y)/t.cellSize)*Math.ceil((w-g)/t.cellSize)>16e6)throw new Error("Bake exceeds 16 million cells. Increase cell size or split the level.");if(c.obstacles.length>128)throw new Error("A bake supports up to 128 obstacle volumes.");for(let e of c.obstacles)if(![e.min.x,e.min.y,e.min.z,e.max.x,e.max.y,e.max.z].every(Number.isFinite)||e.min.x>=e.max.x||e.min.y>=e.max.y||e.min.z>=e.max.z)throw new Error("Obstacle volumes must have positive finite dimensions.");for(let e of c.links)if(![e.start.x,e.start.y,e.start.z,e.end.x,e.end.y,e.end.z,e.radius].every(Number.isFinite)||e.radius<=0)throw new Error("Links need finite endpoints and a positive radius.");await I();let p=new O((e,m,l)=>{for(let o=0;o<e.polyCount();o++)m.set(o,0),l.set(o,1);e.setOffMeshConnections(c.links.map((o,d)=>({startPosition:o.start,endPosition:o.end,radius:o.radius,bidirectional:o.bidirectional,area:0,flags:1,userId:d+1})))});try{let e=H(a,h,{cs:t.cellSize,ch:t.cellHeight,walkableRadius:Math.ceil(t.agentRadius/t.cellSize),walkableHeight:Math.ceil(t.agentHeight/t.cellHeight),walkableClimb:Math.floor(t.maxClimb/t.cellHeight),walkableSlopeAngle:t.maxSlope,tileSize:64,maxObstacles:128,tileCacheMeshProcess:p});if(!e.success)throw new Error(e.error);let{tileCache:m,navMesh:l}=e;try{let o=()=>{for(let i=0;i<1e5;i++){let r=m.update(l);if(!r.success)throw new Error("Obstacle update failed.");if(r.upToDate)return}throw new Error("Obstacle update did not complete.")},d=[];for(let i=0;i<l.getMaxTiles();i++){let r=l.getTile(i).header();r&&d.push({min:[0,1,2].map(n=>r.bmin(n)),max:[0,1,2].map(n=>r.bmax(n))})}for(let i of c.obstacles){let r=Math.ceil(t.agentRadius/t.cellSize)*t.cellSize+t.cellSize,n={x:i.min.x-r,y:i.min.y-t.agentHeight,z:i.min.z-r},s={x:i.max.x+r,y:i.max.y,z:i.max.z+r},x=1.42*Math.max(s.x-n.x,s.z-n.z)/2,z=(n.x+s.x)/2,v=(n.z+s.z)/2,E=[z-x,n.y,v-x],N=[z+x,s.y,v+x];if(d.filter(M=>[0,1,2].every(u=>E[u]<=M.max[u]&&N[u]>=M.min[u])).length>8)throw new Error("Obstacle spans more than eight navigation tiles. Split it into smaller volumes.");if(!m.addBoxObstacle({x:(n.x+s.x)/2,y:(n.y+s.y)/2,z:(n.z+s.z)/2},{x:(s.x-n.x)/2,y:(s.y-n.y)/2,z:(s.z-n.z)/2},0).success)throw new Error("Could not add obstacle volume.");o()}let b=0;for(let i=0;i<l.getMaxTiles();i++)b+=l.getTile(i).header()?.polyCount()??0;if(!b)throw new Error("No walkable surface. Check geometry, exclusions, and agent settings.");return C(l).slice()}finally{m.destroy(),l.destroy()}}finally{T.destroy(p.raw)}}export{L as a};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as R,b as H}from"./chunk-EVYHPR3J.js";import{p as G}from"./chunk-XRP4JJXL.js";import{d as F,k as L}from"./chunk-YW2GTHCV.js";import{a as D,b as M}from"./chunk-AIQ6IVT5.js";import{c as m,d as P,e as T,f as _,g as I,h as c,i as z,j as V}from"./chunk-7WRQ2UAN.js";import{StageBodyKind as j}from"@zylem/behaviors/core";import{Color as pe,Vector2 as N,Vector3 as U}from"three";function y(o){if(!o||typeof o!="object")return!1;let e=Object.getPrototypeOf(o);return e===Object.prototype||e===null}function l(o){if(o==null||typeof o=="function"||typeof o!="object")return o;if(o instanceof pe||o instanceof N||o instanceof U)return o.clone();if(o instanceof Float32Array)return new Float32Array(o);if(Array.isArray(o))return o.map(e=>l(e));if(y(o)){let e={};for(let[t,i]of Object.entries(o))t!=="_builders"&&(e[t]=l(i));return e}return o}function h(o,e){let t=l(o);if(!e)return t;if(!y(t)||!y(e))return l(e);let i=t;for(let[n,s]of Object.entries(e)){if(n==="_builders"||s===void 0)continue;let r=i[n];if(n==="shader"){i[n]=l(s);continue}if(r instanceof N&&T(s)){i[n]=z(s,r);continue}if(r instanceof U&&_(s)){i[n]=V(s,r);continue}if(y(r)&&y(s)){i[n]=h(r,s);continue}i[n]=l(s)}return i}function X(o){return o&&o.__kind==="collision"}function O(o){return o.cloneComponent()}function ue(o,e){let t={kind:o?j.Static:j.Dynamic,position:[0,0,0],gravityScale:e.gravityScale??1,canSleep:e.canSleep??!1,ccdEnabled:e.ccdEnabled??!0},i=R(e.lockRotations);i&&(t.lockRotation=i);let n=R(e.lockTranslations);return n&&(t.lockTranslation=n),t}function de(o,e){if(e.offset){let t=c(e.offset,m);o.offset=[t.x,t.y,t.z]}e.sensor&&(o.sensor=!0),e.collisionType&&(o.collisionGroups=H(e.collisionType,e.collisionFilter))}function u(o,e,t){return de(o,e),{__kind:"collision",bodyDesc:ue(e.static??!1,e),colliderDesc:o,cloneComponent:t}}function fe(o={}){let e=c(o.size,P),t={shape:{type:"box",halfExtents:[e.x/2,e.y/2,e.z/2]}},i=l(o);return u(t,o,()=>fe(i))}function me(o={}){let e={shape:{type:"sphere",radius:o.radius??1}},t=l(o);return u(e,o,()=>me(t))}function he(o={}){let e=o.radius??1,i={shape:{type:"cone",halfHeight:(o.height??2)/2,radius:e}},n=l(o);return u(i,o,()=>he(n))}function ye(o={}){let e=o.radius??1,i={shape:{type:"cone",halfHeight:(o.height??2)/2,radius:e}},n=l(o);return u(i,o,()=>ye(n))}function be(o={}){let e=Math.max(o.radiusTop??1,o.radiusBottom??1),i={shape:{type:"cylinder",halfHeight:(o.height??2)/2,radius:e}},n=l(o);return u(i,o,()=>be(n))}function Ce(o={}){let e=o.radius??.5,i={shape:{type:"capsule",halfHeight:(o.length??1)/2,radius:e}},n=l(o);return u(i,o,()=>Ce(n))}function ge(o={}){let e=I(o.tile,{x:10,y:10}),t=o.subdivisions??10,i=(t+1)*(t+1),n=o.heightData??new Float32Array(i),s={shape:{type:"heightfield",rows:t,cols:t,heights:n,scale:[e.x,1,e.y]}},r={...o,static:o.static??!0},a=l(r);return u(s,r,()=>ge(a))}function ve(o={}){let e=c(o.size,P),t={shape:{type:"box",halfExtents:[e.x/2,e.y/2,e.z/2]},sensor:!0},i={...o,static:o.static??!0,sensor:!0},n=l(i);return u(t,i,()=>ve(n))}import{Mesh as se,ShaderMaterial as De,Group as Me}from"three";var Z=import.meta.env.VITE_DEBUG_FLAG==="true";import{nanoid as xe}from"nanoid";var d=class o{parent=null;children=[];options;uuid="";name="";markedForRemoval=!1;lifecycleCallbacks={setup:[],loaded:[],update:[],destroy:[],cleanup:[]};trackLifecycleRegistrations=!1;userLifecycleRegistrations=[];constructor(e=[]){let t=e.filter(i=>!(i instanceof o)).reduce((i,n)=>({...i,...n}),{});this.options=t,this.uuid=xe()}onSetup(...e){return this.lifecycleCallbacks.setup.push(...e),this.recordLifecycleRegistration("onSetup",e),this}onLoaded(...e){return this.lifecycleCallbacks.loaded.push(...e),this.recordLifecycleRegistration("onLoaded",e),this}onUpdate(...e){return this.lifecycleCallbacks.update.push(...e),this.recordLifecycleRegistration("onUpdate",e),this}onDestroy(...e){return this.lifecycleCallbacks.destroy.push(...e),this.recordLifecycleRegistration("onDestroy",e),this}onCleanup(...e){return this.lifecycleCallbacks.cleanup.push(...e),this.recordLifecycleRegistration("onCleanup",e),this}prependSetup(...e){return this.lifecycleCallbacks.setup.unshift(...e),this.recordLifecycleRegistration("prependSetup",e),this}prependUpdate(...e){return this.lifecycleCallbacks.update.unshift(...e),this.recordLifecycleRegistration("prependUpdate",e),this}setParent(e){this.parent=e}getParent(){return this.parent}add(e){this.children.push(e),e.setParent(this)}remove(e){let t=this.children.indexOf(e);t!==-1&&(this.children.splice(t,1),e.setParent(null))}getChildren(){return this.children}isComposite(){return this.children.length>0}enableUserLifecycleTracking(){this.trackLifecycleRegistrations=!0}replayUserLifecycleRegistrationsTo(e,t){for(let i of this.userLifecycleRegistrations){let n=t?i.callbacks.map(s=>t(s)):[...i.callbacks];switch(i.method){case"onSetup":e.onSetup(...n);break;case"onLoaded":e.onLoaded(...n);break;case"onUpdate":e.onUpdate(...n);break;case"onDestroy":e.onDestroy(...n);break;case"onCleanup":e.onCleanup(...n);break;case"prependSetup":e.prependSetup(...n);break;case"prependUpdate":e.prependUpdate(...n);break}}}cloneChildrenInto(e){for(let t of this.children)e.add(Pe(t))}nodeSetup(e){this.markedForRemoval=!1,typeof this._setup=="function"&&this._setup(e);for(let t of this.lifecycleCallbacks.setup)t(e);this.children.forEach(t=>t.nodeSetup(e))}nodeUpdate(e){if(!this.markedForRemoval){typeof this._update=="function"&&this._update(e),typeof this._tickActions=="function"&&this._tickActions(e.delta);for(let t of this.lifecycleCallbacks.update)t(e);this.children.forEach(t=>t.nodeUpdate(e))}}nodeDestroy(e){if(!this.markedForRemoval){this.children.forEach(t=>t.nodeDestroy(e));for(let t of this.lifecycleCallbacks.destroy)t(e);typeof this._destroy=="function"&&this._destroy(e),this.markedForRemoval=!0;for(let t of this.lifecycleCallbacks.cleanup)t(e);typeof this._cleanup=="function"&&this._cleanup(e)}}async nodeLoaded(e){typeof this._loaded=="function"&&await this._loaded(e);for(let t of this.lifecycleCallbacks.loaded)t(e)}nodeCleanup(e){this.children.forEach(t=>t.nodeCleanup?.(e));for(let t of this.lifecycleCallbacks.cleanup)t(e);typeof this._cleanup=="function"&&this._cleanup(e)}getOptions(){return this.options}setOptions(e){this.options={...this.options,...e}}recordLifecycleRegistration(e,t){!this.trackLifecycleRegistrations||t.length===0||this.userLifecycleRegistrations.push({method:e,callbacks:[...t]})}};function Pe(o){let e=o?.clone;if(typeof e!="function")throw new Error(`Cannot clone child node "${o.name||o.uuid||"unknown"}": missing clone() support.`);return e.call(o)}import{createTransformStore as Te}from"@zylem/behaviors/core";import{makeMoveable as Re}from"@zylem/behaviors/core";function Y(o){let e=Re(o);return G(e)}import{clearVelocityIntent as re}from"@zylem/behaviors/core";import{Color as ke,Vector3 as Be}from"three";import{Quaternion as Oe}from"three";var K=Symbol("explicitSpawnPosition"),C=new Oe;function W(o){return o.filter(e=>!(e instanceof d)).some(e=>e!=null&&typeof e=="object"&&"position"in e)}function $(o){o[K]=!0}function Ee(o){return o._spawnPositionExplicit?!0:o.options[K]===!0}function we(o){return o.options.hideUntilPositioned!==!1}function Q(o){return o._spawnPlacementPending===!0}function Se(o){return o._spawnPositionExplicit===!0||o._spawnPlacementReady===!0}function g(o){let e=o.group??o.mesh;if(e){if(o.physicsAttached&&o.body)try{let t=o.body.translation();e.position.set(t.x,t.y,t.z);return}catch{}if(o.wasmStageRef&&(o.runtimeHandle??-1)>=0){let t=o.wasmStageRef.getPose(o.runtimeHandle);if(t){e.position.set(t.position[0],t.position[1],t.position[2]);return}}if(o.options.position){let t=c(o.options.position,m);e.position.set(t.x,t.y,t.z)}}}function q(o){let e=o.group??o.mesh;if(!(!e||o.controlledRotation)){if(o.physicsAttached&&o.body)try{let t=o.body.rotation();C.set(t.x,t.y,t.z,t.w),e.setRotationFromQuaternion(C);return}catch{}if(o.wasmStageRef&&(o.runtimeHandle??-1)>=0){let t=o.wasmStageRef.getPose(o.runtimeHandle);t&&(C.set(t.rotation[0],t.rotation[1],t.rotation[2],t.rotation[3]),e.setRotationFromQuaternion(C))}}}function b(o,e){o.group&&(o.group.visible=e),o.mesh&&(o.mesh.visible=e)}function at(o){if(o._spawnInProgress=!0,o._spawnPlacementReady=!1,!we(o)){o._spawnPlacementPending=!1;return}o._spawnPositionExplicit=Ee(o),o._spawnPlacementPending=!0,b(o,!1)}function lt(o){o._spawnInProgress=!1}function J(o){o._spawnPlacementReady=!0}function E(o){if(o._spawnPlacementPending){if(g(o),o._spawnPlacementPending=!1,o.options.visible===!1){b(o,!1);return}b(o,!0)}}function ct(o){!Q(o)||o.options.hideUntilPositioned===!0&&!Se(o)||E(o)}function ee(o){g(o),o._spawnPlacementPending=!1,b(o,!0)}function pt(o){Q(o)&&b(o,!1)}var te={position:new Be(0,0,0),material:{color:new ke("#ffffff"),shader:F},collision:{static:!1}};function bt(o,e){let t=o.filter(n=>!(n instanceof d)),i=h(e);for(let n of t)i=h(i,n);return W(o)&&$(i),i}import{Ray as Ae,Vector3 as x}from"three";var p=new WeakMap,S=new Set,k=new Set;function Rt(o){return S.add(o),()=>S.delete(o)}function Ot(o){return k.add(o),()=>k.delete(o)}function Et(o,e){for(let t of k)t(o,e)}function B(o){for(let e of S)e(o)}function wt(o){return p.get(o)??null}function St(o){return p.has(o)}function oe(o,e){let t=p.get(o);p.set(o,{role:"hover",handlers:{...t?.handlers,...e}}),B(o)}function ie(o,e){let t=p.get(o);p.set(o,{role:"droppable",handlers:{...t?.handlers,...e}}),B(o)}function kt(o,e){let t=p.get(o);t&&(t.handlers={...t.handlers,...e})}function ne(o,e){let t=p.get(o);t&&(p.set(e,{role:t.role,handlers:{...t.handlers}}),B(e))}var w=new Ae,v=new x;function Bt(o,e){if(e.isEmpty()||(v.copy(o.direction),v.lengthSq()<1e-12))return null;v.normalize(),w.set(o.origin,v);let t=w.intersectBox(e,new x);return t?{distance:w.origin.distanceTo(t),point:t}:null}function At(o,e){let t=o.group??o.mesh;if(t?.parent&&(e.setFromObject(t),!e.isEmpty()))return e;let i=c(o.options?.size,{x:1,y:1,z:1}),s=(o.getPose?.()??null)?.position??c(o.options?.position,{x:0,y:0,z:0});return e.setFromCenterAndSize(new x(s.x,s.y,s.z),new x(i.x,i.y,i.z)),e.isEmpty()?null:e}function _e(o){return o!=null&&typeof o=="object"}function ae(o){return{phase:o?.phase??"stay",cooldownMs:o?.cooldownMs}}function Ie(){return typeof performance<"u"&&typeof performance.now=="function"?performance.now():Date.now()}var A=class extends d{group;mesh;materials;bodyDesc=null;body=null;physicsAttached=!1;physicsWorldRef=null;colliderDesc;custom={};colliderBaseline=null;colliderScaleDirty=!1;colliderDescs=[];compoundMeshes=[];debugInfo={};debugMaterial;collisionDelegate={collision:[],cooldowns:new Map,nextId:0};collisionType;packKey=null;bundleKey=null;instanceId=-1;isInstanced=!1;isBundled=!1;runtimeHandle=-1;runtimeAttached=!1;wasmStageRef=null;eventDelegate=new D;behaviorRefs=[];cloneFactory=null;trackAddedComponents=!1;trackedComponents=[];transformStore;_scale={x:1,y:1,z:1};_spawnPlacementPending=!1;_spawnPositionExplicit=!1;_spawnPlacementReady=!1;_spawnInProgress=!1;moveX;moveY;moveZ;moveXY;moveXZ;move;resetVelocity;moveForwardXY;getPosition;getVelocity;setPosition;setPositionX;setPositionY;setPositionZ;wrapAroundXY;wrapAround3D;rotateInDirection;rotateYEuler;rotateEuler;rotateX;rotateY;rotateZ;setRotationY;setRotationX;setRotationZ;setRotationDegrees;setRotationDegreesY;setRotationDegreesX;setRotationDegreesZ;setRotation;getRotation;constructor(){super(),this.transformStore=Te(),Y(this),this.wrapSpawnPlacementMutators()}wrapSpawnPlacementMutators(){let e=()=>{J(this),!this._spawnInProgress&&(g(this),E(this))},t=r=>(a,f,ce)=>{!this.body&&!(this.wasmStageRef&&this.runtimeHandle>=0)||(r(a,f,ce),e())},i=r=>a=>{!this.body&&!(this.wasmStageRef&&this.runtimeHandle>=0)||(r(a),e())};this.setPosition=t(this.setPosition.bind(this)),this.setPositionX=i(this.setPositionX.bind(this)),this.setPositionY=i(this.setPositionY.bind(this)),this.setPositionZ=i(this.setPositionZ.bind(this));let n=()=>{this._spawnInProgress||q(this)},s=this.setPose.bind(this);this.setPose=r=>{let a=s(r);return a&&(r.position!=null&&e(),r.rotation!=null&&n(),a)}}reveal(){this.options.visible=!0,ee(this)}getPose(){if(this.wasmStageRef&&this.runtimeHandle>=0){let n=this.wasmStageRef.getPose(this.runtimeHandle);if(n)return{position:{x:n.position[0],y:n.position[1],z:n.position[2]},rotation:{x:n.rotation[0],y:n.rotation[1],z:n.rotation[2],w:n.rotation[3]}}}let e=this.body;if(!e)return null;let t=e.translation(),i=e.rotation();return{position:{x:t.x,y:t.y,z:t.z},rotation:{x:i.x,y:i.y,z:i.z,w:i.w}}}setPose(e){if(this.wasmStageRef&&this.runtimeHandle>=0){let i=!0;if(e.position){let n=c(e.position);i=this.wasmStageRef.setPosition(this.runtimeHandle,n.x,n.y,n.z)&&i}if(e.rotation){let{x:n,y:s,z:r,w:a}=e.rotation;i=this.wasmStageRef.setRotation(this.runtimeHandle,n,s,r,a)&&i}return i&&this.body?.markPoseDiscontinuity(),i}let t=this.body;if(!t)return!1;if(e.position){let i=c(e.position);t.setTranslation({x:i.x,y:i.y,z:i.z},!0)}return e.rotation&&t.setRotation(e.rotation,!0),!0}getScale(){return{...this._scale}}setScale(e,t,i){this._scale={x:e,y:t,z:i},(this.group??this.mesh)?.scale.set(e,t,i),this.colliderScaleDirty=!0}add(...e){for(let t of e)t instanceof se?(this.addMeshComponent(t),this.trackComponent(t)):X(t)?(this.addCollisionComponent(t),this.trackComponent(t)):super.add(t);return this}addMeshComponent(e){if(this.mesh)this.compoundMeshes.push(e),this.group||(this.group=new Me,this.group.add(this.mesh)),this.group.add(e);else if(this.mesh=e,this.materials||(this.materials=[]),e.material){let t=e.material;Array.isArray(t)?this.materials.push(...t):this.materials.push(t)}}addCollisionComponent(e){if(this.bodyDesc)this.colliderDescs.push(e.colliderDesc);else{this.bodyDesc=e.bodyDesc,this.colliderDesc=e.colliderDesc,this.colliderDescs.push(e.colliderDesc);let t=c(this.options?.position,m);this.bodyDesc.position=[t.x,t.y,t.z]}}trackComponent(e){if(this.trackAddedComponents){if(e instanceof se){this.trackedComponents.push({kind:"mesh",component:le(e)});return}this.trackedComponents.push({kind:"collision",component:O(e)})}}_actions=[];runAction(e){return this._actions.push(e),e}action(e){return e.persistent=!0,this._actions.push(e),e}clearActions(){this._actions.length=0}_tickActions(e){if(this._actions.length===0)return;let t=this.transformStore;t.velocity.x=0,t.velocity.y=0,t.velocity.z=0,re(t,"actions"),t.angularVelocity.x=0,t.angularVelocity.y=0,t.angularVelocity.z=0,t.dirty.angularVelocity=!1;for(let i=this._actions.length-1;i>=0;i--){let n=this._actions[i];n.tick(this,e),n.done&&!n.persistent&&this._actions.splice(i,1)}this._actions.length===0&&(t.velocity.x=0,t.velocity.y=0,t.velocity.z=0,re(t,"actions"),t.angularVelocity.x=0,t.angularVelocity.y=0,t.angularVelocity.z=0,t.dirty.angularVelocity=!1)}create(){return this.name=this.options.name||"",this}clone(e){if(!this.cloneFactory)throw new Error(`Cannot clone ${this.constructor.name}: clone() is only supported for entities created by official factory helpers.`);let t=this.cloneFactory(h(this.options,e)),i=this.copyBehaviorRefsTo(t),n=r=>Ve(r,i);this.replayUserLifecycleRegistrationsTo(t,n);let s=this.getCollisionRegistrations();if(s.length>0)for(let r of s)t.onCollision(n(r.callback),r.options);for(let r of this.trackedComponents){if(r.kind==="mesh"){t.add(le(r.component));continue}t.add(O(r.component))}return this.cloneChildrenInto(t),ne(this,t),t}finalizeCloneSupport(e){return this.cloneFactory=e,this.enableUserLifecycleTracking(),this.trackAddedComponents=!0,this}onCollision(...e){let t=[...this.collisionDelegate.collision??[]],i=this.collisionDelegate.nextId??0;if(e.length===1||e.length===2&&(e[1]==null||_e(e[1]))){let n=e[0];if(!n)return this;let s=e[1];return t.push({id:i,callback:n,options:ae(s)}),i+=1,this.collisionDelegate.collision=t,this.collisionDelegate.nextId=i,this}for(let n of e)t.push({id:i,callback:n,options:ae()}),i+=1;return this.collisionDelegate.collision=t,this.collisionDelegate.nextId=i,this}hoverArea(e){return oe(this,e),this}droppableArea(e){return ie(this,e),this}use(e,t){let i={descriptor:e,options:{...e.defaultOptions,...t}};this.behaviorRefs.push(i);let n={getFSM:()=>i.fsm??null,getOptions:()=>i.options,ref:i},s=e.createHandle?.(i)??{};return{...n,...s}}getBehaviorRefs(){return this.behaviorRefs}getBehaviorRef(e){return this.behaviorRefs.find(t=>t.descriptor.key===e.key)??null}hasBehavior(e){return this.getBehaviorRef(e)!==null}removeBehavior(e){let t="descriptor"in e?this.behaviorRefs.indexOf(e):this.behaviorRefs.findIndex(n=>n.descriptor.key===e.key);if(t===-1)return null;let[i]=this.behaviorRefs.splice(t,1);return i??null}restoreBehaviorRef(e){this.behaviorRefs.includes(e)||this.behaviorRefs.push(e)}getCollisionCallbacks(){return this.getCollisionRegistrations().map(e=>e.callback)}getCollisionRegistrations(){return(this.collisionDelegate.collision??[]).map(e=>({id:e.id,callback:e.callback,options:{...e.options}}))}copyBehaviorRefsTo(e){let t=new Map;for(let i of this.behaviorRefs){e.use(i.descriptor,l(i.options));let n=e.getBehaviorRefs().at(-1);n&&t.set(i,n)}return t}_setup(e){for(let t=this._actions.length-1;t>=0;t--){let i=this._actions[t];i.done&&!i.persistent?this._actions.splice(t,1):i.reset()}}async _loaded(e){}_update(e){this.updateMaterials(e)}_destroy(e){}_cleanup(e){this.disposeEvents();for(let t of this.compoundMeshes)t.geometry?.dispose(),Array.isArray(t.material)?t.material.forEach(i=>i.dispose()):t.material?.dispose();this.compoundMeshes.length=0,this.debugMaterial?.dispose(),this.debugMaterial=void 0,this.group?.removeFromParent()}_collision(e,t,i={phase:"stay",nowMs:Ie()}){if(!this.collisionDelegate.collision?.length)return;let n=this.collisionDelegate.cooldowns??new Map;this.collisionDelegate.cooldowns=n;for(let s of this.collisionDelegate.collision){if(s.options.phase!==i.phase)continue;let r=s.options.cooldownMs;if(r!=null){let a=`${s.id}:${e.uuid}`,f=n.get(a);if(f!=null&&i.nowMs-f<r)continue;n.set(a,i.nowMs)}s.callback({entity:this,other:e,globals:t})}}hasMaterial(){return this.mesh!==void 0||this.compoundMeshes.length>0}getMaterials(){return this.materials?[...this.materials]:[]}setMaterial(e,t={}){if(!this.hasMaterial())return null;let i=new L,n=this.constructor.type??Symbol.for("zylem:entity");return i.build(e,n),this.replaceMaterials(i.materials,t)}replaceMaterials(e,t={}){if(!this.hasMaterial()||e.length===0)return null;let{disposePrevious:i=!0}=t,n=this.materials?[...this.materials]:[],s=r=>{Array.isArray(r.material)?r.material=r.material.map((a,f)=>e[f%e.length]):r.material=e[0]};this.mesh&&s(this.mesh);for(let r of this.compoundMeshes)s(r);if(this.materials=[...e],i)for(let r of n)e.includes(r)||r.dispose();return n}updateMaterials(e){if(this.materials?.length)for(let t of this.materials)t instanceof De&&t.uniforms&&t.uniforms.iTime&&(t.uniforms.iTime.value+=e.delta)}buildInfo(){let e={};return e.name=this.name,e.uuid=this.uuid,e}dispatch(e,t){this.eventDelegate.dispatch(e,t),M.emit(e,t)}listen(e,t){return this.eventDelegate.listen(e,t)}disposeEvents(){this.eventDelegate.dispose()}};function ze(o){let e=new A;return e.options={...te,...o},Fe(e,t=>ze(t??{}))}function le(o){let e=o.clone(!0),t=[],i=[];o.traverse(n=>t.push(n)),e.traverse(n=>i.push(n));for(let n=0;n<t.length;n++){let s=t[n],r=i[n];s?.geometry?.clone&&(r.geometry=s.geometry.clone()),s?.material&&(r.material=Array.isArray(s.material)?s.material.map(a=>a.clone()):s.material.clone())}return e}function Ve(o,e){return e.size===0?o:((...t)=>{let i=Array.from(e.entries()).map(([n,s])=>({sourceRef:n,options:n.options,fsm:n.fsm,hasFSM:Object.prototype.hasOwnProperty.call(n,"fsm"),targetRef:s}));for(let n of i)n.sourceRef.options=n.targetRef.options,n.targetRef.fsm===void 0?delete n.sourceRef.fsm:n.sourceRef.fsm=n.targetRef.fsm;try{return o(...t)}finally{for(let n=i.length-1;n>=0;n--){let s=i[n];s.sourceRef.options=s.options,s.hasFSM?s.sourceRef.fsm=s.fsm:delete s.sourceRef.fsm}}})}function Fe(o,e){return o.finalizeCloneSupport(e),o}export{d as a,h as b,fe as c,me as d,he as e,ye as f,be as g,Ce as h,ge as i,ve as j,Q as k,g as l,at as m,lt as n,ct as o,ee as p,pt as q,te as r,bt as s,Rt as t,Ot as u,Et as v,wt as w,St as x,oe as y,ie as z,kt as A,Bt as B,At as C,A as D,ze as E,Fe as F};
|
|
1
|
+
import{a as R,b as H}from"./chunk-EVYHPR3J.js";import{p as G}from"./chunk-XRP4JJXL.js";import{d as F,k as L}from"./chunk-HOLQZSW3.js";import{c as m,d as P,e as T,f as _,g as I,h as c,i as z,j as V}from"./chunk-7WRQ2UAN.js";import{a as D,b as M}from"./chunk-AIQ6IVT5.js";import{StageBodyKind as j}from"@zylem/behaviors/core";import{Color as pe,Vector2 as N,Vector3 as U}from"three";function y(o){if(!o||typeof o!="object")return!1;let e=Object.getPrototypeOf(o);return e===Object.prototype||e===null}function l(o){if(o==null||typeof o=="function"||typeof o!="object")return o;if(o instanceof pe||o instanceof N||o instanceof U)return o.clone();if(o instanceof Float32Array)return new Float32Array(o);if(Array.isArray(o))return o.map(e=>l(e));if(y(o)){let e={};for(let[t,i]of Object.entries(o))t!=="_builders"&&(e[t]=l(i));return e}return o}function h(o,e){let t=l(o);if(!e)return t;if(!y(t)||!y(e))return l(e);let i=t;for(let[n,s]of Object.entries(e)){if(n==="_builders"||s===void 0)continue;let r=i[n];if(n==="shader"){i[n]=l(s);continue}if(r instanceof N&&T(s)){i[n]=z(s,r);continue}if(r instanceof U&&_(s)){i[n]=V(s,r);continue}if(y(r)&&y(s)){i[n]=h(r,s);continue}i[n]=l(s)}return i}function X(o){return o&&o.__kind==="collision"}function O(o){return o.cloneComponent()}function ue(o,e){let t={kind:o?j.Static:j.Dynamic,position:[0,0,0],gravityScale:e.gravityScale??1,canSleep:e.canSleep??!1,ccdEnabled:e.ccdEnabled??!0},i=R(e.lockRotations);i&&(t.lockRotation=i);let n=R(e.lockTranslations);return n&&(t.lockTranslation=n),t}function de(o,e){if(e.offset){let t=c(e.offset,m);o.offset=[t.x,t.y,t.z]}e.sensor&&(o.sensor=!0),e.collisionType&&(o.collisionGroups=H(e.collisionType,e.collisionFilter))}function u(o,e,t){return de(o,e),{__kind:"collision",bodyDesc:ue(e.static??!1,e),colliderDesc:o,cloneComponent:t}}function fe(o={}){let e=c(o.size,P),t={shape:{type:"box",halfExtents:[e.x/2,e.y/2,e.z/2]}},i=l(o);return u(t,o,()=>fe(i))}function me(o={}){let e={shape:{type:"sphere",radius:o.radius??1}},t=l(o);return u(e,o,()=>me(t))}function he(o={}){let e=o.radius??1,i={shape:{type:"cone",halfHeight:(o.height??2)/2,radius:e}},n=l(o);return u(i,o,()=>he(n))}function ye(o={}){let e=o.radius??1,i={shape:{type:"cone",halfHeight:(o.height??2)/2,radius:e}},n=l(o);return u(i,o,()=>ye(n))}function be(o={}){let e=Math.max(o.radiusTop??1,o.radiusBottom??1),i={shape:{type:"cylinder",halfHeight:(o.height??2)/2,radius:e}},n=l(o);return u(i,o,()=>be(n))}function Ce(o={}){let e=o.radius??.5,i={shape:{type:"capsule",halfHeight:(o.length??1)/2,radius:e}},n=l(o);return u(i,o,()=>Ce(n))}function ge(o={}){let e=I(o.tile,{x:10,y:10}),t=o.subdivisions??10,i=(t+1)*(t+1),n=o.heightData??new Float32Array(i),s={shape:{type:"heightfield",rows:t,cols:t,heights:n,scale:[e.x,1,e.y]}},r={...o,static:o.static??!0},a=l(r);return u(s,r,()=>ge(a))}function ve(o={}){let e=c(o.size,P),t={shape:{type:"box",halfExtents:[e.x/2,e.y/2,e.z/2]},sensor:!0},i={...o,static:o.static??!0,sensor:!0},n=l(i);return u(t,i,()=>ve(n))}import{Mesh as se,ShaderMaterial as De,Group as Me}from"three";var Z=import.meta.env.VITE_DEBUG_FLAG==="true";import{nanoid as xe}from"nanoid";var d=class o{parent=null;children=[];options;uuid="";name="";markedForRemoval=!1;lifecycleCallbacks={setup:[],loaded:[],update:[],destroy:[],cleanup:[]};trackLifecycleRegistrations=!1;userLifecycleRegistrations=[];constructor(e=[]){let t=e.filter(i=>!(i instanceof o)).reduce((i,n)=>({...i,...n}),{});this.options=t,this.uuid=xe()}onSetup(...e){return this.lifecycleCallbacks.setup.push(...e),this.recordLifecycleRegistration("onSetup",e),this}onLoaded(...e){return this.lifecycleCallbacks.loaded.push(...e),this.recordLifecycleRegistration("onLoaded",e),this}onUpdate(...e){return this.lifecycleCallbacks.update.push(...e),this.recordLifecycleRegistration("onUpdate",e),this}onDestroy(...e){return this.lifecycleCallbacks.destroy.push(...e),this.recordLifecycleRegistration("onDestroy",e),this}onCleanup(...e){return this.lifecycleCallbacks.cleanup.push(...e),this.recordLifecycleRegistration("onCleanup",e),this}prependSetup(...e){return this.lifecycleCallbacks.setup.unshift(...e),this.recordLifecycleRegistration("prependSetup",e),this}prependUpdate(...e){return this.lifecycleCallbacks.update.unshift(...e),this.recordLifecycleRegistration("prependUpdate",e),this}setParent(e){this.parent=e}getParent(){return this.parent}add(e){this.children.push(e),e.setParent(this)}remove(e){let t=this.children.indexOf(e);t!==-1&&(this.children.splice(t,1),e.setParent(null))}getChildren(){return this.children}isComposite(){return this.children.length>0}enableUserLifecycleTracking(){this.trackLifecycleRegistrations=!0}replayUserLifecycleRegistrationsTo(e,t){for(let i of this.userLifecycleRegistrations){let n=t?i.callbacks.map(s=>t(s)):[...i.callbacks];switch(i.method){case"onSetup":e.onSetup(...n);break;case"onLoaded":e.onLoaded(...n);break;case"onUpdate":e.onUpdate(...n);break;case"onDestroy":e.onDestroy(...n);break;case"onCleanup":e.onCleanup(...n);break;case"prependSetup":e.prependSetup(...n);break;case"prependUpdate":e.prependUpdate(...n);break}}}cloneChildrenInto(e){for(let t of this.children)e.add(Pe(t))}nodeSetup(e){this.markedForRemoval=!1,typeof this._setup=="function"&&this._setup(e);for(let t of this.lifecycleCallbacks.setup)t(e);this.children.forEach(t=>t.nodeSetup(e))}nodeUpdate(e){if(!this.markedForRemoval){typeof this._update=="function"&&this._update(e),typeof this._tickActions=="function"&&this._tickActions(e.delta);for(let t of this.lifecycleCallbacks.update)t(e);this.children.forEach(t=>t.nodeUpdate(e))}}nodeDestroy(e){if(!this.markedForRemoval){this.children.forEach(t=>t.nodeDestroy(e));for(let t of this.lifecycleCallbacks.destroy)t(e);typeof this._destroy=="function"&&this._destroy(e),this.markedForRemoval=!0;for(let t of this.lifecycleCallbacks.cleanup)t(e);typeof this._cleanup=="function"&&this._cleanup(e)}}async nodeLoaded(e){typeof this._loaded=="function"&&await this._loaded(e);for(let t of this.lifecycleCallbacks.loaded)t(e)}nodeCleanup(e){this.children.forEach(t=>t.nodeCleanup?.(e));for(let t of this.lifecycleCallbacks.cleanup)t(e);typeof this._cleanup=="function"&&this._cleanup(e)}getOptions(){return this.options}setOptions(e){this.options={...this.options,...e}}recordLifecycleRegistration(e,t){!this.trackLifecycleRegistrations||t.length===0||this.userLifecycleRegistrations.push({method:e,callbacks:[...t]})}};function Pe(o){let e=o?.clone;if(typeof e!="function")throw new Error(`Cannot clone child node "${o.name||o.uuid||"unknown"}": missing clone() support.`);return e.call(o)}import{createTransformStore as Te}from"@zylem/behaviors/core";import{makeMoveable as Re}from"@zylem/behaviors/core";function Y(o){let e=Re(o);return G(e)}import{clearVelocityIntent as re}from"@zylem/behaviors/core";import{Color as ke,Vector3 as Be}from"three";import{Quaternion as Oe}from"three";var K=Symbol("explicitSpawnPosition"),C=new Oe;function W(o){return o.filter(e=>!(e instanceof d)).some(e=>e!=null&&typeof e=="object"&&"position"in e)}function $(o){o[K]=!0}function Ee(o){return o._spawnPositionExplicit?!0:o.options[K]===!0}function we(o){return o.options.hideUntilPositioned!==!1}function Q(o){return o._spawnPlacementPending===!0}function Se(o){return o._spawnPositionExplicit===!0||o._spawnPlacementReady===!0}function g(o){let e=o.group??o.mesh;if(e){if(o.physicsAttached&&o.body)try{let t=o.body.translation();e.position.set(t.x,t.y,t.z);return}catch{}if(o.wasmStageRef&&(o.runtimeHandle??-1)>=0){let t=o.wasmStageRef.getPose(o.runtimeHandle);if(t){e.position.set(t.position[0],t.position[1],t.position[2]);return}}if(o.options.position){let t=c(o.options.position,m);e.position.set(t.x,t.y,t.z)}}}function q(o){let e=o.group??o.mesh;if(!(!e||o.controlledRotation)){if(o.physicsAttached&&o.body)try{let t=o.body.rotation();C.set(t.x,t.y,t.z,t.w),e.setRotationFromQuaternion(C);return}catch{}if(o.wasmStageRef&&(o.runtimeHandle??-1)>=0){let t=o.wasmStageRef.getPose(o.runtimeHandle);t&&(C.set(t.rotation[0],t.rotation[1],t.rotation[2],t.rotation[3]),e.setRotationFromQuaternion(C))}}}function b(o,e){o.group&&(o.group.visible=e),o.mesh&&(o.mesh.visible=e)}function at(o){if(o._spawnInProgress=!0,o._spawnPlacementReady=!1,!we(o)){o._spawnPlacementPending=!1;return}o._spawnPositionExplicit=Ee(o),o._spawnPlacementPending=!0,b(o,!1)}function lt(o){o._spawnInProgress=!1}function J(o){o._spawnPlacementReady=!0}function E(o){if(o._spawnPlacementPending){if(g(o),o._spawnPlacementPending=!1,o.options.visible===!1){b(o,!1);return}b(o,!0)}}function ct(o){!Q(o)||o.options.hideUntilPositioned===!0&&!Se(o)||E(o)}function ee(o){g(o),o._spawnPlacementPending=!1,b(o,!0)}function pt(o){Q(o)&&b(o,!1)}var te={position:new Be(0,0,0),material:{color:new ke("#ffffff"),shader:F},collision:{static:!1}};function bt(o,e){let t=o.filter(n=>!(n instanceof d)),i=h(e);for(let n of t)i=h(i,n);return W(o)&&$(i),i}import{Ray as Ae,Vector3 as x}from"three";var p=new WeakMap,S=new Set,k=new Set;function Rt(o){return S.add(o),()=>S.delete(o)}function Ot(o){return k.add(o),()=>k.delete(o)}function Et(o,e){for(let t of k)t(o,e)}function B(o){for(let e of S)e(o)}function wt(o){return p.get(o)??null}function St(o){return p.has(o)}function oe(o,e){let t=p.get(o);p.set(o,{role:"hover",handlers:{...t?.handlers,...e}}),B(o)}function ie(o,e){let t=p.get(o);p.set(o,{role:"droppable",handlers:{...t?.handlers,...e}}),B(o)}function kt(o,e){let t=p.get(o);t&&(t.handlers={...t.handlers,...e})}function ne(o,e){let t=p.get(o);t&&(p.set(e,{role:t.role,handlers:{...t.handlers}}),B(e))}var w=new Ae,v=new x;function Bt(o,e){if(e.isEmpty()||(v.copy(o.direction),v.lengthSq()<1e-12))return null;v.normalize(),w.set(o.origin,v);let t=w.intersectBox(e,new x);return t?{distance:w.origin.distanceTo(t),point:t}:null}function At(o,e){let t=o.group??o.mesh;if(t?.parent&&(e.setFromObject(t),!e.isEmpty()))return e;let i=c(o.options?.size,{x:1,y:1,z:1}),s=(o.getPose?.()??null)?.position??c(o.options?.position,{x:0,y:0,z:0});return e.setFromCenterAndSize(new x(s.x,s.y,s.z),new x(i.x,i.y,i.z)),e.isEmpty()?null:e}function _e(o){return o!=null&&typeof o=="object"}function ae(o){return{phase:o?.phase??"stay",cooldownMs:o?.cooldownMs}}function Ie(){return typeof performance<"u"&&typeof performance.now=="function"?performance.now():Date.now()}var A=class extends d{group;mesh;materials;bodyDesc=null;body=null;physicsAttached=!1;physicsWorldRef=null;colliderDesc;custom={};colliderBaseline=null;colliderScaleDirty=!1;colliderDescs=[];compoundMeshes=[];debugInfo={};debugMaterial;collisionDelegate={collision:[],cooldowns:new Map,nextId:0};collisionType;packKey=null;bundleKey=null;instanceId=-1;isInstanced=!1;isBundled=!1;runtimeHandle=-1;runtimeAttached=!1;wasmStageRef=null;eventDelegate=new D;behaviorRefs=[];cloneFactory=null;trackAddedComponents=!1;trackedComponents=[];transformStore;_scale={x:1,y:1,z:1};_spawnPlacementPending=!1;_spawnPositionExplicit=!1;_spawnPlacementReady=!1;_spawnInProgress=!1;moveX;moveY;moveZ;moveXY;moveXZ;move;resetVelocity;moveForwardXY;getPosition;getVelocity;setPosition;setPositionX;setPositionY;setPositionZ;wrapAroundXY;wrapAround3D;rotateInDirection;rotateYEuler;rotateEuler;rotateX;rotateY;rotateZ;setRotationY;setRotationX;setRotationZ;setRotationDegrees;setRotationDegreesY;setRotationDegreesX;setRotationDegreesZ;setRotation;getRotation;constructor(){super(),this.transformStore=Te(),Y(this),this.wrapSpawnPlacementMutators()}wrapSpawnPlacementMutators(){let e=()=>{J(this),!this._spawnInProgress&&(g(this),E(this))},t=r=>(a,f,ce)=>{!this.body&&!(this.wasmStageRef&&this.runtimeHandle>=0)||(r(a,f,ce),e())},i=r=>a=>{!this.body&&!(this.wasmStageRef&&this.runtimeHandle>=0)||(r(a),e())};this.setPosition=t(this.setPosition.bind(this)),this.setPositionX=i(this.setPositionX.bind(this)),this.setPositionY=i(this.setPositionY.bind(this)),this.setPositionZ=i(this.setPositionZ.bind(this));let n=()=>{this._spawnInProgress||q(this)},s=this.setPose.bind(this);this.setPose=r=>{let a=s(r);return a&&(r.position!=null&&e(),r.rotation!=null&&n(),a)}}reveal(){this.options.visible=!0,ee(this)}getPose(){if(this.wasmStageRef&&this.runtimeHandle>=0){let n=this.wasmStageRef.getPose(this.runtimeHandle);if(n)return{position:{x:n.position[0],y:n.position[1],z:n.position[2]},rotation:{x:n.rotation[0],y:n.rotation[1],z:n.rotation[2],w:n.rotation[3]}}}let e=this.body;if(!e)return null;let t=e.translation(),i=e.rotation();return{position:{x:t.x,y:t.y,z:t.z},rotation:{x:i.x,y:i.y,z:i.z,w:i.w}}}setPose(e){if(this.wasmStageRef&&this.runtimeHandle>=0){let i=!0;if(e.position){let n=c(e.position);i=this.wasmStageRef.setPosition(this.runtimeHandle,n.x,n.y,n.z)&&i}if(e.rotation){let{x:n,y:s,z:r,w:a}=e.rotation;i=this.wasmStageRef.setRotation(this.runtimeHandle,n,s,r,a)&&i}return i&&this.body?.markPoseDiscontinuity(),i}let t=this.body;if(!t)return!1;if(e.position){let i=c(e.position);t.setTranslation({x:i.x,y:i.y,z:i.z},!0)}return e.rotation&&t.setRotation(e.rotation,!0),!0}getScale(){return{...this._scale}}setScale(e,t,i){this._scale={x:e,y:t,z:i},(this.group??this.mesh)?.scale.set(e,t,i),this.colliderScaleDirty=!0}add(...e){for(let t of e)t instanceof se?(this.addMeshComponent(t),this.trackComponent(t)):X(t)?(this.addCollisionComponent(t),this.trackComponent(t)):super.add(t);return this}addMeshComponent(e){if(this.mesh)this.compoundMeshes.push(e),this.group||(this.group=new Me,this.group.add(this.mesh)),this.group.add(e);else if(this.mesh=e,this.materials||(this.materials=[]),e.material){let t=e.material;Array.isArray(t)?this.materials.push(...t):this.materials.push(t)}}addCollisionComponent(e){if(this.bodyDesc)this.colliderDescs.push(e.colliderDesc);else{this.bodyDesc=e.bodyDesc,this.colliderDesc=e.colliderDesc,this.colliderDescs.push(e.colliderDesc);let t=c(this.options?.position,m);this.bodyDesc.position=[t.x,t.y,t.z]}}trackComponent(e){if(this.trackAddedComponents){if(e instanceof se){this.trackedComponents.push({kind:"mesh",component:le(e)});return}this.trackedComponents.push({kind:"collision",component:O(e)})}}_actions=[];runAction(e){return this._actions.push(e),e}action(e){return e.persistent=!0,this._actions.push(e),e}clearActions(){this._actions.length=0}_tickActions(e){if(this._actions.length===0)return;let t=this.transformStore;t.velocity.x=0,t.velocity.y=0,t.velocity.z=0,re(t,"actions"),t.angularVelocity.x=0,t.angularVelocity.y=0,t.angularVelocity.z=0,t.dirty.angularVelocity=!1;for(let i=this._actions.length-1;i>=0;i--){let n=this._actions[i];n.tick(this,e),n.done&&!n.persistent&&this._actions.splice(i,1)}this._actions.length===0&&(t.velocity.x=0,t.velocity.y=0,t.velocity.z=0,re(t,"actions"),t.angularVelocity.x=0,t.angularVelocity.y=0,t.angularVelocity.z=0,t.dirty.angularVelocity=!1)}create(){return this.name=this.options.name||"",this}clone(e){if(!this.cloneFactory)throw new Error(`Cannot clone ${this.constructor.name}: clone() is only supported for entities created by official factory helpers.`);let t=this.cloneFactory(h(this.options,e)),i=this.copyBehaviorRefsTo(t),n=r=>Ve(r,i);this.replayUserLifecycleRegistrationsTo(t,n);let s=this.getCollisionRegistrations();if(s.length>0)for(let r of s)t.onCollision(n(r.callback),r.options);for(let r of this.trackedComponents){if(r.kind==="mesh"){t.add(le(r.component));continue}t.add(O(r.component))}return this.cloneChildrenInto(t),ne(this,t),t}finalizeCloneSupport(e){return this.cloneFactory=e,this.enableUserLifecycleTracking(),this.trackAddedComponents=!0,this}onCollision(...e){let t=[...this.collisionDelegate.collision??[]],i=this.collisionDelegate.nextId??0;if(e.length===1||e.length===2&&(e[1]==null||_e(e[1]))){let n=e[0];if(!n)return this;let s=e[1];return t.push({id:i,callback:n,options:ae(s)}),i+=1,this.collisionDelegate.collision=t,this.collisionDelegate.nextId=i,this}for(let n of e)t.push({id:i,callback:n,options:ae()}),i+=1;return this.collisionDelegate.collision=t,this.collisionDelegate.nextId=i,this}hoverArea(e){return oe(this,e),this}droppableArea(e){return ie(this,e),this}use(e,t){let i={descriptor:e,options:{...e.defaultOptions,...t}};this.behaviorRefs.push(i);let n={getFSM:()=>i.fsm??null,getOptions:()=>i.options,ref:i},s=e.createHandle?.(i)??{};return{...n,...s}}getBehaviorRefs(){return this.behaviorRefs}getBehaviorRef(e){return this.behaviorRefs.find(t=>t.descriptor.key===e.key)??null}hasBehavior(e){return this.getBehaviorRef(e)!==null}removeBehavior(e){let t="descriptor"in e?this.behaviorRefs.indexOf(e):this.behaviorRefs.findIndex(n=>n.descriptor.key===e.key);if(t===-1)return null;let[i]=this.behaviorRefs.splice(t,1);return i??null}restoreBehaviorRef(e){this.behaviorRefs.includes(e)||this.behaviorRefs.push(e)}getCollisionCallbacks(){return this.getCollisionRegistrations().map(e=>e.callback)}getCollisionRegistrations(){return(this.collisionDelegate.collision??[]).map(e=>({id:e.id,callback:e.callback,options:{...e.options}}))}copyBehaviorRefsTo(e){let t=new Map;for(let i of this.behaviorRefs){e.use(i.descriptor,l(i.options));let n=e.getBehaviorRefs().at(-1);n&&t.set(i,n)}return t}_setup(e){for(let t=this._actions.length-1;t>=0;t--){let i=this._actions[t];i.done&&!i.persistent?this._actions.splice(t,1):i.reset()}}async _loaded(e){}_update(e){this.updateMaterials(e)}_destroy(e){}_cleanup(e){this.disposeEvents();for(let t of this.compoundMeshes)t.geometry?.dispose(),Array.isArray(t.material)?t.material.forEach(i=>i.dispose()):t.material?.dispose();this.compoundMeshes.length=0,this.debugMaterial?.dispose(),this.debugMaterial=void 0,this.group?.removeFromParent()}_collision(e,t,i={phase:"stay",nowMs:Ie()}){if(!this.collisionDelegate.collision?.length)return;let n=this.collisionDelegate.cooldowns??new Map;this.collisionDelegate.cooldowns=n;for(let s of this.collisionDelegate.collision){if(s.options.phase!==i.phase)continue;let r=s.options.cooldownMs;if(r!=null){let a=`${s.id}:${e.uuid}`,f=n.get(a);if(f!=null&&i.nowMs-f<r)continue;n.set(a,i.nowMs)}s.callback({entity:this,other:e,globals:t})}}hasMaterial(){return this.mesh!==void 0||this.compoundMeshes.length>0}getMaterials(){return this.materials?[...this.materials]:[]}setMaterial(e,t={}){if(!this.hasMaterial())return null;let i=new L,n=this.constructor.type??Symbol.for("zylem:entity");return i.build(e,n),this.replaceMaterials(i.materials,t)}replaceMaterials(e,t={}){if(!this.hasMaterial()||e.length===0)return null;let{disposePrevious:i=!0}=t,n=this.materials?[...this.materials]:[],s=r=>{Array.isArray(r.material)?r.material=r.material.map((a,f)=>e[f%e.length]):r.material=e[0]};this.mesh&&s(this.mesh);for(let r of this.compoundMeshes)s(r);if(this.materials=[...e],i)for(let r of n)e.includes(r)||r.dispose();return n}updateMaterials(e){if(this.materials?.length)for(let t of this.materials)t instanceof De&&t.uniforms&&t.uniforms.iTime&&(t.uniforms.iTime.value+=e.delta)}buildInfo(){let e={};return e.name=this.name,e.uuid=this.uuid,e}dispatch(e,t){this.eventDelegate.dispatch(e,t),M.emit(e,t)}listen(e,t){return this.eventDelegate.listen(e,t)}disposeEvents(){this.eventDelegate.dispose()}};function ze(o){let e=new A;return e.options={...te,...o},Fe(e,t=>ze(t??{}))}function le(o){let e=o.clone(!0),t=[],i=[];o.traverse(n=>t.push(n)),e.traverse(n=>i.push(n));for(let n=0;n<t.length;n++){let s=t[n],r=i[n];s?.geometry?.clone&&(r.geometry=s.geometry.clone()),s?.material&&(r.material=Array.isArray(s.material)?s.material.map(a=>a.clone()):s.material.clone())}return e}function Ve(o,e){return e.size===0?o:((...t)=>{let i=Array.from(e.entries()).map(([n,s])=>({sourceRef:n,options:n.options,fsm:n.fsm,hasFSM:Object.prototype.hasOwnProperty.call(n,"fsm"),targetRef:s}));for(let n of i)n.sourceRef.options=n.targetRef.options,n.targetRef.fsm===void 0?delete n.sourceRef.fsm:n.sourceRef.fsm=n.targetRef.fsm;try{return o(...t)}finally{for(let n=i.length-1;n>=0;n--){let s=i[n];s.sourceRef.options=s.options,s.hasFSM?s.sourceRef.fsm=s.fsm:delete s.sourceRef.fsm}}})}function Fe(o,e){return o.finalizeCloneSupport(e),o}export{d as a,h as b,fe as c,me as d,he as e,ye as f,be as g,Ce as h,ge as i,ve as j,Q as k,g as l,at as m,lt as n,ct as o,ee as p,pt as q,te as r,bt as s,Rt as t,Ot as u,Et as v,wt as w,St as x,oe as y,ie as z,kt as A,Bt as B,At as C,A as D,ze as E,Fe as F};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as ie,c as ne,d as oe}from"./chunk-UNCP6V7I.js";import{D as j,b as Q,q as ee,r as te}from"./chunk-CI7A5N6G.js";import{d as H,f as J}from"./chunk-YW2GTHCV.js";import{c as R,e as q,f as $,g as X}from"./chunk-T6O2SGH5.js";import{c as w,d as P,h as M,j as K}from"./chunk-7WRQ2UAN.js";import{Box3 as U,BufferAttribute as Ce,SkinnedMesh as De,MeshStandardMaterial as je,Group as Ee,Vector3 as x,Matrix4 as ce}from"three";var A=class{async loadFile(e,t){let i=await J.loadModel(e,t),o=i.animations??[];return{object:i.object,animation:o[0],animations:o,gltf:i.gltf}}};import{AnimationMixer as xe,Bone as se,LoopOnce as ve,LoopRepeat as Se}from"three";function Ae(n,e,t){let i=n.animations?.length?n.animations:n.animation?[n.animation]:[];if(i.length===0)return;let o=i.find(s=>s.name===e);return o||(i.length===1?i[0]:i[t]??i[0])}function Me(n){let e=n.lastIndexOf(".");return e>=0?n.slice(0,e):n}function re(n,e){if(!n?.name?.endsWith(".position"))return!1;let t=Me(n.name),i=e.get(t);return i instanceof se?!(i.parent instanceof se):/hips\.position$/i.test(n.name)||/root\.position$/i.test(n.name)}function Fe(n,e,t,i){for(let o of n.tracks){if(!re(o,e)||!o.values||o.values.length<3)continue;let s=o.values[0],r=i??o.values[1],a=o.values[2];for(let l=0;l<o.values.length;l+=3)o.values[l]=s,t&&(o.values[l+1]=r),o.values[l+2]=a}return n}function Oe(n,e){for(let t of n.tracks)if(re(t,e)&&!(!t.values||t.values.length<3))return t.values[1];return null}var E=class{constructor(e){this.target=e}_mixer=null;_actions={};_animations=[];_currentAction=null;_pauseAtPercentage=0;_isPaused=!1;_queuedKey=null;_fadeDuration=.5;_currentKey="";_assetLoader=new A;async loadAnimations(e,t={}){if(!e.length)return;let i=t.stripRootMotionY??!1,o=t.referenceRootY,s=t.referenceAnimationPath,r=await Promise.all(e.map(c=>this._assetLoader.loadFile(c.path))),a=new Map;this.target.traverse(c=>{c.name&&a.set(c.name,c)});let l=[],h=new Map;if(r.forEach((c,p)=>{let m=e[p].path,y=h.get(m)??0;h.set(m,y+1);let f=e[p].key||p.toString(),D=Ae(c,f,y);D&&l.push({key:f,clip:D.clone(),path:m})}),!l.length)return;let d=o;if(i&&d===void 0){let c=s?l.findIndex(m=>m.path===s):0,p=c>=0?[c,...l.map((m,y)=>y).filter(m=>m!==c)]:l.map((m,y)=>y);for(let m of p){let y=Oe(l[m].clip,a);if(y!==null){d=y;break}}}let u=l.map(({key:c,clip:p})=>({key:c,clip:Fe(p,a,i,d)}));this._animations=u.map(c=>c.clip),this._mixer=new xe(this.target),u.forEach(({key:c,clip:p})=>{this._actions[c]=this._mixer.clipAction(p)}),this.playAnimation({key:u[0].key})}update(e){if(!this._mixer||!this._currentAction)return;this._mixer.update(e);let t=this._currentAction.getClip().duration*(this._pauseAtPercentage/100);if(!this._isPaused&&this._pauseAtPercentage>0&&this._currentAction.time>=t&&(this._currentAction.time=t,this._currentAction.paused=!0,this._isPaused=!0,this._queuedKey!==null)){let i=this._actions[this._queuedKey];i.reset().play(),this._currentAction.crossFadeTo(i,this._fadeDuration,!1),this._currentAction=i,this._currentKey=this._queuedKey,this._queuedKey=null}}playAnimation(e){if(!this._mixer)return;let{key:t,pauseAtPercentage:i=0,pauseAtEnd:o=!1,fadeToKey:s,fadeDuration:r=.5}=e;if(t===this._currentKey)return;let a=this._actions[t];if(!a)return;if(a===this._currentAction){this._currentKey=t;return}this._queuedKey=s||null,this._fadeDuration=r,this._pauseAtPercentage=o?100:i,this._isPaused=!1;let l=this._currentAction;this._pauseAtPercentage>0?(a.setLoop(ve,1/0),a.clampWhenFinished=!0):(a.setLoop(Se,1/0),a.clampWhenFinished=!1),a.reset().play(),l&&l.crossFadeTo(a,r,!1),this._currentAction=a,this._currentKey=t}dispose(){Object.values(this._actions).forEach(e=>{e.stop()}),this._mixer&&(this._mixer.stopAllAction(),this._mixer.uncacheRoot(this.target),this._mixer=null),this._actions={},this._animations=[],this._currentAction=null,this._currentKey=""}get currentAnimationKey(){return this._currentKey}get animations(){return this._animations}};var ue={...te,material:{shader:H},animations:[],models:[],collisionShape:"capsule"};function F(n){return K(n.scale,P)}var Te=1e-4,ze=/foot$/i,Z=new x,L=new x,ae=new x,T=new x,le=new ce;function Le(n){let e=1/0,t=!1;return n.traverse(i=>{if(!i.isSkinnedMesh)return;let o=i,s=o.geometry,r=s.attributes.position,a=s.attributes.skinIndex,l=s.attributes.skinWeight,h=o.skeleton;if(!r||!a||!l||!h)return;t=!0,h.update(),o.updateMatrixWorld(!0);let d=h.boneMatrices;if(d)for(let u=0;u<r.count;u++){ae.fromBufferAttribute(r,u).applyMatrix4(o.bindMatrix),T.set(0,0,0);for(let c=0;c<4;c++){let p=l.getComponent(u,c);if(p===0)continue;let m=a.getComponent(u,c);le.fromArray(d,m*16),T.addScaledVector(L.copy(ae).applyMatrix4(le),p)}T.applyMatrix4(o.bindMatrixInverse).applyMatrix4(o.matrixWorld),e=Math.min(e,T.y)}}),!t||!Number.isFinite(e)?null:e}function Be(n,e){e.updateMatrixWorld(!0);let t=e.getWorldPosition(Z).y,i=Le(n)??1/0;if(n.traverse(o=>{!o.isBone||!ze.test(o.name)||(o.getWorldPosition(Z),i=Math.min(i,Z.y))}),Number.isFinite(i)||n.traverse(o=>{if(!o.isSkinnedMesh)return;let s=o;if(s.computeBoundingBox(),!s.boundingBox)return;let{min:r,max:a}=s.boundingBox;for(let l of[[r.x,r.y,r.z],[r.x,r.y,a.z],[r.x,a.y,r.z],[r.x,a.y,a.z],[a.x,r.y,r.z],[a.x,r.y,a.z],[a.x,a.y,r.z],[a.x,a.y,a.z]])L.set(l[0],l[1],l[2]),L.applyMatrix4(s.matrixWorld),i=Math.min(i,L.y)}),!Number.isFinite(i)){let o=new U().setFromObject(n);if(o.isEmpty())return null;i=o.min.y}return i-t}function we(n,e,t){return n.stripRootMotionY!==void 0?n.stripRootMotionY:!!(e&&t.some(i=>i===e))}function C(n){let e=n.collision?.position;return e?M(e,w):null}function V(n){return!!n.collision?.size}function Pe(n){n.hasWarnedDynamicTrimesh||(n.hasWarnedDynamicTrimesh=!0,console.warn(`Actor "${n.name||n.uuid}" requested collisionShape="trimesh" on a dynamic body; falling back to bounds.`))}function he(n,e,t){let i=n==="model"?"bounds":n??"capsule";return i==="trimesh"&&!e?(t?.(),"bounds"):i}function de(n,e){let t=n.x||.5,i=n.y||1,o=n.z||.5,s=Math.max(t,o)/2,r=i/2;return{shape:{type:"capsule",halfHeight:Math.max(0,r-s),radius:s},offset:[e.x,e.y,e.z],sensor:!1}}function S(n){let e=M(n.collision?.size??n.size,{x:.5,y:1,z:.5}),t=e.y||1,i=C(n);return de({x:e.x||.5,y:t,z:e.z||.5},i??{x:0,y:t/2,z:0})}function pe(n){let e=n.collision?.size;if(!e)return null;let t=M(e,w),i=t.x/2,o=t.y/2,s=t.z/2,r=C(n);return{shape:{type:"box",halfExtents:[i,o,s]},offset:[r?.x??0,r?.y??o,r?.z??0],sensor:!!n.collision?.sensor}}function me(n,e,t){let o=e.matrixWorld.clone().invert().multiply(n.matrixWorld);return new ce().makeScale(t.x,t.y,t.z).multiply(o)}function k(n,e,t){n.updateMatrixWorld(!0);let i=!1,o=new U;if(n.traverse(a=>{if(!a.isMesh)return;let l=a,h=$(l);if(!h)return;let d=null;if(l instanceof De?(l.computeBoundingBox(),d=l.boundingBox?.clone()??null):(h.computeBoundingBox(),d=h.boundingBox?.clone()??null),!d)return;let u=d.applyMatrix4(me(l,e,t));if(!i){o.copy(u),i=!0;return}o.union(u)}),!i||o.isEmpty())return null;let s=new x,r=new x;return o.getSize(s),o.getCenter(r),{size:s,center:r}}function Re(n,e,t){n.updateMatrixWorld(!0);let i=[],o=[],s=new U,r=new x,a=!1;if(n.traverse(h=>{if(!h.isMesh||R(h))return;let d=h,u=d.geometry;if(!u)return;let c=u.getAttribute("position");if(!(c instanceof Ce))return;let p=me(d,e,t),m=i.length/3;for(let f=0;f<c.count;f++)r.set(c.getX(f),c.getY(f),c.getZ(f)),r.applyMatrix4(p),i.push(r.x,r.y,r.z),s.expandByPoint(r);let y=u.getIndex();if(y)for(let f=0;f<y.count;f++)o.push(m+y.getX(f));else for(let f=0;f<c.count;f++)o.push(m+f);a=!0}),!a||i.length===0||o.length===0)return null;let l=new x;return s.getCenter(l),{vertices:new Float32Array(i),indices:new Uint32Array(o),center:l}}function fe(n,e,t){let i=pe(t);if(i)return i;if(!n||!e)return S(t);let o=k(n,e,F(t));if(!o)return S(t);let s=C(t);return{shape:{type:"box",halfExtents:[o.size.x/2,o.size.y/2,o.size.z/2]},offset:[s?.x??o.center.x,s?.y??o.center.y,s?.z??o.center.z],sensor:!1}}function ye(n,e,t,i,o){if(V(o)||!n||!e)return S(o);let s=k(n,e,F(o));if(!s)return S(o);let a=C(o);if(!a){let l=t&&i?k(t,i,F(o)):null;a=l?{x:l.center.x,y:l.center.y,z:l.center.z}:{x:s.center.x,y:s.center.y,z:s.center.z}}return de({x:s.size.x,y:s.size.y,z:s.size.z},a)}function ge(n,e,t){let i=pe(t);if(i)return i;if(!n||!e)return S(t);let o=Re(n,e,F(t));if(!o)return S(t);let s=C(t);return{shape:{type:"trimesh",vertices:o.vertices,indices:o.indices},offset:s?[s.x-o.center.x,s.y-o.center.y,s.z-o.center.z]:[0,0,0],sensor:!1}}function z(n){n&&n.traverse(e=>{if(!e.isMesh)return;X(e);let t=e;t.geometry?.dispose(),Array.isArray(t.material)?t.material.forEach(i=>i.dispose()):t.material?.dispose()})}var I=class extends ie{objectModel=null;collisionSource=null;collisionShape="capsule";constructor(e){super(),this.objectModel=e.objectModel,this.collisionSource=e.collisionSource??e.objectModel??null,this.collisionShape=e.collisionShape??"capsule"}collider(e){let t=he(this.collisionShape,!!e.collision?.static);return t==="bounds"?fe(this.objectModel,this.objectModel,e):t==="trimesh"?ge(this.objectModel,this.objectModel,e):ye(this.collisionSource,this.collisionSource,this.objectModel,this.objectModel,e)}},N=class extends ne{createEntity(e){return new O(e)}},Ze=Symbol("Actor"),O=class extends j{static type=Ze;_object=null;_collisionSource=null;_animationDelegate=null;_modelFileNames=[];_assetLoader=new A;_loadGeneration=0;_loadStatus="idle";controlledRotation=!1;hasWarnedDynamicTrimesh=!1;constructor(e){super(),this.options=Q(ue,e),this.prependUpdate(this.actorUpdate.bind(this)),this.controlledRotation=!0}create(){return this._loadStatus==="idle"&&(this.options.models?.length??0)>0&&this.load(),super.create()}load(){this._loadStatus==="loading"||this._loadStatus==="loaded"||(this._modelFileNames=[...this.options.models||[]],this._modelFileNames.length!==0&&(this.disposeRuntimeState(!0),this._loadStatus="loading",this.loadModelsDeferred(++this._loadGeneration)))}data(){return{animations:this._animationDelegate?.animations,objectModel:this._object,collisionSource:this._collisionSource??this._object,collisionShape:this.options.collisionShape}}needsDeferredModelCollision(){return this.requiresLoadedCollisionSource()?!this.getRuntimeCollisionSource():!1}synchronizeRuntimeCollider(){let e=this.getResolvedCollisionShape(),t;if(e==="bounds")t=fe(this._object,this.group??this._object,this.options);else if(e==="trimesh")t=ge(this._object,this.group??this._object,this.options);else{let i=this.getRuntimeCollisionSource();t=ye(i,i,this._object,this._object,this.options)}this.colliderDesc=t,this.colliderDescs.length>0?this.colliderDescs[0]=t:this.colliderDescs.push(t)}actorUpdate(e){this._animationDelegate?.update(e.delta)}actorDestroy(){this._loadGeneration+=1,this._loadStatus="idle",this.disposeRuntimeState(!0),this._modelFileNames=[]}_cleanup(e){super._cleanup(e),this.actorDestroy()}playAnimation(e){this._animationDelegate?.playAnimation(e)}get object(){return this._object}get collisionSource(){return this._collisionSource??this._object}getDebugInfo(){let e={type:"Actor",models:this._modelFileNames.length>0?this._modelFileNames:"none",modelLoaded:!!this._object,scale:(()=>{let t=M(this.options.scale,P);return`${t.x}, ${t.y}, ${t.z}`})(),collisionShape:this.getResolvedCollisionShape()};if(this._animationDelegate&&(e.currentAnimation=this._animationDelegate.currentAnimationKey||"none",e.animationsCount=this.options.animations?.length||0),this._object){let t=0,i=0;this._object.traverse(o=>{if(!o.isMesh)return;t++;let s=o.geometry;s?.attributes.position&&(i+=s.attributes.position.count)}),e.meshCount=t,e.vertexCount=i}return e}getResolvedCollisionShape(){return he(this.options.collisionShape,!!this.options.collision?.static,()=>Pe(this))}requiresLoadedCollisionSource(){let e=this.getResolvedCollisionShape();return e==="bounds"||e==="trimesh"?!V(this.options):e==="capsule"?!V(this.options)&&this.getCollisionSourceSelection().file!==null:!1}getRuntimeCollisionSource(){let e=this.getResolvedCollisionShape();return e==="bounds"||e==="trimesh"?this._object:this._collisionSource??this._object}getCollisionSourceSelection(){let e=this.options.models?.[0]??null,t=this.options.animations?.[0]?.path??null;return t?{file:t,reuseVisibleModel:t===e}:{file:e,reuseVisibleModel:!0}}disposeRuntimeState(e){this._animationDelegate&&(this._animationDelegate.dispose(),this._animationDelegate=null);let t=this._collisionSource;z(this._object),t&&t!==this._object&&z(t),this._object=null,this._collisionSource=null,e&&this.group&&(this.group.clear(),this.group=void 0)}loadModelsDeferred(e){this.dispatch("entity:model:loading",{entityId:this.uuid,files:this._modelFileNames});let t=this.getCollisionSourceSelection(),i=this._modelFileNames.map(s=>this._assetLoader.loadFile(s,{clone:!0})),o=t.file&&!t.reuseVisibleModel?this._assetLoader.loadFile(t.file,{clone:!0}):Promise.resolve(null);Promise.all([Promise.all(i),o]).then(([s,r])=>{if(e!==this._loadGeneration){s.forEach(l=>z(l.object??null)),r?.object&&z(r.object);return}this._object=s[0]?.object??null,this._collisionSource=t.reuseVisibleModel?this._object:r?.object??this._object,this._loadStatus=this._object?"loaded":"idle";let a=0;if(this._object){this._object.traverse(c=>{c.isMesh&&a++}),this.group=new Ee,this.group.add(this._object),this.group.scale.copy(F(this.options)),ee(this),this.applyMaterialOverrides(),this._animationDelegate=new E(this._object);let l=this.options.animations||[],h=this.options.models?.[0],d=l.map(c=>c.path),u=we(this.options,h,d);l.length>0?this._animationDelegate.loadAnimations(l,{stripRootMotionY:u,referenceAnimationPath:h}).then(()=>{e===this._loadGeneration&&(this.alignVisualModelToGround(),this.dispatch("entity:animation:loaded",{entityId:this.uuid,animationCount:l.length}))}):this.alignVisualModelToGround()}this.dispatch("entity:model:loaded",{entityId:this.uuid,success:!!this._object,meshCount:a})}).catch(s=>{e===this._loadGeneration&&(this._loadStatus="idle",console.error("Failed to load actor model",s),this.dispatch("entity:model:loaded",{entityId:this.uuid,success:!1,meshCount:0,errorMessage:s instanceof Error?s.message:String(s)}))})}alignVisualModelToGround(){if(!this._object||!this.group||q(this._object))return;this._animationDelegate?.update(0),this._object.updateMatrixWorld(!0);let e=Be(this._object,this.group);if(e===null||Math.abs(e)<Te)return;let t=this.group.scale.y||1;this._object.position.y-=e/t}applyMaterialOverrides(){let e=this.options.material;!e||!e.color&&!e.path&&e.opacity===void 0||this._object&&this._object.traverse(t=>{if(!t.isMesh||R(t))return;let i=t;i.material=Array.isArray(i.material)?i.material.map(o=>this.tintMaterial(o,e)):this.tintMaterial(i.material,e),e.color&&(i.castShadow=!0,i.receiveShadow=!0)})}tintMaterial(e,t){let i="color"in e,o=!!t.color,s=t.opacity!==void 0;if(!o&&!s)return e;if(o&&!i)return new je({color:t.color,emissiveIntensity:.5,lightMapIntensity:.5,fog:!0,opacity:t.opacity??1,transparent:s&&t.opacity<1});let r=e.clone();if(o&&"color"in r&&r.color.copy(t.color),s&&"opacity"in r&&"transparent"in r){let a=r;a.opacity=t.opacity,a.transparent=t.opacity<1}return r.needsUpdate=!0,r}};function Ve(...n){return oe({args:n,defaultConfig:ue,EntityClass:O,BuilderClass:N,CollisionBuilderClass:I,entityType:O.type,cloneFactory:e=>Ve(e??{})})}import{Color as qe,Fog as $e,FogExp2 as Xe,Group as Je}from"three";import{Color as ke}from"three";import{Fn as _e,fog as Ie,positionWorld as be,positionView as Ne,uniform as g,float as Ue,vec3 as b,clamp as G,mix as _,max as Ge,smoothstep as We,floor as Ye,fract as W,dot as Ke}from"three/tsl";var B=class{values;u={time:g(0),heightEnabled:g(0),heightLevel:g(0),heightFalloff:g(0),noiseEnabled:g(0),noiseScale:g(0),noiseStrength:g(0),noiseSpeed:g(0)};attachedScene=null;constructor(e){this.values={...e},this.syncUniforms()}setValues(e){Object.assign(this.values,e),this.syncUniforms()}tick(e){this.values.time+=e,this.u.time.value=this.values.time}scan(e){if(this.attachedScene===e)return;let t=e.fog;t&&(e.fogNode=this.buildFogNode(t),this.attachedScene=e)}unpatchAll(){this.attachedScene&&(this.attachedScene.fogNode=null,this.attachedScene=null)}syncUniforms(){this.u.time.value=this.values.time,this.u.heightEnabled.value=this.values.heightEnabled,this.u.heightLevel.value=this.values.heightLevel,this.u.heightFalloff.value=this.values.heightFalloff,this.u.noiseEnabled.value=this.values.noiseEnabled,this.u.noiseScale.value=this.values.noiseScale,this.u.noiseStrength.value=this.values.noiseStrength,this.u.noiseSpeed.value=this.values.noiseSpeed}buildFogNode(e){let t=e.isFogExp2===!0,i=g(new ke(e.color)),o=Ne.z.negate(),s=t?this.exp2Factor(g(e.density),o):We(g(e.near),g(e.far),o),r=this.u.heightLevel.sub(be.y),a=G(r.mul(Ge(this.u.heightFalloff,0)),0,1),l=_(s,s.mul(a),this.u.heightEnabled),h=be.mul(this.u.noiseScale).add(b(this.u.time.mul(this.u.noiseSpeed),0,this.u.time.mul(this.u.noiseSpeed).mul(.5))),u=He(h).sub(.5).mul(2).mul(G(this.u.noiseStrength,0,1)),c=G(l.add(l.mul(u)),0,1),p=_(l,c,this.u.noiseEnabled);return Ie(i,p)}exp2Factor(e,t){return e.mul(e).mul(t).mul(t).negate().exp().oneMinus()}},v=_e(([n])=>{let e=W(n.mul(b(443.8975,397.2973,491.1871))),t=e.add(Ke(e,e.yzx.add(19.27)));return W(t.x.add(t.y).mul(t.z))}),He=_e(([n])=>{let e=Ye(n),t=W(n),i=t.mul(t).mul(Ue(3).sub(t.mul(2))),o=v(e.add(b(0,0,0))),s=v(e.add(b(1,0,0))),r=v(e.add(b(0,1,0))),a=v(e.add(b(1,1,0))),l=v(e.add(b(0,0,1))),h=v(e.add(b(1,0,1))),d=v(e.add(b(0,1,1))),u=v(e.add(b(1,1,1))),c=_(o,s,i.x),p=_(r,a,i.x),m=_(l,h,i.x),y=_(d,u,i.x),f=_(c,p,i.y),D=_(m,y,i.y);return _(f,D,i.z)});var Qe=Symbol("Fog"),et="#9aa3ad",tt=.015,it=10,nt=250,ot=5,st=.2,rt=.05,at=.15,lt=.1,Y=class extends j{static type=Qe;threeFog=null;attachedScene=null;patcher;patcherEnabled;constructor(e={}){super(),this.options={...e};let t=this.resolveUniformValues(this.options);this.patcher=new B(t),this.patcherEnabled=ut(this.options)}create(){return super.create(),this.threeFog=ct(this.options),this.group=new Je,this.group.name=this.name?`Fog:${this.name}`:"Fog",this}attachToScene(e){this.threeFog&&(this.attachedScene=e,e.fog=this.threeFog,this.patcherEnabled&&this.patcher.scan(e))}_update(e){super._update(e),!(!this.attachedScene||!this.patcherEnabled)&&(this.patcher.tick(e.delta),this.patcher.scan(this.attachedScene))}_cleanup(e){this.patcher.unpatchAll(),this.attachedScene&&this.attachedScene.fog===this.threeFog&&(this.attachedScene.fog=null),this.attachedScene=null,this.threeFog=null,super._cleanup(e)}resolveUniformValues(e){let t=e.height,i=e.noise;return{time:0,heightEnabled:t?.enabled?1:0,heightLevel:t?.level??ot,heightFalloff:t?.falloff??st,noiseEnabled:i?1:0,noiseScale:i?.scale??rt,noiseStrength:i?.strength??at,noiseSpeed:i?.speed??lt}}};function ct(n){let e=new qe(n.color??et);return(n.type??"linear")==="exp2"?new Xe(e,n.density??tt):new $e(e,n.start??it,n.end??nt)}function ut(n){let e=!!n.height?.enabled,t=!!n.noise;return e||t}function Kt(n={}){return new Y(n)}export{Ze as a,O as b,Ve as c,Qe as d,Y as e,Kt as f};
|
|
1
|
+
import{a as ie,c as ne,d as oe}from"./chunk-VLGJAGMX.js";import{D as j,b as Q,q as ee,r as te}from"./chunk-3XIJCDII.js";import{d as H,f as J}from"./chunk-HOLQZSW3.js";import{c as R,e as q,f as $,g as X}from"./chunk-T6O2SGH5.js";import{c as w,d as P,h as M,j as K}from"./chunk-7WRQ2UAN.js";import{Box3 as U,BufferAttribute as Ce,SkinnedMesh as De,MeshStandardMaterial as je,Group as Ee,Vector3 as x,Matrix4 as ce}from"three";var A=class{async loadFile(e,t){let i=await J.loadModel(e,t),o=i.animations??[];return{object:i.object,animation:o[0],animations:o,gltf:i.gltf}}};import{AnimationMixer as xe,Bone as se,LoopOnce as ve,LoopRepeat as Se}from"three";function Ae(n,e,t){let i=n.animations?.length?n.animations:n.animation?[n.animation]:[];if(i.length===0)return;let o=i.find(s=>s.name===e);return o||(i.length===1?i[0]:i[t]??i[0])}function Me(n){let e=n.lastIndexOf(".");return e>=0?n.slice(0,e):n}function re(n,e){if(!n?.name?.endsWith(".position"))return!1;let t=Me(n.name),i=e.get(t);return i instanceof se?!(i.parent instanceof se):/hips\.position$/i.test(n.name)||/root\.position$/i.test(n.name)}function Fe(n,e,t,i){for(let o of n.tracks){if(!re(o,e)||!o.values||o.values.length<3)continue;let s=o.values[0],r=i??o.values[1],a=o.values[2];for(let l=0;l<o.values.length;l+=3)o.values[l]=s,t&&(o.values[l+1]=r),o.values[l+2]=a}return n}function Oe(n,e){for(let t of n.tracks)if(re(t,e)&&!(!t.values||t.values.length<3))return t.values[1];return null}var E=class{constructor(e){this.target=e}_mixer=null;_actions={};_animations=[];_currentAction=null;_pauseAtPercentage=0;_isPaused=!1;_queuedKey=null;_fadeDuration=.5;_currentKey="";_assetLoader=new A;async loadAnimations(e,t={}){if(!e.length)return;let i=t.stripRootMotionY??!1,o=t.referenceRootY,s=t.referenceAnimationPath,r=await Promise.all(e.map(c=>this._assetLoader.loadFile(c.path))),a=new Map;this.target.traverse(c=>{c.name&&a.set(c.name,c)});let l=[],h=new Map;if(r.forEach((c,p)=>{let m=e[p].path,y=h.get(m)??0;h.set(m,y+1);let f=e[p].key||p.toString(),D=Ae(c,f,y);D&&l.push({key:f,clip:D.clone(),path:m})}),!l.length)return;let d=o;if(i&&d===void 0){let c=s?l.findIndex(m=>m.path===s):0,p=c>=0?[c,...l.map((m,y)=>y).filter(m=>m!==c)]:l.map((m,y)=>y);for(let m of p){let y=Oe(l[m].clip,a);if(y!==null){d=y;break}}}let u=l.map(({key:c,clip:p})=>({key:c,clip:Fe(p,a,i,d)}));this._animations=u.map(c=>c.clip),this._mixer=new xe(this.target),u.forEach(({key:c,clip:p})=>{this._actions[c]=this._mixer.clipAction(p)}),this.playAnimation({key:u[0].key})}update(e){if(!this._mixer||!this._currentAction)return;this._mixer.update(e);let t=this._currentAction.getClip().duration*(this._pauseAtPercentage/100);if(!this._isPaused&&this._pauseAtPercentage>0&&this._currentAction.time>=t&&(this._currentAction.time=t,this._currentAction.paused=!0,this._isPaused=!0,this._queuedKey!==null)){let i=this._actions[this._queuedKey];i.reset().play(),this._currentAction.crossFadeTo(i,this._fadeDuration,!1),this._currentAction=i,this._currentKey=this._queuedKey,this._queuedKey=null}}playAnimation(e){if(!this._mixer)return;let{key:t,pauseAtPercentage:i=0,pauseAtEnd:o=!1,fadeToKey:s,fadeDuration:r=.5}=e;if(t===this._currentKey)return;let a=this._actions[t];if(!a)return;if(a===this._currentAction){this._currentKey=t;return}this._queuedKey=s||null,this._fadeDuration=r,this._pauseAtPercentage=o?100:i,this._isPaused=!1;let l=this._currentAction;this._pauseAtPercentage>0?(a.setLoop(ve,1/0),a.clampWhenFinished=!0):(a.setLoop(Se,1/0),a.clampWhenFinished=!1),a.reset().play(),l&&l.crossFadeTo(a,r,!1),this._currentAction=a,this._currentKey=t}dispose(){Object.values(this._actions).forEach(e=>{e.stop()}),this._mixer&&(this._mixer.stopAllAction(),this._mixer.uncacheRoot(this.target),this._mixer=null),this._actions={},this._animations=[],this._currentAction=null,this._currentKey=""}get currentAnimationKey(){return this._currentKey}get animations(){return this._animations}};var ue={...te,material:{shader:H},animations:[],models:[],collisionShape:"capsule"};function F(n){return K(n.scale,P)}var Te=1e-4,ze=/foot$/i,Z=new x,L=new x,ae=new x,T=new x,le=new ce;function Le(n){let e=1/0,t=!1;return n.traverse(i=>{if(!i.isSkinnedMesh)return;let o=i,s=o.geometry,r=s.attributes.position,a=s.attributes.skinIndex,l=s.attributes.skinWeight,h=o.skeleton;if(!r||!a||!l||!h)return;t=!0,h.update(),o.updateMatrixWorld(!0);let d=h.boneMatrices;if(d)for(let u=0;u<r.count;u++){ae.fromBufferAttribute(r,u).applyMatrix4(o.bindMatrix),T.set(0,0,0);for(let c=0;c<4;c++){let p=l.getComponent(u,c);if(p===0)continue;let m=a.getComponent(u,c);le.fromArray(d,m*16),T.addScaledVector(L.copy(ae).applyMatrix4(le),p)}T.applyMatrix4(o.bindMatrixInverse).applyMatrix4(o.matrixWorld),e=Math.min(e,T.y)}}),!t||!Number.isFinite(e)?null:e}function Be(n,e){e.updateMatrixWorld(!0);let t=e.getWorldPosition(Z).y,i=Le(n)??1/0;if(n.traverse(o=>{!o.isBone||!ze.test(o.name)||(o.getWorldPosition(Z),i=Math.min(i,Z.y))}),Number.isFinite(i)||n.traverse(o=>{if(!o.isSkinnedMesh)return;let s=o;if(s.computeBoundingBox(),!s.boundingBox)return;let{min:r,max:a}=s.boundingBox;for(let l of[[r.x,r.y,r.z],[r.x,r.y,a.z],[r.x,a.y,r.z],[r.x,a.y,a.z],[a.x,r.y,r.z],[a.x,r.y,a.z],[a.x,a.y,r.z],[a.x,a.y,a.z]])L.set(l[0],l[1],l[2]),L.applyMatrix4(s.matrixWorld),i=Math.min(i,L.y)}),!Number.isFinite(i)){let o=new U().setFromObject(n);if(o.isEmpty())return null;i=o.min.y}return i-t}function we(n,e,t){return n.stripRootMotionY!==void 0?n.stripRootMotionY:!!(e&&t.some(i=>i===e))}function C(n){let e=n.collision?.position;return e?M(e,w):null}function V(n){return!!n.collision?.size}function Pe(n){n.hasWarnedDynamicTrimesh||(n.hasWarnedDynamicTrimesh=!0,console.warn(`Actor "${n.name||n.uuid}" requested collisionShape="trimesh" on a dynamic body; falling back to bounds.`))}function he(n,e,t){let i=n==="model"?"bounds":n??"capsule";return i==="trimesh"&&!e?(t?.(),"bounds"):i}function de(n,e){let t=n.x||.5,i=n.y||1,o=n.z||.5,s=Math.max(t,o)/2,r=i/2;return{shape:{type:"capsule",halfHeight:Math.max(0,r-s),radius:s},offset:[e.x,e.y,e.z],sensor:!1}}function S(n){let e=M(n.collision?.size??n.size,{x:.5,y:1,z:.5}),t=e.y||1,i=C(n);return de({x:e.x||.5,y:t,z:e.z||.5},i??{x:0,y:t/2,z:0})}function pe(n){let e=n.collision?.size;if(!e)return null;let t=M(e,w),i=t.x/2,o=t.y/2,s=t.z/2,r=C(n);return{shape:{type:"box",halfExtents:[i,o,s]},offset:[r?.x??0,r?.y??o,r?.z??0],sensor:!!n.collision?.sensor}}function me(n,e,t){let o=e.matrixWorld.clone().invert().multiply(n.matrixWorld);return new ce().makeScale(t.x,t.y,t.z).multiply(o)}function k(n,e,t){n.updateMatrixWorld(!0);let i=!1,o=new U;if(n.traverse(a=>{if(!a.isMesh)return;let l=a,h=$(l);if(!h)return;let d=null;if(l instanceof De?(l.computeBoundingBox(),d=l.boundingBox?.clone()??null):(h.computeBoundingBox(),d=h.boundingBox?.clone()??null),!d)return;let u=d.applyMatrix4(me(l,e,t));if(!i){o.copy(u),i=!0;return}o.union(u)}),!i||o.isEmpty())return null;let s=new x,r=new x;return o.getSize(s),o.getCenter(r),{size:s,center:r}}function Re(n,e,t){n.updateMatrixWorld(!0);let i=[],o=[],s=new U,r=new x,a=!1;if(n.traverse(h=>{if(!h.isMesh||R(h))return;let d=h,u=d.geometry;if(!u)return;let c=u.getAttribute("position");if(!(c instanceof Ce))return;let p=me(d,e,t),m=i.length/3;for(let f=0;f<c.count;f++)r.set(c.getX(f),c.getY(f),c.getZ(f)),r.applyMatrix4(p),i.push(r.x,r.y,r.z),s.expandByPoint(r);let y=u.getIndex();if(y)for(let f=0;f<y.count;f++)o.push(m+y.getX(f));else for(let f=0;f<c.count;f++)o.push(m+f);a=!0}),!a||i.length===0||o.length===0)return null;let l=new x;return s.getCenter(l),{vertices:new Float32Array(i),indices:new Uint32Array(o),center:l}}function fe(n,e,t){let i=pe(t);if(i)return i;if(!n||!e)return S(t);let o=k(n,e,F(t));if(!o)return S(t);let s=C(t);return{shape:{type:"box",halfExtents:[o.size.x/2,o.size.y/2,o.size.z/2]},offset:[s?.x??o.center.x,s?.y??o.center.y,s?.z??o.center.z],sensor:!1}}function ye(n,e,t,i,o){if(V(o)||!n||!e)return S(o);let s=k(n,e,F(o));if(!s)return S(o);let a=C(o);if(!a){let l=t&&i?k(t,i,F(o)):null;a=l?{x:l.center.x,y:l.center.y,z:l.center.z}:{x:s.center.x,y:s.center.y,z:s.center.z}}return de({x:s.size.x,y:s.size.y,z:s.size.z},a)}function ge(n,e,t){let i=pe(t);if(i)return i;if(!n||!e)return S(t);let o=Re(n,e,F(t));if(!o)return S(t);let s=C(t);return{shape:{type:"trimesh",vertices:o.vertices,indices:o.indices},offset:s?[s.x-o.center.x,s.y-o.center.y,s.z-o.center.z]:[0,0,0],sensor:!1}}function z(n){n&&n.traverse(e=>{if(!e.isMesh)return;X(e);let t=e;t.geometry?.dispose(),Array.isArray(t.material)?t.material.forEach(i=>i.dispose()):t.material?.dispose()})}var I=class extends ie{objectModel=null;collisionSource=null;collisionShape="capsule";constructor(e){super(),this.objectModel=e.objectModel,this.collisionSource=e.collisionSource??e.objectModel??null,this.collisionShape=e.collisionShape??"capsule"}collider(e){let t=he(this.collisionShape,!!e.collision?.static);return t==="bounds"?fe(this.objectModel,this.objectModel,e):t==="trimesh"?ge(this.objectModel,this.objectModel,e):ye(this.collisionSource,this.collisionSource,this.objectModel,this.objectModel,e)}},N=class extends ne{createEntity(e){return new O(e)}},Ze=Symbol("Actor"),O=class extends j{static type=Ze;_object=null;_collisionSource=null;_animationDelegate=null;_modelFileNames=[];_assetLoader=new A;_loadGeneration=0;_loadStatus="idle";controlledRotation=!1;hasWarnedDynamicTrimesh=!1;constructor(e){super(),this.options=Q(ue,e),this.prependUpdate(this.actorUpdate.bind(this)),this.controlledRotation=!0}create(){return this._loadStatus==="idle"&&(this.options.models?.length??0)>0&&this.load(),super.create()}load(){this._loadStatus==="loading"||this._loadStatus==="loaded"||(this._modelFileNames=[...this.options.models||[]],this._modelFileNames.length!==0&&(this.disposeRuntimeState(!0),this._loadStatus="loading",this.loadModelsDeferred(++this._loadGeneration)))}data(){return{animations:this._animationDelegate?.animations,objectModel:this._object,collisionSource:this._collisionSource??this._object,collisionShape:this.options.collisionShape}}needsDeferredModelCollision(){return this.requiresLoadedCollisionSource()?!this.getRuntimeCollisionSource():!1}synchronizeRuntimeCollider(){let e=this.getResolvedCollisionShape(),t;if(e==="bounds")t=fe(this._object,this.group??this._object,this.options);else if(e==="trimesh")t=ge(this._object,this.group??this._object,this.options);else{let i=this.getRuntimeCollisionSource();t=ye(i,i,this._object,this._object,this.options)}this.colliderDesc=t,this.colliderDescs.length>0?this.colliderDescs[0]=t:this.colliderDescs.push(t)}actorUpdate(e){this._animationDelegate?.update(e.delta)}actorDestroy(){this._loadGeneration+=1,this._loadStatus="idle",this.disposeRuntimeState(!0),this._modelFileNames=[]}_cleanup(e){super._cleanup(e),this.actorDestroy()}playAnimation(e){this._animationDelegate?.playAnimation(e)}get object(){return this._object}get collisionSource(){return this._collisionSource??this._object}getDebugInfo(){let e={type:"Actor",models:this._modelFileNames.length>0?this._modelFileNames:"none",modelLoaded:!!this._object,scale:(()=>{let t=M(this.options.scale,P);return`${t.x}, ${t.y}, ${t.z}`})(),collisionShape:this.getResolvedCollisionShape()};if(this._animationDelegate&&(e.currentAnimation=this._animationDelegate.currentAnimationKey||"none",e.animationsCount=this.options.animations?.length||0),this._object){let t=0,i=0;this._object.traverse(o=>{if(!o.isMesh)return;t++;let s=o.geometry;s?.attributes.position&&(i+=s.attributes.position.count)}),e.meshCount=t,e.vertexCount=i}return e}getResolvedCollisionShape(){return he(this.options.collisionShape,!!this.options.collision?.static,()=>Pe(this))}requiresLoadedCollisionSource(){let e=this.getResolvedCollisionShape();return e==="bounds"||e==="trimesh"?!V(this.options):e==="capsule"?!V(this.options)&&this.getCollisionSourceSelection().file!==null:!1}getRuntimeCollisionSource(){let e=this.getResolvedCollisionShape();return e==="bounds"||e==="trimesh"?this._object:this._collisionSource??this._object}getCollisionSourceSelection(){let e=this.options.models?.[0]??null,t=this.options.animations?.[0]?.path??null;return t?{file:t,reuseVisibleModel:t===e}:{file:e,reuseVisibleModel:!0}}disposeRuntimeState(e){this._animationDelegate&&(this._animationDelegate.dispose(),this._animationDelegate=null);let t=this._collisionSource;z(this._object),t&&t!==this._object&&z(t),this._object=null,this._collisionSource=null,e&&this.group&&(this.group.clear(),this.group=void 0)}loadModelsDeferred(e){this.dispatch("entity:model:loading",{entityId:this.uuid,files:this._modelFileNames});let t=this.getCollisionSourceSelection(),i=this._modelFileNames.map(s=>this._assetLoader.loadFile(s,{clone:!0})),o=t.file&&!t.reuseVisibleModel?this._assetLoader.loadFile(t.file,{clone:!0}):Promise.resolve(null);Promise.all([Promise.all(i),o]).then(([s,r])=>{if(e!==this._loadGeneration){s.forEach(l=>z(l.object??null)),r?.object&&z(r.object);return}this._object=s[0]?.object??null,this._collisionSource=t.reuseVisibleModel?this._object:r?.object??this._object,this._loadStatus=this._object?"loaded":"idle";let a=0;if(this._object){this._object.traverse(c=>{c.isMesh&&a++}),this.group=new Ee,this.group.add(this._object),this.group.scale.copy(F(this.options)),ee(this),this.applyMaterialOverrides(),this._animationDelegate=new E(this._object);let l=this.options.animations||[],h=this.options.models?.[0],d=l.map(c=>c.path),u=we(this.options,h,d);l.length>0?this._animationDelegate.loadAnimations(l,{stripRootMotionY:u,referenceAnimationPath:h}).then(()=>{e===this._loadGeneration&&(this.alignVisualModelToGround(),this.dispatch("entity:animation:loaded",{entityId:this.uuid,animationCount:l.length}))}):this.alignVisualModelToGround()}this.dispatch("entity:model:loaded",{entityId:this.uuid,success:!!this._object,meshCount:a})}).catch(s=>{e===this._loadGeneration&&(this._loadStatus="idle",console.error("Failed to load actor model",s),this.dispatch("entity:model:loaded",{entityId:this.uuid,success:!1,meshCount:0,errorMessage:s instanceof Error?s.message:String(s)}))})}alignVisualModelToGround(){if(!this._object||!this.group||q(this._object))return;this._animationDelegate?.update(0),this._object.updateMatrixWorld(!0);let e=Be(this._object,this.group);if(e===null||Math.abs(e)<Te)return;let t=this.group.scale.y||1;this._object.position.y-=e/t}applyMaterialOverrides(){let e=this.options.material;!e||!e.color&&!e.path&&e.opacity===void 0||this._object&&this._object.traverse(t=>{if(!t.isMesh||R(t))return;let i=t;i.material=Array.isArray(i.material)?i.material.map(o=>this.tintMaterial(o,e)):this.tintMaterial(i.material,e),e.color&&(i.castShadow=!0,i.receiveShadow=!0)})}tintMaterial(e,t){let i="color"in e,o=!!t.color,s=t.opacity!==void 0;if(!o&&!s)return e;if(o&&!i)return new je({color:t.color,emissiveIntensity:.5,lightMapIntensity:.5,fog:!0,opacity:t.opacity??1,transparent:s&&t.opacity<1});let r=e.clone();if(o&&"color"in r&&r.color.copy(t.color),s&&"opacity"in r&&"transparent"in r){let a=r;a.opacity=t.opacity,a.transparent=t.opacity<1}return r.needsUpdate=!0,r}};function Ve(...n){return oe({args:n,defaultConfig:ue,EntityClass:O,BuilderClass:N,CollisionBuilderClass:I,entityType:O.type,cloneFactory:e=>Ve(e??{})})}import{Color as qe,Fog as $e,FogExp2 as Xe,Group as Je}from"three";import{Color as ke}from"three";import{Fn as _e,fog as Ie,positionWorld as be,positionView as Ne,uniform as g,float as Ue,vec3 as b,clamp as G,mix as _,max as Ge,smoothstep as We,floor as Ye,fract as W,dot as Ke}from"three/tsl";var B=class{values;u={time:g(0),heightEnabled:g(0),heightLevel:g(0),heightFalloff:g(0),noiseEnabled:g(0),noiseScale:g(0),noiseStrength:g(0),noiseSpeed:g(0)};attachedScene=null;constructor(e){this.values={...e},this.syncUniforms()}setValues(e){Object.assign(this.values,e),this.syncUniforms()}tick(e){this.values.time+=e,this.u.time.value=this.values.time}scan(e){if(this.attachedScene===e)return;let t=e.fog;t&&(e.fogNode=this.buildFogNode(t),this.attachedScene=e)}unpatchAll(){this.attachedScene&&(this.attachedScene.fogNode=null,this.attachedScene=null)}syncUniforms(){this.u.time.value=this.values.time,this.u.heightEnabled.value=this.values.heightEnabled,this.u.heightLevel.value=this.values.heightLevel,this.u.heightFalloff.value=this.values.heightFalloff,this.u.noiseEnabled.value=this.values.noiseEnabled,this.u.noiseScale.value=this.values.noiseScale,this.u.noiseStrength.value=this.values.noiseStrength,this.u.noiseSpeed.value=this.values.noiseSpeed}buildFogNode(e){let t=e.isFogExp2===!0,i=g(new ke(e.color)),o=Ne.z.negate(),s=t?this.exp2Factor(g(e.density),o):We(g(e.near),g(e.far),o),r=this.u.heightLevel.sub(be.y),a=G(r.mul(Ge(this.u.heightFalloff,0)),0,1),l=_(s,s.mul(a),this.u.heightEnabled),h=be.mul(this.u.noiseScale).add(b(this.u.time.mul(this.u.noiseSpeed),0,this.u.time.mul(this.u.noiseSpeed).mul(.5))),u=He(h).sub(.5).mul(2).mul(G(this.u.noiseStrength,0,1)),c=G(l.add(l.mul(u)),0,1),p=_(l,c,this.u.noiseEnabled);return Ie(i,p)}exp2Factor(e,t){return e.mul(e).mul(t).mul(t).negate().exp().oneMinus()}},v=_e(([n])=>{let e=W(n.mul(b(443.8975,397.2973,491.1871))),t=e.add(Ke(e,e.yzx.add(19.27)));return W(t.x.add(t.y).mul(t.z))}),He=_e(([n])=>{let e=Ye(n),t=W(n),i=t.mul(t).mul(Ue(3).sub(t.mul(2))),o=v(e.add(b(0,0,0))),s=v(e.add(b(1,0,0))),r=v(e.add(b(0,1,0))),a=v(e.add(b(1,1,0))),l=v(e.add(b(0,0,1))),h=v(e.add(b(1,0,1))),d=v(e.add(b(0,1,1))),u=v(e.add(b(1,1,1))),c=_(o,s,i.x),p=_(r,a,i.x),m=_(l,h,i.x),y=_(d,u,i.x),f=_(c,p,i.y),D=_(m,y,i.y);return _(f,D,i.z)});var Qe=Symbol("Fog"),et="#9aa3ad",tt=.015,it=10,nt=250,ot=5,st=.2,rt=.05,at=.15,lt=.1,Y=class extends j{static type=Qe;threeFog=null;attachedScene=null;patcher;patcherEnabled;constructor(e={}){super(),this.options={...e};let t=this.resolveUniformValues(this.options);this.patcher=new B(t),this.patcherEnabled=ut(this.options)}create(){return super.create(),this.threeFog=ct(this.options),this.group=new Je,this.group.name=this.name?`Fog:${this.name}`:"Fog",this}attachToScene(e){this.threeFog&&(this.attachedScene=e,e.fog=this.threeFog,this.patcherEnabled&&this.patcher.scan(e))}_update(e){super._update(e),!(!this.attachedScene||!this.patcherEnabled)&&(this.patcher.tick(e.delta),this.patcher.scan(this.attachedScene))}_cleanup(e){this.patcher.unpatchAll(),this.attachedScene&&this.attachedScene.fog===this.threeFog&&(this.attachedScene.fog=null),this.attachedScene=null,this.threeFog=null,super._cleanup(e)}resolveUniformValues(e){let t=e.height,i=e.noise;return{time:0,heightEnabled:t?.enabled?1:0,heightLevel:t?.level??ot,heightFalloff:t?.falloff??st,noiseEnabled:i?1:0,noiseScale:i?.scale??rt,noiseStrength:i?.strength??at,noiseSpeed:i?.speed??lt}}};function ct(n){let e=new qe(n.color??et);return(n.type??"linear")==="exp2"?new Xe(e,n.density??tt):new $e(e,n.start??it,n.end??nt)}function ut(n){let e=!!n.height?.enabled,t=!!n.noise;return e||t}function Kt(n={}){return new Y(n)}export{Ze as a,O as b,Ve as c,Qe as d,Y as e,Kt as f};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as N,d as j,e as D,f as W,g as I,h as $}from"./chunk-5WRFDAZN.js";import{b as g}from"./chunk-2NO4YCLR.js";import{d as B,h as k,i as A,k as p}from"./chunk-T6O2SGH5.js";import{
|
|
1
|
+
import{a as N,d as j,e as D,f as W,g as I,h as $}from"./chunk-5WRFDAZN.js";import{b as g}from"./chunk-2NO4YCLR.js";import{d as B,h as k,i as A,k as p}from"./chunk-T6O2SGH5.js";import{b as c,i as u}from"./chunk-7WRQ2UAN.js";import{a as U}from"./chunk-QXVH6POE.js";var X=`
|
|
2
2
|
uniform vec2 uvScale;
|
|
3
3
|
varying vec2 vUv;
|
|
4
4
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{F as U,G as B,H as X,I as N,a as f}from"./chunk-YWH5HQDT.js";import{a as D,c as v,d as b}from"./chunk-UNCP6V7I.js";import{D as d,F as G,b as u,r as C,s as k}from"./chunk-CI7A5N6G.js";import{e as V}from"./chunk-YW2GTHCV.js";import{c as h,d as y,h as m,i as T,j as x}from"./chunk-7WRQ2UAN.js";import{Color as W,Group as ot,Sprite as at,SpriteMaterial as pt,CanvasTexture as H,LinearFilter as w,Vector2 as lt,ClampToEdgeWrapping as Y}from"three";var g={position:void 0,text:"",fontFamily:'Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace',fontSize:18,fontColor:"#FFFFFF",backgroundColor:null,padding:4,stickToViewport:!0,screenPosition:new lt(24,24),zDistance:1},E=class extends v{createEntity(t){return new _(t)}},ct=Symbol("Text"),_=class i extends d{static type=ct;_sprite=null;_texture=null;_canvas=null;_ctx=null;_cameraRef=null;_lastCanvasW=0;_lastCanvasH=0;constructor(t){super(),this.options=u(g,t),this.options.screenPosition=T(this.options.screenPosition,g.screenPosition),this.prependSetup(this.textSetup.bind(this)),this.prependUpdate(this.textUpdate.bind(this)),this.onCleanup(this.textDestroy.bind(this))}create(){return this._sprite=null,this._texture=null,this._canvas=null,this._ctx=null,this._lastCanvasW=0,this._lastCanvasH=0,this.group=new ot,this.createSprite(),super.create()}createSprite(){this._canvas=document.createElement("canvas"),this._ctx=this._canvas.getContext("2d"),this._texture=new H(this._canvas),this._texture.minFilter=w,this._texture.magFilter=w;let t=new pt({map:this._texture,transparent:!0,depthTest:!1,depthWrite:!1,alphaTest:.5});this._sprite=new at(t),this.group?.add(this._sprite),this.redrawText(this.options.text??"")}measureAndResizeCanvas(t,e,n,r){if(!this._canvas||!this._ctx)return{sizeChanged:!1};this._ctx.font=`${e}px ${n}`;let s=this._ctx.measureText(t),o=Math.ceil(s.width),a=Math.ceil(e*1.4),p=Math.max(2,o+r*2),l=Math.max(2,a+r*2),st=p!==this._lastCanvasW||l!==this._lastCanvasH;return this._canvas.width=p,this._canvas.height=l,this._lastCanvasW=p,this._lastCanvasH=l,{sizeChanged:st}}drawCenteredText(t,e,n){!this._canvas||!this._ctx||(this._ctx.font=`${e}px ${n}`,this._ctx.textAlign="center",this._ctx.textBaseline="middle",this._ctx.clearRect(0,0,this._canvas.width,this._canvas.height),this.options.backgroundColor&&(this._ctx.fillStyle=this.toCssColor(this.options.backgroundColor),this._ctx.fillRect(0,0,this._canvas.width,this._canvas.height)),this._ctx.fillStyle=this.toCssColor(this.options.fontColor??"#FFFFFF"),this._ctx.fillText(t,this._canvas.width/2,this._canvas.height/2))}updateTexture(t){!this._texture||!this._canvas||(t&&(this._texture.dispose(),this._texture=new H(this._canvas),this._texture.minFilter=w,this._texture.magFilter=w,this._texture.wrapS=Y,this._texture.wrapT=Y),this._texture.image=this._canvas,this._texture.needsUpdate=!0,this._sprite&&this._sprite.material&&(this._sprite.material.map=this._texture,this._sprite.material.needsUpdate=!0))}redrawText(t){if(!this._canvas||!this._ctx)return;let e=this.options.fontSize??18,n=this.options.fontFamily??g.fontFamily,r=this.options.padding??4,{sizeChanged:s}=this.measureAndResizeCanvas(t,e,n,r);this.drawCenteredText(t,e,n),this.updateTexture(!!s),this.options.stickToViewport&&this._cameraRef?this.updateStickyTransform():this.updateWorldSpriteScale()}toCssColor(t){return typeof t=="string"?t:`#${(t instanceof W?t:new W(t)).getHexString()}`}textSetup(t){this._cameraRef=t.camera,this.options.stickToViewport&&this._cameraRef&&(this._cameraRef.camera.add(this.group),this.updateStickyTransform())}textUpdate(t){this._sprite&&this.options.stickToViewport&&this._cameraRef&&this.updateStickyTransform()}screenPoint(t){let e=T(this.options.screenPosition,g.screenPosition);if(this.options.screenAnchor)return B(this.options.screenAnchor,e,t);let n=e.x>=0&&e.x<=1,r=e.y>=0&&e.y<=1;return{x:n?e.x*t.width:e.x,y:r?e.y*t.height:e.y}}updateWorldSpriteScale(){if(!this._canvas||!this._sprite)return;let t=this._canvas.width/Math.max(1,this._canvas.height),e=Math.max(1,this.options.fontSize??18),n=Math.max(.25,e/32),r=n*t;this._sprite.scale.set(r,n,1)}updateStickyTransform(){if(!this._sprite||!this._cameraRef||!this._canvas)return;let t=X(this._cameraRef),e=N({camera:this._cameraRef.camera,viewport:t,point:this.screenPoint(t),pivot:this.options.screenAnchor?U(this.options.screenAnchor):{x:.5,y:.5},size:{width:this._canvas.width,height:this._canvas.height},zDistance:this.options.zDistance??1});this._sprite.scale.set(e.scale.x,e.scale.y,1),this.group?.position.set(e.position.x,e.position.y,e.position.z)}updateText(t){this.options.text=t,this.redrawText(t),this.options.stickToViewport&&this._cameraRef&&this.updateStickyTransform()}buildInfo(){return{...new f(this).buildDebugInfo(),type:String(i.type),text:this.options.text??"",sticky:this.options.stickToViewport}}textDestroy(){this._texture?.dispose(),this._sprite?.material&&this._sprite.material.dispose(),this._sprite&&this._sprite.removeFromParent(),this.group?.removeFromParent(),this._sprite=null,this._texture=null,this._canvas=null,this._ctx=null,this._cameraRef=null}};function O(...i){return b({args:i,defaultConfig:{...g},EntityClass:_,BuilderClass:E,entityType:_.type,cloneFactory:t=>O(t??{})})}import{Euler as ht,Group as $,Quaternion as mt,Vector3 as ut}from"three";import{TextureLoader as j,SpriteMaterial as Q,Sprite as q,SRGBColorSpace as J}from"three";import{ClampToEdgeWrapping as K,LinearFilter as dt,NearestFilter as ft}from"three";var tt={...C,size:new ut(1,1,1),images:[],animations:[]},F=class extends D{collider(t){let e=x(t.collisionSize,t.size??y);return{shape:{type:"box",halfExtents:[e.x/2,e.y/2,e.z/2]}}}},z=class extends v{createEntity(t){return new S(t)}},yt=Symbol("Sprite"),S=class i extends d{static type=yt;sprites=[];spriteMap=new Map;currentSpriteIndex=0;animations=new Map;currentAnimation=null;currentAnimationFrame="";currentAnimationIndex=0;currentAnimationTime=0;sheetTexture=null;flippedX=!1;constructor(t){super(),this.options=u(tt,t),this.prependSetup(this.spriteSetup.bind(this)),this.prependUpdate(this.spriteUpdate.bind(this)),this.onCleanup(this.spriteDestroy.bind(this))}create(){return this.sprites=[],this.spriteMap.clear(),this.animations.clear(),this.currentAnimation=null,this.currentAnimationFrame="",this.currentAnimationIndex=0,this.currentAnimationTime=0,this.sheetTexture=null,this.group=void 0,this.options?.sheet?this.createSpriteFromSheet(this.options.sheet):this.createSpritesFromImages(this.options?.images||[]),this.createAnimations(this.options?.animations||[]),super.create()}createSpritesFromImages(t){let e=new j,n=x(this.options.size,y);t.forEach((r,s)=>{let o=e.load(r.file);o.colorSpace=J,o.anisotropy=V;let a=new Q({map:o,transparent:!0}),p=new q(a);p.position.normalize(),p.scale.set(n.x,n.y,n.z),p.visible=s===0,this.sprites.push(p),this.spriteMap.set(r.name,s)}),this.group=new $,this.group.add(...this.sprites)}createSpriteFromSheet(t){let e=x(this.options.size,y),n=new j().load(t.file);n.colorSpace=J,n.wrapS=K,n.wrapT=K;let r=t.filter==="linear"?dt:ft;n.magFilter=r,n.minFilter=r,n.generateMipmaps=!1,n.repeat.set(1/t.columns,1/t.rows);let s=new Q({map:n,transparent:!0}),o=new q(s);o.position.normalize(),o.scale.set(e.x,e.y,e.z),this.sheetTexture=n,this.sprites.push(o),t.frames.forEach((p,l)=>{p&&this.spriteMap.set(p,l)}),this.group=new $,this.group.add(o);let a=t.frames.find(p=>!!p);a&&this.setSprite(a)}createAnimations(t){t.forEach(e=>{let{name:n,frames:r,loop:s=!1,speed:o=1}=e,a={frames:r.map((p,l)=>({key:p,index:l,duration:typeof o=="number"?o:o[l]})),loop:s};this.animations.set(n,a)})}setSprite(t){let n=this.spriteMap.get(t)??0;if(this.currentSpriteIndex=n,this.sheetTexture){this.applySheetFrame(n);return}this.sprites.forEach((r,s)=>{r.visible=this.currentSpriteIndex===s})}setFlipX(t){if(this.flippedX!==t){if(this.flippedX=t,this.sheetTexture){this.applySheetFrame(this.currentSpriteIndex);return}this.sprites.forEach(e=>{e.material.map?.repeat.setX(t?-1:1),e.material.map?.offset.setX(t?1:0)})}}isFlippedX(){return this.flippedX}applySheetFrame(t){let e=this.options.sheet,n=this.sheetTexture;if(!e||!n)return;let r=t%e.columns,s=Math.floor(t/e.columns),o=1/e.columns,a=1/e.rows;n.repeat.x=this.flippedX?-o:o,n.offset.x=this.flippedX?(r+1)*o:r*o,n.offset.y=1-(s+1)*a}setAnimation(t,e){let n=this.animations.get(t);if(!n)return;let{loop:r,frames:s}=n;if(s.length!==0){for(t!==this.currentAnimation?(this.currentAnimation=t,this.currentAnimationIndex=0,this.currentAnimationTime=0):this.currentAnimationTime+=e;;){let o=s[this.currentAnimationIndex].duration;if(!(o>0)||this.currentAnimationTime<o)break;if(this.currentAnimationTime-=o,this.currentAnimationIndex+1<s.length)this.currentAnimationIndex++;else if(r)this.currentAnimationIndex=0;else{this.currentAnimationTime=0;break}}this.currentAnimationFrame=s[this.currentAnimationIndex].key,this.setSprite(this.currentAnimationFrame)}}getCurrentRotationQuaternion(){return this.transformStore?.dirty.rotation?this.transformStore.rotation:this.body?.rotation?.()??null}syncSpriteMaterials(){let t=this.getCurrentRotationQuaternion();this.sprites.forEach(e=>{if(e.material&&t){let r=new mt(t.x,t.y,t.z,t.w),s=new ht().setFromQuaternion(r,"XYZ");e.material.rotation=s.z}let n=x(this.options.size,y);e.scale.set(n.x,n.y,n.z)})}spriteSetup(t){this.syncSpriteMaterials()}spriteUpdate(t){this.syncSpriteMaterials()}spriteDestroy(t){this.sprites.forEach(e=>{e.removeFromParent()}),this.group?.remove(...this.sprites),this.group?.removeFromParent(),this.sheetTexture?.dispose(),this.sheetTexture=null}buildInfo(){return{...new f(this).buildDebugInfo(),type:String(i.type)}}};function L(...i){return b({args:i,defaultConfig:tt,EntityClass:S,BuilderClass:z,CollisionBuilderClass:F,entityType:S.type,cloneFactory:t=>L(t??{})})}import{Color as nt,Group as gt}from"three";import{Line2NodeMaterial as _t}from"three/webgpu";import{Line2 as St}from"three/addons/lines/webgpu/Line2.js";import{Color as et}from"three";import{LineGeometry as xt}from"three/addons/lines/LineGeometry.js";function I(i){let t=[];for(let e of i){let{x:n,y:r,z:s}=m(e,h);t.push(n,r,s)}return t}function A(i,t,e){if(!i||i.length===0)return;let n=[],r=new et(e);for(let s=0;s<t;s++){let o=i[s]??i[i.length-1]??e,a=new et(o??r);n.push(a.r,a.g,a.b)}return n}function it(i){let t=new xt,e=I(i.points);t.setPositions(e);let n=A(i.colors,i.points.length,"#ffffff");return n&&t.setColors(n),t}var c={...C,points:[{x:0,y:0,z:0},{x:1,y:0,z:0}],linewidth:1,worldUnits:!0,alphaToCoverage:!1,opacity:1,transparent:!1,dashed:!1,dashSize:1,gapSize:1,pickThreshold:0},Ct=Symbol("Line");function R(i,t){if(!i||i.length<2)throw new Error(`${t}: at least two points are required`);return i}function rt(i){return i instanceof nt?i.clone():new nt(i??"#ffffff")}function vt(i){let t=!!i.colors?.length,e=new _t({color:rt(i.color).getHex(),linewidth:i.linewidth??c.linewidth,worldUnits:i.worldUnits??c.worldUnits,vertexColors:t,dashed:i.dashed??!1,dashSize:i.dashSize??c.dashSize,gapSize:i.gapSize??c.gapSize,transparent:i.transparent??!1,opacity:i.opacity??1});return e.alphaToCoverage=i.alphaToCoverage??!1,e}function bt(i){return!i.point||!i.pointOnLine||i.faceIndex==null?null:{point:i.point.clone(),pointOnLine:i.pointOnLine.clone(),faceIndex:i.faceIndex,distance:i.distance}}function wt(i,t,e={}){let n=t.getLineObject();if(!n)return null;let r=e.threshold??t.options.pickThreshold??0,s=i.params.Line2??{threshold:0};s.threshold=r,i.params.Line2=s;let a=i.intersectObject(n,!1)[0];return a?bt(a):null}var P=class i extends d{static type=Ct;_line=null;_geometry=null;_material=null;constructor(t){super();let e=u(c,t);e.points=R(e.points,"ZylemLine").map(n=>m(n,h)),this.options=e}create(){return this.disposeLineResources(),this.group=new gt,this.rebuildLine(),this.applyGroupPosition(),super.create()}setPoints(t,e){if(R(t,"setPoints"),this.options.points=t.map(r=>m(r,h)),e&&(this.options.colors=e),!this._line||!this._geometry||!this._material)return this;this._geometry.setPositions(I(this.options.points));let n=A(this.options.colors,this.options.points.length,rt(this.options.color));return n&&this._geometry.setColors(n),this._material.vertexColors=!!this.options.colors?.length,this.options.dashed&&this._line.computeLineDistances(),this._geometry.computeBoundingBox(),this._geometry.computeBoundingSphere(),this}getLineObject(){return this._line}pickFromRaycaster(t,e={}){return wt(t,this,e)}buildInfo(){return{...new f(this).buildDebugInfo(),type:String(i.type),points:this.options.points.length,linewidth:this.options.linewidth??c.linewidth,worldUnits:this.options.worldUnits??c.worldUnits}}rebuildLine(){this._geometry=it({points:this.options.points,colors:this.options.colors}),this._material=vt(this.options),this._line=new St(this._geometry,this._material),this.options.dashed&&this._line.computeLineDistances(),this.group?.add(this._line)}applyGroupPosition(){if(!this.group)return;let t=m(this.options.position,h);this.group.position.set(t.x,t.y,t.z)}_cleanup(t){this.disposeLineResources(),super._cleanup(t)}disposeLineResources(){this._line?.removeFromParent(),this._geometry?.dispose(),this._material?.dispose(),this._line=null,this._geometry=null,this._material=null}};function Z(...i){let t=k(i,c);R(t.points,"createLine");let e=new P(t);return G(e,n=>Z(n??{}))}var M={registry:new Map,register(i,t){this.registry.set(i,t)},createFromBlueprint(i){let t=this.registry.get(i.type);if(!t)throw new Error(`Unknown entity type: ${i.type}`);let e={...i.data,position:i.position?{x:i.position[0],y:i.position[1],z:0}:void 0,name:i.id};return t(e)}};M.register("text",i=>O(i));M.register("sprite",i=>L(i));M.register("line",i=>Z(i));function Se(i){return{template:i,generate(t){let e=[];for(let n=0;n<t;n++)e.push(i.clone());return e}}}export{ct as a,_ as b,O as c,yt as d,S as e,L as f,Ct as g,wt as h,P as i,Z as j,M as k,Se as l};
|
|
1
|
+
import{F as U,G as B,H as X,I as N,a as f}from"./chunk-X4TZ645S.js";import{a as D,c as v,d as b}from"./chunk-VLGJAGMX.js";import{D as d,F as G,b as u,r as C,s as k}from"./chunk-3XIJCDII.js";import{e as V}from"./chunk-HOLQZSW3.js";import{c as h,d as y,h as m,i as T,j as x}from"./chunk-7WRQ2UAN.js";import{Color as W,Group as ot,Sprite as at,SpriteMaterial as pt,CanvasTexture as H,LinearFilter as w,Vector2 as lt,ClampToEdgeWrapping as Y}from"three";var g={position:void 0,text:"",fontFamily:'Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace',fontSize:18,fontColor:"#FFFFFF",backgroundColor:null,padding:4,stickToViewport:!0,screenPosition:new lt(24,24),zDistance:1},E=class extends v{createEntity(t){return new _(t)}},ct=Symbol("Text"),_=class i extends d{static type=ct;_sprite=null;_texture=null;_canvas=null;_ctx=null;_cameraRef=null;_lastCanvasW=0;_lastCanvasH=0;constructor(t){super(),this.options=u(g,t),this.options.screenPosition=T(this.options.screenPosition,g.screenPosition),this.prependSetup(this.textSetup.bind(this)),this.prependUpdate(this.textUpdate.bind(this)),this.onCleanup(this.textDestroy.bind(this))}create(){return this._sprite=null,this._texture=null,this._canvas=null,this._ctx=null,this._lastCanvasW=0,this._lastCanvasH=0,this.group=new ot,this.createSprite(),super.create()}createSprite(){this._canvas=document.createElement("canvas"),this._ctx=this._canvas.getContext("2d"),this._texture=new H(this._canvas),this._texture.minFilter=w,this._texture.magFilter=w;let t=new pt({map:this._texture,transparent:!0,depthTest:!1,depthWrite:!1,alphaTest:.5});this._sprite=new at(t),this.group?.add(this._sprite),this.redrawText(this.options.text??"")}measureAndResizeCanvas(t,e,n,r){if(!this._canvas||!this._ctx)return{sizeChanged:!1};this._ctx.font=`${e}px ${n}`;let s=this._ctx.measureText(t),o=Math.ceil(s.width),a=Math.ceil(e*1.4),p=Math.max(2,o+r*2),l=Math.max(2,a+r*2),st=p!==this._lastCanvasW||l!==this._lastCanvasH;return this._canvas.width=p,this._canvas.height=l,this._lastCanvasW=p,this._lastCanvasH=l,{sizeChanged:st}}drawCenteredText(t,e,n){!this._canvas||!this._ctx||(this._ctx.font=`${e}px ${n}`,this._ctx.textAlign="center",this._ctx.textBaseline="middle",this._ctx.clearRect(0,0,this._canvas.width,this._canvas.height),this.options.backgroundColor&&(this._ctx.fillStyle=this.toCssColor(this.options.backgroundColor),this._ctx.fillRect(0,0,this._canvas.width,this._canvas.height)),this._ctx.fillStyle=this.toCssColor(this.options.fontColor??"#FFFFFF"),this._ctx.fillText(t,this._canvas.width/2,this._canvas.height/2))}updateTexture(t){!this._texture||!this._canvas||(t&&(this._texture.dispose(),this._texture=new H(this._canvas),this._texture.minFilter=w,this._texture.magFilter=w,this._texture.wrapS=Y,this._texture.wrapT=Y),this._texture.image=this._canvas,this._texture.needsUpdate=!0,this._sprite&&this._sprite.material&&(this._sprite.material.map=this._texture,this._sprite.material.needsUpdate=!0))}redrawText(t){if(!this._canvas||!this._ctx)return;let e=this.options.fontSize??18,n=this.options.fontFamily??g.fontFamily,r=this.options.padding??4,{sizeChanged:s}=this.measureAndResizeCanvas(t,e,n,r);this.drawCenteredText(t,e,n),this.updateTexture(!!s),this.options.stickToViewport&&this._cameraRef?this.updateStickyTransform():this.updateWorldSpriteScale()}toCssColor(t){return typeof t=="string"?t:`#${(t instanceof W?t:new W(t)).getHexString()}`}textSetup(t){this._cameraRef=t.camera,this.options.stickToViewport&&this._cameraRef&&(this._cameraRef.camera.add(this.group),this.updateStickyTransform())}textUpdate(t){this._sprite&&this.options.stickToViewport&&this._cameraRef&&this.updateStickyTransform()}screenPoint(t){let e=T(this.options.screenPosition,g.screenPosition);if(this.options.screenAnchor)return B(this.options.screenAnchor,e,t);let n=e.x>=0&&e.x<=1,r=e.y>=0&&e.y<=1;return{x:n?e.x*t.width:e.x,y:r?e.y*t.height:e.y}}updateWorldSpriteScale(){if(!this._canvas||!this._sprite)return;let t=this._canvas.width/Math.max(1,this._canvas.height),e=Math.max(1,this.options.fontSize??18),n=Math.max(.25,e/32),r=n*t;this._sprite.scale.set(r,n,1)}updateStickyTransform(){if(!this._sprite||!this._cameraRef||!this._canvas)return;let t=X(this._cameraRef),e=N({camera:this._cameraRef.camera,viewport:t,point:this.screenPoint(t),pivot:this.options.screenAnchor?U(this.options.screenAnchor):{x:.5,y:.5},size:{width:this._canvas.width,height:this._canvas.height},zDistance:this.options.zDistance??1});this._sprite.scale.set(e.scale.x,e.scale.y,1),this.group?.position.set(e.position.x,e.position.y,e.position.z)}updateText(t){this.options.text=t,this.redrawText(t),this.options.stickToViewport&&this._cameraRef&&this.updateStickyTransform()}buildInfo(){return{...new f(this).buildDebugInfo(),type:String(i.type),text:this.options.text??"",sticky:this.options.stickToViewport}}textDestroy(){this._texture?.dispose(),this._sprite?.material&&this._sprite.material.dispose(),this._sprite&&this._sprite.removeFromParent(),this.group?.removeFromParent(),this._sprite=null,this._texture=null,this._canvas=null,this._ctx=null,this._cameraRef=null}};function O(...i){return b({args:i,defaultConfig:{...g},EntityClass:_,BuilderClass:E,entityType:_.type,cloneFactory:t=>O(t??{})})}import{Euler as ht,Group as $,Quaternion as mt,Vector3 as ut}from"three";import{TextureLoader as j,SpriteMaterial as Q,Sprite as q,SRGBColorSpace as J}from"three";import{ClampToEdgeWrapping as K,LinearFilter as dt,NearestFilter as ft}from"three";var tt={...C,size:new ut(1,1,1),images:[],animations:[]},F=class extends D{collider(t){let e=x(t.collisionSize,t.size??y);return{shape:{type:"box",halfExtents:[e.x/2,e.y/2,e.z/2]}}}},z=class extends v{createEntity(t){return new S(t)}},yt=Symbol("Sprite"),S=class i extends d{static type=yt;sprites=[];spriteMap=new Map;currentSpriteIndex=0;animations=new Map;currentAnimation=null;currentAnimationFrame="";currentAnimationIndex=0;currentAnimationTime=0;sheetTexture=null;flippedX=!1;constructor(t){super(),this.options=u(tt,t),this.prependSetup(this.spriteSetup.bind(this)),this.prependUpdate(this.spriteUpdate.bind(this)),this.onCleanup(this.spriteDestroy.bind(this))}create(){return this.sprites=[],this.spriteMap.clear(),this.animations.clear(),this.currentAnimation=null,this.currentAnimationFrame="",this.currentAnimationIndex=0,this.currentAnimationTime=0,this.sheetTexture=null,this.group=void 0,this.options?.sheet?this.createSpriteFromSheet(this.options.sheet):this.createSpritesFromImages(this.options?.images||[]),this.createAnimations(this.options?.animations||[]),super.create()}createSpritesFromImages(t){let e=new j,n=x(this.options.size,y);t.forEach((r,s)=>{let o=e.load(r.file);o.colorSpace=J,o.anisotropy=V;let a=new Q({map:o,transparent:!0}),p=new q(a);p.position.normalize(),p.scale.set(n.x,n.y,n.z),p.visible=s===0,this.sprites.push(p),this.spriteMap.set(r.name,s)}),this.group=new $,this.group.add(...this.sprites)}createSpriteFromSheet(t){let e=x(this.options.size,y),n=new j().load(t.file);n.colorSpace=J,n.wrapS=K,n.wrapT=K;let r=t.filter==="linear"?dt:ft;n.magFilter=r,n.minFilter=r,n.generateMipmaps=!1,n.repeat.set(1/t.columns,1/t.rows);let s=new Q({map:n,transparent:!0}),o=new q(s);o.position.normalize(),o.scale.set(e.x,e.y,e.z),this.sheetTexture=n,this.sprites.push(o),t.frames.forEach((p,l)=>{p&&this.spriteMap.set(p,l)}),this.group=new $,this.group.add(o);let a=t.frames.find(p=>!!p);a&&this.setSprite(a)}createAnimations(t){t.forEach(e=>{let{name:n,frames:r,loop:s=!1,speed:o=1}=e,a={frames:r.map((p,l)=>({key:p,index:l,duration:typeof o=="number"?o:o[l]})),loop:s};this.animations.set(n,a)})}setSprite(t){let n=this.spriteMap.get(t)??0;if(this.currentSpriteIndex=n,this.sheetTexture){this.applySheetFrame(n);return}this.sprites.forEach((r,s)=>{r.visible=this.currentSpriteIndex===s})}setFlipX(t){if(this.flippedX!==t){if(this.flippedX=t,this.sheetTexture){this.applySheetFrame(this.currentSpriteIndex);return}this.sprites.forEach(e=>{e.material.map?.repeat.setX(t?-1:1),e.material.map?.offset.setX(t?1:0)})}}isFlippedX(){return this.flippedX}applySheetFrame(t){let e=this.options.sheet,n=this.sheetTexture;if(!e||!n)return;let r=t%e.columns,s=Math.floor(t/e.columns),o=1/e.columns,a=1/e.rows;n.repeat.x=this.flippedX?-o:o,n.offset.x=this.flippedX?(r+1)*o:r*o,n.offset.y=1-(s+1)*a}setAnimation(t,e){let n=this.animations.get(t);if(!n)return;let{loop:r,frames:s}=n;if(s.length!==0){for(t!==this.currentAnimation?(this.currentAnimation=t,this.currentAnimationIndex=0,this.currentAnimationTime=0):this.currentAnimationTime+=e;;){let o=s[this.currentAnimationIndex].duration;if(!(o>0)||this.currentAnimationTime<o)break;if(this.currentAnimationTime-=o,this.currentAnimationIndex+1<s.length)this.currentAnimationIndex++;else if(r)this.currentAnimationIndex=0;else{this.currentAnimationTime=0;break}}this.currentAnimationFrame=s[this.currentAnimationIndex].key,this.setSprite(this.currentAnimationFrame)}}getCurrentRotationQuaternion(){return this.transformStore?.dirty.rotation?this.transformStore.rotation:this.body?.rotation?.()??null}syncSpriteMaterials(){let t=this.getCurrentRotationQuaternion();this.sprites.forEach(e=>{if(e.material&&t){let r=new mt(t.x,t.y,t.z,t.w),s=new ht().setFromQuaternion(r,"XYZ");e.material.rotation=s.z}let n=x(this.options.size,y);e.scale.set(n.x,n.y,n.z)})}spriteSetup(t){this.syncSpriteMaterials()}spriteUpdate(t){this.syncSpriteMaterials()}spriteDestroy(t){this.sprites.forEach(e=>{e.removeFromParent()}),this.group?.remove(...this.sprites),this.group?.removeFromParent(),this.sheetTexture?.dispose(),this.sheetTexture=null}buildInfo(){return{...new f(this).buildDebugInfo(),type:String(i.type)}}};function L(...i){return b({args:i,defaultConfig:tt,EntityClass:S,BuilderClass:z,CollisionBuilderClass:F,entityType:S.type,cloneFactory:t=>L(t??{})})}import{Color as nt,Group as gt}from"three";import{Line2NodeMaterial as _t}from"three/webgpu";import{Line2 as St}from"three/addons/lines/webgpu/Line2.js";import{Color as et}from"three";import{LineGeometry as xt}from"three/addons/lines/LineGeometry.js";function I(i){let t=[];for(let e of i){let{x:n,y:r,z:s}=m(e,h);t.push(n,r,s)}return t}function A(i,t,e){if(!i||i.length===0)return;let n=[],r=new et(e);for(let s=0;s<t;s++){let o=i[s]??i[i.length-1]??e,a=new et(o??r);n.push(a.r,a.g,a.b)}return n}function it(i){let t=new xt,e=I(i.points);t.setPositions(e);let n=A(i.colors,i.points.length,"#ffffff");return n&&t.setColors(n),t}var c={...C,points:[{x:0,y:0,z:0},{x:1,y:0,z:0}],linewidth:1,worldUnits:!0,alphaToCoverage:!1,opacity:1,transparent:!1,dashed:!1,dashSize:1,gapSize:1,pickThreshold:0},Ct=Symbol("Line");function R(i,t){if(!i||i.length<2)throw new Error(`${t}: at least two points are required`);return i}function rt(i){return i instanceof nt?i.clone():new nt(i??"#ffffff")}function vt(i){let t=!!i.colors?.length,e=new _t({color:rt(i.color).getHex(),linewidth:i.linewidth??c.linewidth,worldUnits:i.worldUnits??c.worldUnits,vertexColors:t,dashed:i.dashed??!1,dashSize:i.dashSize??c.dashSize,gapSize:i.gapSize??c.gapSize,transparent:i.transparent??!1,opacity:i.opacity??1});return e.alphaToCoverage=i.alphaToCoverage??!1,e}function bt(i){return!i.point||!i.pointOnLine||i.faceIndex==null?null:{point:i.point.clone(),pointOnLine:i.pointOnLine.clone(),faceIndex:i.faceIndex,distance:i.distance}}function wt(i,t,e={}){let n=t.getLineObject();if(!n)return null;let r=e.threshold??t.options.pickThreshold??0,s=i.params.Line2??{threshold:0};s.threshold=r,i.params.Line2=s;let a=i.intersectObject(n,!1)[0];return a?bt(a):null}var P=class i extends d{static type=Ct;_line=null;_geometry=null;_material=null;constructor(t){super();let e=u(c,t);e.points=R(e.points,"ZylemLine").map(n=>m(n,h)),this.options=e}create(){return this.disposeLineResources(),this.group=new gt,this.rebuildLine(),this.applyGroupPosition(),super.create()}setPoints(t,e){if(R(t,"setPoints"),this.options.points=t.map(r=>m(r,h)),e&&(this.options.colors=e),!this._line||!this._geometry||!this._material)return this;this._geometry.setPositions(I(this.options.points));let n=A(this.options.colors,this.options.points.length,rt(this.options.color));return n&&this._geometry.setColors(n),this._material.vertexColors=!!this.options.colors?.length,this.options.dashed&&this._line.computeLineDistances(),this._geometry.computeBoundingBox(),this._geometry.computeBoundingSphere(),this}getLineObject(){return this._line}pickFromRaycaster(t,e={}){return wt(t,this,e)}buildInfo(){return{...new f(this).buildDebugInfo(),type:String(i.type),points:this.options.points.length,linewidth:this.options.linewidth??c.linewidth,worldUnits:this.options.worldUnits??c.worldUnits}}rebuildLine(){this._geometry=it({points:this.options.points,colors:this.options.colors}),this._material=vt(this.options),this._line=new St(this._geometry,this._material),this.options.dashed&&this._line.computeLineDistances(),this.group?.add(this._line)}applyGroupPosition(){if(!this.group)return;let t=m(this.options.position,h);this.group.position.set(t.x,t.y,t.z)}_cleanup(t){this.disposeLineResources(),super._cleanup(t)}disposeLineResources(){this._line?.removeFromParent(),this._geometry?.dispose(),this._material?.dispose(),this._line=null,this._geometry=null,this._material=null}};function Z(...i){let t=k(i,c);R(t.points,"createLine");let e=new P(t);return G(e,n=>Z(n??{}))}var M={registry:new Map,register(i,t){this.registry.set(i,t)},createFromBlueprint(i){let t=this.registry.get(i.type);if(!t)throw new Error(`Unknown entity type: ${i.type}`);let e={...i.data,position:i.position?{x:i.position[0],y:i.position[1],z:0}:void 0,name:i.id};return t(e)}};M.register("text",i=>O(i));M.register("sprite",i=>L(i));M.register("line",i=>Z(i));function Se(i){return{template:i,generate(t){let e=[];for(let n=0;n<t;n++)e.push(i.clone());return e}}}export{ct as a,_ as b,O as c,yt as d,S as e,L as f,Ct as g,wt as h,P as i,Z as j,M as k,Se as l};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{proxy as a}from"valtio/vanilla";var c=["translate","rotate","scale"];function v(t){return c.includes(t)}var g={enabled:!0,translate:.25,rotate:Math.PI/12,scale:.1},e=a({enabled:!1,paused:!1,tool:"none",selectedEntityId:null,selectedEntityIds:[],hoveredEntityId:null,snap:{...g},gridVisible:!1,addTypeId:null,addTypeProps:null,pickMode:!1,navigationTool:!1,flags:new Set}),l=null;function I(t){return l=t,()=>{l===t&&(l=null)}}function d(t){return!t||!l?null:l(t)}function s(t,n){if(t==null)return null;if(typeof t=="string")return t;let o=t.uuid;if(typeof o=="string")return console.warn(`${n}: received a live entity. Pass the UUID instead \u2014 storing entities in debugState makes valtio deep-proxy the scene graph.`),o;throw new TypeError(`${n} expects an entity UUID string or null, received ${typeof t}.`)}function S(){return e.paused}function T(t){e.paused=t}function m(){return e.tool}function h(t){e.tool=t}function D(){return e.enabled||e.tool!=="none"||e.pickMode||e.navigationTool}function k(t){e.navigationTool!==t&&(e.navigationTool=t)}function P(t){e.pickMode=t,!t&&e.tool!=="select"&&e.tool!=="delete"&&x()}function R(){return e.pickMode}function M(){return e.selectedEntityId}function y(t){let n=s(t,"setSelectedEntityId");e.selectedEntityId!==n&&(e.selectedEntityId=n,e.selectedEntityIds=n?[n]:[])}function w(){return[...e.selectedEntityIds]}function u(t){let n=t.map((i,r)=>s(i,`setSelectedEntityIds[${r}]`)).filter(i=>i!==null);n.length===e.selectedEntityIds.length&&n.every((i,r)=>e.selectedEntityIds[r]===i)||(e.selectedEntityIds=n,e.selectedEntityId=n[0]??null)}function p(t){let n=e.selectedEntityIds,o=t.filter((i,r)=>!n.includes(i)&&t.indexOf(i)===r);o.length!==0&&u([...n,...o])}function f(t){let n=new Set(t);u(e.selectedEntityIds.filter(o=>!n.has(o)))}function G(t){let n=s(t,"toggleSelectedEntityId");n&&(e.selectedEntityIds.includes(n)?f([n]):p([n]))}function O(){return{...e.snap}}function A(t){Object.assign(e.snap,t)}function H(t){e.gridVisible=t}function N(t,n){e.addTypeId=t,e.addTypeProps=t?n??null:null}function U(){return e.hoveredEntityId}function E(t){let n=s(t,"setHoveredEntityId");e.hoveredEntityId!==n&&(e.hoveredEntityId=n)}function x(){E(null)}function F(){return d(e.selectedEntityId)}function V(){return d(e.hoveredEntityId)}function _(t){y(s(t,"setSelectedEntity"))}export{c as a,v as b,g as c,e as d,I as e,d as f,S as g,T as h,m as i,h as j,D as k,k as l,P as m,R as n,M as o,y as p,w as q,u as r,p as s,f as t,G as u,O as v,A as w,H as x,N as y,U as z,E as A,x as B,F as C,V as D,_ as E};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{G as b,H as I,I as Z}from"./chunk-
|
|
1
|
+
import{G as b,H as I,I as Z}from"./chunk-X4TZ645S.js";import{j as C}from"./chunk-4QLJUQSJ.js";import{D as l,F as p,a as O,b as a,r as T}from"./chunk-3XIJCDII.js";import{a as S,g as _,i as v,j as E}from"./chunk-7WRQ2UAN.js";import{e as w}from"./chunk-UUOPT2N4.js";import{Group as N,Quaternion as U,Vector3 as d}from"three";import{ParticleEmitterBehavior as u}from"@zylem/behaviors/particle-emitter";var X={...T,effect:{create(){throw new Error("createParticleSystem(...) requires an effect or preset definition.")}},preset:void 0,autoplay:!0,localOffset:void 0,followPosition:!0,followRotation:!0,autoDestroy:!1},M=Symbol("ParticleSystem"),y=1,W=new d(y,y,y),R=new d;function Q(i){return{effect:i.preset??i.effect,autoplay:i.autoplay,localOffset:i.localOffset,followPosition:i.followPosition,followRotation:i.followRotation,autoDestroy:i.autoDestroy}}var c=class i extends l{static type=M;particleHandle=null;getSelectionBounds(o){return this.group?(this.group.getWorldPosition(R),o.setFromCenterAndSize(R,W),w(o)):null}constructor(o,e=!0){super(),this.options=a(X,o),this.group=new N;let t=this.options.position;t&&this.group.position.copy(E(t)),this.__zylemParticleSystemEntity=!0,this.bindStandaloneTransforms(),e&&(this.particleHandle=this.use(u,Q(this.options)))}bindStandaloneTransforms(){let o=()=>{this.options.position=new d(this.group?.position.x??0,this.group?.position.y??0,this.group?.position.z??0)},e=()=>{this.group&&(this._rotation2DAngle=this.group.rotation.z)};this.setPosition=(t,r,n)=>{this.group?.position.set(t,r,n),o()},this.setPositionX=t=>{this.group&&(this.group.position.x=t,o())},this.setPositionY=t=>{this.group&&(this.group.position.y=t,o())},this.setPositionZ=t=>{this.group&&(this.group.position.z=t,o())},this.getPosition=()=>this.group?{x:this.group.position.x,y:this.group.position.y,z:this.group.position.z}:null,this.setRotation=(t,r,n)=>{this.group?.rotation.set(t,r,n),e()},this.setRotationX=t=>{this.group&&(this.group.rotation.x=t,e())},this.setRotationY=t=>{this.group&&(this.group.rotation.y=t,e())},this.setRotationZ=t=>{this.group&&(this.group.rotation.z=t,e())},this.setRotationDegrees=(t,r,n)=>{this.group?.rotation.set(t*Math.PI/180,r*Math.PI/180,n*Math.PI/180),e()},this.setRotationDegreesX=t=>{this.group&&(this.group.rotation.x=t*Math.PI/180,e())},this.setRotationDegreesY=t=>{this.group&&(this.group.rotation.y=t*Math.PI/180,e())},this.setRotationDegreesZ=t=>{this.group&&(this.group.rotation.z=t*Math.PI/180,e())},this.rotateX=t=>{this.group?.rotateX(t),e()},this.rotateY=t=>{this.group?.rotateY(t),e()},this.rotateZ=t=>{this.group?.rotateZ(t),e()},this.getRotation=()=>{if(!this.group)return null;let t=new U;return this.group.getWorldQuaternion(t),t}}resolveParticleHandle(){if(this.particleHandle)return this.particleHandle;let o=this.getBehaviorRefs().find(r=>r.descriptor.key===u.key);if(!o)return null;let e={getFSM:()=>o.fsm??null,getOptions:()=>o.options,ref:o},t=u.createHandle?.(o)??{};return this.particleHandle={...e,...t},this.particleHandle}play(){this.resolveParticleHandle()?.play()}stop(){this.resolveParticleHandle()?.stop()}pause(){this.resolveParticleHandle()?.pause()}restart(){this.resolveParticleHandle()?.restart()}burst(){this.resolveParticleHandle()?.burst()}isPlaying(){return this.resolveParticleHandle()?.isPlaying()??!1}getSystem(){return this.resolveParticleHandle()?.getSystem()}buildInfo(){return{...super.buildInfo(),type:String(i.type)}}};function H(i,o=!0){let e=new c(i,o);return p(e,t=>H(t,!1))}function $(i){return H(i,!0)}import{Group as q,Sprite as K,SpriteMaterial as j,CanvasTexture as J,LinearFilter as z,Color as D,ClampToEdgeWrapping as B}from"three";import{getCooldown as Y}from"@zylem/behaviors/cooldown";var L=192,tt={xs:8,sm:16,md:32,lg:48,xl:64},f={position:void 0,cooldown:"",iconSize:"md",fillColor:"#333333",showTimer:!0,stickToViewport:!0,screenAnchor:"top-left",screenPosition:{x:0,y:0},zDistance:1,overlayColor:"rgba(0, 0, 0, 0.65)"},et=Symbol("CooldownIcon"),P=class extends l{static type=et;_sprite=null;_texture=null;_canvas=null;_ctx=null;_cameraRef=null;_iconTexture=null;_iconImage=null;_lastRenderedProgress=-1;constructor(o){super(),this.options=a(f,o),this.options.screenPosition=v(this.options.screenPosition,f.screenPosition),this.group=new q,this.createSprite(),this.prependSetup(this.iconSetup.bind(this)),this.prependUpdate(this.iconUpdate.bind(this)),this.onCleanup(this.iconDestroy.bind(this))}createSprite(){this._canvas=document.createElement("canvas"),this._canvas.width=256,this._canvas.height=256,this._ctx=this._canvas.getContext("2d"),this._texture=new J(this._canvas),this._texture.minFilter=z,this._texture.magFilter=z,this._texture.wrapS=B,this._texture.wrapT=B;let e=new j({map:this._texture,transparent:!0,depthTest:!1,depthWrite:!1});if(this._sprite=new K(e),this.group?.add(this._sprite),this.options.icon){let t=new Image;t.crossOrigin="anonymous",t.onload=()=>{this._iconImage=t,this.redraw(this._lastRenderedProgress>=0?this._lastRenderedProgress:1)},t.src=this.options.icon}this.redraw(1)}redraw(o){if(!this._canvas||!this._ctx)return;let e=this._ctx,t=this._canvas.width,r=this._canvas.height,n=t/2,s=r/2,A=Math.min(n,s);if(e.clearRect(0,0,t,r),this._iconImage?e.drawImage(this._iconImage,0,0,t,r):(e.fillStyle=this.toCssColor(this.options.fillColor??"#333333"),e.fillRect(0,0,t,r)),o<1){let k=(1-o)*Math.PI*2,g=-Math.PI/2,V=g+k;if(e.save(),e.fillStyle=this.options.overlayColor??"rgba(0, 0, 0, 0.65)",e.beginPath(),e.moveTo(n,s),e.arc(n,s,A+1,g,V,!1),e.closePath(),e.fill(),e.restore(),this.options.showTimer){let m=Y(this.options.cooldown);if(m){let h=Math.max(0,m.duration-m.elapsed),x=h>=10?Math.ceil(h).toString():h.toFixed(1),G=Math.floor(t*.3);e.font=`bold ${G}px sans-serif`,e.textAlign="center",e.textBaseline="middle",e.fillStyle="#FFFFFF",e.strokeStyle="#000000",e.lineWidth=2,e.strokeText(x,n,s),e.fillText(x,n,s)}}}this._texture&&(this._texture.needsUpdate=!0),this._lastRenderedProgress=o}toCssColor(o){return typeof o=="string"?o:`#${(o instanceof D?o:new D(o)).getHexString()}`}iconSetup(o){this._sprite||this.createSprite(),this._cameraRef=o.camera,this.options.stickToViewport&&this._cameraRef&&(this._cameraRef.camera.add(this.group),this.updateStickyTransform())}iconUpdate(o){let t=Y(this.options.cooldown)?.progress??1;(Math.abs(t-this._lastRenderedProgress)>.02||t===1&&this._lastRenderedProgress!==1)&&this.redraw(t),this.options.stickToViewport&&this._cameraRef&&this.updateStickyTransform()}resolveIconSize(o){let e=this.options.iconSize??"md",t,r;typeof e=="string"?t=r=tt[e]:typeof e=="number"?t=r=e:(t=e.width,r=e.height);let n=o/L;return{widthPx:t*n,heightPx:r*n}}updateStickyTransform(){if(!this._sprite||!this._cameraRef)return;let o=I(this._cameraRef),e=o.height/L,t=_(this.options.screenPosition,S),{widthPx:r,heightPx:n}=this.resolveIconSize(o.height),s=Z({camera:this._cameraRef.camera,viewport:o,point:b(this.options.screenAnchor??"top-left",{x:t.x*e,y:t.y*e},o),pivot:{x:.5,y:.5},size:{width:r,height:n},zDistance:this.options.zDistance??1});this._sprite.scale.set(s.scale.x,s.scale.y,1),this.group?.position.set(s.position.x,s.position.y,s.position.z)}iconDestroy(){this._texture?.dispose(),this._sprite?.material&&this._sprite.material.dispose(),this._sprite&&this._sprite.removeFromParent(),this.group?.removeFromParent(),this._iconTexture?.dispose(),this._sprite=null,this._texture=null,this._canvas=null,this._ctx=null,this._cameraRef=null,this._iconTexture=null,this._iconImage=null}};function F(...i){let o=i.filter(t=>!(t instanceof O)),e={...f};for(let t of o)e={...e,...t};return p(new P(e),t=>F(t??{}))}function ot(i,o,e){e({me:i,globals:o})}function it(i,o){let e=o??C();ot(i,e,i.nodeDestroy.bind(i))}export{M as a,c as b,$ as c,F as d,it as e};
|