gaesup-world 1.0.19 → 1.0.21

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.
@@ -0,0 +1 @@
1
+ "use strict";const u=require("react"),j=require("@react-three/fiber"),rt=require("three"),q=require("./index-CJj-Z7Jr.cjs"),C=require("./gaesupStore-2zKBYTYo.cjs"),at=require("mitt");function ct(o){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(o){for(const t in o)if(t!=="default"){const i=Object.getOwnPropertyDescriptor(o,t);Object.defineProperty(e,t,i.get?i:{enumerable:!0,get:()=>o[t]})}}return e.default=o,Object.freeze(e)}const a=ct(rt);var lt=Object.defineProperty,ut=Object.getOwnPropertyDescriptor,H=(o,e,t,i)=>{for(var n=ut(e,t),r=o.length-1,c;r>=0;r--)(c=o[r])&&(n=c(e,t,n)||n);return n&&lt(e,t,n),n};function _(o){return{...o,distance:{...o.distance},smoothing:{...o.smoothing},...o.focusTarget?{focusTarget:{...o.focusTarget}}:{},...o.offset?{offset:{...o.offset}}:{},...o.lookAt?{lookAt:{...o.lookAt}}:{}}}class I{emitter;config;metrics={frameCount:0,totalFrameTime:0,lastUpdateTime:0};constructor(e){this.emitter=at(),this.config=_(e)}updateConfig(e){const t={...this.config};this.config=_({...this.config,...e}),Object.keys(e).forEach(i=>{this.emitter.emit("configChange",{key:i,value:e[i]})}),t.mode!==this.config.mode&&this.emitter.emit("modeChange",{from:t.mode,to:this.config.mode})}getConfig(){return _(this.config)}getState(){return{config:this.getConfig(),metrics:this.getMetrics()}}getMetrics(){return{frameCount:this.metrics.frameCount,averageFrameTime:this.metrics.frameCount>0?this.metrics.totalFrameTime/this.metrics.frameCount:0,lastUpdateTime:this.metrics.lastUpdateTime}}trackFrameMetrics(e){this.metrics.frameCount++,this.metrics.totalFrameTime+=e,this.metrics.lastUpdateTime=Date.now()}emitError(e,t){this.emitter.emit("error",{message:e,details:t})}destroy(){this.emitter.all.clear()}}H([C.HandleError()],I.prototype,"updateConfig");H([C.Profile()],I.prototype,"trackFrameMetrics");H([C.HandleError()],I.prototype,"destroy");const D=new a.Vector3,B=new a.Vector3,ft=new a.Quaternion,mt=new a.Matrix4,G=new a.Quaternion,R=new a.Vector3,A=new a.Raycaster,U=[],K=new a.Vector3,$=new a.Vector3,dt=new a.Vector3,ht=new a.Euler,gt=new a.Vector3,pt=new a.Vector3;new a.Vector3;let Z=[],J=null,W=-1;function tt(o){const e=[];return o.traverse(t=>{t instanceof a.Mesh&&!t.userData.intangible&&t.geometry?.boundingSphere&&e.push(t)}),e}function yt(o){const e=o._frameId;return e===void 0?tt(o):(o===J&&e-W<60||(J=o,W=e,Z=tt(o)),Z)}function vt(o,e){if(!e||e.length===0)return!1;let t=o;for(;t;){for(let i=0,n=e.length;i<n;i++)if(t===e[i])return!0;t=t.parent}return!1}const v={tempVectors:{temp1:new a.Vector3,temp2:new a.Vector3,temp3:new a.Vector3},clampValue:(o,e,t)=>Math.max(e,Math.min(t,o)),smoothingToSpeed:(o,e=C.CAMERA_CONSTANTS.FRAME_RATE_LERP_SPEED)=>{if(o===void 0||!Number.isFinite(o))return e;if(o<=0)return 0;if(o>=1)return o;const t=v.clampValue(o,.001,.999);return-Math.log(1-t)*60},frameRateIndependentLerpVector3:(o,e,t,i)=>{const n=1-Math.exp(-t*i);o.lerp(e,n)},smoothLookAt:(o,e,t,i)=>{const n=ft.setFromRotationMatrix(mt.lookAt(o.position,e,o.up)).normalize();G.copy(o.quaternion).normalize(),G.dot(n)<0&&(n.x*=-1,n.y*=-1,n.z*=-1,n.w*=-1);const r=1-Math.exp(-t*i);o.quaternion.slerp(n,r).normalize()},preventCameraJitter:(o,e,t,i,n,r=i*.8)=>{v.frameRateIndependentLerpVector3(o.position,e,i,n),v.smoothLookAt(o,t,r,n)},improvedCollisionCheck:(o,e,t,i=.5,n)=>{R.subVectors(e,o);const r=R.length();if(r<=0)return{safe:!0,position:e,obstacles:[]};R.multiplyScalar(1/r),A.set(o,R),A.near=0,A.far=r;const c=[],l=yt(t);for(let d=0,S=l.length;d<S;d++){const w=l[d];if(!w||vt(w,n))continue;U.length=0,A.intersectObject(w,!1,U);const g=U[0];g&&c.push({object:w,distance:g.distance,point:g.point})}if(c.length===0)return{safe:!0,position:e,obstacles:[]};const m=c.reduce((d,S)=>S.distance<d.distance?S:d);return K.copy(o).addScaledVector(R,Math.max(0,m.distance-i)),$.copy(K),{safe:!1,position:$,obstacles:c}},distanceSquared:(o,e)=>D.subVectors(o,e).lengthSq(),safeNormalize:o=>{const e=o.length();return e>0?o.divideScalar(e):o.set(0,0,0)},smoothDamp:(o,e,t,i,n,r)=>{const c=2/i,l=c*n,m=1/(1+l+.48*l*l+.235*l*l*l);D.subVectors(o,e);const d=r?r*i:1/0;D.clampLength(0,d),B.copy(t).addScaledVector(D,c).multiplyScalar(n),t.copy(t).sub(B).multiplyScalar(m),o.copy(e).add(D.add(B).multiplyScalar(m))},calculateBounds:(o,e,t)=>{if(!t)return o;const i=t.minX!==void 0?Math.max(t.minX,o.x):o.x,n=t.minY!==void 0?Math.max(t.minY,o.y):o.y,r=t.minZ!==void 0?Math.max(t.minZ,o.z):o.z,c=t.maxX!==void 0?Math.min(t.maxX,i):i,l=t.maxY!==void 0?Math.min(t.maxY,n):n,m=t.maxZ!==void 0?Math.min(t.maxZ,r):r;return D.set(c,l,m)},fastAtan2:(o,e)=>e===0?o>0?Math.PI/2:o<0?-Math.PI/2:0:e>0?Math.atan(o/e):Math.atan(o/e)+(o>=0?Math.PI:-Math.PI),updateFOV:(o,e,t,i)=>{if(!t||t<=0){if(Math.abs(e-o.fov)<1e-4)return;o.fov=e,o.updateProjectionMatrix();return}const n=i===void 0?t:1-Math.exp(-v.smoothingToSpeed(t)*i),r=n>=1?e:a.MathUtils.lerp(o.fov,e,n);Math.abs(r-o.fov)<1e-4||(o.fov=r,o.updateProjectionMatrix())},clampPosition:(o,e)=>(e&&(o.y=v.clampValue(o.y,e.minY||-1/0,e.maxY||1/0)),o),isPositionEqual:(o,e,t=.001)=>Math.abs(o.x-e.x)<t&&Math.abs(o.y-e.y)<t&&Math.abs(o.z-e.z)<t,pool:{vectors:[],getVector3:()=>v.pool.vectors.pop()||new a.Vector3,releaseVector3:o=>{o.set(0,0,0),v.pool.vectors.push(o)}},calculateSafeDistance:(o,e,t,i)=>{const n=o.distanceTo(e);return a.MathUtils.clamp(n,t,i)},isPositionValid:(o,e)=>e?o.y>=(e.minY??-1/0)&&o.y<=(e.maxY??1/0):!0},y={getPosition:o=>o?.position?o.position:dt.set(0,0,0),getEuler:o=>o?.euler?o.euler:ht.set(0,0,0),getVelocity:o=>o?.velocity?o.velocity:gt.set(0,0,0),calculateCameraOffset:(o,e,t)=>{const{xDistance:i=15,yDistance:n=8,zDistance:r=15,euler:c,mode:l="thirdPerson"}=e,m=t??pt;switch(l){case"chase":if(c){const d=1/Math.SQRT2;return m.set(-i*Math.sin(c.y)*d,n*d,-r*Math.cos(c.y)*d)}return m.set(-i,n,-r);case"thirdPerson":default:return m.set(-i,n,-r)}},getCameraTarget:(o,e)=>{const t=y.getPosition(o);return e.target||t}};var wt=Object.defineProperty,Ct=Object.getOwnPropertyDescriptor,it=(o,e,t,i)=>{for(var n=Ct(e,t),r=o.length-1,c;r>=0;r--)(c=o[r])&&(n=c(e,t,n)||n);return n&&wt(e,t,n),n};class P{focusTarget=new a.Vector3;focusDirection=new a.Vector3;focusBasePosition=new a.Vector3;focusTargetPosition=new a.Vector3;orbitRight=new a.Vector3;orbitYawQuaternion=new a.Quaternion;orbitPitchQuaternion=new a.Quaternion;xAxis=new a.Vector3(1,0,0);yAxis=new a.Vector3(0,1,0);applyDefaults(e){const t=this.defaultConfig,i=e.config;if(t.enableCollision!==void 0&&i.enableCollision===void 0&&(i.enableCollision=t.enableCollision),t.distance){const n=i.distance;n?(n.x===void 0&&t.distance.x!==void 0&&(n.x=t.distance.x),n.y===void 0&&t.distance.y!==void 0&&(n.y=t.distance.y),n.z===void 0&&t.distance.z!==void 0&&(n.z=t.distance.z)):i.distance={...t.distance}}if(t.smoothing){const n=i.smoothing;n?(n.position===void 0&&t.smoothing.position!==void 0&&(n.position=t.smoothing.position),n.rotation===void 0&&t.smoothing.rotation!==void 0&&(n.rotation=t.smoothing.rotation),n.fov===void 0&&t.smoothing.fov!==void 0&&(n.fov=t.smoothing.fov)):i.smoothing={...t.smoothing}}}calculateLookAt(e,t){return y.getPosition(e.activeState)}applyOrbitOffset(e,t){const i=t.config.orbitYaw??0,n=t.config.orbitPitch??0;return i===0&&n===0||(i!==0&&(this.orbitYawQuaternion.setFromAxisAngle(this.yAxis,i),e.applyQuaternion(this.orbitYawQuaternion)),n!==0&&(this.orbitRight.crossVectors(e,this.yAxis),this.orbitRight.lengthSq()<=1e-6?this.orbitRight.copy(this.xAxis):this.orbitRight.normalize(),this.orbitPitchQuaternion.setFromAxisAngle(this.orbitRight,n),e.applyQuaternion(this.orbitPitchQuaternion))),e}update(e,t){const{camera:i,deltaTime:n,activeState:r}=e;if(!r)return;this.applyDefaults(t);const c=t.config;let l,m;if(c.focus&&c.focusTarget){const g=this.focusTarget;g.set(c.focusTarget.x,c.focusTarget.y,c.focusTarget.z),m=g;const z=c.focusDistance||10,E=this.focusBasePosition.copy(this.calculateTargetPosition(e,t)),p=this.focusDirection;p.copy(E).sub(g),p.lengthSq()===0&&p.copy(i.position).sub(g),p.lengthSq()===0&&p.set(1,1,1),p.normalize(),l=this.focusTargetPosition.copy(g).addScaledVector(p,z)}else l=this.calculateTargetPosition(e,t),m=this.calculateLookAt(e,t);c.enableCollision&&(l=v.improvedCollisionCheck(m,l,e.scene,c.collisionMargin??.5,e.excludeObjects).position);const d=c.focusLerpSpeed||10,S=c.focus?d:v.smoothingToSpeed(c.smoothing?.position),w=c.focus?d*.8:v.smoothingToSpeed(c.smoothing?.rotation,S*.8);v.preventCameraJitter(i,l,m,S,n,w),t.config.fov&&i instanceof a.PerspectiveCamera&&v.updateFOV(i,t.config.fov,t.config.smoothing?.fov,n)}}it([C.Profile()],P.prototype,"calculateLookAt");it([C.HandleError(),C.Profile()],P.prototype,"update");class xt extends P{name="thirdPerson";target=new a.Vector3;offset=new a.Vector3;defaultConfig={distance:{x:15,y:8,z:15},smoothing:{position:.1,rotation:.1,fov:.1},enableCollision:!0};calculateTargetPosition(e,t){const i=y.getPosition(e.activeState),n=t.config.zoom||1;return y.calculateCameraOffset(i,{xDistance:t.config.distance.x*n,yDistance:t.config.distance.y*n,zDistance:t.config.distance.z*n,mode:"thirdPerson"},this.offset),this.applyOrbitOffset(this.offset,t),this.target.copy(i).add(this.offset)}}class bt extends P{name="firstPerson";target=new a.Vector3;lookAt=new a.Vector3;lookDirection=new a.Vector3;eyePosition=new a.Vector3;defaultConfig={distance:{x:0,y:2,z:.45},smoothing:{position:.2,rotation:.15,fov:.1},enableCollision:!1};calculateTargetPosition(e,t){const i=y.getPosition(e.activeState),n=y.getEuler(e.activeState),r=t.config.distance.y||this.defaultConfig.distance?.y||2,c=t.config.distance.z||this.defaultConfig.distance?.z||.45,l=this.lookDirection.set(0,0,-1);return n&&l.applyEuler(n),this.target.set(i.x,i.y+r,i.z).addScaledVector(l,c)}calculateLookAt(e,t){const i=this.eyePosition.copy(this.calculateTargetPosition(e,t)),n=y.getEuler(e.activeState),r=this.lookDirection.set(0,0,-1);return n&&r.applyEuler(n),this.lookAt.copy(i).add(r)}}class St extends P{name="chase";target=new a.Vector3;offset=new a.Vector3;defaultConfig={distance:{x:10,y:5,z:10},smoothing:{position:.15,rotation:.1,fov:.1},enableCollision:!0};calculateTargetPosition(e,t){const i=y.getPosition(e.activeState),n=y.getEuler(e.activeState),r=t.config.zoom||-1;return y.calculateCameraOffset(i,{xDistance:t.config.distance.x*r,yDistance:t.config.distance.y*r,zDistance:t.config.distance.z*r,euler:n,mode:"chase"},this.offset),this.applyOrbitOffset(this.offset,t),this.target.copy(i).add(this.offset)}}class Pt extends P{name="topDown";target=new a.Vector3;offset=new a.Vector3;yawQuaternion=new a.Quaternion;pitchQuaternion=new a.Quaternion;topDownXAxis=new a.Vector3(1,0,0);topDownYAxis=new a.Vector3(0,1,0);defaultConfig={distance:{x:0,y:20,z:0},smoothing:{position:.1,rotation:.1,fov:.1},enableCollision:!1};calculateTargetPosition(e,t){const i=y.getPosition(e.activeState),n=t.config.zoom||1,r=this.offset.set(0,t.config.distance.y*n,0),c=t.config.orbitPitch??0,l=t.config.orbitYaw??0;return c!==0&&(this.pitchQuaternion.setFromAxisAngle(this.topDownXAxis,c),r.applyQuaternion(this.pitchQuaternion)),l!==0&&(this.yawQuaternion.setFromAxisAngle(this.topDownYAxis,l),r.applyQuaternion(this.yawQuaternion)),this.target.copy(i).add(r)}}class Mt extends P{name="isometric";target=new a.Vector3;defaultConfig={distance:{x:15,y:15,z:15},smoothing:{position:.1,rotation:.1,fov:.1},enableCollision:!1};calculateTargetPosition(e,t){const i=y.getPosition(e.activeState),n=Math.PI/4,r=Math.sqrt(t.config.distance.x**2+t.config.distance.z**2);return this.target.set(i.x+Math.cos(n)*r,i.y+t.config.distance.y,i.z+Math.sin(n)*r)}}class Et extends P{name="sideScroll";target=new a.Vector3;defaultConfig={distance:{x:0,y:5,z:18},smoothing:{position:.08,rotation:.1,fov:.1},enableCollision:!1};calculateTargetPosition(e,t){const i=y.getPosition(e.activeState);return this.target.set(i.x+t.config.distance.x,i.y+t.config.distance.y,i.z+t.config.distance.z)}}class zt extends P{name="fixed";defaultPosition=new a.Vector3(0,10,10);defaultLookAt=new a.Vector3(0,0,0);defaultConfig={distance:{x:0,y:0,z:0},smoothing:{position:0,rotation:0,fov:0},enableCollision:!1};calculateTargetPosition(e,t){return t.config.fixedPosition||this.defaultPosition}calculateLookAt(e,t){return t.config.fixedLookAt||this.defaultLookAt}}var Tt=Object.getOwnPropertyDescriptor,Dt=(o,e,t,i)=>{for(var n=i>1?void 0:i?Tt(e,t):e,r=o.length-1,c;r>=0;r--)(c=o[r])&&(n=c(n)||n);return n};exports.CameraSystem=class extends I{controllers=new Map;state;cameraStates=new Map;currentCameraStateName="default";cameraTransitions=[];constructor(e){super(e),this.state=this.createInitialState(e),this.registerControllers(),this.initializeCameraStates()}createInitialState(e){return{config:_(e),lastUpdate:Date.now()}}initializeCameraStates(){const e={name:"default",type:"thirdPerson",position:new a.Vector3(0,5,10),rotation:new a.Euler(0,0,0),fov:75,config:{distance:{x:15,y:8,z:15},height:5,followSpeed:.1,rotationSpeed:.1},priority:0,tags:[]};this.cameraStates.set("default",e)}registerController(e){this.controllers.set(e.name,e)}updateConfig(e){super.updateConfig(e),this.state.config=this.getConfig()}update(e){this.trackFrameMetrics(e)}calculate(e){try{const t=this.controllers.get(this.state.config.mode);if(!t)return;this.state.activeController=t,t.update(e,this.state)}catch(t){this.emitError("Camera calculation failed",t instanceof Error?t.message:void 0)}}getCameraState(e){return this.cameraStates.get(e)}getCurrentCameraState(){return this.cameraStates.get(this.currentCameraStateName)}addCameraState(e,t){this.cameraStates.set(e,t)}setCameraTransitions(e){this.cameraTransitions=e,this.cameraTransitions.length}switchCameraState(e){if(this.cameraStates.has(e)){this.currentCameraStateName=e;const t=this.cameraStates.get(e),i={mode:t.type,fov:t.fov};t.config.distance&&(i.distance=t.config.distance),this.updateConfig(i)}}registerControllers(){this.registerController(new xt),this.registerController(new bt),this.registerController(new St),this.registerController(new Pt),this.registerController(new Mt),this.registerController(new Et),this.registerController(new zt)}};exports.CameraSystem=Dt([C.ManageRuntime({autoStart:!1})],exports.CameraSystem);function Rt(o,e,t){const i=u.useRef(null);i.current||(i.current=new o(e));const n=i.current;j.useFrame((m,d)=>{n?.update(d)}),u.useEffect(()=>{},[t,n]),u.useEffect(()=>()=>{n?.destroy()},[n]);const r=u.useCallback(m=>{n?.updateConfig(m)},[n]),c=u.useCallback(()=>n?.getState(),[n]),l=u.useCallback(()=>n?.getMetrics(),[n]);return{system:n,updateConfig:r,getState:c,getMetrics:l}}const et=.0015,ot=10,nt=1e-4,Vt=-.65,Ot=.85,N=o=>{if(!(o instanceof HTMLElement))return!1;const e=o.tagName.toLowerCase();return e==="input"||e==="textarea"||e==="select"||o.isContentEditable};function kt(){const{gl:o}=j.useThree(),{activeState:e}=q.useStateSystem(),t=C.useGaesupStore(s=>s.cameraOption),i=C.useGaesupStore(s=>s.setCameraOption),n=C.useGaesupStore(s=>s.mode),r=q.useBuildingStore(s=>s.isInEditMode()),c=q.useInputBackend(),l=u.useRef(t);u.useEffect(()=>{l.current=t},[t]);const m=u.useRef(n);u.useEffect(()=>{m.current=n},[n]);const d=u.useRef(r);u.useEffect(()=>{d.current=r},[r]);const S=u.useRef([]),w=u.useRef(null),g=u.useRef(new Set),z=u.useRef(!1),E=u.useRef(0),p=u.useRef(0),X=u.useRef(0),Y=u.useRef(0),st=u.useMemo(()=>({mode:n?.control||"thirdPerson",distance:{x:t?.xDistance??0,y:t?.yDistance??0,z:t?.zDistance??0},smoothing:{position:t?.smoothing?.position??.1,rotation:t?.smoothing?.rotation??.1,fov:t?.smoothing?.fov??.1},fov:t?.fov??75,zoom:t?.zoom??1,enableCollision:t?.enableCollision??!0,...t?.collisionMargin!==void 0?{collisionMargin:t.collisionMargin}:{},orbitYaw:E.current,orbitPitch:p.current,...t?.maxDistance!==void 0?{maxDistance:t.maxDistance}:{},...t?.offset?{offset:{x:t.offset.x,y:t.offset.y,z:t.offset.z}}:{},...t?.target?{lookAt:{x:t.target.x,y:t.target.y,z:t.target.z}}:{}}),[]),{system:Q,updateConfig:V}=Rt(exports.CameraSystem,st),O=u.useCallback(()=>{const s=l.current,h=m.current;V({mode:h?.control||"thirdPerson",distance:{x:s?.xDistance??0,y:s?.yDistance??0,z:s?.zDistance??0},smoothing:{position:s?.smoothing?.position??.1,rotation:s?.smoothing?.rotation??.1,fov:s?.smoothing?.fov??.1},fov:s?.fov??75,zoom:s?.zoom??1,enableCollision:s?.enableCollision??!0,...s?.collisionMargin!==void 0?{collisionMargin:s.collisionMargin}:{},orbitYaw:E.current,orbitPitch:p.current,...s?.maxDistance!==void 0?{maxDistance:s.maxDistance}:{},...s?.offset?{offset:{x:s.offset.x,y:s.offset.y,z:s.offset.z}}:{},...s?.target?{lookAt:{x:s.target.x,y:s.target.y,z:s.target.z}}:{},...s?.focus!==void 0?{focus:s.focus}:{},...s?.focusTarget?{focusTarget:{x:s.focusTarget.x,y:s.focusTarget.y,z:s.focusTarget.z}}:{focusTarget:void 0},...s?.focusDistance!==void 0?{focusDistance:s.focusDistance}:{},...s?.focusLerpSpeed!==void 0?{focusLerpSpeed:s.focusLerpSpeed}:{}})},[V]),F=u.useCallback(s=>{const h=l.current;if(!h?.enableZoom)return;s.preventDefault();const x=h.zoomSpeed||.001,M=h.minZoom||.45,b=h.maxZoom||2.4,k=h.zoom||1,T=s.deltaY*x,L=Math.min(Math.max(k+T,M),b);i({zoom:L})},[i]);return u.useEffect(()=>{const s=o.domElement;if(t?.enableZoom)return s.addEventListener("wheel",F,{passive:!1}),()=>{s.removeEventListener("wheel",F)}},[o,F,t?.enableZoom]),u.useEffect(()=>{const s=o.domElement,h=f=>{N(f.target)||(f.code==="ControlLeft"||f.code==="ControlRight")&&g.current.add(f.code)},x=f=>{f.code!=="ControlLeft"&&f.code!=="ControlRight"||g.current.delete(f.code)},M=f=>{!d.current||N(f.target)||f.button!==1&&f.button!==2||(f.preventDefault(),z.current=!0)},b=f=>{f.button!==1&&f.button!==2||(z.current=!1)},k=f=>{!(g.current.size>0||z.current)||N(f.target)||f.movementX===0&&f.movementY===0||(X.current-=f.movementX*et,Y.current=a.MathUtils.clamp(Y.current+f.movementY*et,Vt,Ot))},T=()=>{g.current.clear(),z.current=!1},L=f=>{d.current&&f.preventDefault()};return window.addEventListener("keydown",h),window.addEventListener("keyup",x),window.addEventListener("mousemove",k),window.addEventListener("mouseup",b),window.addEventListener("blur",T),document.addEventListener("visibilitychange",T),s.addEventListener("mousedown",M),s.addEventListener("contextmenu",L),()=>{window.removeEventListener("keydown",h),window.removeEventListener("keyup",x),window.removeEventListener("mousemove",k),window.removeEventListener("mouseup",b),window.removeEventListener("blur",T),document.removeEventListener("visibilitychange",T),s.removeEventListener("mousedown",M),s.removeEventListener("contextmenu",L)}},[o,V]),u.useEffect(()=>{const s=h=>{const x=l.current;h.key==="Escape"&&x?.focus&&i({focus:!1})};if(t?.enableFocus&&!r)return window.addEventListener("keydown",s),()=>{window.removeEventListener("keydown",s)}},[t?.enableFocus,r,i]),u.useLayoutEffect(()=>{c.updateMouse({isLookAround:!1}),O()},[c,O]),u.useLayoutEffect(()=>{O()},[t,n,O]),j.useFrame((s,h)=>{if(!Q)return;const x=a.MathUtils.damp(E.current,X.current,ot,h),M=a.MathUtils.damp(p.current,Y.current,ot,h);if((Math.abs(x-E.current)>nt||Math.abs(M-p.current)>nt)&&(E.current=x,p.current=M,V({orbitYaw:x,orbitPitch:M})),!w.current)w.current={camera:s.camera,scene:s.scene,deltaTime:h,activeState:e,clock:s.clock,excludeObjects:S.current};else{const b=w.current;b.camera=s.camera,b.scene=s.scene,b.deltaTime=h,b.activeState=e,b.clock=s.clock}Q.calculate(w.current)}),{system:Q}}function Lt(){return kt(),null}function At(){const o=u.useRef(null),e=u.useRef(null),t=u.useRef(null),i=u.useRef(null);return{outerGroupRef:o,innerGroupRef:e,rigidBodyRef:t,colliderRef:i}}exports.Camera=Lt;exports.useGenericRefs=At;
@@ -1 +1 @@
1
- "use strict";const f=require("react"),j=require("./index-CeK0uKiq.cjs"),U=require("./runtimeFilter-W6iMw1pL.cjs"),re=require("./assetStore-DVPge_2j.cjs"),se=require("./snapshot-DRqZrbCu.cjs"),c=require("react/jsx-runtime"),W=require("@react-three/fiber"),oe=require("three"),m=require("./eventsStore-Cipkf938.cjs"),V=require("./timeStore-CDN035t4.cjs"),C=require("./weatherStore-1unmwIen.cjs");function ie(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const n in e)if(n!=="default"){const r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:()=>e[n]})}}return t.default=e,Object.freeze(t)}const P=ie(oe);function ae({intervalMs:e=5*60*1e3,slot:t,saveOnUnload:n=!0,saveOnVisibilityChange:r=!0}={}){f.useEffect(()=>{const s=j.getSaveSystem();let o=!1;const a=()=>{o||s.save(t)},u=window.setInterval(a,Math.max(1e3,e)),l=()=>{s.save(t)},g=()=>{document.visibilityState==="hidden"&&s.save(t)};return n&&window.addEventListener("beforeunload",l),r&&document.addEventListener("visibilitychange",g),()=>{o=!0,window.clearInterval(u),n&&window.removeEventListener("beforeunload",l),r&&document.removeEventListener("visibilitychange",g)}},[e,t,n,r])}function ce(e,t){f.useEffect(()=>{const n=j.getSaveSystem();let r=!1;return n.load(e).then(s=>{!r&&t&&t(s)}),()=>{r=!0}},[e,t])}const L="runtime.saveDiagnostics",$="runtime:saveDiagnostic";function K(e={}){const t=Math.max(1,e.maxEntries??50),n=[],r=new Set;let s=1;return{report(o){const a=J(o.error),u={...o,id:s,reportedAt:Date.now(),errorMessage:a,message:H(o,a)};s+=1,n.push(u),n.length>t&&n.splice(0,n.length-t);for(const l of r)l(u);return u},getDiagnostics(){return n.map(o=>({...o}))},getLatest(){const o=n[n.length-1];return o?{...o}:void 0},clear(){n.length=0},subscribe(o){return r.add(o),()=>{r.delete(o)}}}}function H(e,t=J(e.error)){return`Save domain "${e.key}" failed during ${e.phase} for slot "${e.slot}": ${t}`}function J(e){return e instanceof Error?e.message:typeof e=="string"?e:"Unknown save error"}function ue(e){if(!e||typeof e!="object")return!1;const t=e;return typeof t.key=="string"&&typeof t.serialize=="function"&&typeof t.hydrate=="function"}function fe(e={}){const t=U.createPluginLogger(e.logger),n=U.createPluginRegistry(e.logger?{logger:e.logger}:{}),r=e.pluginRuntime??"client",s=e.saveSystem??(e.saveOptions?new j.SaveSystem(le(e.saveOptions)):j.getSaveSystem()),o=K(e.saveDiagnostics),a=s.subscribeDiagnostics(i=>{const d=o.report(i);t.warn(d.message,d),n.context.events.emit($,d)}),u=new Map;n.context.services.register(L,o,"gaesup.runtime");for(const i of U.filterPluginsForRuntime(e.plugins??[],r))n.register(i);const l=i=>{if(u.has(i.key))return;const d=s.register({key:i.key,serialize:()=>i.serialize()??null,hydrate:i.hydrate});u.set(i.key,d)};for(const i of e.saveBindings??[])l(i);const g=()=>{for(const i of n.context.save.list())ue(i.value)&&l(i.value)},w=async()=>{const i=e.assets?.source;i&&await re.useAssetStore.getState().loadAssets(i)};return{pluginRuntime:r,plugins:n,save:s,saveDiagnostics:o,loadAssets:w,getService:i=>n.context.services.get(i),requireService:i=>n.context.services.require(i),setup:async()=>{e.assets?.loadOnCreate&&await w(),await n.setupAll(),g()},dispose:async()=>{await n.disposeAll(),a();for(const i of u.values())i();u.clear(),n.context.services.remove(L)}}}function le(e){return{...e}}const Q={lighting:{ambientIntensity:1,directionalIntensity:1,directionalPosition:{x:0,y:10,z:0}}};function I(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function O(e){return typeof structuredClone=="function"?structuredClone(e):JSON.parse(JSON.stringify(e))}function _(e){return Array.isArray(e)?e.map(t=>O(t)):[]}function k(e,t){const n=e[t];return I(n)?n:void 0}function F(e){if(Array.isArray(e)&&e.length>=3){const[t,n,r]=e;if(typeof t=="number"&&typeof n=="number"&&typeof r=="number")return{x:t,y:n,z:r}}if(I(e)&&typeof e.x=="number"&&typeof e.y=="number"&&typeof e.z=="number")return{x:e.x,y:e.y,z:e.z}}function de(e){if(!I(e)||typeof e.id!="string")return null;const t=F(e.position)??{x:0,y:0,z:0},n=F(e.rotation)??{x:0,y:0,z:0},r=I(e.metadata)?O(e.metadata):void 0,s=I(e.behavior)?e.behavior:void 0,o=s&&typeof s.mode=="string"?s.mode:void 0;return{id:e.id,name:typeof e.name=="string"?e.name:e.id,position:t,rotation:n,...typeof e.modelUrl=="string"?{modelUrl:e.modelUrl}:{},...o?{behavior:o}:{},...r?{metadata:r}:{}}}function me(e){const t=e?.instances;return Array.isArray(t)?t.map(de).filter(n=>n!==null):[]}function X(e){if(!e)return;const t=I(e.cameraOption)?e.cameraOption:e,n=F(t.position);if(!n)return;const r=F(t.rotation)??{x:0,y:0,z:0},s=I(e.mode)?e.mode:void 0,o=typeof e.mode=="string"?e.mode:s&&typeof s.control=="string"?s.control:"default",a=I(e.settings)?O(e.settings):I(e.cameraOption)?O(e.cameraOption):void 0;return{position:n,rotation:r,mode:o,...a?{settings:a}:{}}}function Z(e,t,n){const r=k(e,"building"),s=X(k(e,"camera"));return{id:t,name:n,buildings:{wallGroups:_(r?.wallGroups),tileGroups:_(r?.tileGroups),blocks:_(r?.blocks),meshes:_(r?.meshes)},npcs:me(k(e,"npc")),environment:Q,...s?{camera:s}:{}}}function Y(e){const t=e.slice(e.lastIndexOf("_")+1),n=Number(t);return Number.isFinite(n)?n:Date.now()}function ee(e){const t=e.lastIndexOf("_");return t>0?e.slice(0,t):e}function te(e,t){if(e)return{...e,createdAt:e.createdAt??t,updatedAt:e.updatedAt??t}}function ge(e,t,n,r){const s=Y(t),o=ee(t),a={version:"1.0.0",timestamp:s,world:Z(se.collectSaveDomains(e),o,n??o)},u=te(r,s);return u?{...a,metadata:u}:a}class he{byKind=new Map;global=new Set;on(t,n){let r=this.byKind.get(t);return r||(r=new Set,this.byKind.set(t,r)),r.add(n),()=>{r.delete(n)}}onAny(t){return this.global.add(t),()=>{this.global.delete(t)}}emit(t){const n=this.byKind.get(t.kind);if(n){for(const r of n)if(r(t)===!0)return}for(const r of this.global)r(t)}clear(){this.byKind.clear(),this.global.clear()}}let G=null;function ne(){return G||(G=new he),G}function N(e,t,n=!0){f.useEffect(()=>n?ne().on(e,t):void 0,[e,t,n])}function Se(){const e=m.useInventoryStore(n=>n.getEquipped());return e?m.getItemRegistry().get(e.itemId)?.toolKind??null:null}function ye({position:e,rotationY:t=0,hp:n=3,woodDrop:r=2,regrowMinutes:s=1440,hitRange:o=1.6,trunkColor:a="#6b4a2a",foliageColor:u="#3f8a3a",scale:l=1}){const g=f.useRef(null),[w,i]=f.useState(n),[d,h]=f.useState(!1),S=f.useRef(0),y=f.useRef(-1/0),p=f.useCallback(D=>{if(d)return;const M=D.origin[0]-e[0],x=D.origin[2]-e[2],A=M*M+x*x,T=o+D.range*.5;if(!(A>T*T))return y.current=performance.now(),i(q=>{const B=q-1;return B<=0?(m.useInventoryStore.getState().add("wood",r)>0?m.notify("warn","인벤토리가 가득 찼습니다"):m.notify("reward",`목재 +${r}`),h(!0),S.current=V.useTimeStore.getState().totalMinutes+s,n):B}),!0},[d,e,o,r,s,n]);N("axe",p),f.useEffect(()=>d?V.useTimeStore.subscribe((M,x)=>{M.totalMinutes!==x.totalMinutes&&M.totalMinutes>=S.current&&(h(!1),i(n))}):void 0,[d,n]),W.useFrame((D,M)=>{const x=g.current;if(!x)return;const A=(performance.now()-y.current)/1e3;if(A<.4){const T=A/.4,q=Math.sin(T*Math.PI*6)*(1-T)*.18;x.rotation.z=q}else Math.abs(x.rotation.z)>1e-4&&(x.rotation.z*=Math.max(0,1-M*12))});const b=w<n,R=1.6*l,v=.18*l,E=.95*l,z=f.useMemo(()=>{const D=new P.Color(u);return b&&D.lerp(new P.Color("#a55"),.06*(n-w)),D},[u,b,n,w]);return d?c.jsx("group",{position:e,rotation:[0,t,0],children:c.jsxs("mesh",{castShadow:!0,receiveShadow:!0,position:[0,.18*l,0],children:[c.jsx("cylinderGeometry",{args:[v,v*1.15,.36*l,12]}),c.jsx("meshToonMaterial",{color:a})]})}):c.jsxs("group",{ref:g,position:e,rotation:[0,t,0],children:[c.jsxs("mesh",{castShadow:!0,receiveShadow:!0,position:[0,R*.5,0],children:[c.jsx("cylinderGeometry",{args:[v*.85,v,R,12]}),c.jsx("meshToonMaterial",{color:a})]}),c.jsxs("mesh",{castShadow:!0,position:[0,R+E*.6,0],children:[c.jsx("coneGeometry",{args:[E,E*1.6,14]}),c.jsx("meshToonMaterial",{color:z})]}),c.jsxs("mesh",{castShadow:!0,position:[0,R+E*1.5,0],children:[c.jsx("coneGeometry",{args:[E*.75,E*1.2,14]}),c.jsx("meshToonMaterial",{color:z})]})]})}const pe=[{itemId:"fish-bass",weight:60},{itemId:"fish-tuna",weight:25},{itemId:"fish-koi",weight:10}];function we(e,t,n){const r=[];for(const a of n)a.startsWith(t)&&r.push(a.slice(t.length));if(r.length===0)return e;const s=new Set(r),o=e.filter(a=>s.has(a.itemId));return o.length>0?o:e}function ve(e){if(e.length===0)return null;const t=e.reduce((r,s)=>r+Math.max(0,s.weight),0);if(t<=0)return null;let n=Math.random()*t;for(const r of e)if(n-=Math.max(0,r.weight),n<=0)return r.itemId;return e[e.length-1].itemId}function be({position:e,radius:t=3,pool:n=pe,cooldownMs:r=600,successChance:s=.6,showRipple:o=!0,rippleColor:a="#9ad9ff"}){const u=f.useRef(-1/0),l=f.useRef(null),g=f.useRef(-1/0),w=f.useCallback(i=>{const d=i.origin[0]-e[0],h=i.origin[2]-e[2];if(d*d+h*h>t*t)return;const S=performance.now();if(S-u.current<r)return!0;u.current=S,g.current=S;const y=C.useWeatherStore.getState().fishingBonus();if(Math.random()>Math.min(.95,s+y))return m.notify("warn","놓쳤다…"),!0;const p=we(n,"fish:",m.useEventsStore.getState().tags),b=ve(p);if(!b)return!0;const R=m.getItemRegistry().get(b);return m.useInventoryStore.getState().add(b,1)>0?m.notify("warn","인벤토리가 가득 찼습니다"):m.notify("reward",`${R?.name??b} 낚음!`),!0},[e,t,r,n,s]);return N("rod",w),W.useFrame(()=>{const i=l.current;if(!i)return;const d=(performance.now()-g.current)/1e3;if(d<.6){const h=d/.6;i.scale.setScalar(.4+h*1.4);const S=i.material;S.opacity=.55*(1-h)}else i.scale.setScalar(0)}),c.jsx("group",{position:e,children:o&&c.jsxs("mesh",{ref:l,rotation:[-Math.PI/2,0,0],position:[0,.04,0],children:[c.jsx("ringGeometry",{args:[.4,.6,32]}),c.jsx("meshBasicMaterial",{color:a,transparent:!0,opacity:0,depthWrite:!1})]})})}const xe=[{itemId:"bug-butterfly",weight:70},{itemId:"bug-beetle",weight:22},{itemId:"bug-stag",weight:8}];function Ie(e,t,n){const r=[];for(const a of n)a.startsWith(t)&&r.push(a.slice(t.length));if(r.length===0)return e;const s=new Set(r),o=e.filter(a=>s.has(a.itemId));return o.length>0?o:e}function Re(e){if(e.length===0)return null;const t=e.reduce((r,s)=>r+Math.max(0,s.weight),0);if(t<=0)return null;let n=Math.random()*t;for(const r of e)if(n-=Math.max(0,r.weight),n<=0)return r.itemId;return e[e.length-1].itemId}function Ee({position:e,radius:t=2.4,pool:n=xe,cooldownMs:r=600,successChance:s=.7,bugColor:o="#ffd0e0",hoverHeight:a=1.2}){const u=f.useRef(-1/0),l=f.useRef(null),[g,w]=f.useState(!0),i=f.useRef(-1/0),d=f.useCallback(h=>{if(!g)return;const S=h.origin[0]-e[0],y=h.origin[2]-e[2];if(S*S+y*y>t*t)return;const p=performance.now();if(p-u.current<r)return!0;u.current=p;const b=C.useWeatherStore.getState().bugBonus();if(Math.random()>Math.min(.95,Math.max(.05,s+b)))return m.notify("warn","날아갔다…"),w(!1),i.current=p+8e3,!0;const R=Ie(n,"bug:",m.useEventsStore.getState().tags),v=Re(R);if(!v)return!0;const E=m.getItemRegistry().get(v);return m.useInventoryStore.getState().add(v,1)>0?m.notify("warn","인벤토리가 가득 찼습니다"):m.notify("reward",`${E?.name??v} 잡았다!`),w(!1),i.current=p+12e3,!0},[e,t,r,n,s,g]);return N("net",d),W.useFrame(({clock:h})=>{const S=performance.now();!g&&S>=i.current&&w(!0);const y=l.current;if(!y||!g)return;const p=h.elapsedTime;y.position.x=Math.sin(p*1.2)*.6,y.position.z=Math.cos(p*.9)*.6,y.position.y=a+Math.sin(p*2.6)*.15,y.rotation.y=p*1.4}),g?c.jsx("group",{position:e,children:c.jsxs("mesh",{ref:l,children:[c.jsx("sphereGeometry",{args:[.12,10,10]}),c.jsx("meshToonMaterial",{color:o})]})}):c.jsx("group",{position:e})}exports.BugSpot=Ee;exports.DEFAULT_RUNTIME_SAVE_DIAGNOSTICS_SERVICE_ID=L;exports.DEFAULT_WORLD_SAVE_ENVIRONMENT=Q;exports.FishSpot=be;exports.RUNTIME_SAVE_DIAGNOSTIC_EVENT=$;exports.TreeObject=ye;exports.createCameraSaveDataFromDomain=X;exports.createGaesupRuntime=fe;exports.createRuntimeSaveDiagnostics=K;exports.createSaveDataFromSaveSystem=ge;exports.createWorldDataFromSaveDomains=Z;exports.formatRuntimeSaveDiagnostic=H;exports.getToolEvents=ne;exports.normalizeSaveMetadata=te;exports.parseWorldSaveId=ee;exports.parseWorldSaveTimestamp=Y;exports.useAutoSave=ae;exports.useEquippedToolKind=Se;exports.useLoadOnMount=ce;exports.useToolUse=N;
1
+ "use strict";const f=require("react"),j=require("./index-co-QAQz9.cjs"),U=require("./runtimeFilter-W6iMw1pL.cjs"),re=require("./assetStore-DVPge_2j.cjs"),se=require("./snapshot-DRqZrbCu.cjs"),c=require("react/jsx-runtime"),W=require("@react-three/fiber"),oe=require("three"),m=require("./eventsStore-Cipkf938.cjs"),V=require("./timeStore-CDN035t4.cjs"),C=require("./weatherStore-1unmwIen.cjs");function ie(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const n in e)if(n!=="default"){const r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:()=>e[n]})}}return t.default=e,Object.freeze(t)}const P=ie(oe);function ae({intervalMs:e=5*60*1e3,slot:t,saveOnUnload:n=!0,saveOnVisibilityChange:r=!0}={}){f.useEffect(()=>{const s=j.getSaveSystem();let o=!1;const a=()=>{o||s.save(t)},u=window.setInterval(a,Math.max(1e3,e)),l=()=>{s.save(t)},g=()=>{document.visibilityState==="hidden"&&s.save(t)};return n&&window.addEventListener("beforeunload",l),r&&document.addEventListener("visibilitychange",g),()=>{o=!0,window.clearInterval(u),n&&window.removeEventListener("beforeunload",l),r&&document.removeEventListener("visibilitychange",g)}},[e,t,n,r])}function ce(e,t){f.useEffect(()=>{const n=j.getSaveSystem();let r=!1;return n.load(e).then(s=>{!r&&t&&t(s)}),()=>{r=!0}},[e,t])}const L="runtime.saveDiagnostics",$="runtime:saveDiagnostic";function K(e={}){const t=Math.max(1,e.maxEntries??50),n=[],r=new Set;let s=1;return{report(o){const a=J(o.error),u={...o,id:s,reportedAt:Date.now(),errorMessage:a,message:H(o,a)};s+=1,n.push(u),n.length>t&&n.splice(0,n.length-t);for(const l of r)l(u);return u},getDiagnostics(){return n.map(o=>({...o}))},getLatest(){const o=n[n.length-1];return o?{...o}:void 0},clear(){n.length=0},subscribe(o){return r.add(o),()=>{r.delete(o)}}}}function H(e,t=J(e.error)){return`Save domain "${e.key}" failed during ${e.phase} for slot "${e.slot}": ${t}`}function J(e){return e instanceof Error?e.message:typeof e=="string"?e:"Unknown save error"}function ue(e){if(!e||typeof e!="object")return!1;const t=e;return typeof t.key=="string"&&typeof t.serialize=="function"&&typeof t.hydrate=="function"}function fe(e={}){const t=U.createPluginLogger(e.logger),n=U.createPluginRegistry(e.logger?{logger:e.logger}:{}),r=e.pluginRuntime??"client",s=e.saveSystem??(e.saveOptions?new j.SaveSystem(le(e.saveOptions)):j.getSaveSystem()),o=K(e.saveDiagnostics),a=s.subscribeDiagnostics(i=>{const d=o.report(i);t.warn(d.message,d),n.context.events.emit($,d)}),u=new Map;n.context.services.register(L,o,"gaesup.runtime");for(const i of U.filterPluginsForRuntime(e.plugins??[],r))n.register(i);const l=i=>{if(u.has(i.key))return;const d=s.register({key:i.key,serialize:()=>i.serialize()??null,hydrate:i.hydrate});u.set(i.key,d)};for(const i of e.saveBindings??[])l(i);const g=()=>{for(const i of n.context.save.list())ue(i.value)&&l(i.value)},w=async()=>{const i=e.assets?.source;i&&await re.useAssetStore.getState().loadAssets(i)};return{pluginRuntime:r,plugins:n,save:s,saveDiagnostics:o,loadAssets:w,getService:i=>n.context.services.get(i),requireService:i=>n.context.services.require(i),setup:async()=>{e.assets?.loadOnCreate&&await w(),await n.setupAll(),g()},dispose:async()=>{await n.disposeAll(),a();for(const i of u.values())i();u.clear(),n.context.services.remove(L)}}}function le(e){return{...e}}const Q={lighting:{ambientIntensity:1,directionalIntensity:1,directionalPosition:{x:0,y:10,z:0}}};function I(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function O(e){return typeof structuredClone=="function"?structuredClone(e):JSON.parse(JSON.stringify(e))}function _(e){return Array.isArray(e)?e.map(t=>O(t)):[]}function k(e,t){const n=e[t];return I(n)?n:void 0}function F(e){if(Array.isArray(e)&&e.length>=3){const[t,n,r]=e;if(typeof t=="number"&&typeof n=="number"&&typeof r=="number")return{x:t,y:n,z:r}}if(I(e)&&typeof e.x=="number"&&typeof e.y=="number"&&typeof e.z=="number")return{x:e.x,y:e.y,z:e.z}}function de(e){if(!I(e)||typeof e.id!="string")return null;const t=F(e.position)??{x:0,y:0,z:0},n=F(e.rotation)??{x:0,y:0,z:0},r=I(e.metadata)?O(e.metadata):void 0,s=I(e.behavior)?e.behavior:void 0,o=s&&typeof s.mode=="string"?s.mode:void 0;return{id:e.id,name:typeof e.name=="string"?e.name:e.id,position:t,rotation:n,...typeof e.modelUrl=="string"?{modelUrl:e.modelUrl}:{},...o?{behavior:o}:{},...r?{metadata:r}:{}}}function me(e){const t=e?.instances;return Array.isArray(t)?t.map(de).filter(n=>n!==null):[]}function X(e){if(!e)return;const t=I(e.cameraOption)?e.cameraOption:e,n=F(t.position);if(!n)return;const r=F(t.rotation)??{x:0,y:0,z:0},s=I(e.mode)?e.mode:void 0,o=typeof e.mode=="string"?e.mode:s&&typeof s.control=="string"?s.control:"default",a=I(e.settings)?O(e.settings):I(e.cameraOption)?O(e.cameraOption):void 0;return{position:n,rotation:r,mode:o,...a?{settings:a}:{}}}function Z(e,t,n){const r=k(e,"building"),s=X(k(e,"camera"));return{id:t,name:n,buildings:{wallGroups:_(r?.wallGroups),tileGroups:_(r?.tileGroups),blocks:_(r?.blocks),meshes:_(r?.meshes)},npcs:me(k(e,"npc")),environment:Q,...s?{camera:s}:{}}}function Y(e){const t=e.slice(e.lastIndexOf("_")+1),n=Number(t);return Number.isFinite(n)?n:Date.now()}function ee(e){const t=e.lastIndexOf("_");return t>0?e.slice(0,t):e}function te(e,t){if(e)return{...e,createdAt:e.createdAt??t,updatedAt:e.updatedAt??t}}function ge(e,t,n,r){const s=Y(t),o=ee(t),a={version:"1.0.0",timestamp:s,world:Z(se.collectSaveDomains(e),o,n??o)},u=te(r,s);return u?{...a,metadata:u}:a}class he{byKind=new Map;global=new Set;on(t,n){let r=this.byKind.get(t);return r||(r=new Set,this.byKind.set(t,r)),r.add(n),()=>{r.delete(n)}}onAny(t){return this.global.add(t),()=>{this.global.delete(t)}}emit(t){const n=this.byKind.get(t.kind);if(n){for(const r of n)if(r(t)===!0)return}for(const r of this.global)r(t)}clear(){this.byKind.clear(),this.global.clear()}}let G=null;function ne(){return G||(G=new he),G}function N(e,t,n=!0){f.useEffect(()=>n?ne().on(e,t):void 0,[e,t,n])}function Se(){const e=m.useInventoryStore(n=>n.getEquipped());return e?m.getItemRegistry().get(e.itemId)?.toolKind??null:null}function ye({position:e,rotationY:t=0,hp:n=3,woodDrop:r=2,regrowMinutes:s=1440,hitRange:o=1.6,trunkColor:a="#6b4a2a",foliageColor:u="#3f8a3a",scale:l=1}){const g=f.useRef(null),[w,i]=f.useState(n),[d,h]=f.useState(!1),S=f.useRef(0),y=f.useRef(-1/0),p=f.useCallback(D=>{if(d)return;const M=D.origin[0]-e[0],x=D.origin[2]-e[2],A=M*M+x*x,T=o+D.range*.5;if(!(A>T*T))return y.current=performance.now(),i(q=>{const B=q-1;return B<=0?(m.useInventoryStore.getState().add("wood",r)>0?m.notify("warn","인벤토리가 가득 찼습니다"):m.notify("reward",`목재 +${r}`),h(!0),S.current=V.useTimeStore.getState().totalMinutes+s,n):B}),!0},[d,e,o,r,s,n]);N("axe",p),f.useEffect(()=>d?V.useTimeStore.subscribe((M,x)=>{M.totalMinutes!==x.totalMinutes&&M.totalMinutes>=S.current&&(h(!1),i(n))}):void 0,[d,n]),W.useFrame((D,M)=>{const x=g.current;if(!x)return;const A=(performance.now()-y.current)/1e3;if(A<.4){const T=A/.4,q=Math.sin(T*Math.PI*6)*(1-T)*.18;x.rotation.z=q}else Math.abs(x.rotation.z)>1e-4&&(x.rotation.z*=Math.max(0,1-M*12))});const b=w<n,R=1.6*l,v=.18*l,E=.95*l,z=f.useMemo(()=>{const D=new P.Color(u);return b&&D.lerp(new P.Color("#a55"),.06*(n-w)),D},[u,b,n,w]);return d?c.jsx("group",{position:e,rotation:[0,t,0],children:c.jsxs("mesh",{castShadow:!0,receiveShadow:!0,position:[0,.18*l,0],children:[c.jsx("cylinderGeometry",{args:[v,v*1.15,.36*l,12]}),c.jsx("meshToonMaterial",{color:a})]})}):c.jsxs("group",{ref:g,position:e,rotation:[0,t,0],children:[c.jsxs("mesh",{castShadow:!0,receiveShadow:!0,position:[0,R*.5,0],children:[c.jsx("cylinderGeometry",{args:[v*.85,v,R,12]}),c.jsx("meshToonMaterial",{color:a})]}),c.jsxs("mesh",{castShadow:!0,position:[0,R+E*.6,0],children:[c.jsx("coneGeometry",{args:[E,E*1.6,14]}),c.jsx("meshToonMaterial",{color:z})]}),c.jsxs("mesh",{castShadow:!0,position:[0,R+E*1.5,0],children:[c.jsx("coneGeometry",{args:[E*.75,E*1.2,14]}),c.jsx("meshToonMaterial",{color:z})]})]})}const pe=[{itemId:"fish-bass",weight:60},{itemId:"fish-tuna",weight:25},{itemId:"fish-koi",weight:10}];function we(e,t,n){const r=[];for(const a of n)a.startsWith(t)&&r.push(a.slice(t.length));if(r.length===0)return e;const s=new Set(r),o=e.filter(a=>s.has(a.itemId));return o.length>0?o:e}function ve(e){if(e.length===0)return null;const t=e.reduce((r,s)=>r+Math.max(0,s.weight),0);if(t<=0)return null;let n=Math.random()*t;for(const r of e)if(n-=Math.max(0,r.weight),n<=0)return r.itemId;return e[e.length-1].itemId}function be({position:e,radius:t=3,pool:n=pe,cooldownMs:r=600,successChance:s=.6,showRipple:o=!0,rippleColor:a="#9ad9ff"}){const u=f.useRef(-1/0),l=f.useRef(null),g=f.useRef(-1/0),w=f.useCallback(i=>{const d=i.origin[0]-e[0],h=i.origin[2]-e[2];if(d*d+h*h>t*t)return;const S=performance.now();if(S-u.current<r)return!0;u.current=S,g.current=S;const y=C.useWeatherStore.getState().fishingBonus();if(Math.random()>Math.min(.95,s+y))return m.notify("warn","놓쳤다…"),!0;const p=we(n,"fish:",m.useEventsStore.getState().tags),b=ve(p);if(!b)return!0;const R=m.getItemRegistry().get(b);return m.useInventoryStore.getState().add(b,1)>0?m.notify("warn","인벤토리가 가득 찼습니다"):m.notify("reward",`${R?.name??b} 낚음!`),!0},[e,t,r,n,s]);return N("rod",w),W.useFrame(()=>{const i=l.current;if(!i)return;const d=(performance.now()-g.current)/1e3;if(d<.6){const h=d/.6;i.scale.setScalar(.4+h*1.4);const S=i.material;S.opacity=.55*(1-h)}else i.scale.setScalar(0)}),c.jsx("group",{position:e,children:o&&c.jsxs("mesh",{ref:l,rotation:[-Math.PI/2,0,0],position:[0,.04,0],children:[c.jsx("ringGeometry",{args:[.4,.6,32]}),c.jsx("meshBasicMaterial",{color:a,transparent:!0,opacity:0,depthWrite:!1})]})})}const xe=[{itemId:"bug-butterfly",weight:70},{itemId:"bug-beetle",weight:22},{itemId:"bug-stag",weight:8}];function Ie(e,t,n){const r=[];for(const a of n)a.startsWith(t)&&r.push(a.slice(t.length));if(r.length===0)return e;const s=new Set(r),o=e.filter(a=>s.has(a.itemId));return o.length>0?o:e}function Re(e){if(e.length===0)return null;const t=e.reduce((r,s)=>r+Math.max(0,s.weight),0);if(t<=0)return null;let n=Math.random()*t;for(const r of e)if(n-=Math.max(0,r.weight),n<=0)return r.itemId;return e[e.length-1].itemId}function Ee({position:e,radius:t=2.4,pool:n=xe,cooldownMs:r=600,successChance:s=.7,bugColor:o="#ffd0e0",hoverHeight:a=1.2}){const u=f.useRef(-1/0),l=f.useRef(null),[g,w]=f.useState(!0),i=f.useRef(-1/0),d=f.useCallback(h=>{if(!g)return;const S=h.origin[0]-e[0],y=h.origin[2]-e[2];if(S*S+y*y>t*t)return;const p=performance.now();if(p-u.current<r)return!0;u.current=p;const b=C.useWeatherStore.getState().bugBonus();if(Math.random()>Math.min(.95,Math.max(.05,s+b)))return m.notify("warn","날아갔다…"),w(!1),i.current=p+8e3,!0;const R=Ie(n,"bug:",m.useEventsStore.getState().tags),v=Re(R);if(!v)return!0;const E=m.getItemRegistry().get(v);return m.useInventoryStore.getState().add(v,1)>0?m.notify("warn","인벤토리가 가득 찼습니다"):m.notify("reward",`${E?.name??v} 잡았다!`),w(!1),i.current=p+12e3,!0},[e,t,r,n,s,g]);return N("net",d),W.useFrame(({clock:h})=>{const S=performance.now();!g&&S>=i.current&&w(!0);const y=l.current;if(!y||!g)return;const p=h.elapsedTime;y.position.x=Math.sin(p*1.2)*.6,y.position.z=Math.cos(p*.9)*.6,y.position.y=a+Math.sin(p*2.6)*.15,y.rotation.y=p*1.4}),g?c.jsx("group",{position:e,children:c.jsxs("mesh",{ref:l,children:[c.jsx("sphereGeometry",{args:[.12,10,10]}),c.jsx("meshToonMaterial",{color:o})]})}):c.jsx("group",{position:e})}exports.BugSpot=Ee;exports.DEFAULT_RUNTIME_SAVE_DIAGNOSTICS_SERVICE_ID=L;exports.DEFAULT_WORLD_SAVE_ENVIRONMENT=Q;exports.FishSpot=be;exports.RUNTIME_SAVE_DIAGNOSTIC_EVENT=$;exports.TreeObject=ye;exports.createCameraSaveDataFromDomain=X;exports.createGaesupRuntime=fe;exports.createRuntimeSaveDiagnostics=K;exports.createSaveDataFromSaveSystem=ge;exports.createWorldDataFromSaveDomains=Z;exports.formatRuntimeSaveDiagnostic=H;exports.getToolEvents=ne;exports.normalizeSaveMetadata=te;exports.parseWorldSaveId=ee;exports.parseWorldSaveTimestamp=Y;exports.useAutoSave=ae;exports.useEquippedToolKind=Se;exports.useLoadOnMount=ce;exports.useToolUse=N;
@@ -1,5 +1,5 @@
1
1
  import { useEffect as k, useRef as I, useState as P, useCallback as W, useMemo as Y } from "react";
2
- import { g as $, S as tt } from "./index-CauGUCKK.js";
2
+ import { g as $, S as tt } from "./index-BUQXtHf3.js";
3
3
  import { c as et, a as nt, f as rt } from "./runtimeFilter-CS35UPHd.js";
4
4
  import { u as st } from "./assetStore-mAClONjR.js";
5
5
  import { c as ot } from "./snapshot-OExk53wq.js";
@@ -2,8 +2,8 @@ import { jsx as s, jsxs as u } from "react/jsx-runtime";
2
2
  import { useRef as d, useMemo as f, useEffect as v, useLayoutEffect as h, Suspense as g } from "react";
3
3
  import { useThree as U, useFrame as D } from "@react-three/fiber";
4
4
  import { u as l } from "./gaesupStore-DTu0tYBp.js";
5
- import { T as x } from "./index-eON1JSxy.js";
6
- import { C as y } from "./index-CfiJq_gE.js";
5
+ import { T as x } from "./index-C5agFfBe.js";
6
+ import { C as y } from "./index-D0Rz5_-J.js";
7
7
  function C() {
8
8
  const r = U((o) => o.gl), t = l((o) => o.setPerformance), n = d(0);
9
9
  return D(() => {
@@ -0,0 +1,320 @@
1
+ import { jsx as m, jsxs as k, Fragment as B } from "react/jsx-runtime";
2
+ import { useRef as P, useState as C, useEffect as K, useMemo as x, useCallback as I, memo as z } from "react";
3
+ import * as M from "three";
4
+ import { Line as L } from "@react-three/drei";
5
+ import { V as U, G as T, W as N, X as F, Y as A, Z as V, U as q, _ as W } from "./index-C5agFfBe.js";
6
+ import { useFrame as Z } from "@react-three/fiber";
7
+ import { B as j, u as S } from "./gaesupStore-DTu0tYBp.js";
8
+ import { vec3 as Y } from "@react-three/rapier";
9
+ import { u as _ } from "./index-D0Rz5_-J.js";
10
+ const H = () => ({
11
+ position: new M.Vector3(0, 0, 0),
12
+ velocity: new M.Vector3(0, 0, 0),
13
+ rotation: new M.Euler(0, 0, 0),
14
+ isMoving: !1,
15
+ isGrounded: !1,
16
+ speed: 0,
17
+ height: 2
18
+ // Default character height
19
+ });
20
+ function X(e = {}) {
21
+ const { updateInterval: g = 0, entityId: u } = e, c = P(null);
22
+ c.current || (c.current = H());
23
+ const [, l] = C(0), n = P(0), v = P(0), h = P({ x: 0, y: 0, z: 0 }), y = P(void 0), w = P(null), { activeState: p, gameStates: R } = U(), s = (d) => {
24
+ if (u) return u;
25
+ if (y.current) return y.current;
26
+ const r = d.getActiveEntities();
27
+ return y.current = r[0], y.current;
28
+ };
29
+ return K(() => {
30
+ y.current = void 0, w.current = j.getOrCreate("motion");
31
+ const d = w.current;
32
+ if (!d) return;
33
+ const r = d.subscribe((i, f) => {
34
+ const a = s(d);
35
+ if (!a || f !== a) return;
36
+ const t = performance.now();
37
+ if (v.current = t, g > 0 && t - n.current < g) return;
38
+ n.current = t;
39
+ const o = c.current;
40
+ o.position.copy(i.position), o.velocity.copy(i.velocity), o.rotation.copy(i.rotation), o.isMoving = i.isMoving, o.isGrounded = i.isGrounded, o.speed = i.speed, o.height = 2, l((b) => b + 1);
41
+ });
42
+ return () => {
43
+ r();
44
+ };
45
+ }, [u, g]), Z(() => {
46
+ const d = performance.now();
47
+ if (g > 0 && d - n.current < g) return;
48
+ const r = c.current, i = w.current, f = (a) => {
49
+ const t = h.current, o = a.x - t.x, b = a.y - t.y, E = a.z - t.z;
50
+ return o * o + b * b + E * E > 1e-6 ? (t.x = a.x, t.y = a.y, t.z = a.z, !0) : !1;
51
+ };
52
+ if (i) {
53
+ const a = s(i);
54
+ if (!(d - v.current < 16) && a) {
55
+ const o = i.snapshot(a);
56
+ if (o) {
57
+ r.position.copy(o.position), r.velocity.copy(o.velocity), r.rotation.copy(o.rotation), r.isMoving = o.isMoving, r.isGrounded = o.isGrounded, r.speed = o.speed, r.height = 2, n.current = d, f(r.position) && l((b) => b + 1);
58
+ return;
59
+ }
60
+ }
61
+ }
62
+ p?.position && (r.position.copy(p.position), p.velocity ? r.velocity.copy(p.velocity) : r.velocity.set(0, 0, 0), p.euler ? r.rotation.copy(p.euler) : r.rotation.set(0, 0, 0), r.isMoving = R?.isMoving || !1, r.isGrounded = R?.isOnTheGround || !1, r.speed = p.velocity ? p.velocity.length() : 0, r.height = 2, n.current = d, f(r.position) && l((a) => a + 1));
63
+ }), c.current;
64
+ }
65
+ const $ = {
66
+ KeyW: "forward",
67
+ KeyA: "leftward",
68
+ KeyS: "backward",
69
+ KeyD: "rightward",
70
+ ShiftLeft: "shift",
71
+ Space: "space",
72
+ KeyZ: "keyZ",
73
+ KeyR: "keyR",
74
+ KeyF: "keyF",
75
+ KeyE: "keyE",
76
+ Escape: "escape"
77
+ }, J = (e = !0, g = !0, u) => {
78
+ const c = S((s) => s.automation?.queue.isRunning), l = S((s) => s.stopAutomation), n = S((s) => s.interaction?.isActive ?? !0), v = T((s) => s.isInEditMode()), h = N(), y = P(/* @__PURE__ */ new Set()), w = x(() => ({ ...$ }), []), p = I(
79
+ (s, d) => {
80
+ if (!n) return !1;
81
+ try {
82
+ return h.updateKeyboard({ [s]: d }), d ? y.current.add(s) : y.current.delete(s), !0;
83
+ } catch (r) {
84
+ return console.error("Error updating keyboard state:", r), !1;
85
+ }
86
+ },
87
+ [h, n]
88
+ ), R = I(() => {
89
+ y.current.clear(), h.updateKeyboard({
90
+ forward: !1,
91
+ backward: !1,
92
+ leftward: !1,
93
+ rightward: !1,
94
+ shift: !1,
95
+ space: !1,
96
+ keyZ: !1,
97
+ keyR: !1,
98
+ keyF: !1,
99
+ keyE: !1,
100
+ escape: !1
101
+ });
102
+ }, [h]);
103
+ return K(() => {
104
+ (!n || v) && R();
105
+ }, [R, n, v]), K(() => {
106
+ const s = (f, a) => {
107
+ const t = w[f.code];
108
+ if (!t) return;
109
+ if (!n || v) {
110
+ a && f.preventDefault(), R();
111
+ return;
112
+ }
113
+ const o = y.current.has(f.code);
114
+ a && !o ? (y.current.add(f.code), f.code === "Space" && f.preventDefault(), g && c && (t === "forward" || t === "backward" || t === "leftward" || t === "rightward") && (l(), h.updateMouse({ isActive: !1, shouldRun: !1 })), h.updateKeyboard({ [t]: !0 })) : !a && o && (y.current.delete(f.code), h.updateKeyboard({ [t]: !1 }));
115
+ }, d = (f) => s(f, !0), r = (f) => s(f, !1), i = () => document.hidden && R();
116
+ return window.addEventListener("keydown", d), window.addEventListener("keyup", r), document.addEventListener("visibilitychange", i), () => {
117
+ window.removeEventListener("keydown", d), window.removeEventListener("keyup", r), document.removeEventListener("visibilitychange", i);
118
+ };
119
+ }, [
120
+ w,
121
+ g,
122
+ l,
123
+ c,
124
+ R,
125
+ n,
126
+ v,
127
+ h
128
+ ]), {
129
+ pressedKeys: Array.from(y.current),
130
+ pushKey: p,
131
+ isKeyPressed: (s) => y.current.has(s),
132
+ clearAllKeys: R
133
+ };
134
+ }, D = z(({ points: e, color: g }) => e.length < 2 ? null : /* @__PURE__ */ m(
135
+ L,
136
+ {
137
+ points: e,
138
+ color: g,
139
+ lineWidth: 2,
140
+ dashed: !1
141
+ }
142
+ ));
143
+ D.displayName = "PathLine";
144
+ const O = z(() => /* @__PURE__ */ k("group", { children: [
145
+ /* @__PURE__ */ k("mesh", { children: [
146
+ /* @__PURE__ */ m("sphereGeometry", { args: [0.2, 16, 16] }),
147
+ /* @__PURE__ */ m(
148
+ "meshStandardMaterial",
149
+ {
150
+ color: "#00ff88",
151
+ emissive: "#00ff88",
152
+ emissiveIntensity: 0.5,
153
+ transparent: !0,
154
+ opacity: 0.9
155
+ }
156
+ )
157
+ ] }),
158
+ /* @__PURE__ */ k("mesh", { rotation: [Math.PI / 2, 0, 0], children: [
159
+ /* @__PURE__ */ m("ringGeometry", { args: [0.3, 0.5, 8] }),
160
+ /* @__PURE__ */ m(
161
+ "meshStandardMaterial",
162
+ {
163
+ color: "#00ff88",
164
+ transparent: !0,
165
+ opacity: 0.6,
166
+ side: M.DoubleSide
167
+ }
168
+ )
169
+ ] })
170
+ ] }));
171
+ O.displayName = "TargetMarker";
172
+ function Q({ lineStartHeight: e } = {}) {
173
+ const g = S((t) => t.automation), { position: u } = X(), { mouse: c } = F(), [l, n] = C(() => [...A()]);
174
+ K(() => V(() => {
175
+ n([...A()]);
176
+ }), []);
177
+ const v = c?.target || new M.Vector3(), h = c?.isActive || !1, y = g?.queue || { actions: [], currentIndex: 0 }, w = y.actions || [], p = y.currentIndex || 0, s = u.distanceTo(v) < 1, d = h && !s, r = w.map((t) => t.type === "move" && t.target ? new M.Vector3(t.target.x, t.target.y, t.target.z) : null).filter((t) => t !== null), i = u.clone();
178
+ e !== void 0 && (i.y += e);
179
+ const f = l.length > 0 ? l : [v], a = d ? [i, ...f, ...r] : r.length > 0 ? [i, ...r] : [];
180
+ return /* @__PURE__ */ k("group", { children: [
181
+ d && /* @__PURE__ */ m("group", { position: v, children: /* @__PURE__ */ m(O, {}) }),
182
+ a.length > 1 && /* @__PURE__ */ m(
183
+ D,
184
+ {
185
+ points: a,
186
+ color: p >= 0 ? "#00ff88" : "#ffaa00"
187
+ }
188
+ ),
189
+ w.map((t, o) => {
190
+ if (t.type === "move" && t.target) {
191
+ const b = o === p, E = o < p;
192
+ return /* @__PURE__ */ m(
193
+ "group",
194
+ {
195
+ position: [t.target.x, t.target.y, t.target.z],
196
+ children: /* @__PURE__ */ k("mesh", { children: [
197
+ /* @__PURE__ */ m("sphereGeometry", { args: [0.1, 8, 8] }),
198
+ /* @__PURE__ */ m(
199
+ "meshStandardMaterial",
200
+ {
201
+ color: E ? "#888" : b ? "#ff4444" : "#ffaa00",
202
+ transparent: !0,
203
+ opacity: E ? 0.3 : 0.8
204
+ }
205
+ )
206
+ ] })
207
+ },
208
+ `action-${o}`
209
+ );
210
+ }
211
+ return null;
212
+ })
213
+ ] });
214
+ }
215
+ function ee({ clickerOptions: e }) {
216
+ const { onClick: g } = q(e), u = (c) => {
217
+ c.stopPropagation();
218
+ const { cameraOption: l, setCameraOption: n } = S.getState();
219
+ if (l?.focus) {
220
+ n({ focus: !1 });
221
+ return;
222
+ }
223
+ g(c);
224
+ };
225
+ return /* @__PURE__ */ k(
226
+ "mesh",
227
+ {
228
+ position: [0, 0, 0],
229
+ rotation: [-Math.PI / 2, 0, 0],
230
+ onPointerDown: u,
231
+ visible: !0,
232
+ userData: { intangible: !0 },
233
+ children: [
234
+ /* @__PURE__ */ m("planeGeometry", { args: [1e3, 1e3] }),
235
+ /* @__PURE__ */ m("meshBasicMaterial", { transparent: !0, opacity: 0 })
236
+ ]
237
+ }
238
+ );
239
+ }
240
+ function te({ props: e, children: g }) {
241
+ const u = S((i) => i.mode), { gameStates: c } = U(), l = S((i) => i.rideable), n = S((i) => i.urls), v = T((i) => i.isInEditMode()), h = _();
242
+ if (J(), v || !u || !c || !l || !n || u.type === "character" && !n.characterUrl || u.type === "vehicle" && !n.vehicleUrl || u.type === "airplane" && !n.airplaneUrl) return null;
243
+ const { canRide: y, isRiding: w, currentRideable: p } = c, R = p?.id, s = x(
244
+ () => (R ? l[R]?.offset : void 0) ?? Y(),
245
+ [R, l]
246
+ ), r = (() => {
247
+ const i = e.rigidBodyRef ?? h.rigidBodyRef, f = e.outerGroupRef ?? h.outerGroupRef, a = e.innerGroupRef ?? h.innerGroupRef, t = e.colliderRef ?? h.colliderRef, o = {
248
+ isActive: !0,
249
+ componentType: u.type,
250
+ enableRiding: y,
251
+ isRiderOn: w,
252
+ offset: s,
253
+ ref: i,
254
+ outerGroupRef: f,
255
+ innerGroupRef: a,
256
+ colliderRef: t,
257
+ parts: (e.parts || []).filter((G) => !!G.url).map((G) => ({ ...G, url: G.url })),
258
+ ...e.onAnimate ? { onAnimate: e.onAnimate } : {},
259
+ ...e.onFrame ? { onFrame: e.onFrame } : {},
260
+ ...e.onReady ? { onReady: e.onReady } : {},
261
+ ...e.onDestroy ? { onDestroy: e.onDestroy } : {},
262
+ ...e.onDestory ? { onDestory: e.onDestory } : {},
263
+ ...typeof e.baseColor == "string" && e.baseColor.trim().length > 0 ? { baseColor: e.baseColor } : {},
264
+ ...Array.isArray(e.excludeBaseNodes) && e.excludeBaseNodes.length > 0 ? { excludeBaseNodes: e.excludeBaseNodes } : {},
265
+ ...e.rigidBodyProps ? { rigidBodyProps: e.rigidBodyProps } : {},
266
+ ...e.controllerOptions ? { controllerOptions: e.controllerOptions } : {},
267
+ ...e.groundRay ? { groundRay: e.groundRay } : {},
268
+ ...e.colliderSize ? { colliderSize: e.colliderSize } : {},
269
+ ...e.position ? { position: e.position } : {},
270
+ ...e.rotation ? { rotation: e.rotation } : {},
271
+ ...e.scale ? { scale: e.scale } : {}
272
+ }, b = w && u.type !== "character" ? n.ridingUrl : void 0, E = typeof b == "string" && b.length > 0 ? { ridingUrl: b } : {};
273
+ switch (u.type) {
274
+ case "character":
275
+ return {
276
+ ...o,
277
+ url: n.characterUrl || ""
278
+ };
279
+ case "vehicle":
280
+ return {
281
+ ...o,
282
+ ...E,
283
+ url: n.vehicleUrl || "",
284
+ wheelUrl: n.wheelUrl
285
+ };
286
+ case "airplane":
287
+ return {
288
+ ...o,
289
+ ...E,
290
+ url: n.airplaneUrl || ""
291
+ };
292
+ default:
293
+ return {
294
+ ...o,
295
+ url: n.characterUrl || ""
296
+ };
297
+ }
298
+ })();
299
+ return u.type === "character" && c.isRiding ? null : /* @__PURE__ */ m(W, { ...r, children: g });
300
+ }
301
+ function ue(e) {
302
+ const { clickToMove: g, children: u, clickerOptions: c, ...l } = e, n = l.colliderSize?.height ? l.colliderSize.height * 0.5 : void 0, v = {
303
+ ...c ?? {},
304
+ ...c?.agentRadius === void 0 && l.colliderSize?.radius !== void 0 ? { agentRadius: l.colliderSize.radius } : {}
305
+ };
306
+ return /* @__PURE__ */ m(te, { props: l, children: /* @__PURE__ */ k(B, { children: [
307
+ g && /* @__PURE__ */ k(B, { children: [
308
+ /* @__PURE__ */ m(ee, { clickerOptions: v }),
309
+ /* @__PURE__ */ m(Q, { ...n !== void 0 ? { lineStartHeight: n } : {} })
310
+ ] }),
311
+ u
312
+ ] }) });
313
+ }
314
+ export {
315
+ ue as C,
316
+ ee as G,
317
+ Q as a,
318
+ X as b,
319
+ J as u
320
+ };
@@ -0,0 +1 @@
1
+ "use strict";const S=require("react/jsx-runtime"),b=require("react"),O=require("three"),I=require("./index-CJj-Z7Jr.cjs"),C=require("./gaesupStore-2zKBYTYo.cjs");function z(n){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(n){for(const t in n)if(t!=="default"){const r=Object.getOwnPropertyDescriptor(n,t);Object.defineProperty(e,t,r.get?r:{enumerable:!0,get:()=>n[t]})}}return e.default=n,Object.freeze(e)}const v=z(O),_="gaesup-save",j=1,M="slots";function L(){return new Promise((n,e)=>{if(typeof indexedDB>"u"){e(new Error("IndexedDB unavailable"));return}const t=indexedDB.open(_,j);t.onupgradeneeded=()=>{const r=t.result;r.objectStoreNames.contains(M)||r.createObjectStore(M)},t.onsuccess=()=>n(t.result),t.onerror=()=>e(t.error)})}function w(n,e){return L().then(t=>new Promise((r,a)=>{const o=t.transaction(M,n).objectStore(M),c=e(o);if(c instanceof Promise){c.then(r,a);return}c.onsuccess=()=>r(c.result),c.onerror=()=>a(c.error)}))}class R{async read(e){try{return await w("readonly",r=>r.get(e))??null}catch{return null}}async write(e,t){await w("readwrite",r=>r.put(t,e))}async list(){try{return(await w("readonly",t=>t.getAllKeys())).map(String)}catch{return[]}}async remove(e){try{await w("readwrite",t=>t.delete(e))}catch{}}}const y="gaesup:save:";function k(n,e){try{return n()}catch{return e}}class T{async read(e){return typeof localStorage>"u"?null:k(()=>{const t=localStorage.getItem(y+e);return t?JSON.parse(t):null},null)}async write(e,t){typeof localStorage>"u"||k(()=>localStorage.setItem(y+e,JSON.stringify(t)),void 0)}async list(){return typeof localStorage>"u"?[]:k(()=>{const e=[];for(let t=0;t<localStorage.length;t++){const r=localStorage.key(t);r&&r.startsWith(y)&&e.push(r.slice(y.length))}return e},[])}async remove(e){typeof localStorage>"u"||k(()=>localStorage.removeItem(y+e),void 0)}}class B{adapter;bindings=new Map;currentVersion;migrations;defaultSlot;diagnosticListeners=new Set;constructor(e){this.adapter=e.adapter,this.currentVersion=e.currentVersion??1,this.migrations=e.migrations??{},this.defaultSlot=e.defaultSlot??"main",e.onDiagnostic&&this.diagnosticListeners.add(e.onDiagnostic)}register(e){if(this.bindings.has(e.key))throw new E(e.key);const t={key:e.key,serialize:()=>e.serialize(),hydrate:r=>e.hydrate(r)};return this.bindings.set(e.key,t),()=>{this.bindings.get(e.key)===t&&this.bindings.delete(e.key)}}has(e){return this.bindings.has(e)}subscribeDiagnostics(e){return this.diagnosticListeners.add(e),()=>{this.diagnosticListeners.delete(e)}}getBindings(){return this.bindings.values()}createBlob(e=this.defaultSlot){const t={};for(const[r,a]of this.bindings)try{t[r]=a.serialize()}catch(i){t[r]=null,this.reportDiagnostic({phase:"serialize",key:r,slot:e,error:i})}return{version:this.currentVersion,savedAt:Date.now(),domains:t}}hydrateBlob(e,t=this.defaultSlot){let r=e;for(;r.version<this.currentVersion;){const a=this.migrations[r.version];if(!a)break;r=a(r)}for(const[a,i]of this.bindings)try{i.hydrate(r.domains?.[a])}catch(o){this.reportDiagnostic({phase:"hydrate",key:a,slot:t,error:o})}return!0}async save(e=this.defaultSlot){const t=this.createBlob(e);await this.adapter.write(e,t)}async load(e=this.defaultSlot){const t=await this.adapter.read(e);return t?this.hydrateBlob(t,e):!1}async list(){return this.adapter.list()}async remove(e=this.defaultSlot){return this.adapter.remove(e)}reportDiagnostic(e){for(const t of this.diagnosticListeners)t(e)}}class E extends Error{constructor(e){super(`Save domain "${e}" is already registered.`),this.name="DuplicateSaveDomainBindingError"}}let D=null;function A(){const n=typeof indexedDB<"u"?new R:new T;return new B({adapter:n,defaultSlot:"main",currentVersion:1})}function V(){return D||(D=A()),D}var W=Object.defineProperty,N=Object.getOwnPropertyDescriptor,q=(n,e,t)=>e in n?W(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,X=(n,e,t,r)=>{for(var a=r>1?void 0:r?N(e,t):e,i=n.length-1,o;i>=0;i--)(o=n[i])&&(a=o(a)||a);return a},F=(n,e,t)=>q(n,e+"",t);exports.MinimapSystem=class extends C.AbstractSystem{listeners;constructor(){const e={markers:new Map,canvas:null,ctx:null,isDirty:!0,lastPosition:null,lastRotation:null,gradientCache:{background:null,avatar:null},lastUpdate:Date.now()},t={markerCount:0,renderTime:0,frameTime:0};super(e,t),this.listeners=new Set}static getInstance(){return(!exports.MinimapSystem.instance||exports.MinimapSystem.instance.isDisposed)&&(exports.MinimapSystem.instance=new exports.MinimapSystem),exports.MinimapSystem.instance}addMarker(e,t,r,a,i){const o={id:e,type:t,text:r,center:a,size:i};this.state.markers.set(e,o),this.updateMetrics(0),this.notifyListeners()}removeMarker(e){this.state.markers.delete(e),this.updateMetrics(0),this.notifyListeners()}updateMarker(e,t){const r=this.state.markers.get(e);r&&(this.state.markers.set(e,{...r,...t}),this.updateMetrics(0),this.notifyListeners())}getMarkers(){return new Map(this.state.markers)}getMarker(e){return this.state.markers.get(e)}clear(){this.state.markers.clear(),this.updateMetrics(0),this.notifyListeners()}subscribe(e){return this.listeners.add(e),()=>this.listeners.delete(e)}notifyListeners(){const e=this.getMarkers();this.listeners.forEach(t=>t(e))}setCanvas(e){this.state.canvas=e,this.state.ctx=e?e.getContext("2d"):null,this.state.isDirty=!0,this.state.gradientCache={background:null,avatar:null}}checkForUpdates(e,t,r=.1,a=.01){const i=this.state.lastPosition,o=this.state.lastRotation;if(!i||o===null){this.state.isDirty=!0,this.state.lastPosition={x:e.x,z:e.z},this.state.lastRotation=t;return}const c=Math.abs(e.x-i.x)>r||Math.abs(e.z-i.z)>r,l=Math.abs(t-o)>a;(c||l)&&(this.state.isDirty=!0,this.state.lastPosition={x:e.x,z:e.z},this.state.lastRotation=t)}render(e){if(!this.state.canvas||!this.state.ctx||!this.state.isDirty)return;const t=performance.now(),{size:r,scale:a,position:i,rotation:o,blockRotate:c,tileGroups:l,sceneObjects:h}=e,s=this.state.ctx;if(s.clearRect(0,0,r,r),s.save(),s.beginPath(),s.arc(r/2,r/2,r/2,0,Math.PI*2),s.clip(),!this.state.gradientCache.background){const d=s.createRadialGradient(r/2,r/2,0,r/2,r/2,r/2);d.addColorStop(0,"rgba(20, 30, 40, 0.9)"),d.addColorStop(1,"rgba(10, 20, 30, 0.95)"),this.state.gradientCache.background=d}s.fillStyle=this.state.gradientCache.background,s.fillRect(0,0,r,r);const u=o*180/Math.PI;s.translate(r/2,r/2),s.rotate(-u*Math.PI/180),s.translate(-r/2,-r/2),s.save(),s.strokeStyle="rgba(255, 255, 255, 0.1)",s.lineWidth=1;for(let d=0;d<r;d+=20)s.beginPath(),s.moveTo(d,0),s.lineTo(d,r),s.moveTo(0,d),s.lineTo(r,d),s.stroke();s.restore(),this.renderCompass(s,r,u),l&&l.size>0&&this.renderTiles(s,r,a,i,l),h&&h.size>0&&this.renderSceneObjects(s,r,a,i,h),this.renderMarkers(s,r,a,i,u,c),this.renderAvatar(s,r),s.restore(),this.state.isDirty=!1,this.metrics.renderTime=performance.now()-t}renderCompass(e,t,r){e.save(),e.fillStyle="white",e.font="bold 16px sans-serif",e.shadowColor="rgba(0, 0, 0, 0.8)",e.shadowBlur=3,[{text:"N",x:t/2,y:25,color:"#ff6b6b"},{text:"S",x:t/2,y:t-25,color:"#4ecdc4"},{text:"E",x:t-25,y:t/2,color:"#45b7d1"},{text:"W",x:25,y:t/2,color:"#f9ca24"}].forEach(({text:i,x:o,y:c,color:l})=>{e.save(),e.fillStyle=l,e.translate(o,c),e.rotate(r*Math.PI/180),e.textAlign="center",e.textBaseline="middle",e.fillText(i,0,0),e.restore()}),e.restore()}renderTiles(e,t,r,a,i){Array.from(i.values()).forEach(c=>{c&&c.tiles&&Array.isArray(c.tiles)&&c.tiles.forEach(l=>{if(!l||!l.position)return;const h=(l.position.x-a.x)*r,s=(l.position.z-a.z)*r,u=(l.size||1)*4*r;e.save();const d=t/2-h-u/2,f=t/2-s-u/2;l.objectType==="water"?e.fillStyle="rgba(0, 150, 255, 0.6)":l.objectType==="grass"?e.fillStyle="rgba(50, 200, 50, 0.4)":l.objectType==="sand"?e.fillStyle="rgba(210, 180, 120, 0.45)":l.objectType==="snowfield"?e.fillStyle="rgba(225, 240, 255, 0.5)":e.fillStyle="rgba(150, 150, 150, 0.3)",e.fillRect(d,f,u,u),e.strokeStyle="rgba(255, 255, 255, 0.2)",e.lineWidth=.5,e.strokeRect(d,f,u,u),e.restore()})})}renderSceneObjects(e,t,r,a,i){i.forEach(o=>{if(!o?.position||!o?.size)return;const c=(o.position.x-a.x)*r,l=(o.position.z-a.z)*r,h=o.size.x*r,s=o.size.z*r;e.save();const u=t/2-c-h/2,d=t/2-l-s/2;e.fillStyle="rgba(100, 150, 200, 0.4)",e.fillRect(u,d,h,s),e.strokeStyle="rgba(255, 255, 255, 0.4)",e.lineWidth=1,e.strokeRect(u,d,h,s),e.restore()})}renderMarkers(e,t,r,a,i,o){this.state.markers.size!==0&&this.state.markers.forEach(c=>{if(!c?.center||!c?.size)return;const{center:l,size:h,text:s}=c,u=(l.x-a.x)*r,d=(l.z-a.z)*r;e.save();const f=h.x*r,g=h.z*r,m=t/2-u-f/2,p=t/2-d-g/2;e.shadowColor="rgba(0, 0, 0, 0.6)",e.shadowBlur=4,e.shadowOffsetX=2,e.shadowOffsetY=2,e.fillStyle="rgba(0,0,0,0.3)",e.fillRect(m,p,f,g),e.shadowColor="transparent",e.strokeStyle="rgba(255, 255, 255, 0.3)",e.lineWidth=1,e.strokeRect(m,p,f,g),s&&(e.save(),e.fillStyle="white",e.font="bold 12px sans-serif",e.shadowColor="rgba(0, 0, 0, 0.8)",e.shadowBlur=2,e.translate(m+f/2,p+g/2),o||e.rotate(-i*Math.PI/180),e.textAlign="center",e.textBaseline="middle",e.fillText(s,0,0),e.restore()),e.restore()})}renderAvatar(e,t){if(e.save(),!this.state.gradientCache.avatar){const r=e.createRadialGradient(t/2,t/2,0,t/2,t/2,12);r.addColorStop(0,"#01fff7"),r.addColorStop(.7,"#01fff7"),r.addColorStop(1,"transparent"),this.state.gradientCache.avatar=r}e.fillStyle=this.state.gradientCache.avatar,e.beginPath(),e.arc(t/2,t/2,12,0,Math.PI*2),e.fill(),e.fillStyle="#01fff7",e.shadowColor="0 0 10px rgba(1,255,247,0.7)",e.shadowBlur=8,e.beginPath(),e.arc(t/2,t/2,6,0,Math.PI*2),e.fill(),e.shadowColor="transparent",e.strokeStyle="rgba(255, 255, 255, 0.8)",e.lineWidth=2,e.beginPath(),e.moveTo(t/2,t/2),e.lineTo(t/2,t/2-12),e.stroke(),e.restore()}performUpdate(e){}createUpdateArgs(e){return e}updateMetrics(e){this.metrics.markerCount=this.state.markers.size,this.metrics.frameTime=e}onDispose(){this.clear(),this.listeners.clear(),this.state.canvas=null,this.state.ctx=null,exports.MinimapSystem.instance=null}};F(exports.MinimapSystem,"instance",null);exports.MinimapSystem=X([C.RegisterSystem("minimap"),C.ManageRuntime({autoStart:!1})],exports.MinimapSystem);function U({type:n="normal",text:e,position:t,children:r,interactive:a=!0,showMinimap:i=!0}){const o=b.useRef(null),c=I.useClicker(),l=b.useMemo(()=>`world-prop-${Date.now()}-${Math.random()}`,[]),h=b.useRef({center:new v.Vector3,size:new v.Vector3,positionAdd:new v.Vector3});return b.useEffect(()=>{if(!i||!o.current)return;const s=exports.MinimapSystem.getInstance(),d=setTimeout(()=>{const f=o.current;if(!f)return;const g=new v.Box3;if(g.setFromObject(f),!g.isEmpty()){const{center:m,size:p,positionAdd:P}=h.current;g.getCenter(m),g.getSize(p),t&&(P.set(t[0],t[1],t[2]),m.add(P)),s.addMarker(l,n,e||"",m.clone(),p.clone())}},100);return()=>{clearTimeout(d),s.removeMarker(l)}},[t,n,e,i,l]),S.jsxs("group",{ref:o,...t?{position:t}:{},onClick:s=>{a&&(s.stopPropagation(),c.onClick(s))},children:[r,e&&S.jsx("group",{position:[0,2,0],children:S.jsx("sprite",{scale:[2,.5,1],children:S.jsx("spriteMaterial",{color:"#ffffff",transparent:!0,opacity:.8})})})]})}exports.DuplicateSaveDomainBindingError=E;exports.IndexedDBAdapter=R;exports.LocalStorageAdapter=T;exports.SaveSystem=B;exports.WorldProps=U;exports.createDefaultSaveSystem=A;exports.getSaveSystem=V;
@@ -1 +1 @@
1
- "use strict";const s=require("react/jsx-runtime"),l=require("react"),d=require("@react-three/fiber"),c=require("./gaesupStore-2zKBYTYo.cjs"),v=require("./index-BOdJzeGD.cjs"),h=require("./index-B414uKZc.cjs");function x(){const r=d.useThree(n=>n.gl),t=c.useGaesupStore(n=>n.setPerformance),o=l.useRef(0);return d.useFrame(()=>{if(o.current++,o.current<30)return;o.current=0;const n=r.info,a="programs"in n?n.programs:void 0;t({render:{calls:n.render.calls,triangles:n.render.triangles,points:n.render.points,lines:n.render.lines},engine:{geometries:n.memory.geometries,textures:n.memory.textures,programs:Array.isArray(a)?a.length:0}})}),null}function g({children:r,showGrid:t,showAxes:o}){return s.jsxs("group",{name:"gaesup-world",children:[t&&s.jsx("gridHelper",{args:[100,100,"#888888","#444444"]}),o&&s.jsx("axesHelper",{args:[10]}),r]})}function f(r){const t=c.useGaesupStore(e=>e.setMode),o=c.useGaesupStore(e=>e.setUrls),n=c.useGaesupStore(e=>e.setCameraOption),a=l.useMemo(()=>{if(!r.urls)return null;const e={};return r.urls.characterUrl!==void 0&&(e.characterUrl=r.urls.characterUrl),r.urls.vehicleUrl!==void 0&&(e.vehicleUrl=r.urls.vehicleUrl),r.urls.airplaneUrl!==void 0&&(e.airplaneUrl=r.urls.airplaneUrl),e.characterUrl===void 0&&r.urls.character!==void 0&&(e.characterUrl=r.urls.character),e.vehicleUrl===void 0&&r.urls.vehicle!==void 0&&(e.vehicleUrl=r.urls.vehicle),e.airplaneUrl===void 0&&r.urls.airplane!==void 0&&(e.airplaneUrl=r.urls.airplane),Object.keys(e).length>0?e:null},[r.urls]);l.useEffect(()=>{a&&o(a)},[a,o]);const u=l.useMemo(()=>{const e=r.cameraOption;if(!e)return null;const m=e.distance??15,i={};return e.xDistance!==void 0?i.xDistance=e.xDistance:e.type==="topDown"?i.xDistance=0:e.type!=="firstPerson"&&(i.xDistance=m),e.yDistance!==void 0?i.yDistance=e.yDistance:i.yDistance=e.height??(e.type==="topDown"?m:8),e.zDistance!==void 0?i.zDistance=e.zDistance:e.type==="topDown"?i.zDistance=0:e.type!=="firstPerson"&&(i.zDistance=m),e.fov!==void 0&&(i.fov=e.fov),e.zoom!==void 0&&(i.zoom=e.zoom),e.enableZoom!==void 0&&(i.enableZoom=e.enableZoom),e.minZoom!==void 0&&(i.minZoom=e.minZoom),e.maxZoom!==void 0&&(i.maxZoom=e.maxZoom),e.zoomSpeed!==void 0&&(i.zoomSpeed=e.zoomSpeed),e.enableCollision!==void 0&&(i.enableCollision=e.enableCollision),e.smoothness!==void 0&&(i.smoothing={position:e.smoothness,rotation:e.smoothness,fov:e.smoothness}),i},[r.cameraOption]);return l.useLayoutEffect(()=>{r.mode&&t(r.mode),r.cameraOption&&t({control:r.cameraOption.type}),u&&n(u)},[u,r.cameraOption,r.mode,n,t]),r.runtime?s.jsx(v.GaesupRuntimeProvider,{runtime:r.runtime,revision:r.runtimeRevision??0,children:r.children}):r.children}const U=f;function D({children:r,showGrid:t,showAxes:o}){return s.jsxs(l.Suspense,{fallback:null,children:[s.jsx(h.Camera,{}),s.jsx(x,{}),s.jsx(g,{showGrid:t??!1,showAxes:o??!1,children:r})]})}exports.GaesupWorldContent=D;exports.WorldConfigProvider=f;exports.WorldContainer=U;
1
+ "use strict";const s=require("react/jsx-runtime"),l=require("react"),d=require("@react-three/fiber"),c=require("./gaesupStore-2zKBYTYo.cjs"),v=require("./index-CJj-Z7Jr.cjs"),h=require("./index-D1hpjfAw.cjs");function x(){const r=d.useThree(n=>n.gl),t=c.useGaesupStore(n=>n.setPerformance),o=l.useRef(0);return d.useFrame(()=>{if(o.current++,o.current<30)return;o.current=0;const n=r.info,a="programs"in n?n.programs:void 0;t({render:{calls:n.render.calls,triangles:n.render.triangles,points:n.render.points,lines:n.render.lines},engine:{geometries:n.memory.geometries,textures:n.memory.textures,programs:Array.isArray(a)?a.length:0}})}),null}function g({children:r,showGrid:t,showAxes:o}){return s.jsxs("group",{name:"gaesup-world",children:[t&&s.jsx("gridHelper",{args:[100,100,"#888888","#444444"]}),o&&s.jsx("axesHelper",{args:[10]}),r]})}function f(r){const t=c.useGaesupStore(e=>e.setMode),o=c.useGaesupStore(e=>e.setUrls),n=c.useGaesupStore(e=>e.setCameraOption),a=l.useMemo(()=>{if(!r.urls)return null;const e={};return r.urls.characterUrl!==void 0&&(e.characterUrl=r.urls.characterUrl),r.urls.vehicleUrl!==void 0&&(e.vehicleUrl=r.urls.vehicleUrl),r.urls.airplaneUrl!==void 0&&(e.airplaneUrl=r.urls.airplaneUrl),e.characterUrl===void 0&&r.urls.character!==void 0&&(e.characterUrl=r.urls.character),e.vehicleUrl===void 0&&r.urls.vehicle!==void 0&&(e.vehicleUrl=r.urls.vehicle),e.airplaneUrl===void 0&&r.urls.airplane!==void 0&&(e.airplaneUrl=r.urls.airplane),Object.keys(e).length>0?e:null},[r.urls]);l.useEffect(()=>{a&&o(a)},[a,o]);const u=l.useMemo(()=>{const e=r.cameraOption;if(!e)return null;const m=e.distance??15,i={};return e.xDistance!==void 0?i.xDistance=e.xDistance:e.type==="topDown"?i.xDistance=0:e.type!=="firstPerson"&&(i.xDistance=m),e.yDistance!==void 0?i.yDistance=e.yDistance:i.yDistance=e.height??(e.type==="topDown"?m:8),e.zDistance!==void 0?i.zDistance=e.zDistance:e.type==="topDown"?i.zDistance=0:e.type!=="firstPerson"&&(i.zDistance=m),e.fov!==void 0&&(i.fov=e.fov),e.zoom!==void 0&&(i.zoom=e.zoom),e.enableZoom!==void 0&&(i.enableZoom=e.enableZoom),e.minZoom!==void 0&&(i.minZoom=e.minZoom),e.maxZoom!==void 0&&(i.maxZoom=e.maxZoom),e.zoomSpeed!==void 0&&(i.zoomSpeed=e.zoomSpeed),e.enableCollision!==void 0&&(i.enableCollision=e.enableCollision),e.smoothness!==void 0&&(i.smoothing={position:e.smoothness,rotation:e.smoothness,fov:e.smoothness}),i},[r.cameraOption]);return l.useLayoutEffect(()=>{r.mode&&t(r.mode),r.cameraOption&&t({control:r.cameraOption.type}),u&&n(u)},[u,r.cameraOption,r.mode,n,t]),r.runtime?s.jsx(v.GaesupRuntimeProvider,{runtime:r.runtime,revision:r.runtimeRevision??0,children:r.children}):r.children}const U=f;function D({children:r,showGrid:t,showAxes:o}){return s.jsxs(l.Suspense,{fallback:null,children:[s.jsx(h.Camera,{}),s.jsx(x,{}),s.jsx(g,{showGrid:t??!1,showAxes:o??!1,children:r})]})}exports.GaesupWorldContent=D;exports.WorldConfigProvider=f;exports.WorldContainer=U;