screeps-client 0.7.0 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- (function(){let e=function(e){return e[e.Plain=0]=`Plain`,e[e.Wall=1]=`Wall`,e[e.Swamp=2]=`Swamp`,e}({});function t(e){let t=Math.round(e).toString(16);return t.length<2?`0`+t:t}function n(e,n,r){let i=(1-Math.abs(2*r-1))*n,a=e/60,o=i*(1-Math.abs(a%2-1)),s=0,c=0,l=0;!Number.isNaN(e)&&e!=null&&(a>=0&&a<1?(s=i,c=o,l=0):a>=1&&a<2?(s=o,c=i,l=0):a>=2&&a<3?(s=0,c=i,l=o):a>=3&&a<4?(s=0,c=o,l=i):a>=4&&a<5?(s=o,c=0,l=i):a>=5&&a<6&&(s=i,c=0,l=o));let u=r-i/2,d=(s+u)*255,f=(c+u)*255,p=(l+u)*255;return`#`+t(d)+t(f)+t(p)}function r(){let e=[],t=0;e.push({index:t++,rgb:n(0,0,.8)});for(let r=0;r<19;r++)e.push({index:t++,rgb:n(r*360/19,.6,.8)});e.push({index:t++,rgb:n(0,0,.5)});for(let r=0;r<19;r++)e.push({index:t++,rgb:n(r*360/19,.7,.5)});e.push({index:t++,rgb:n(0,0,.3)});for(let r=0;r<19;r++)e.push({index:t++,rgb:n(r*360/19,.4,.3)});e.push({index:t++,rgb:n(0,0,.1)});for(let r=0;r<19;r++)e.push({index:t++,rgb:n(r*360/19,.5,.1)});return e}r();let i=856343,a=4020797,o=[128,512];function s(e){return`rgb(${e>>16&255},${e>>8&255},${e&255})`}function c(e,t,n,r){for(let i=0;i<2500;i++)if(t[i]===n){let t=i%50,n=Math.floor(i/50),a=Math.round(t*r),o=Math.round(n*r);e.fillRect(a,o,Math.round((t+1)*r)-a,Math.round((n+1)*r)-o)}}function l(e,t,n,r){let i=r/2,a=Math.PI;e.beginPath();for(let o=0;o<50;o++)for(let s=0;s<50;s++){let c=t[o*50+s]===n,l=o>0&&t[(o-1)*50+s]===n,u=o<49&&t[(o+1)*50+s]===n,d=s>0&&t[o*50+(s-1)]===n,f=s<49&&t[o*50+(s+1)]===n,p=s*r+i,m=o*r+i;c?!l&&!d&&o>0&&s>0?(e.moveTo(p,o*r),e.arc(p,m,i,-a/2,a,!0),e.lineTo(p,m)):e.rect(s*r,o*r,i,i):l&&d&&t[(o-1)*50+(s-1)]===n&&(e.moveTo(p,o*r),e.lineTo(s*r,o*r),e.lineTo(s*r,m),e.arc(p,m,i,a,-a/2,!1)),c?!l&&!f&&o>0&&s<49?(e.moveTo(p,o*r),e.arc(p,m,i,-a/2,0,!1),e.lineTo(p,m)):e.rect(p,o*r,i,i):l&&f&&t[(o-1)*50+(s+1)]===n&&(e.moveTo(p,o*r),e.lineTo(s*r+r,o*r),e.lineTo(s*r+r,m),e.arc(p,m,i,0,-a/2,!0)),c?!u&&!d&&o<49&&s>0?(e.moveTo(s*r,m),e.arc(p,m,i,a,a/2,!0),e.lineTo(p,m)):e.rect(s*r,m,i,i):u&&d&&t[(o+1)*50+(s-1)]===n&&(e.moveTo(s*r,m),e.lineTo(s*r,o*r+r),e.lineTo(p,o*r+r),e.arc(p,m,i,a/2,a,!1)),c?!u&&!f&&o<49&&s<49?(e.moveTo(p,o*r+r),e.arc(p,m,i,a/2,0,!0),e.lineTo(p,m)):e.rect(p,m,i,i):u&&f&&t[(o+1)*50+(s+1)]===n&&(e.moveTo(p,o*r+r),e.lineTo(s*r+r,o*r+r),e.lineTo(s*r+r,m),e.arc(p,m,i,0,a/2,!1))}e.fill()}self.onmessage=t=>{let{id:n,roomName:r,lod:u,raw:d}=t.data,f=o[u]||128,p=f/50,m=new OffscreenCanvas(f,f),h=m.getContext(`2d`,{alpha:!1});if(!h)return;h.fillStyle=s(2962235),h.fillRect(0,0,f,f),u>=1?(h.fillStyle=s(a),l(h,d,e.Swamp,p),h.fillStyle=s(i),l(h,d,e.Wall,p)):(h.fillStyle=s(a),c(h,d,e.Swamp,p),h.fillStyle=s(i),c(h,d,e.Wall,p));let g=m.transferToImageBitmap();self.postMessage({id:n,roomName:r,lod:u,bitmap:g},{transfer:[g]})}})();
1
+ (function(){let e=function(e){return e[e.Plain=0]=`Plain`,e[e.Wall=1]=`Wall`,e[e.Swamp=2]=`Swamp`,e}({});function t(e){let t=Math.round(e).toString(16);return t.length<2?`0`+t:t}function n(e,n,r){let i=(1-Math.abs(2*r-1))*n,a=e/60,o=i*(1-Math.abs(a%2-1)),s=0,c=0,l=0;!Number.isNaN(e)&&e!=null&&(a>=0&&a<1?(s=i,c=o,l=0):a>=1&&a<2?(s=o,c=i,l=0):a>=2&&a<3?(s=0,c=i,l=o):a>=3&&a<4?(s=0,c=o,l=i):a>=4&&a<5?(s=o,c=0,l=i):a>=5&&a<6&&(s=i,c=0,l=o));let u=r-i/2,d=(s+u)*255,f=(c+u)*255,p=(l+u)*255;return`#`+t(d)+t(f)+t(p)}function r(){let e=[],t=0;e.push({index:t++,rgb:n(0,0,.8)});for(let r=0;r<19;r++)e.push({index:t++,rgb:n(r*360/19,.6,.8)});e.push({index:t++,rgb:n(0,0,.5)});for(let r=0;r<19;r++)e.push({index:t++,rgb:n(r*360/19,.7,.5)});e.push({index:t++,rgb:n(0,0,.3)});for(let r=0;r<19;r++)e.push({index:t++,rgb:n(r*360/19,.4,.3)});e.push({index:t++,rgb:n(0,0,.1)});for(let r=0;r<19;r++)e.push({index:t++,rgb:n(r*360/19,.5,.1)});return e}r();let i=856343,a=4020797,o=[128,512];function s(e){return`rgb(${e>>16&255},${e>>8&255},${e&255})`}function c(e,t,n,r){for(let i=0;i<2500;i++)if(t[i]===n){let t=i%50,n=Math.floor(i/50),a=Math.round(t*r),o=Math.round(n*r);e.fillRect(a,o,Math.round((t+1)*r)-a,Math.round((n+1)*r)-o)}}function l(e,t,n,r){let i=r/2,a=Math.PI;e.beginPath();for(let o=0;o<50;o++)for(let s=0;s<50;s++){let c=t[o*50+s]===n,l=o>0&&t[(o-1)*50+s]===n,u=o<49&&t[(o+1)*50+s]===n,d=s>0&&t[o*50+(s-1)]===n,f=s<49&&t[o*50+(s+1)]===n,p=s*r+i,m=o*r+i;c?!l&&!d&&o>0&&s>0?(e.moveTo(p,o*r),e.arc(p,m,i,-a/2,a,!0),e.lineTo(p,m)):e.rect(s*r,o*r,i,i):l&&d&&t[(o-1)*50+(s-1)]===n&&(e.moveTo(p,o*r),e.lineTo(s*r,o*r),e.lineTo(s*r,m),e.arc(p,m,i,a,-a/2,!1)),c?!l&&!f&&o>0&&s<49?(e.moveTo(p,o*r),e.arc(p,m,i,-a/2,0,!1),e.lineTo(p,m)):e.rect(p,o*r,i,i):l&&f&&t[(o-1)*50+(s+1)]===n&&(e.moveTo(p,o*r),e.lineTo(s*r+r,o*r),e.lineTo(s*r+r,m),e.arc(p,m,i,0,-a/2,!0)),c?!u&&!d&&o<49&&s>0?(e.moveTo(s*r,m),e.arc(p,m,i,a,a/2,!0),e.lineTo(p,m)):e.rect(s*r,m,i,i):u&&d&&t[(o+1)*50+(s-1)]===n&&(e.moveTo(s*r,m),e.lineTo(s*r,o*r+r),e.lineTo(p,o*r+r),e.arc(p,m,i,a/2,a,!1)),c?!u&&!f&&o<49&&s<49?(e.moveTo(p,o*r+r),e.arc(p,m,i,a/2,0,!0),e.lineTo(p,m)):e.rect(p,m,i,i):u&&f&&t[(o+1)*50+(s+1)]===n&&(e.moveTo(p,o*r+r),e.lineTo(s*r+r,o*r+r),e.lineTo(s*r+r,m),e.arc(p,m,i,0,a/2,!1))}e.fill()}self.onmessage=async t=>{let{id:n,roomName:r,lod:u,raw:d,shard:f}=t.data,p=o[u]||128,m=p/50,h=new OffscreenCanvas(p,p),g=h.getContext(`2d`,{alpha:!1});if(!g)return;g.fillStyle=s(2962235),g.fillRect(0,0,p,p),u>=1?(g.fillStyle=s(a),l(g,d,e.Swamp,m),g.fillStyle=s(i),l(g,d,e.Wall,m)):(g.fillStyle=s(a),c(g,d,e.Swamp,m),g.fillStyle=s(i),c(g,d,e.Wall,m));let _=await createImageBitmap(h);self.postMessage({kind:`bitmap`,id:n,roomName:r,lod:u,bitmap:_},{transfer:[_]});try{let e=await h.convertToBlob({type:`image/webp`}),t=await e.arrayBuffer();self.postMessage({kind:`cache`,shard:f,roomName:r,lod:u,cacheBytes:t,cacheType:e.type},{transfer:[t]})}catch{}}})();
@@ -26,7 +26,7 @@
26
26
  to { opacity: 1; transform: translate(-50%, -50%); }
27
27
  }
28
28
  </style>
29
- <script type="module" crossorigin src="./_client/index-DGByyYWv.js"></script>
29
+ <script type="module" crossorigin src="./_client/index-BtJ1eq9i.js"></script>
30
30
  <link rel="modulepreload" crossorigin href="./_client/rolldown-runtime-QTnfLwEv.js">
31
31
  <link rel="modulepreload" crossorigin href="./_client/vendor-pixi-DoK_ycfH.js">
32
32
  <link rel="modulepreload" crossorigin href="./_client/vendor-codemirror-B_kaIH0M.js">
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "screeps-client",
3
- "version": "0.7.0",
3
+ "version": "0.7.1",
4
4
  "license": "ISC",
5
5
  "type": "module",
6
6
  "repository": {
@@ -1 +0,0 @@
1
- import{T as e,h as t,w as n,y as r}from"./vendor-codemirror-B_kaIH0M.js";import{S as i,a,c as o,d as s,f as c,g as l,h as u,i as d,l as f,m as p,n as m,o as h,p as g,r as _,s as v,t as y,u as b,x}from"./index-DDx5QnXZ.js";var S=x(`<div style=width:100%;height:100%;position:relative><canvas style=display:block>`),{log:C,error:w}=l(`map`);function T(l){let x,T=null,[E,D]=r([]),[O,k]=r(1),[A,j]=r(l.originRoom??null),M=null,N=null,P=new Map,F=new Map,I=new Map,L=new Map,R=e=>{let t=u();if(!t)return!0;let n=o(e);return!!n&&v(n.x,n.y,t)},z=e=>{let t=F.get(e);return{room:e,owner:t?.username??(t?.own?.user?`user:${t.own.user}`:null),mineral:t?.mineral??null,density:t?.density??null}},B=[],V=null,H=()=>{V=null;let e=c();if(!e||!T)return;let t=new Set(E());if(B=B.filter(e=>t.has(e)&&!T.hasRoom(e)),B.length===0)return;let n=B.splice(0,200);e.stores.room.terrainBulk(n,l.shard).then(e=>{for(let[t,n]of e){T?.setRoomTerrain(t,n);let e=I.get(t);e!==void 0&&T?.setRoomOwned(t,e)}for(let t of n)e.has(t)||T?.markRoomFetched(t)}).catch(e=>w(`terrain fetch failed:`,e)).finally(()=>{B.length>0&&(V=setTimeout(H,0))})};return t(()=>{c(),l.shard,F.clear(),I.clear()}),e(()=>{x&&(async()=>{if(T=new y({onRoomHover:e=>{l.onHoveredRoomChanged?.(e?z(e):null)},onRoomClick:e=>{A()===e?R(e)&&setTimeout(()=>l.onNavigateToRoom(e),0):(j(e),T?.setSelectedRoom(e),l.onSelectedRoomChanged?.(z(e)))},onVisibleRoomsChanged:e=>{let t=e.length===0;N!==t&&(N=t,C(t?`zoom out — too many rooms visible, terrain loading paused`:`zoom in — terrain loading active, ${e.length} rooms visible`)),D(e)},onZoomChanged:e=>{k(e),l.onZoomChanged?.(e)}}),await T.init(x),!T)return;l.initialZoom!==void 0&&l.initialZoom>0&&T.setZoom(l.initialZoom),l.onZoomChanged?.(T.zoom);let e=u();if(e&&T.setBounds(e.minX,e.maxX,e.minY,e.maxY),l.originRoom){let e=o(l.originRoom);e&&T.centerOn(e.x,e.y),T.setSelectedRoom(l.originRoom),l.onSelectedRoomChanged?.(z(l.originRoom))}else{let e=c();if(e)try{let t=await e.http.user.worldStartRoom(l.shard??`shard0`);if(!T)return;let n=Array.isArray(t?.room)?t.room[0]:t?.room;if(typeof n==`string`){let e=o(n);e&&T.centerOn(e.x,e.y)}}catch(e){w(`worldStartRoom failed:`,e)}}})()}),n(()=>{V!==null&&(clearTimeout(V),V=null),B=[];for(let e of P.values())e.dispose();P.clear(),T?.destroy(),T=null}),t(()=>{_({currentRoom:A,worldBounds:u,onMove:(e,t)=>{let n=d(e,t);j(n),T?.setSelectedRoom(n),T?.centerOn(e,t,!0),l.onSelectedRoomChanged?.(z(n)),l.onHoveredRoomChanged?.(z(n))}});let e=e=>{let t=e.target?.tagName??``,n=e.target?.isContentEditable??!1;if(!(t===`INPUT`||t===`TEXTAREA`||n)&&e.key===`m`){let e=A();e&&R(e)&&l.onNavigateToRoom(e)}};window.addEventListener(`keydown`,e),n(()=>window.removeEventListener(`keydown`,e))}),t(()=>{let e=c(),t=E(),n=l.shard;if(!e||t.length===0)return;let r=new Set(t),i=t.filter(e=>!T?.hasRoom(e));if(i.length>0){let e=t.reduce((e,t)=>e+(o(t)?.x??0),0)/t.length,n=t.reduce((e,t)=>e+(o(t)?.y??0),0)/t.length;B=i.slice().sort((t,r)=>{let i=o(t),a=o(r);return(i?Math.abs(i.x-e)+Math.abs(i.y-n):999)-(a?Math.abs(a.x-e)+Math.abs(a.y-n):999)}),V===null&&(V=setTimeout(H,0))}e.stores.mapStats.request(t,`owner0`,n??void 0);let a=O()>=.4;if(a!==M&&(M=a,l.onSubscriptionStateChanged?.(a),a||T?.clearAllMap2()),a){let r=new Set(t.map(e=>`${e}/${n}`));for(let[e,t]of P)r.has(e)||(t.dispose(),P.delete(e),T?.clearRoomMap2(e.split(`/`)[0]));for(let r of t){let t=`${r}/${n}`;P.has(t)||P.set(t,e.stores.map.subscribeMap2(r,n))}}else{for(let[,e]of P)e.dispose();P.clear()}T?.clearInvisibleRooms(r)}),t(()=>{T?.setShowRoomNames(f()),T&&(T.currentShard=l.shard??`shard0`)}),t(()=>{T?.setUnclaimableOverlayVisible(s())}),t(()=>{T?.setMapVisualVisible(b())}),t(()=>{T?.setOverlayMode(m())}),t(()=>{let e=c(),t=l.shard;e&&e.stores.server.worldInfo(t??void 0).then(e=>{C(`worldInfo(shard=${t??`none`}) — x: [${e.minX}, ${e.maxX}] y: [${e.minY}, ${e.maxY}]`),g(e)}).catch(e=>{C(`worldInfo(shard=${t??`none`}) failed:`,e)})}),t(()=>{T?.setCurrentUser(p()?._id??null)}),t(()=>{let e=u();e?(T?.setBounds(e.minX,e.maxX,e.minY,e.maxY),C(`worldBounds applied — shard: ${l.shard??`none`} x: [${e.minX}, ${e.maxX}] y: [${e.minY}, ${e.maxY}] (fetched for shard: ${e.shard??`none`})`)):(T?.clearBounds(),C(`worldBounds — none (shard: ${l.shard??`none`})`))}),t(()=>{let e=c();if(!e)return;let t=e.stores.user.subscribeMapVisual(l.shard),r=e.stores.user.on(`user:mapVisual`,({shard:e,data:t})=>{e===l.shard&&(t?T?.setMapVisual(t):T?.clearMapVisual())});n(()=>{t.dispose(),r.dispose()})}),t(()=>{let e=c();if(!e)return;let t=e.stores.map.on(`room:map2update`,({room:e,shard:t,data:n,source:r})=>{t===l.shard&&T?.setRoomMap2(e,n,r)});n(()=>t.dispose())}),t(()=>{let e=c();if(!e)return;let t=p()?._id,r=new Set(E()),i=e.stores.mapStats.on(`mapStats:room`,({room:e,stat:n})=>{F.set(e,n);let i=o(e),s=i?a(i.x,i.y)||h(i.x,i.y):!1,c=n.status===`out of borders`,u=!!(n.own&&n.own.user===t),d=!!(n.own&&n.own.user!==t),f=u?`own`:s||c||d?`other`:`none`;I.set(e,f),r.has(e)&&(T?.setRoomOwned(e,f),T?.setRoomSafeMode(e,!!n.safeMode)),T?.setRoomMineral(e,n.mineral,n.density);let p=n.badge?JSON.stringify(n.badge):``;L.get(e)!==p&&(L.set(e,p),T?.setRoomBadge(e,n.badge,n.own?.level)),A()===e&&l.onSelectedRoomChanged?.(z(e))});n(()=>i.dispose())}),(()=>{var e=S(),t=e.firstChild;return i(e=>x=e,t),e})()}export{T as MapViewer};
@@ -1 +0,0 @@
1
- import{T as e,h as t,w as n,y as r}from"./vendor-codemirror-B_kaIH0M.js";import{S as i,a,c as o,d as s,f as c,g as l,h as u,i as d,l as f,m as p,n as m,o as h,p as g,r as _,s as v,t as y,u as b,x}from"./index-q2IQJ_hs.js";var S=x(`<div style=width:100%;height:100%;position:relative><canvas style=display:block>`),{log:C,error:w}=l(`map`);function T(l){let x,T=null,[E,D]=r([]),[O,k]=r(1),[A,j]=r(l.originRoom??null),M=null,N=null,P=new Map,F=new Map,I=new Map,L=new Map,R=e=>{let t=u();if(!t)return!0;let n=o(e);return!!n&&v(n.x,n.y,t)},z=e=>{let t=F.get(e);return{room:e,owner:t?.username??(t?.own?.user?`user:${t.own.user}`:null),mineral:t?.mineral??null,density:t?.density??null}},B=[],V=null,H=()=>{V=null;let e=c();if(!e||!T)return;let t=new Set(E());if(B=B.filter(e=>t.has(e)&&!T.hasRoom(e)),B.length===0)return;let n=B.splice(0,200);e.stores.room.terrainBulk(n,l.shard).then(e=>{for(let[t,n]of e){T?.setRoomTerrain(t,n);let e=I.get(t);e!==void 0&&T?.setRoomOwned(t,e)}for(let t of n)e.has(t)||T?.markRoomFetched(t)}).catch(e=>w(`terrain fetch failed:`,e)).finally(()=>{B.length>0&&(V=setTimeout(H,0))})};return t(()=>{c(),l.shard,F.clear(),I.clear()}),e(()=>{x&&(async()=>{if(T=new y({onRoomHover:e=>{l.onHoveredRoomChanged?.(e?z(e):null)},onRoomClick:e=>{A()===e?R(e)&&setTimeout(()=>l.onNavigateToRoom(e),0):(j(e),T?.setSelectedRoom(e),l.onSelectedRoomChanged?.(z(e)))},onVisibleRoomsChanged:e=>{let t=e.length===0;N!==t&&(N=t,C(t?`zoom out — too many rooms visible, terrain loading paused`:`zoom in — terrain loading active, ${e.length} rooms visible`)),D(e)},onZoomChanged:e=>{k(e),l.onZoomChanged?.(e)}}),await T.init(x),!T)return;l.initialZoom!==void 0&&l.initialZoom>0&&T.setZoom(l.initialZoom),l.onZoomChanged?.(T.zoom);let e=u();if(e&&T.setBounds(e.minX,e.maxX,e.minY,e.maxY),l.originRoom){let e=o(l.originRoom);e&&T.centerOn(e.x,e.y),T.setSelectedRoom(l.originRoom),l.onSelectedRoomChanged?.(z(l.originRoom))}else{let e=c();if(e)try{let t=await e.http.user.worldStartRoom(l.shard??`shard0`);if(!T)return;let n=Array.isArray(t?.room)?t.room[0]:t?.room;if(typeof n==`string`){let e=o(n);e&&T.centerOn(e.x,e.y)}}catch(e){w(`worldStartRoom failed:`,e)}}})()}),n(()=>{V!==null&&(clearTimeout(V),V=null),B=[];for(let e of P.values())e.dispose();P.clear(),T?.destroy(),T=null}),t(()=>{_({currentRoom:A,worldBounds:u,onMove:(e,t)=>{let n=d(e,t);j(n),T?.setSelectedRoom(n),T?.centerOn(e,t,!0),l.onSelectedRoomChanged?.(z(n)),l.onHoveredRoomChanged?.(z(n))}});let e=e=>{let t=e.target?.tagName??``,n=e.target?.isContentEditable??!1;if(!(t===`INPUT`||t===`TEXTAREA`||n)&&e.key===`m`){let e=A();e&&R(e)&&l.onNavigateToRoom(e)}};window.addEventListener(`keydown`,e),n(()=>window.removeEventListener(`keydown`,e))}),t(()=>{let e=c(),t=E(),n=l.shard;if(!e||t.length===0)return;let r=new Set(t),i=t.filter(e=>!T?.hasRoom(e));if(i.length>0){let e=t.reduce((e,t)=>e+(o(t)?.x??0),0)/t.length,n=t.reduce((e,t)=>e+(o(t)?.y??0),0)/t.length;B=i.slice().sort((t,r)=>{let i=o(t),a=o(r);return(i?Math.abs(i.x-e)+Math.abs(i.y-n):999)-(a?Math.abs(a.x-e)+Math.abs(a.y-n):999)}),V===null&&(V=setTimeout(H,0))}e.stores.mapStats.request(t,`owner0`,n??void 0);let a=O()>=.4;if(a!==M&&(M=a,l.onSubscriptionStateChanged?.(a),a||T?.clearAllMap2()),a){let r=new Set(t.map(e=>`${e}/${n}`));for(let[e,t]of P)r.has(e)||(t.dispose(),P.delete(e),T?.clearRoomMap2(e.split(`/`)[0]));for(let r of t){let t=`${r}/${n}`;P.has(t)||P.set(t,e.stores.map.subscribeMap2(r,n))}}else{for(let[,e]of P)e.dispose();P.clear()}T?.clearInvisibleRooms(r)}),t(()=>{T?.setShowRoomNames(f()),T&&(T.currentShard=l.shard??`shard0`)}),t(()=>{T?.setUnclaimableOverlayVisible(s())}),t(()=>{T?.setMapVisualVisible(b())}),t(()=>{T?.setOverlayMode(m())}),t(()=>{let e=c(),t=l.shard;e&&e.stores.server.worldInfo(t??void 0).then(e=>{C(`worldInfo(shard=${t??`none`}) — x: [${e.minX}, ${e.maxX}] y: [${e.minY}, ${e.maxY}]`),g(e)}).catch(e=>{C(`worldInfo(shard=${t??`none`}) failed:`,e)})}),t(()=>{T?.setCurrentUser(p()?._id??null)}),t(()=>{let e=u();e?(T?.setBounds(e.minX,e.maxX,e.minY,e.maxY),C(`worldBounds applied — shard: ${l.shard??`none`} x: [${e.minX}, ${e.maxX}] y: [${e.minY}, ${e.maxY}] (fetched for shard: ${e.shard??`none`})`)):(T?.clearBounds(),C(`worldBounds — none (shard: ${l.shard??`none`})`))}),t(()=>{let e=c();if(!e)return;let t=e.stores.user.subscribeMapVisual(l.shard),r=e.stores.user.on(`user:mapVisual`,({shard:e,data:t})=>{e===l.shard&&(t?T?.setMapVisual(t):T?.clearMapVisual())});n(()=>{t.dispose(),r.dispose()})}),t(()=>{let e=c();if(!e)return;let t=e.stores.map.on(`room:map2update`,({room:e,shard:t,data:n,source:r})=>{t===l.shard&&T?.setRoomMap2(e,n,r)});n(()=>t.dispose())}),t(()=>{let e=c();if(!e)return;let t=p()?._id,r=new Set(E()),i=e.stores.mapStats.on(`mapStats:room`,({room:e,stat:n})=>{F.set(e,n);let i=o(e),s=i?a(i.x,i.y)||h(i.x,i.y):!1,c=n.status===`out of borders`,u=!!(n.own&&n.own.user===t),d=!!(n.own&&n.own.user!==t),f=u?`own`:s||c||d?`other`:`none`;I.set(e,f),r.has(e)&&(T?.setRoomOwned(e,f),T?.setRoomSafeMode(e,!!n.safeMode)),T?.setRoomMineral(e,n.mineral,n.density);let p=n.badge?JSON.stringify(n.badge):``;L.get(e)!==p&&(L.set(e,p),T?.setRoomBadge(e,n.badge,n.own?.level)),A()===e&&l.onSelectedRoomChanged?.(z(e))});n(()=>i.dispose())}),(()=>{var e=S(),t=e.firstChild;return i(e=>x=e,t),e})()}export{T as MapViewer};
@@ -1 +0,0 @@
1
- import{T as e,h as t,w as n,y as r}from"./vendor-codemirror-B_kaIH0M.js";import{S as i,a,c as o,d as s,f as c,g as l,h as u,i as d,l as f,m as p,n as m,o as h,p as g,r as _,s as v,t as y,u as b,x}from"./index-DGByyYWv.js";var S=x(`<div style=width:100%;height:100%;position:relative><canvas style=display:block>`),{log:C,error:w}=l(`map`);function T(l){let x,T=null,[E,D]=r([]),[O,k]=r(1),[A,j]=r(l.originRoom??null),M=null,N=null,P=new Map,F=new Map,I=new Map,L=new Map,R=e=>{let t=u();if(!t)return!0;let n=o(e);return!!n&&v(n.x,n.y,t)},z=e=>{let t=F.get(e);return{room:e,owner:t?.username??(t?.own?.user?`user:${t.own.user}`:null),mineral:t?.mineral??null,density:t?.density??null}},B=[],V=null,H=()=>{V=null;let e=c();if(!e||!T)return;let t=new Set(E());if(B=B.filter(e=>t.has(e)&&!T.hasRoom(e)),B.length===0)return;let n=B.splice(0,200);e.stores.room.terrainBulk(n,l.shard).then(e=>{for(let[t,n]of e){T?.setRoomTerrain(t,n);let e=I.get(t);e!==void 0&&T?.setRoomOwned(t,e)}for(let t of n)e.has(t)||T?.markRoomFetched(t)}).catch(e=>w(`terrain fetch failed:`,e)).finally(()=>{B.length>0&&(V=setTimeout(H,0))})};return t(()=>{c(),l.shard,F.clear(),I.clear()}),e(()=>{x&&(async()=>{if(T=new y({onRoomHover:e=>{l.onHoveredRoomChanged?.(e?z(e):null)},onRoomClick:e=>{A()===e?R(e)&&setTimeout(()=>l.onNavigateToRoom(e),0):(j(e),T?.setSelectedRoom(e),l.onSelectedRoomChanged?.(z(e)))},onVisibleRoomsChanged:e=>{let t=e.length===0;N!==t&&(N=t,C(t?`zoom out — too many rooms visible, terrain loading paused`:`zoom in — terrain loading active, ${e.length} rooms visible`)),D(e)},onZoomChanged:e=>{k(e),l.onZoomChanged?.(e)}}),await T.init(x),!T)return;l.initialZoom!==void 0&&l.initialZoom>0&&T.setZoom(l.initialZoom),l.onZoomChanged?.(T.zoom);let e=u();if(e&&T.setBounds(e.minX,e.maxX,e.minY,e.maxY),l.originRoom){let e=o(l.originRoom);e&&T.centerOn(e.x,e.y),T.setSelectedRoom(l.originRoom),l.onSelectedRoomChanged?.(z(l.originRoom))}else{let e=c();if(e)try{let t=await e.http.user.worldStartRoom(l.shard??`shard0`);if(!T)return;let n=Array.isArray(t?.room)?t.room[0]:t?.room;if(typeof n==`string`){let e=o(n);e&&T.centerOn(e.x,e.y)}}catch(e){w(`worldStartRoom failed:`,e)}}})()}),n(()=>{V!==null&&(clearTimeout(V),V=null),B=[];for(let e of P.values())e.dispose();P.clear(),T?.destroy(),T=null}),t(()=>{_({currentRoom:A,worldBounds:u,onMove:(e,t)=>{let n=d(e,t);j(n),T?.setSelectedRoom(n),T?.centerOn(e,t,!0),l.onSelectedRoomChanged?.(z(n)),l.onHoveredRoomChanged?.(z(n))}});let e=e=>{let t=e.target?.tagName??``,n=e.target?.isContentEditable??!1;if(!(t===`INPUT`||t===`TEXTAREA`||n)&&e.key===`m`){let e=A();e&&R(e)&&l.onNavigateToRoom(e)}};window.addEventListener(`keydown`,e),n(()=>window.removeEventListener(`keydown`,e))}),t(()=>{let e=c(),t=E(),n=l.shard;if(!e||t.length===0)return;let r=new Set(t),i=t.filter(e=>!T?.hasRoom(e));if(i.length>0){let e=t.reduce((e,t)=>e+(o(t)?.x??0),0)/t.length,n=t.reduce((e,t)=>e+(o(t)?.y??0),0)/t.length;B=i.slice().sort((t,r)=>{let i=o(t),a=o(r);return(i?Math.abs(i.x-e)+Math.abs(i.y-n):999)-(a?Math.abs(a.x-e)+Math.abs(a.y-n):999)}),V===null&&(V=setTimeout(H,0))}e.stores.mapStats.request(t,`owner0`,n??void 0);let a=O()>=.4;if(a!==M&&(M=a,l.onSubscriptionStateChanged?.(a),a||T?.clearAllMap2()),a){let r=new Set(t.map(e=>`${e}/${n}`));for(let[e,t]of P)r.has(e)||(t.dispose(),P.delete(e),T?.clearRoomMap2(e.split(`/`)[0]));for(let r of t){let t=`${r}/${n}`;P.has(t)||P.set(t,e.stores.map.subscribeMap2(r,n))}}else{for(let[,e]of P)e.dispose();P.clear()}T?.clearInvisibleRooms(r)}),t(()=>{T?.setShowRoomNames(f()),T&&(T.currentShard=l.shard??`shard0`)}),t(()=>{T?.setUnclaimableOverlayVisible(s())}),t(()=>{T?.setMapVisualVisible(b())}),t(()=>{T?.setOverlayMode(m())}),t(()=>{let e=c(),t=l.shard;e&&e.stores.server.worldInfo(t??void 0).then(e=>{C(`worldInfo(shard=${t??`none`}) — x: [${e.minX}, ${e.maxX}] y: [${e.minY}, ${e.maxY}]`),g(e)}).catch(e=>{C(`worldInfo(shard=${t??`none`}) failed:`,e)})}),t(()=>{T?.setCurrentUser(p()?._id??null)}),t(()=>{let e=u();e?(T?.setBounds(e.minX,e.maxX,e.minY,e.maxY),C(`worldBounds applied — shard: ${l.shard??`none`} x: [${e.minX}, ${e.maxX}] y: [${e.minY}, ${e.maxY}] (fetched for shard: ${e.shard??`none`})`)):(T?.clearBounds(),C(`worldBounds — none (shard: ${l.shard??`none`})`))}),t(()=>{let e=c();if(!e)return;let t=e.stores.user.subscribeMapVisual(l.shard),r=e.stores.user.on(`user:mapVisual`,({shard:e,data:t})=>{e===l.shard&&(t?T?.setMapVisual(t):T?.clearMapVisual())});n(()=>{t.dispose(),r.dispose()})}),t(()=>{let e=c();if(!e)return;let t=e.stores.map.on(`room:map2update`,({room:e,shard:t,data:n,source:r})=>{t===l.shard&&T?.setRoomMap2(e,n,r)});n(()=>t.dispose())}),t(()=>{let e=c();if(!e)return;let t=p()?._id,r=new Set(E()),i=e.stores.mapStats.on(`mapStats:room`,({room:e,stat:n})=>{F.set(e,n);let i=o(e),s=i?a(i.x,i.y)||h(i.x,i.y):!1,c=n.status===`out of borders`,u=!!(n.own&&n.own.user===t),d=!!(n.own&&n.own.user!==t),f=u?`own`:s||c||d?`other`:`none`;I.set(e,f),r.has(e)&&(T?.setRoomOwned(e,f),T?.setRoomSafeMode(e,!!n.safeMode)),T?.setRoomMineral(e,n.mineral,n.density);let p=n.badge?JSON.stringify(n.badge):``;L.get(e)!==p&&(L.set(e,p),T?.setRoomBadge(e,n.badge,n.own?.level)),A()===e&&l.onSelectedRoomChanged?.(z(e))});n(()=>i.dispose())}),(()=>{var e=S(),t=e.firstChild;return i(e=>x=e,t),e})()}export{T as MapViewer};