@ray-js/robot-map-sdk 0.0.3-beta-22 → 0.0.3-beta-24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +11 -312
- package/dist/index.js +1 -1
- package/dist/index.rjs.js +1 -1
- package/dist/utils/index.js +1 -1
- package/dist-app/assets/{index-ClwjZGGG.js → index-t5n2mXwb.js} +1 -1
- package/dist-app/index.html +1 -1
- package/dist-docs/404.html +2 -2
- package/dist-docs/assets/{app.BicAfu20.js → app.DKtY-QgA.js} +1 -1
- package/dist-docs/assets/chunks/@localSearchIndexroot.Ck3G2TnR.js +1 -0
- package/dist-docs/assets/chunks/{VPLocalSearchBox.DZvQsvt0.js → VPLocalSearchBox.Is_bIGtF.js} +1 -1
- package/dist-docs/assets/chunks/{theme.CaW7AOG2.js → theme.CoICOtg5.js} +2 -2
- package/dist-docs/assets/{guide_advanced-usage.md.CUkMfTh6.js → guide_advanced-usage.md.BrZgx45A.js} +91 -3
- package/dist-docs/assets/{guide_advanced-usage.md.CUkMfTh6.lean.js → guide_advanced-usage.md.BrZgx45A.lean.js} +1 -1
- package/dist-docs/assets/{guide_getting-started.md.CbqDbiIS.js → guide_getting-started.md.Cip1vgx6.js} +1 -1
- package/dist-docs/assets/reference_config.md.CfEp0H9c.js +61 -0
- package/dist-docs/assets/reference_config.md.CfEp0H9c.lean.js +1 -0
- package/dist-docs/assets/{reference_types.md.BP8Uwg9a.js → reference_types.md.DkIhhJD0.js} +5 -1
- package/dist-docs/assets/{reference_types.md.BP8Uwg9a.lean.js → reference_types.md.DkIhhJD0.lean.js} +1 -1
- package/dist-docs/assets/{reference_utils.md.C5spobZN.js → reference_utils.md.CSshxnp0.js} +2 -2
- package/dist-docs/assets/{reference_utils.md.C5spobZN.lean.js → reference_utils.md.CSshxnp0.lean.js} +1 -1
- package/dist-docs/guide/advanced-usage.html +94 -6
- package/dist-docs/guide/concepts.html +3 -3
- package/dist-docs/guide/getting-started.html +5 -5
- package/dist-docs/hashmap.json +1 -1
- package/dist-docs/index.html +3 -3
- package/dist-docs/reference/callbacks.html +3 -3
- package/dist-docs/reference/config.html +25 -5
- package/dist-docs/reference/data.html +3 -3
- package/dist-docs/reference/methods.html +3 -3
- package/dist-docs/reference/runtime.html +3 -3
- package/dist-docs/reference/types.html +9 -5
- package/dist-docs/reference/utils.html +6 -6
- package/package.json +1 -1
- package/dist/application/AppContainer.js +0 -1
- package/dist/application/AppService.js +0 -1
- package/dist/application/Interaction.js +0 -1
- package/dist/application/MapApplication.js +0 -1
- package/dist/application/ViewportContainer.js +0 -1
- package/dist/assets/carpet.png.js +0 -1
- package/dist/assets/chargingStation.png.js +0 -1
- package/dist/assets/checkmark.png.js +0 -1
- package/dist/assets/cleanMode0.png.js +0 -1
- package/dist/assets/cleanMode1.png.js +0 -1
- package/dist/assets/cleanMode2.png.js +0 -1
- package/dist/assets/cleanMode3.png.js +0 -1
- package/dist/assets/cleanTimes1.png.js +0 -1
- package/dist/assets/cleanTimes2.png.js +0 -1
- package/dist/assets/controlDelete.png.js +0 -1
- package/dist/assets/controlMove.png.js +0 -1
- package/dist/assets/controlRotate.png.js +0 -1
- package/dist/assets/controlScale.png.js +0 -1
- package/dist/assets/fan0.png.js +0 -1
- package/dist/assets/fan1.png.js +0 -1
- package/dist/assets/fan2.png.js +0 -1
- package/dist/assets/fan3.png.js +0 -1
- package/dist/assets/fan4.png.js +0 -1
- package/dist/assets/floorType1.png.js +0 -1
- package/dist/assets/floorType2.png.js +0 -1
- package/dist/assets/floorType3.png.js +0 -1
- package/dist/assets/robot.png.js +0 -1
- package/dist/assets/sleep.json.js +0 -1
- package/dist/assets/spot.png.js +0 -1
- package/dist/assets/water0.png.js +0 -1
- package/dist/assets/water1.png.js +0 -1
- package/dist/assets/water2.png.js +0 -1
- package/dist/assets/water3.png.js +0 -1
- package/dist/components/Base/BaseControlButton.js +0 -1
- package/dist/components/Base/Border.js +0 -1
- package/dist/components/Base/ControlFill.js +0 -1
- package/dist/components/Base/DashLine.js +0 -1
- package/dist/components/Base/EndPoint.js +0 -1
- package/dist/components/Base/EnhancedAnimatedSprite.js +0 -1
- package/dist/components/Base/EnhancedGifSprite.js +0 -1
- package/dist/components/Base/EnhancedSprite.js +0 -1
- package/dist/components/Base/FixedSizeContainer.js +0 -1
- package/dist/components/Base/FixedSizeDOMContainer.js +0 -1
- package/dist/components/Base/FixedSizeText.js +0 -1
- package/dist/components/Base/MoveControlButton.js +0 -1
- package/dist/components/Base/RemoveControlButton.js +0 -1
- package/dist/components/Base/Ring.js +0 -1
- package/dist/components/Base/RotateControlButton.js +0 -1
- package/dist/components/Base/ScaleControlButton.js +0 -1
- package/dist/components/Base/Zone.js +0 -1
- package/dist/components/ChargingStation/ChargingStationIcon.js +0 -1
- package/dist/components/ChargingStation/index.js +0 -1
- package/dist/components/Controls/CleanZone.js +0 -1
- package/dist/components/Controls/Divider.js +0 -1
- package/dist/components/Controls/ForbiddenMopZone.js +0 -1
- package/dist/components/Controls/ForbiddenSweepZone.js +0 -1
- package/dist/components/Controls/Spot.js +0 -1
- package/dist/components/Controls/VirtualWall.js +0 -1
- package/dist/components/CustomElements/CustomGif.js +0 -1
- package/dist/components/CustomElements/CustomHTML.js +0 -1
- package/dist/components/CustomElements/CustomImage.js +0 -1
- package/dist/components/DetectedObject/index.js +0 -1
- package/dist/components/Heatmap/index.js +0 -1
- package/dist/components/Map/Carpet.js +0 -1
- package/dist/components/Map/Free.js +0 -1
- package/dist/components/Map/Obstacle.js +0 -1
- package/dist/components/Map/RoomFill.js +0 -1
- package/dist/components/Path/index.js +0 -1
- package/dist/components/Robot/RobotIcon.js +0 -1
- package/dist/components/Robot/SleepAnimation.js +0 -1
- package/dist/components/Robot/index.js +0 -1
- package/dist/components/RoomFloorType/index.js +0 -1
- package/dist/components/RoomInfo/RoomName.js +0 -1
- package/dist/components/RoomInfo/RoomProperty.js +0 -1
- package/dist/components/RoomInfo/RoomSelectionIndicator.js +0 -1
- package/dist/components/RoomInfo/index.js +0 -1
- package/dist/constant/config.js +0 -1
- package/dist/constant/index.js +0 -1
- package/dist/managers/ControlsManager.js +0 -1
- package/dist/managers/CustomElementsManager.js +0 -1
- package/dist/managers/DetectedObjectManager.js +0 -1
- package/dist/managers/HeatmapManager.js +0 -1
- package/dist/managers/MapManager.js +0 -1
- package/dist/managers/PathManager.js +0 -1
- package/dist/managers/RoomManager.js +0 -1
- package/dist/mixins/ClickHandler.js +0 -1
- package/dist/utils/algorithm.js +0 -1
- package/dist/utils/browser.js +0 -1
- package/dist/utils/logger.js +0 -1
- package/dist-docs/assets/chunks/@localSearchIndexroot.DWUbE27y.js +0 -1
- package/dist-docs/assets/reference_config.md.zb-n1yzx.js +0 -41
- package/dist-docs/assets/reference_config.md.zb-n1yzx.lean.js +0 -1
- /package/dist-docs/assets/{guide_getting-started.md.CbqDbiIS.lean.js → guide_getting-started.md.Cip1vgx6.lean.js} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{RoomName as o}from"./RoomName.js";import{RoomProperty as t}from"./RoomProperty.js";import{RoomSelectionIndicator as e}from"./RoomSelectionIndicator.js";import{ClickHandler as i}from"../../mixins/ClickHandler.js";import{FixedSizeContainer as r}from"../Base/FixedSizeContainer.js";import{useAppService as s}from"../../application/AppService.js";class n extends r{roomId;roomName;roomProperty=null;roomSelectionIndicator=null;clickHandler=null;constructor(t){super();const e=s();this.enableRenderGroup(),this.roomId=t.id,t.centerPoint&&this.position.set(t.centerPoint.x,t.centerPoint.y),this.roomName=new o(t),this.roomName.visible=e.runtimeSnapshot.showRoomName,this.createRoomProperty(t),this.createRoomSelectionIndicator(t),this.updateLayout(),this.clickHandler=new i(this,{onClick:()=>{e.events?.onClickRoomProperties?.(t)}})}shouldShowRoomProperty(){const o=s(),{showRoomOrder:t,showRoomProperty:e,selectRoomIds:i,enableRoomSelection:r,roomSelectionMode:n}=o.runtimeSnapshot,m=o.getRoomData(this.roomId);if(!m)return!1;if(r&&"checkmark"===n&&i.includes(this.roomId))return!1;const a=t&&(m.order||0)>0,c=e&&(m.suction&&o.roomConfig.property.displayOrders.includes("suction")||m.cistern&&o.roomConfig.property.displayOrders.includes("cistern")||m.cleanTimes>0&&o.roomConfig.property.displayOrders.includes("cleanTimes"));return a||c}shouldShowRoomSelectionIndicator(){const o=s(),{enableRoomSelection:t,roomSelectionMode:e}=o.runtimeSnapshot;return t&&"checkmark"===e}updateRoomPropertyVisibility(){const o=s();if(this.roomProperty){if(this.shouldShowRoomProperty()){this.roomProperty.visible=!0;const t=o.runtimeSnapshot.roomPropertyFoldIds.includes(this.roomId);this.roomProperty.setFolded(t);const e=o.getRoomData(this.roomId);e&&this.roomProperty.updateProperty(e)}else this.roomProperty.visible=!1;this.updateLayout()}}async updateRoomSelectionIndicatorVisibility(){const o=s();if(this.roomSelectionIndicator){if(this.shouldShowRoomSelectionIndicator()){const t=o.getRoomData(this.roomId);t&&await this.roomSelectionIndicator.updateIndicator(t)}else this.roomSelectionIndicator.visible=!1;this.updateLayout()}}async createRoomProperty(o){const e=s();this.roomProperty&&(this.removeChild(this.roomProperty),this.roomProperty.destroy()),this.roomProperty=new t(o),await this.roomProperty.updateProperty(o),this.addChild(this.roomProperty),this.addChild(this.roomName),this.roomName.visible=e.runtimeSnapshot.showRoomName,this.updateRoomPropertyVisibility()}async createRoomSelectionIndicator(o){this.roomSelectionIndicator&&(this.removeChild(this.roomSelectionIndicator),this.roomSelectionIndicator.destroy()),this.roomSelectionIndicator=new e(o),this.addChild(this.roomSelectionIndicator),await this.updateRoomSelectionIndicatorVisibility()}updateLayout(){const o=s(),{property:{offsetY:t,offsetX:e},selectionIndicator:{offsetY:i,offsetX:r}}=o.roomConfig,n=this.roomProperty?.visible||!1,m=this.roomName.visible,a=this.roomSelectionIndicator?.visible||!1;if(n&&this.roomProperty)if(this.roomProperty.isFoldedState())this.roomProperty.position.set(e,-t);else{const o=this.roomProperty.getTotalHeight(),i=this.roomProperty.getTotalWidth();m?(this.roomProperty.position.set(-i/2+e,-t-o),this.roomName.position.set(0,0)):this.roomProperty.position.set(-i/2+e,-o/2-t)}if(a&&this.roomSelectionIndicator){const o=this.roomSelectionIndicator.getTotalHeight(),t=this.roomSelectionIndicator.getTotalWidth();m?(this.roomSelectionIndicator.position.set(-t/2+r,-i-o),this.roomName.position.set(0,0)):this.roomSelectionIndicator.position.set(-t/2+r,-o/2-i)}!m||n||a||this.roomName.position.set(0,0)}updateName(o){this.roomName.updateName(o)}updateRoomNameVisibility(o){this.roomName.visible=o,this.updateLayout()}updatePosition(o){this.position.set(o.x,o.y)}async refreshColor(){this.roomName&&this.roomName.refreshColor(),this.roomProperty&&this.roomProperty.refreshColor(),this.roomSelectionIndicator&&await this.roomSelectionIndicator.refreshColor()}destroy(){this.clickHandler?.destroy(),this.clickHandler=null,this.roomProperty?.destroy(),this.roomProperty=null,this.roomSelectionIndicator?.destroy(),this.roomSelectionIndicator=null,this.roomName?.destroy(),super.destroy()}}export{n as RoomInfo};
|
package/dist/constant/config.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import o from"../assets/chargingStation.png.js";import e from"../assets/robot.png.js";import t from"../assets/fan0.png.js";import i from"../assets/fan1.png.js";import r from"../assets/fan2.png.js";import s from"../assets/fan3.png.js";import n from"../assets/fan4.png.js";import a from"../assets/water0.png.js";import f from"../assets/water1.png.js";import l from"../assets/water2.png.js";import d from"../assets/water3.png.js";import h from"../assets/cleanMode0.png.js";import c from"../assets/cleanMode1.png.js";import p from"../assets/cleanMode2.png.js";import m from"../assets/cleanMode3.png.js";import g from"../assets/cleanTimes1.png.js";import b from"../assets/cleanTimes2.png.js";import S from"../assets/controlScale.png.js";import u from"../assets/controlDelete.png.js";import C from"../assets/controlRotate.png.js";import W from"../assets/controlMove.png.js";import k from"../assets/checkmark.png.js";import y from"../assets/spot.png.js";import D from"../assets/floorType1.png.js";import j from"../assets/floorType2.png.js";import x from"../assets/floorType3.png.js";import F from"../assets/carpet.png.js";import w from"../assets/sleep.json.js";import{SPECIAL_ROOM_IDS as A}from"@ray-js/robot-protocol";const O="system-ui, -apple-system, sans-serif",R=["#2563b8","#26966b","#7c3fb8","#d97706"],P={global:{containerTop:"0px",containerLeft:"0px",containerWidth:"100%",containerHeight:"100%",backgroundColor:"#f6f6f6"},map:{autoPaddingPercent:.05,adjacencyThreshold:3,obstacleColor:"#999999",freeColor:"#ebebeb"},room:{colors:{active:["#a8c8f5","#9de5c7","#d4b9f7","#ffd399"],inactive:["#d6e7fc","#d1f4e5","#ece0fb","#fff0d9"],name:[...R],propertyTheme:[...R],selectionIndicatorBackground:[...R],selectionIndicatorIcon:["#ffffff","#ffffff","#ffffff","#ffffff"],[A.NO_ROOM_DATA]:"#ebebeb",[A.ROOM_GAP]:"#ebebeb",[A.OBSTACLE_ROOM]:"#ebebeb",[A.UNKNOWN_ROOM]:"#ebebeb"},nameLabel:{fontSize:10,fontFamily:O,fontWeight:"500"},property:{displayOrders:["cleanMode","suction","cistern","cleanTimes"],iconWidth:12,iconHeight:12,foldable:!0,offsetX:0,offsetY:4,iconGap:0,container:{backgroundColor:"#ffffff",paddingVertical:1.5,paddingHorizontal:1.5,borderRadius:16,tailHeight:2,tailWidth:10},suction:{assets:[t,i,r,s,n]},cistern:{assets:[a,f,l,d]},cleanMode:{assets:[h,c,p,m]},cleanTimes:{assets:[g,b]},cleanOrder:{color:"#ffffff",fontFamily:O,fontWeight:"400",fontSize:8,gapRight:2}},selectionIndicator:{iconSrc:k,iconWidth:12,iconHeight:12,containerWidth:16,containerHeight:16,strokeWidth:2,strokeColor:"#ffffff",borderRadius:16,offsetY:4,offsetX:0,tailHeight:2,tailWidth:6},floorType:{assets:["",D,j,x],opacity:.1,scale:.2}},path:{lineWidthFixed:!1,incrementalThreshold:5,commonPath:{visible:!0,color:"#ffffff",width:.5},transitionPath:{visible:!1,color:"#ffffff",width:.5},chargePath:{visible:!1,color:"#ffffff",width:.5}},carpet:{src:F,opacity:.5,scale:.2},robot:{icon:{sizeFixed:!1,width:8,height:8,src:e},speed:0,rotationCorrection:0,sleepAnimation:{jsonSrc:w,framePrefix:"sleep_",width:16,height:16,sizeFixed:!1,frameCount:96,offsetX:8,offsetY:-8},ringSize:1,ringColor:"rgba(255, 68, 68, 0.2)",ringStrokeWidth:1,ringStrokeColor:"#ffffff",ringStrokeDashed:!0,ringStrokeDashArray:[4,4]},chargingStation:{icon:{sizeFixed:!1,width:8,height:8,src:o},rotationCorrection:0,ringSize:1,ringColor:"rgba(255, 68, 68, 0.2)",ringStrokeWidth:1,ringStrokeColor:"#ffffff",ringStrokeDashed:!0,ringStrokeDashArray:[4,4]},interaction:{zoomRange:{min:.5,max:8},fitMinScale:1,fitMaxScale:4,enableDoubleTapZoom:!0},controls:{iconWrapperWidth:24,iconWrapperHeight:24,iconWrapperBorderRadius:16,iconWidth:12,iconHeight:12,deleteIconSrc:u,rotateIconSrc:C,scaleIconSrc:S,moveIconSrc:W,moveButtonOffset:30,textFontSize:12,textFontFamily:O,textFontWeight:"400",unitLabel:"m",forbiddenSweepZone:{minSize:1,iconWrapperFillColor:"#ff4444",strokeColor:"#ff4444",strokeWidth:2,fillColor:"rgba(255, 68, 68, 0.1)",outlineOffset:16,outlineStrokeColor:"#ff4444",outlineStrokeWidth:2,outlineDashed:!0,outlineDashArray:[4,3],outlineFillColor:"rgba(255, 68, 68, 0.05)",showRotateButton:!0,textColor:"#ff4444",textPosition:"bottom",textOffset:8,editing:{isDashed:!1,dashArray:[0,0]},normal:{isDashed:!1,dashArray:[0,0]}},forbiddenMopZone:{minSize:1,iconWrapperFillColor:"#fe8a07",strokeColor:"#fe8a07",strokeWidth:2,fillColor:"rgba(254, 138, 7, 0.1)",outlineOffset:16,outlineStrokeColor:"#fe8a07",outlineStrokeWidth:2,outlineDashed:!0,outlineDashArray:[4,3],outlineFillColor:"rgba(254, 138, 7, 0.05)",showRotateButton:!0,textColor:"#fe8a07",textPosition:"bottom",textOffset:8,editing:{isDashed:!1,dashArray:[0,0]},normal:{isDashed:!1,dashArray:[0,0]}},cleanZone:{minSize:1,iconWrapperFillColor:"#5d68fe",strokeColor:"#5d68fe",strokeWidth:2,fillColor:"rgba(93, 104, 254, 0.1)",outlineOffset:16,outlineStrokeColor:"#5d68fe",outlineStrokeWidth:2,outlineDashed:!0,outlineDashArray:[4,3],outlineFillColor:"rgba(93, 104, 254, 0.05)",showRotateButton:!0,textColor:"#5d68fe",textPosition:"bottom",textOffset:8,editing:{isDashed:!1,dashArray:[0,0]},normal:{isDashed:!1,dashArray:[0,0]}},virtualWall:{iconWrapperFillColor:"#ff4444",lineWidth:2,lineColor:"#ff4444",hitAreaThickness:30,outlineOffset:16,outlineStrokeColor:"#ff4444",outlineStrokeWidth:2,outlineDashed:!0,outlineDashArray:[4,3],outlineFillColor:"rgba(255, 68, 68, 0.05)",minWidth:1,textColor:"#ff4444",textOffset:8,editing:{isDashed:!1,dashArray:[0,0]},normal:{isDashed:!1,dashArray:[0,0]}},spot:{iconSrc:y,iconSize:8,size:1,strokeColor:"#5d68fe",strokeWidth:2,fillColor:"rgba(93, 104, 254, 0.1)",textColor:"#5d68fe",textPosition:"bottom",textOffset:8,editing:{isDashed:!1,dashArray:[0,0]},normal:{isDashed:!1,dashArray:[0,0]}}},divider:{lineColor:"#ff4444",dashLineWidth:2,dashLineDashArray:[4,3],solidLineWidth:2,endPointSize:12,endPointColor:"#ff4444",endPointStrokeColor:"#ffffff",endPointStrokeWidth:2,hitAreaThickness:30,resetDividerWhenOutOfRoom:!1,defaultExtension:20,defaultDirection:"horizontal"},detectedObject:{height:43,width:38,interactive:!1},heatmap:{cellSize:2,maxDistance:14,smoothIterations:10,heatmapAlpha:.8,colorGradients:["#FF3B30","#FF7A00","#FFA100","#FFD700","#99DD70","#2EC070","#40E0D0","#88D0E9"]},snapshot:{format:"png",quality:1,antialias:!0,resolution:window?.devicePixelRatio||1}},z={dividingRoomId:null,enableRoomSelection:!1,editingForbiddenSweepZoneIds:[],editingForbiddenMopZoneIds:[],editingCleanZoneIds:[],editingVirtualWallIds:[],editingSpotIds:[],roomPropertyFoldIds:[],roomSelectionMode:"checkmark",selectRoomIds:[],showRoomProperty:!1,showRoomOrder:!0,showRoomName:!0,showPath:!0,showChargingStation:!0,showRoomFloorType:!0,showCarpet:!0,showChargingStationRing:!1,showRobotRing:!1,showRobotSleepAnimation:!1};export{P as DEFAULT_CONFIG,z as DEFAULT_RUNTIME_CONFIG,O as TEXT_FONT_FAMILY};
|
package/dist/constant/index.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
const e="MAIN",o=5e3;export{e as MAIN_INSTANCE_KEY,o as RASTER_CHUNK_SIZE};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{LAYER_CONTROLS as e}from"../application/AppContainer.js";import{subscribeKey as t}from"valtio/vanilla/utils";import{ForbiddenSweepZone as o}from"../components/Controls/ForbiddenSweepZone.js";import{ForbiddenMopZone as i}from"../components/Controls/ForbiddenMopZone.js";import{CleanZone as a}from"../components/Controls/CleanZone.js";import{VirtualWall as n}from"../components/Controls/VirtualWall.js";import{Spot as r}from"../components/Controls/Spot.js";import{Divider as s}from"../components/Controls/Divider.js";import{Logger as l}from"../utils/logger.js";import{useAppService as d}from"../application/AppService.js";class p{forbiddenSweepZoneMap=new Map;forbiddenMopZoneMap=new Map;cleanZoneMap=new Map;virtualWallMap=new Map;spotMap=new Map;divider=null;unsubscribeFns=[];constructor(){const e=d(),o=t(e.runtime,"editingForbiddenSweepZoneIds",e=>{l.log(`[runtime] editingForbiddenSweepZoneIds: ${e}`),this.updateZonesEditState(this.forbiddenSweepZoneMap)}),i=t(e.runtime,"editingForbiddenMopZoneIds",e=>{l.log(`[runtime] editingForbiddenMopZoneIds: ${e}`),this.updateZonesEditState(this.forbiddenMopZoneMap)}),a=t(e.runtime,"editingCleanZoneIds",e=>{l.log(`[runtime] editingCleanZoneIds: ${e}`),this.updateZonesEditState(this.cleanZoneMap)}),n=t(e.runtime,"editingVirtualWallIds",e=>{l.log(`[runtime] editingVirtualWallIds: ${e}`),this.updateVirtualWallsEditState(this.virtualWallMap)}),r=t(e.runtime,"editingSpotIds",e=>{l.log(`[runtime] editingSpotIds: ${e}`),this.updateSpotsEditState(this.spotMap)}),s=t(e.runtime,"dividingRoomId",e=>{l.log(`[runtime] dividingRoomId: ${e}`),this.handleDividingRoomIdChange(e)});this.unsubscribeFns.push(o,i,a,n,r,s)}updatePositionByOrigin(t,o){const i=d().appContainer.getLayer(e);i&&i.position.set(t,o)}drawForbiddenSweepZones(e){this.drawZones(e,this.forbiddenSweepZoneMap,e=>o.create(e))}getForbiddenSweepZones(){return this.getZonesData(this.forbiddenSweepZoneMap)}clearAllForbiddenSweepZones(){this.clearAllZones(this.forbiddenSweepZoneMap)}drawForbiddenMopZones(e){this.drawZones(e,this.forbiddenMopZoneMap,e=>i.create(e))}getForbiddenMopZones(){return this.getZonesData(this.forbiddenMopZoneMap)}clearAllForbiddenMopZones(){this.clearAllZones(this.forbiddenMopZoneMap)}drawCleanZones(e){this.drawZones(e,this.cleanZoneMap,e=>a.create(e))}getCleanZones(){return this.getZonesData(this.cleanZoneMap)}clearAllCleanZones(){this.clearAllZones(this.cleanZoneMap)}drawVirtualWalls(t){const o=d(),i=this.virtualWallMap,a=new Set(t.map(e=>e.id));for(const[t,n]of i)a.has(t)||(o.appContainer.removeFromLayer(e,n),n.destroy(),i.delete(t));t.forEach(t=>{const a=i.get(t.id);if(a)this.isWallDataEqual(a.getWallData(),t)||a.updateWallData(t);else{const a=new n({wallData:t,events:{onRemove:e=>{o.events?.onRemoveVirtualWall?.(e)},onUpdate:e=>{o.events?.onUpdateVirtualWall?.(e)},onClick:e=>{o.events?.onClickVirtualWall?.(e)}}});i.set(t.id,a),o.appContainer.addToLayer(e,a)}})}getVirtualWalls(){return this.getWallsData(this.virtualWallMap)}clearAllVirtualWalls(){this.clearAllWalls(this.virtualWallMap)}drawSpots(e){const t=this.spotMap;if(!e||0===e.length)return void this.clearAllSpotsInternal(t);const o=new Set(t.keys()),i=new Set(e.map(e=>e.id));for(const e of o)i.has(e)||this.removeSpot(e,t);e.forEach(e=>{const o=t.get(e.id);o?this.isSpotDataEqual(o.getSpotData(),e)||o.updateSpotData(e):this.addNewSpot(e,t)})}getSpots(){return this.getSpotsData(this.spotMap)}clearAllSpots(){this.clearAllSpotsInternal(this.spotMap)}drawZones(e,t,o){if(!e||0===e.length)return void this.clearAllZones(t);const i=new Set(t.keys()),a=new Set(e.map(e=>e.id));for(const e of i)a.has(e)||this.removeZone(e,t);e.forEach(e=>{const i=t.get(e.id);i?this.isZoneDataEqual(i.getZoneData(),e)||i.updateZoneData(e):this.addNewZone(e,t,o)})}addNewZone(t,o,i){const a=d(),n=i(t);o.set(t.id,n),a.appContainer.addToLayer(e,n)}removeZone(t,o){const i=d(),a=o.get(t);a&&(i.appContainer.removeFromLayer(e,a),a.destroy(),o.delete(t))}getZonesData(e){const t=[];return e.forEach(e=>{t.push(e.getZoneData())}),t}clearAllZones(e){e.forEach((t,o)=>{const i=e.get(o);i&&(i.parent?.removeChild(i),i.destroy())}),e.clear()}updateZonesEditState(e){e.forEach(e=>{e.updateEditState()})}updateVirtualWallsEditState(e){e.forEach(e=>{e.updateEditingState()})}isZoneDataEqual(e,t){if(e.id!==t.id)return!1;if(e.points.length!==t.points.length)return!1;for(let o=0;o<e.points.length;o++){const i=e.points[o],a=t.points[o];if(Math.abs(i.x-a.x)>.1||Math.abs(i.y-a.y)>.1)return!1}return!0}getWallsData(e){return Array.from(e.values()).map(e=>e.getWallData())}clearAllWalls(e){for(const t of e.values())t.destroy();e.clear()}isWallDataEqual(e,t){if(e.id!==t.id)return!1;if(e.points.length!==t.points.length)return!1;for(let o=0;o<e.points.length;o++){const i=e.points[o],a=t.points[o];if(Math.abs(i.x-a.x)>.1||Math.abs(i.y-a.y)>.1)return!1}return!0}addNewSpot(t,o){const i=d(),a=r.create(t);o.set(t.id,a),i.appContainer.addToLayer(e,a)}removeSpot(t,o){const i=d(),a=o.get(t);a&&(i.appContainer.removeFromLayer(e,a),a.destroy(),o.delete(t))}getSpotsData(e){const t=[];return e.forEach(e=>{t.push(e.getSpotData())}),t}clearAllSpotsInternal(e){e.forEach((t,o)=>{const i=e.get(o);i&&(i.parent?.removeChild(i),i.destroy())}),e.clear()}updateSpotsEditState(e){e.forEach(e=>{e.updateEditState()})}isSpotDataEqual(e,t){if(e.id!==t.id)return!1;const o=e.point,i=t.point;return!(Math.abs(o.x-i.x)>.1||Math.abs(o.y-i.y)>.1)}handleDividingRoomIdChange(e){null!=e&&this.getRoomGeometry(e)?this.createDefaultDivider(e):this.clearDivider()}getRoomGeometry(e){return d().mapManager.getRoomById(e)}createDefaultDivider(t){const o=d();this.clearDivider(),this.divider=new s({roomId:t,events:{onUpdate:e=>{o.events?.onUpdateDivider?.(e)}}}),o.appContainer.addToLayer(e,this.divider)}clearDivider(){this.divider&&(d().appContainer.removeFromLayer(e,this.divider),this.divider.destroy(),this.divider=null)}getDividerEndPoints(){return this.divider?this.divider.getDividerEndPoints():null}getEffectiveDividerPoints(){return this.divider?this.divider.getEffectiveDividerPoints():null}destroy(){this.clearAllForbiddenSweepZones(),this.clearAllForbiddenMopZones(),this.clearAllCleanZones(),this.clearAllVirtualWalls(),this.clearAllSpots(),this.clearDivider(),this.unsubscribeFns.forEach(e=>e()),this.unsubscribeFns=[]}}export{p as ControlsManager};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Assets as e,Ticker as t}from"pixi.js";import{CustomGif as i}from"../components/CustomElements/CustomGif.js";import{CustomImage as s}from"../components/CustomElements/CustomImage.js";import{CustomHTML as a}from"../components/CustomElements/CustomHTML.js";import{LAYER_CUSTOM_ELEMENT as n,LAYER_CUSTOM_ELEMENT_GIF as r}from"../application/AppContainer.js";import{Logger as o}from"../utils/logger.js";import{useAppService as m}from"../application/AppService.js";class p{customElementsMap=new Map;gifTicker=null;gifElements=new Set;constructor(){}updatePositionByOrigin(e,t){const i=m(),s=i.appContainer.getLayer(n),a=i.appContainer.getLayer(r);s&&s.position.set(e,t),a&&a.position.set(e,t)}async drawCustomElements(e){if(!e||0===e.length)return void this.clearAllCustomElements();const t=new Set(e.map(e=>e.id)),i=Array.from(this.customElementsMap.keys());for(const e of i)t.has(e)||this.removeCustomElement(e);const s=e.map(async e=>{const t=this.customElementsMap.get(e.id);t?this.isSameData(t,e)||("gif"===e.type&&t.getElementData().src!==e.src?(this.removeCustomElement(e.id),await this.addNewCustomElement(e)):await this.updateElementData(t,e)):await this.addNewCustomElement(e)});await Promise.all(s),this.updateGifTicker()}clearAllCustomElements(){const e=m();this.customElementsMap.forEach(t=>{t instanceof i?e.appContainer.removeFromLayer(r,t):e.appContainer.removeFromLayer(n,t),t.destroy()}),this.customElementsMap.clear(),this.gifElements.clear(),this.stopGifTicker()}async addNewCustomElement(t){const o=m();let p;switch(t.type){case"image":p=new s(t);break;case"gif":{const s=await e.load(t.src);p=new i(s,t);break}case"html":p=new a(t);break;default:throw new Error(`Unsupported custom element type: ${t.type}`)}await p.initialize(),this.customElementsMap.set(t.id,p),p instanceof i?(o.appContainer.addToLayer(r,p),this.gifElements.add(p)):o.appContainer.addToLayer(n,p)}removeCustomElement(e){const t=m(),s=this.customElementsMap.get(e);s&&(s instanceof i?(this.gifElements.delete(s),t.appContainer.removeFromLayer(r,s)):t.appContainer.removeFromLayer(n,s),s.destroy(),this.customElementsMap.delete(e))}isSameData(e,t){return e.getElementData().type===t.type&&("image"===t.type&&e instanceof s||"gif"===t.type&&e instanceof i||"html"===t.type&&e instanceof a)&&e.isSameData(t)}async updateElementData(e,t){if("image"===t.type&&e instanceof s)await e.updateElementData(t);else if("gif"===t.type&&e instanceof i)await e.updateElementData(t);else{if(!("html"===t.type&&e instanceof a))throw new Error("Element type mismatch during update");await e.updateElementData(t)}}updateGifTicker(){this.gifElements.size>0?this.startGifTicker():this.stopGifTicker()}startGifTicker(){this.gifTicker?.started||(this.gifTicker?this.gifTicker.maxFPS=1:(this.gifTicker=new t,this.gifTicker.maxFPS=1,this.gifTicker.add(()=>{this.renderGifContainer()})),this.gifTicker.start())}stopGifTicker(){this.gifTicker?.started&&(o.log("⏸️ [GifTicker] 停止 GIF 专用渲染"),this.gifTicker.stop())}renderGifContainer(){const e=m();if(0===this.gifElements.size)return;const t=e.getApp();t.renderer.render(t.stage)}destroy(){this.stopGifTicker(),this.gifTicker&&(this.gifTicker.destroy(),this.gifTicker=null),this.clearAllCustomElements()}}export{p as CustomElementsManager};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{LAYER_DETECTED_OBJECT as e}from"../application/AppContainer.js";import{DetectedObject as t}from"../components/DetectedObject/index.js";import{useAppService as a}from"../application/AppService.js";class c{detectedObjectMap=new Map;updatePositionByOrigin(t,c){const i=a().appContainer.getLayer(e);i&&i.position.set(t,c)}async drawDetectedObjects(e){if(!e||0===e.length)return void this.clearAllDetectedObjects();const t=new Set(e.map(e=>e.id)),a=Array.from(this.detectedObjectMap.keys());for(const e of a)t.has(e)||this.removeDetectedObject(e);for(const t of e){const e=this.detectedObjectMap.get(t.id);e?e.isSameData(t)||await e.updateObjectData(t):await this.addNewDetectedObject(t)}}clearAllDetectedObjects(){const t=a();this.detectedObjectMap.forEach(a=>{t.appContainer.removeFromLayer(e,a),a.destroy()}),this.detectedObjectMap.clear()}async addNewDetectedObject(c){const i=a(),o=new t(c);await o.initializeSprite(),this.detectedObjectMap.set(c.id,o),i.appContainer.addToLayer(e,o)}removeDetectedObject(t){const c=a(),i=this.detectedObjectMap.get(t);i&&(c.appContainer.removeFromLayer(e,i),i.destroy(),this.detectedObjectMap.delete(t))}destroy(){this.clearAllDetectedObjects()}}export{c as DetectedObjectManager};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Heatmap as t}from"../components/Heatmap/index.js";import{useAppService as i}from"../application/AppService.js";class a{heatmap=new t;pointsTopLeftOrigin=[];signalGrid=[];cellSize=2;maxDistance=14;smoothIterations=10;heatmapAlpha=.8;constructor(){const t=i().heatMapConfig;this.cellSize=t.cellSize,this.maxDistance=t.maxDistance,this.smoothIterations=t.smoothIterations,this.heatmapAlpha=t.heatmapAlpha}draw({mapData:t,heatmapPoints:a,useGradient:e=!0}){const s=i(),l=t.origin[0],n=t.origin[1],{minX:o,minY:h}=s.mapManager.mapBounds,r=a.map(t=>({x:+(l+t.x-o).toFixed(0),y:+(n+t.y-h).toFixed(0),signal:t.signal}));this.signalGrid=this.calculateInterpolatedSignal(r),this.heatmap.draw(this.signalGrid,e,this.heatmapAlpha)}calculateInterpolatedSignal(t){const a=i(),{minX:e,minY:s,maxX:l,maxY:n}=a.mapManager.mapBounds,o=Math.ceil((n-s)/this.cellSize),h=Math.ceil((l-e)/this.cellSize),r=Array(o).fill(null).map(()=>Array(h).fill(null));for(let i=0;i<o;i++){const a=s+i*this.cellSize+this.cellSize/2,o=Math.min(this.cellSize,n-(a-this.cellSize/2));for(let s=0;s<h;s++){const n=e+s*this.cellSize+this.cellSize/2,h=Math.min(this.cellSize,l-(n-this.cellSize/2));let c=0,m=!1;for(let i=0;i<t.length;i++){const e=t[i];if(Math.abs(n-e.x)<=h/2&&Math.abs(a-e.y)<=o/2){const t=1-e.signal/7;c=Math.round(10*Math.max(c,t))/10,m=!0}}r[i][s]={x:n,y:a,signal:c,hasPoint:m}}}const c=(i,a)=>{if(0===t.length)return 0;let e=0,s=0;for(const l of t){const t=Math.sqrt((i-l.x)**2+(a-l.y)**2);if(t<=this.maxDistance){const i=1/(1+t);s+=i*(1-l.signal/7),e+=i}}return 0===e?0:Math.round(s/e*1e3)/1e3};for(let t=0;t<o;t++)for(let i=0;i<h;i++){const a=r[t][i];a.hasPoint||(a.signal=c(a.x,a.y))}return((t,i=1)=>{for(let a=0;a<i;a++){const i=t.map(t=>[...t]);for(let a=1;a<o-1;a++)for(let e=1;e<h-1;e++)if(!t[a][e].hasPoint){let s=0,l=0;const n=4;for(let i=-n;i<=n;i++)for(let r=-n;r<=n;r++){if(0===i&&0===r)continue;const n=a+i,c=e+r;if(n>=0&&n<o&&c>=0&&c<h){const a=1/(1+.3*Math.sqrt(i*i+r*r));s+=t[n][c].signal*a,l+=a}}if(l>0){const n=s/l,o=.6,h=.4;i[a][e].signal=t[a][e].signal*o+n*h,i[a][e].signal>.1&&(i[a][e].signal=Math.max(i[a][e].signal,.2))}}for(let a=0;a<o;a++)for(let e=0;e<h;e++)t[a][e].signal=i[a][e].signal}})(r,this.smoothIterations),r}}export{a as HeatmapManager};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{isEqual as o}from"lodash-es";import{Logger as t}from"../utils/logger.js";import{Rectangle as e}from"pixi.js";import{calculateRasterMapBounds as r,generateOutlineData as s,calculateRoomCenterPoint as a,mergeBounds as i,calculateRasterRoomCenter as n,fourColorGreedyAlgorithm as l,areStructuredRoomsAdjacent as c,areRasterRoomsAdjacent as h}from"../utils/algorithm.js";import{Obstacle as m}from"../components/Map/Obstacle.js";import{RoomFill as p}from"../components/Map/RoomFill.js";import{Carpet as u}from"../components/Map/Carpet.js";import{Free as d}from"../components/Map/Free.js";import{ChargingStation as g}from"../components/ChargingStation/index.js";import{subscribeKey as f}from"valtio/vanilla/utils";import{SPECIAL_ROOM_IDS as C}from"@ray-js/robot-protocol";import{useAppService as x}from"../application/AppService.js";class M{obstacle=new m;free=new d;roomFill=new p;carpet=new u;chargingStation=new g;mapBounds={minX:0,minY:0,maxX:0,maxY:0};lastMapId=null;roomGeometryMap=new Map;rasterRoomPixelsMap=new Map;fourColorCache=null;carpetData=null;unsubscribeFns=[];constructor(){const o=x();this.validateColorConfig();const e=f(o.runtime,"enableRoomSelection",e=>{if(t.log(`[runtime] enableRoomSelection: ${e}`),e){this.roomFill.setAllRoomsState(!1);const t=o.runtimeSnapshot.selectRoomIds;this.roomFill.setRoomStateBySelectIds(t)}else this.roomFill.setAllRoomsState(!0)}),r=f(o.runtime,"selectRoomIds",o=>{t.log(`[runtime] selectRoomIds: ${o}`),this.roomFill.setRoomStateBySelectIds(o)}),s=f(o.runtime,"showChargingStation",o=>{t.log(`[runtime] showChargingStation: ${o}`),this.chargingStation.visible=o}),a=f(o.runtime,"showCarpet",o=>{t.log(`[runtime] showCarpet: ${o}`),o?this.createCarpet():this.carpet.clearCarpet()});this.unsubscribeFns.push(e,r,s,a)}async drawMap(e){const r=x(),{id:s,obstacles:a,free:i,rooms:n,charger:l,carpet:c}=e;this.clearComponents(),this.resetGeometryData();const h=this.processRoomsGeometry(n);this.roomFill.draw(h),this.free.draw(i),this.obstacle.draw(a),this.carpetData={type:"structured",carpetData:c},this.createCarpet();const m=this.mergeLayerBounds();o(m,this.mapBounds)||(t.debug("[Map] Map bounds updated:",m),this.mapBounds=m,this.lastMapId!==s&&(r.getApp().fitMapToView(this.mapBounds),this.lastMapId=s));const p=((e.charger.angle??0)+r.chargingStationConfig.rotationCorrection)*Math.PI/180;return await this.chargingStation.draw({x:l.coordinate[0],y:l.coordinate[1],rotation:p}),r.roomsManager.refresh(),!0}async drawRasterMap(e,s){const a=x();this.clearComponents();const{id:i,width:n,height:l,charger:c,chargerDirection:h}=s;t.debug("[Map] Parsed Raster Map Data",e),this.obstacle.drawRaster(e.obstacles,n),this.carpetData={type:"raster",carpetPixels:e.carpet,mapWidth:n},this.createCarpet();const m=this.processRasterData(e);this.roomFill.drawRaster(m);const p=r(e,n,l);o(p,this.mapBounds)||(t.debug("[Map] Raster map bounds updated:",p),this.mapBounds=p,this.lastMapId!==i&&(a.getApp().fitMapToView(this.mapBounds),this.lastMapId=i));const u=(h+a.chargingStationConfig.rotationCorrection)*Math.PI/180;return await this.chargingStation.draw({x:c.x,y:c.y,rotation:u}),this.generateRoomGeometryFromRaster(e),a.roomsManager.refresh(),!0}resetGeometryData(){this.roomGeometryMap.clear(),this.rasterRoomPixelsMap.clear(),this.fourColorCache=null,this.mapBounds={minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}async createCarpet(){if(x().runtimeSnapshot.showCarpet&&this.carpetData)if("raster"===this.carpetData.type){const{carpetPixels:o,mapWidth:t}=this.carpetData;await this.carpet.createCarpetFromRasterData(o,t)}else if("structured"===this.carpetData.type){const{carpetData:o}=this.carpetData;await this.carpet.createCarpetFromStructuredData(o)}}processRoomsGeometry(o){if(!o)return[];const t=x(),{active:r}=t.roomConfig.colors,i=t.roomConfig.colors[C.UNKNOWN_ROOM];if(0===Object.keys(o).length)return this.mapBounds={minX:0,minY:0,maxX:0,maxY:0},[];const n=Object.keys(o).sort((o,t)=>Number(o)-Number(t)),l=n.filter(o=>Number(o)<255),c=n.filter(o=>Number(o)>=255),h=[],m=[];l.forEach(t=>{const{coordinates:r}=o[t];if(r.length<4)return;const i=Number(t);let n=1/0,l=1/0,c=-1/0,h=-1/0;const p=[];for(let o=0;o<r.length;o+=2){const t=r[o],e=r[o+1];n=Math.min(n,t),l=Math.min(l,e),c=Math.max(c,t),h=Math.max(h,e),p.push({x:t,y:e})}const u=new e(n,l,c-n+1,h-l+1),d=s(p),g=d.flatMap(o=>[o.x+.5,o.y+.5]),f=a(d,n,l,c,h);m.push({id:i,points:p,outlinePoints:d,polyPoints:g,centerPoint:f,boundingBox:u}),this.mapBounds.minX=Math.min(this.mapBounds.minX,n),this.mapBounds.minY=Math.min(this.mapBounds.minY,l),this.mapBounds.maxX=Math.max(this.mapBounds.maxX,c),this.mapBounds.maxY=Math.max(this.mapBounds.maxY,h)});const p=[...m].sort((o,t)=>{const e=o.outlinePoints.length;return t.outlinePoints.length-e}),u=this.assignColorsUsingFourColorAlgorithm(p,r.length,"structured");return m.forEach(o=>{const t=u.get(o.id)||0,e=r[t],s={id:o.id,color:e,colorIndex:t,boundingBox:o.boundingBox,points:o.points,outlinePoints:o.outlinePoints,polyPoints:o.polyPoints,centerPoint:o.centerPoint};this.roomGeometryMap.set(o.id,s),h.push(s)}),c.forEach(t=>{const{coordinates:r}=o[t];if(r.length<4)return;const n=Number(t);let l=1/0,c=1/0,m=-1/0,p=-1/0;const u=[];for(let o=0;o<r.length;o+=2){const t=r[o],e=r[o+1];l=Math.min(l,t),c=Math.min(c,e),m=Math.max(m,t),p=Math.max(p,e),u.push({x:t,y:e})}const d=new e(l,c,m-l+1,p-c+1),g=s(u),f=g.flatMap(o=>[o.x+.5,o.y+.5]),C=a(g,l,c,m,p),x={id:n,color:i,boundingBox:d,points:u,outlinePoints:g,polyPoints:f,centerPoint:C};h.push(x),this.mapBounds.minX=Math.min(this.mapBounds.minX,l),this.mapBounds.minY=Math.min(this.mapBounds.minY,c),this.mapBounds.maxX=Math.max(this.mapBounds.maxX,m),this.mapBounds.maxY=Math.max(this.mapBounds.maxY,p)}),h}mergeLayerBounds(){let o={...this.mapBounds};if(this.obstacle.bounds&&(o=i(o,this.obstacle.bounds)),this.roomFill.children.length>0){const t=this.roomFill.getLocalBounds();t.width>0&&t.height>0&&(o=i(o,{minX:t.x,minY:t.y,maxX:t.x+t.width,maxY:t.y+t.height}))}return o}getRoomById(o){return this.roomGeometryMap.get(o)}getAllRooms(){return Array.from(this.roomGeometryMap.values())}clearComponents(){this.obstacle.clear(),this.obstacle.destroy(),this.obstacle=new m,this.free.clear(),this.free.destroy(),this.free=new d,this.carpet.clearCarpet(),this.carpetData=null,this.roomFill.removeChildren(),this.roomFill.destroy(),this.roomFill=new p}processRasterData(o){const t=x().roomConfig,e=[],r=[];o.rooms.forEach((o,t)=>{"number"==typeof t?e.push([t,o]):r.push([t,o])}),e.sort(([o],[t])=>o-t);const s=e.map(([o,t])=>({id:o,pixels:t})).sort((o,t)=>t.pixels.length-o.pixels.length),a=this.assignColorsUsingFourColorAlgorithm(s,t.colors.active.length,"raster"),i=[...e.map(([o,e])=>{const r=a.get(o)||0;return{roomId:o,pixelIndices:e,activeColor:t.colors.active[r],inactiveColor:t.colors.inactive[r%t.colors.inactive.length],colorIndex:r}}),...r.map(([o,e])=>{const r=t.colors[o]||"#ebebeb";return{roomId:o,pixelIndices:e,activeColor:r,inactiveColor:r}})];return{obstacles:o.obstacles,carpet:o.carpet,sortedRooms:i,width:o.width,height:o.height,totalPixels:o.totalPixels}}generateRoomGeometryFromRaster(o){const t=x();this.roomGeometryMap.clear(),this.rasterRoomPixelsMap.clear();const{active:r}=t.roomConfig.colors,s=[];o.rooms.forEach((o,t)=>{"number"==typeof t&&s.push(t)}),s.sort((o,t)=>o-t);const a=[];s.forEach(t=>{const r=o.rooms.get(t);this.rasterRoomPixelsMap.set(t,r);let s=1/0,i=1/0,l=-1/0,c=-1/0;for(let t=0;t<r.length;t++){const e=r[t],a=e%o.width,n=Math.floor(e/o.width);s=Math.min(s,a),i=Math.min(i,n),l=Math.max(l,a),c=Math.max(c,n)}const h=n(r,o.width,s,i,l,c),m=new e(s,i,l-s+1,c-i+1);a.push({id:t,pixelIndices:r,boundingBox:m,centerPoint:h})});const i=[...a].sort((o,t)=>t.pixelIndices.length-o.pixelIndices.length),l=this.assignColorsUsingFourColorAlgorithm(i,r.length,"raster");a.forEach(o=>{const t=l.get(o.id)||0,e=r[t],s={id:o.id,color:e,colorIndex:t,boundingBox:o.boundingBox,points:[],outlinePoints:[],polyPoints:[],centerPoint:o.centerPoint};this.roomGeometryMap.set(o.id,s)})}getRasterRoomPixels(o){return this.rasterRoomPixelsMap.get(o)}validateColorConfig(){const o=x().roomConfig.colors,e=o.active.length,r=o.inactive.length,s=o.name.length,a=o.propertyTheme.length,i=o.selectionIndicatorBackground.length,n=o.selectionIndicatorIcon.length;e<4&&t.warn(`[FourColor] room.colors.active requires at least 4 colors for the four-color theorem, but got ${e}. Adjacent rooms may have the same color.`),r!==e&&t.warn(`[FourColor] room.colors.inactive length (${r}) does not match room.colors.active length (${e}). Using modulo for color assignment.`),s!==e&&t.warn(`[FourColor] room.colors.name length (${s}) does not match room.colors.active length (${e}). Using modulo for color assignment.`),a!==e&&t.warn(`[FourColor] room.colors.propertyTheme length (${a}) does not match room.colors.active length (${e}). Using modulo for color assignment.`),i!==e&&t.warn(`[FourColor] room.colors.selectionIndicatorBackground length (${i}) does not match room.colors.active length (${e}). Using modulo for color assignment.`),n!==e&&t.warn(`[FourColor] room.colors.selectionIndicatorIcon length (${n}) does not match room.colors.active length (${e}). Using modulo for color assignment.`)}assignColorsUsingFourColorAlgorithm(o,e,r){const s=x(),a=s.mapState?.id??null;if(this.fourColorCache&&this.fourColorCache.mapId===a&&this.fourColorCache.colorMap.size===o.length)return t.debug("[FourColor] Using cached color map"),this.fourColorCache.colorMap;const i=s.getApp().config.map.adjacencyThreshold||3;t.debug(`[FourColor] Starting algorithm for ${o.length} rooms with ${e} colors`);const n=l(o,(o,t)=>{if("structured"===r){const e=o.outlinePoints,r=t.outlinePoints;return!(!e||!r)&&c(e,r,i)}{const e=o.pixels,r=t.pixels;if(!e||!r)return!1;const a=s.mapState?.width||0;return h(e,r,a,i)}},e);this.fourColorCache={mapId:a,colorMap:n};const m=new Array(e).fill(0);return n.forEach(o=>{m[o]++}),t.debug("[FourColor] Color distribution:",m),n}destroy(){this.obstacle.destroy(),this.free.destroy(),this.roomFill.destroy(),this.carpet.destroy(),this.chargingStation.destroy(),this.unsubscribeFns.forEach(o=>o()),this.unsubscribeFns=[],this.fourColorCache=null}}export{M as MapManager};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{subscribeKey as t}from"valtio/vanilla/utils";import{Path as o}from"../components/Path/index.js";import{Robot as i}from"../components/Robot/index.js";import{Logger as s}from"../utils/logger.js";import{useAppService as a}from"../application/AppService.js";class n{path;robot;unsubscribeFns=[];lastDrawnPathData=null;constructor(){const n=a();this.path=new o,this.robot=new i;const r=t(n.runtime,"showPath",t=>{s.log(`[runtime] showPath: ${t}`),this.path.visible=t,this.robot.visible=t});this.unsubscribeFns.push(r)}draw(t){this.shouldUseIncrementalDraw(t)?this.incrementalDraw(t):this.fullDraw(t),this.lastDrawnPathData=t}shouldUseIncrementalDraw(t){const o=a();if(!this.lastDrawnPathData)return!1;const i=t.pathHeader?.pathId,s=this.lastDrawnPathData.pathHeader?.pathId;if(i!==s)return!1;const n=(t.pathPoints?.length||0)-(this.lastDrawnPathData.pathPoints?.length||0),r=o.pathConfig.incrementalThreshold;return!(n<=0||n>r)}fullDraw(t){if(this.path.stopRealTimeDrawing(),this.path.drawFull(t),t.pathPoints&&t.pathPoints.length>0){const o=t.pathPoints[t.pathPoints.length-1];this.moveRobotToPoint(o,t.pathHeader.direction,!1)}}convertToRobotPoint(t,o){const i=o+a().robotConfig.rotationCorrection;return{x:t.x,y:t.y,rotation:i*Math.PI/180,type:t.type}}moveRobotToPoint(t,o,i=!0){const s=this.convertToRobotPoint(t,o);i?this.robot.moveTo(s):(this.robot.remove(),this.robot.draw(s))}incrementalDraw(t){const o=a();if(!this.lastDrawnPathData||!t.pathPoints)return;this.path.drawIncremental(t);const i=this.lastDrawnPathData.pathPoints?.length||0,s=t.pathPoints.slice(i);if(0!==s.length)if(o.robotConfig.speed>0)s.forEach(o=>{this.moveRobotToPoint(o,t.pathHeader.direction,!0)});else{const o=s[s.length-1];this.moveRobotToPoint(o,t.pathHeader.direction,!1)}}batchProcessRobotQueue(t=!1){this.robot.batchProcessQueue(t)}updatePositionByOrigin(t,o){this.path.updatePositionByOrigin(t,o),this.robot.updatePositionByOrigin(t,o)}destroy(){this.unsubscribeFns.forEach(t=>t()),this.unsubscribeFns=[],this.path.destroy(),this.robot.destroy()}}export{n as PathManager};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Container as o}from"pixi.js";import{LAYER_ROOM_INFO as t}from"../application/AppContainer.js";import{RoomInfo as i}from"../components/RoomInfo/index.js";import{RoomFloorType as e}from"../components/RoomFloorType/index.js";import{subscribeKey as r}from"valtio/vanilla/utils";import{Logger as s}from"../utils/logger.js";import{useAppService as n}from"../application/AppService.js";class a{unsubscribeFns=[];roomInfoContainer=new o;roomInfoMap=new Map;roomDisplayMap=new Map;roomFloorType=new e;constructor(){const o=n();o.appContainer.addToLayer(t,this.roomInfoContainer);const i=r(o.runtime,"showRoomFloorType",o=>{s.log(`[runtime] showRoomFloorType: ${o}`),o?this.updateFloorTypes():this.roomFloorType.clearFloorTypes()}),e=r(o.runtime,"showRoomProperty",o=>{s.log(`[runtime] showRoomProperty: ${o}`),this.updateAllRoomPropertyVisibility()}),a=r(o.runtime,"showRoomOrder",o=>{s.log(`[runtime] showRoomOrder: ${o}`),this.updateAllRoomPropertyVisibility()}),l=r(o.runtime,"roomPropertyFoldIds",o=>{s.log(`[runtime] roomPropertyFoldIds: ${o}`),this.updateAllRoomPropertyVisibility()}),m=r(o.runtime,"showRoomName",o=>{s.log(`[runtime] showRoomName: ${o}`),this.updateAllRoomNameVisibility(o)}),p=r(o.runtime,"enableRoomSelection",o=>{s.log(`[runtime] enableRoomSelection: ${o}`),this.updateAllRoomPropertyVisibility(),this.updateAllRoomSelectionIndicatorVisibility()}),c=r(o.runtime,"selectRoomIds",o=>{s.log(`[runtime] selectRoomIds: ${o}`),this.updateAllRoomPropertyVisibility(),this.updateAllRoomSelectionIndicatorVisibility()}),d=r(o.runtime,"roomSelectionMode",o=>{s.log(`[runtime] roomSelectionMode: ${o}`),this.updateAllRoomPropertyVisibility(),this.updateAllRoomSelectionIndicatorVisibility()});this.unsubscribeFns.push(i,e,a,l,m,p,c,d)}drawRoomProperty(o){const t=n();return this.roomDisplayMap.clear(),o.forEach((o,i)=>{const e=t.mapManager.getRoomById(o.id),r={...o,centerPoint:e?.centerPoint||null,index:i,colorIndex:e?.colorIndex};this.roomDisplayMap.set(o.id,r)}),this.updateRoomInfoDisplay(),this.updateFloorTypes(),!0}updateRoomInfoDisplay(){if(0===this.roomDisplayMap.size)return;const o=Array.from(this.roomDisplayMap.values()).filter(o=>null!==o.centerPoint);this.clearRoomInfos(),o.forEach(o=>{this.createRoomInfo(o)})}createRoomInfo(o){const t=new i(o);this.roomInfoContainer.addChild(t),this.roomInfoMap.set(o.id,t)}updateRoomName(o,t){const i=this.roomInfoMap.get(o);i&&i.updateName(t)}updateRoomPosition(o,t){const i=this.roomDisplayMap.get(o);i&&(i.centerPoint=t);const e=this.roomInfoMap.get(o);e&&e.updatePosition(t)}clearRoomInfos(){this.roomInfoMap.forEach(o=>{o.destroy()}),this.roomInfoMap.clear(),this.roomInfoContainer.removeChildren()}getRoomPropertyById(o){return this.roomDisplayMap.get(o)}refresh(){const o=n();this.roomFloorType.clearFloorTypes(),this.roomDisplayMap.forEach((t,i)=>{const e=o.mapManager.getRoomById(i),r=e?.centerPoint||null;if(t.centerPoint!==r){t.centerPoint=r;const o=this.roomInfoMap.get(i);o&&r&&o.updatePosition(r)}const s=e?.colorIndex;if(t.colorIndex!==s&&void 0!==s){t.colorIndex=s;const o=this.roomInfoMap.get(i);o&&o.refreshColor()}}),this.updateRoomInfoDisplay(),this.updateFloorTypes()}updateAllRoomPropertyVisibility(){this.roomInfoMap.forEach(o=>{o.updateRoomPropertyVisibility()})}updateAllRoomNameVisibility(o){this.roomInfoMap.forEach(t=>{t.updateRoomNameVisibility(o)})}updateAllRoomSelectionIndicatorVisibility(){this.roomInfoMap.forEach(o=>{o.updateRoomSelectionIndicatorVisibility()})}async updateFloorTypes(){const o=n(),t=o.mapManager.roomFill.getRoomGraphicsMap();t.size>0&&(await this.roomFloorType.createFloorTypes(t),o.getApp().renderOnceNextFrame())}destroy(){this.clearRoomInfos(),this.roomInfoContainer.destroy(),this.roomFloorType.destroy(),this.unsubscribeFns.forEach(o=>o()),this.unsubscribeFns=[]}}export{a as RoomManager};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
class t{target;isPointerDown=!1;pointerDownPos=null;clickThreshold;stopPropagation;clickCallback=null;constructor(t,i={}){this.target=t,this.clickThreshold=i.clickThreshold??10,this.stopPropagation=i.stopPropagation??!1,this.clickCallback=i.onClick||null,this.setup()}setup(){this.target.interactive=!0,this.target.eventMode="static",this.target.on("pointerdown",this.handlePointerDown.bind(this)),this.target.on("pointermove",this.handlePointerMove.bind(this)),this.target.on("pointerup",this.handlePointerUp.bind(this)),this.target.on("pointerupoutside",this.handlePointerUpOutside.bind(this))}handlePointerDown(t){this.stopPropagation&&t.stopPropagation(),this.isPointerDown=!0,this.pointerDownPos={x:t.globalX,y:t.globalY}}handlePointerMove(t){if(this.stopPropagation&&t.stopPropagation(),this.isPointerDown&&this.pointerDownPos){const i=t.globalX-this.pointerDownPos.x,o=t.globalY-this.pointerDownPos.y;Math.sqrt(i*i+o*o)>this.clickThreshold&&(this.isPointerDown=!1,this.pointerDownPos=null)}}handlePointerUp(t){if(this.stopPropagation&&t.stopPropagation(),this.isPointerDown&&this.pointerDownPos){const i=t.globalX-this.pointerDownPos.x,o=t.globalY-this.pointerDownPos.y;Math.sqrt(i*i+o*o)<=this.clickThreshold&&this.clickCallback&&this.clickCallback(t,this.target)}this.isPointerDown=!1,this.pointerDownPos=null}handlePointerUpOutside(){this.isPointerDown=!1,this.pointerDownPos=null}setClickCallback(t){return this.clickCallback=t,this}setClickThreshold(t){return this.clickThreshold=t,this}getTarget(){return this.target}isInteracting(){return this.isPointerDown}destroy(){this.target.off("pointerdown",this.handlePointerDown),this.target.off("pointermove",this.handlePointerMove),this.target.off("pointerup",this.handlePointerUp),this.target.off("pointerupoutside",this.handlePointerUpOutside),this.clickCallback=null}}export{t as ClickHandler};
|
package/dist/utils/algorithm.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
const t=t=>{if(t.length<=1)return[...t];const r=n(t),x=r.slice(1).map((t,n)=>({prev:r[n],current:t})),o=new Map;return x.forEach(({prev:t,current:n})=>{e(t,n).forEach(t=>{const n=`${t.x},${t.y}`;o.has(n)||o.set(n,t)})}),Array.from(o.values())},n=t=>{if(t.length<=1)return[...t];const n=t[0],e=t[t.length-1];return n.x===e.x&&n.y===e.y?[...t]:[...t,n]},e=(t,n)=>{const e=[],r=Math.abs(n.x-t.x),x=Math.abs(n.y-t.y),o=t.x<n.x?1:-1,a=t.y<n.y?1:-1;let y=r-x,h=t.x,s=t.y;for(;e.push({x:h,y:s}),h!==n.x||s!==n.y;){const t=2*y;t>-x&&(y-=x,h+=o),t<r&&(y+=r,s+=a)}return e},r=(t,n)=>{let e=0,r=t.length-1;for(;e<=r;){const x=Math.floor((e+r)/2),o=t[x];if(o===n)return!0;o<n?e=x+1:r=x-1}return!1},x=(t,n,e=1,r=2e3)=>{const x=[],o=n.x-t.x,a=n.y-t.y,y=Math.sqrt(o*o+a*a);if(0===y)return[t];const h=Math.min(Math.max(Math.ceil(y/e),2),r);for(let n=0;n<=h;n++){const e=n/h,r={x:t.x+e*o,y:t.y+e*a};x.push(r)}return x},o=(t,n,e,r,x,o=8)=>{const h={x:(n+r)/2,y:(e+x)/2},i=r-n,c=x-e,l=Math.min(o,.2*Math.min(i,c));return s(h,t)&&y(h,t)>=l?h:a(t,h,l)},a=(t,n,e)=>{const{minX:r,minY:x,maxX:o,maxY:a}=l(t),h=o-r,i=a-x,c=n.x,f=n.y,m=Math.min(.5,.05*Math.min(h,i)),u=[];if(s({x:c,y:f},t)){const n=y({x:c,y:f},t);u.push({point:{x:c,y:f},distance:n,centerDistance:0})}const g=.6*Math.max(h,i),d=Math.PI/16;for(let n=m;n<=g;n+=m){const h=d*(1+n/g);for(let i=0;i<2*Math.PI;i+=h){const h=c+n*Math.cos(i),l=f+n*Math.sin(i);if(h>=r&&h<=o&&l>=x&&l<=a){const n={x:h,y:l};if(s(n,t)){const r=y(n,t),x=M({x:h,y:l},{x:c,y:f});r>=e&&u.push({point:n,distance:r,centerDistance:x})}}}if(u.length>=15)break}if(u.length>0){const t=u.map(t=>({...t,score:1.5*t.distance-.5*t.centerDistance}));return t.sort((t,n)=>n.score-t.score),t[0].point}if(0===u.length){let n={x:c,y:f},e=0;const h=2*m;for(let i=r;i<=o;i+=h)for(let r=x;r<=a;r+=h){const x={x:i,y:r};if(s(x,t)){const r=y(x,t);r>e&&(e=r,n=x)}}return n}return{x:c,y:f}},y=(t,n)=>{let e=1/0;for(let r=0,x=n.length-1;r<n.length;x=r++){const o=n[x],a=n[r],y=h(t,o,a);e=Math.min(e,y)}return e},h=(t,n,e)=>{const r=(n.x-e.x)**2+(n.y-e.y)**2;if(0===r)return M(t,n);const x=Math.max(0,Math.min(1,((t.x-n.x)*(e.x-n.x)+(t.y-n.y)*(e.y-n.y))/r)),o=n.x+x*(e.x-n.x),a=n.y+x*(e.y-n.y);return M(t,{x:o,y:a})},s=(t,n,e=!1)=>{if(n.length<3)return!1;if(e&&i(t,n))return!0;let r=!1;for(let e=0,x=n.length-1;e<n.length;x=e++){const o=n[e].x,a=n[e].y,y=n[x].x,h=n[x].y;a>t.y!=h>t.y&&t.x<(y-o)*(t.y-a)/(h-a)+o&&(r=!r)}return r},i=(t,n)=>{if(n.length<2)return!1;for(let e=0;e<n.length;e++){const r=(e+1)%n.length;if(c(t,n[e],n[r]))return!0}return!1},c=(t,n,e,r=.5)=>{if(h(t,n,e)>r)return!1;const x=Math.min(n.x,e.x)-r,o=Math.max(n.x,e.x)+r,a=Math.min(n.y,e.y)-r,y=Math.max(n.y,e.y)+r;return t.x>=x&&t.x<=o&&t.y>=a&&t.y<=y},l=t=>{if(0===t.length)return{minX:0,minY:0,maxX:0,maxY:0};let n=1/0,e=1/0,r=-1/0,x=-1/0;for(const o of t)n=Math.min(n,o.x),e=Math.min(e,o.y),r=Math.max(r,o.x),x=Math.max(x,o.y);return{minX:n,minY:e,maxX:r,maxY:x}},f=t=>{const n=t.reduce((t,n)=>({x:t.x+n.x,y:t.y+n.y}),{x:0,y:0});return{x:n.x/t.length,y:n.y/t.length}},m=t=>{if(4!==t.length)return t;const n=f(t),e=M(t[0],t[1]),r=M(t[1],t[2]),x=Math.atan2(t[1].y-t[0].y,t[1].x-t[0].x),o=[{x:-e/2,y:-r/2},{x:e/2,y:-r/2},{x:e/2,y:r/2},{x:-e/2,y:r/2}],a=Math.cos(x),y=Math.sin(x);return o.map(t=>({x:t.x*a-t.y*y+n.x,y:t.x*y+t.y*a+n.y}))},u=(t,n,e,r=10)=>{if(0===e)return 1;const x=(t.x*n.x+t.y*n.y)/e/e,o=r/e;return x<=0?o:Math.max(x,o)},M=(t,n)=>{const e=t.x-n.x,r=t.y-n.y;return Math.sqrt(e*e+r*r)},g=t=>Math.sqrt(t.x*t.x+t.y*t.y),d=(t,n)=>({x:n.x-t.x,y:n.y-t.y}),p=t=>{const n=g(t);return 0===n?{x:0,y:0}:{x:t.x/n,y:t.y/n}},X=(t,n)=>{const e=d(t,n);return p(e)},Y=t=>({x:-t.y,y:t.x}),w=(t,n)=>{const e=X(t,n);return Y(e)},S=(t,n)=>{const e=p(t),r=p(n),x={x:(e.x+r.x)/2,y:(e.y+r.y)/2};return p(x)},$=(t,n)=>{const e=d(t,n);let r=Math.atan2(e.y,e.x);return(r>Math.PI/2||r<-Math.PI/2)&&(r+=Math.PI),r},b=(t,n,e)=>{const r=f([t,n]),x=w(t,n);return{x:r.x+x.x*e,y:r.y+x.y*e}},q=(t,n,e)=>{const r=Math.cos(e),x=Math.sin(e),o=t.x-n.x,a=t.y-n.y;return{x:o*r-a*x+n.x,y:o*x+a*r+n.y}},v=(t,n,e)=>t.map(t=>q(t,n,e)),I=(t,n,e)=>{if(0===M(t,n))return[t,t,t,t];const r=X(t,n),x=Y(r),o=t.x-r.x*e,a=t.y-r.y*e,y=n.x+r.x*e,h=n.y+r.y*e;return[{x:o+x.x*e,y:a+x.y*e},{x:y+x.x*e,y:h+x.y*e},{x:y-x.x*e,y:h-x.y*e},{x:o-x.x*e,y:a-x.y*e}]},P=(t,n)=>{if(t.length<3)return t;const e=[];for(let r=0;r<t.length;r++){const x=t[r],o=t[(r+1)%t.length],a=t[(r-1+t.length)%t.length],y=d(x,o);if(0===g(y)){e.push(x);continue}const h=p(y),s={x:h.y,y:-h.x},i=d(a,x);let c={x:0,y:0};if(g(i)>0){const t=p(i);c={x:t.y,y:-t.x}}const l=S(c,s),f=c.x*s.x+c.y*s.y,m=1/Math.max(.1,Math.sqrt((1+f)/2)),u={x:x.x+l.x*n*m,y:x.y+l.y*n*m};e.push(u)}return e},A=(t,n,e)=>{if(0===M(t,n))return[];const r=w(t,n),x=e/2;return[t.x+r.x*x,t.y+r.y*x,n.x+r.x*x,n.y+r.y*x,n.x-r.x*x,n.y-r.y*x,t.x-r.x*x,t.y-r.y*x]},E=(t,n,e,r)=>{const x=d(t,n),o=d(t,e),a=S(x,o),y=-a.x,h=-a.y;return{x:t.x+y*r,y:t.y+h*r}},z=(t,n,e,r,x,o)=>{const a=new Set(t),y=D(t,n);return O(y,a,n,e,r,x,o)||y},D=(t,n)=>{let e=0,r=0;for(let x=0;x<t.length;x++){const o=t[x];e+=o%n,r+=Math.floor(o/n)}return{x:e/t.length,y:r/t.length}},O=(t,n,e,r,x,o,a)=>{const y={x:r-10,y:t.y},h={x:o+10,y:t.y},s={x:o,y:x},i={x:o,y:a},c=k(y,h,{x:r,y:x},{x:r,y:a}),l=k(y,h,s,i);if(!c||!l)return null;const f=[],m=Math.max(r,Math.min(c.x,l.x)),u=Math.min(o,Math.max(c.x,l.x)),M=Math.round(t.y);for(let t=Math.round(m);t<=Math.round(u);t++){const r=M*e+t;n.has(r)&&f.push({x:t,y:M})}if(f.length>=2){const t=j(f),r={x:(t.min.x+t.max.x)/2,y:(t.min.y+t.max.y)/2},x=Math.round(r.y)*e+Math.round(r.x);if(n.has(x))return r}return null},k=(t,n,e,r)=>{const x=(t.x-e.x)*(n.y-e.y)-(t.y-e.y)*(n.x-e.x),o=(t.x-r.x)*(n.y-r.y)-(t.y-r.y)*(n.x-r.x);if(x*o>=0)return null;const a=(e.x-t.x)*(r.y-t.y)-(e.y-t.y)*(r.x-t.x);if(a*(a+x-o)>=0)return null;const y=a/(o-x),h=y*(n.x-t.x),s=y*(n.y-t.y);return{x:t.x+h,y:t.y+s}},j=t=>{if(!t||0===t.length)return{min:{x:0,y:0},max:{x:0,y:0}};let n=t[0],e=t[0];const r=t=>t.x-t.y;for(let x=1;x<t.length;x++){const o=t[x];r(o)<r(n)&&(n=o),r(o)>r(e)&&(e=o)}return{min:n,max:e}},B=(t,n)=>({minX:Math.min(t.minX,n.minX),minY:Math.min(t.minY,n.minY),maxX:Math.max(t.maxX,n.maxX),maxY:Math.max(t.maxY,n.maxY)}),C=t=>{if(0===t.length)return{x:0,y:0,width:0,height:0};let n=t[0].x,e=t[0].y,r=t[0].x+t[0].width,x=t[0].y+t[0].height;return t.forEach(t=>{n=Math.min(n,t.x),e=Math.min(e,t.y),r=Math.max(r,t.x+t.width),x=Math.max(x,t.y+t.height)}),{x:n,y:e,width:r-n,height:x-e}},F=(t,n,e)=>{let r=1/0,x=1/0,o=-1/0,a=-1/0;for(let e=0;e<t.obstacles.length;e++){const y=t.obstacles[e],h=y%n,s=Math.floor(y/n);r=Math.min(r,h),x=Math.min(x,s),o=Math.max(o,h),a=Math.max(a,s)}return t.rooms.forEach(t=>{for(let e=0;e<t.length;e++){const y=t[e],h=y%n,s=Math.floor(y/n);r=Math.min(r,h),x=Math.min(x,s),o=Math.max(o,h),a=Math.max(a,s)}}),r===1/0?{minX:0,minY:0,maxX:n,maxY:e}:{minX:Math.max(0,r),minY:Math.max(0,x),maxX:Math.min(n,o),maxY:Math.min(e,a)}},G=(t,n,e,r,x,o)=>{const a=e+x,y=r+o,h=Math.min(t.x,n.x),s=Math.max(t.x,n.x),i=Math.min(t.y,n.y),c=Math.max(t.y,n.y);if(s<e||h>a||c<r||i>y)return!1;if(H(t,e,r,x,o)||H(n,e,r,x,o))return!0;const l=[{x:e,y:r},{x:a,y:r},{x:a,y:y},{x:e,y:y}];for(let e=0;e<4;e++)if(k(t,n,l[e],l[(e+1)%4]))return!0;return!1},H=(t,n,e,r,x)=>t.x>=n&&t.x<=n+r&&t.y>=e&&t.y<=e+x,J=(t,n,e,r)=>{const x=e/2;return"horizontal"===r?[{x:t-x,y:n},{x:t+x,y:n}]:[{x:t,y:n-x},{x:t,y:n+x}]},K=(t,n,e)=>{const r=n.x-t.x,x=n.y-t.y,o=Math.sqrt(r*r+x*x);if(0===o)return[t,n];const a=r/o,y=x/o;return[{x:t.x-a*e,y:t.y-y*e},{x:n.x+a*e,y:n.y+y*e}]},L=(t,n,e)=>{const r=l(t),x=l(n),o=Math.max(0,Math.max(r.minX,x.minX)-Math.min(r.maxX,x.maxX)),a=Math.max(0,Math.max(r.minY,x.minY)-Math.min(r.maxY,x.maxY));if(o>e||a>e)return!1;let[y,h]=[t,n];n.length>t.length&&([y,h]=[n,t]);const s=Math.max(1,Math.floor(e)),i=new Map;for(const t of y){const n=`${Math.floor(t.x/s)},${Math.floor(t.y/s)}`;i.has(n)||i.set(n,[]),i.get(n).push(t)}const c=e*e;for(const t of h){const n=Math.floor(t.x/s),e=Math.floor(t.y/s);for(let r=-1;r<=1;r++)for(let x=-1;x<=1;x++){const o=`${n+r},${e+x}`,a=i.get(o);if(a)for(const n of a){const e=t.x-n.x,r=t.y-n.y;if(e*e+r*r<=c)return!0}}}return!1},N=(t,n,e,r)=>{let[x,o]=[t,n];n.length>t.length&&([x,o]=[n,t]);const a=new Set(x),y=r*r;for(let t=0;t<o.length;t++){const n=o[t],x=n%e,h=Math.floor(n/e);for(let t=-r;t<=r;t++)for(let n=-r;n<=r;n++){const r=(h+n)*e+(x+t);if(a.has(r)&&t*t+n*n<=y)return!0}}return!1},Q=(t,n)=>{if(t<=1)return!0;if(0===n.length)return!1;const e=Array.from({length:t},(t,n)=>n),r=Array(t).fill(0),x=t=>(e[t]!==t&&(e[t]=x(e[t])),e[t]),o=(t,n)=>{const o=x(t),a=x(n);o!==a&&(r[o]<r[a]?e[o]=a:r[o]>r[a]?e[a]=o:(e[a]=o,r[o]++))};for(const[t,e]of n)o(t,e);const a=x(0);for(let n=1;n<t;n++)if(x(n)!==a)return!1;return!0},R=(t,n,e)=>{const r=new Map;if(0===t.length)return r;if(1===t.length)return r.set(t[0].id,0),r;const x=new Map;for(let e=0;e<t.length;e++){const r=t[e];x.has(r.id)||x.set(r.id,new Set);for(let o=e+1;o<t.length;o++){const e=t[o];n(r,e)&&(x.get(r.id).add(e.id),x.has(e.id)||x.set(e.id,new Set),x.get(e.id).add(r.id))}}const o=new Array(e).fill(0),a=[...t].sort((n,e)=>{const r=(x.get(n.id)||new Set).size,o=(x.get(e.id)||new Set).size,a=t.indexOf(n);return.7*-t.indexOf(e)+.3*o-(.7*-a+.3*r)});for(const t of a){const n=x.get(t.id)||new Set,a=new Set,y=new Set;for(const e of n){const o=r.get(e);if(void 0!==o){a.add(o);const h=x.get(e)||new Set;for(const e of h)if(e!==t.id&&!n.has(e)){const t=r.get(e);void 0!==t&&y.add(t)}}}const h=[];for(let t=0;t<e;t++)a.has(t)||h.push(t);if(0===h.length){let n=1/0,x=0;for(let t=0;t<e;t++)o[t]<n&&(n=o[t],x=t);r.set(t.id,x),o[x]++;continue}const s=h.filter(t=>!y.has(t)),i=s.length>0?s:h;let c=i[0],l=o[c];for(const t of i)(o[t]<l||o[t]===l&&t<c)&&(c=t,l=o[t]);r.set(t.id,c),o[c]++}return r};export{Q as areMultipleRoomsConnected,N as areRasterRoomsAdjacent,L as areStructuredRoomsAdjacent,r as binarySearch,l as calculateBoundingBox,f as calculateCenter,e as calculateCoordinatesBetweenPoints,E as calculateCornerExtension,J as calculateLineEndpoints,b as calculateLineMidpointOffset,A as calculateLineSegmentHitArea,I as calculateLineSegmentOutline,C as calculateMergedBounds,y as calculateMinDistanceToBoundary,D as calculatePixelWeightedCenter,P as calculatePolygonOutline,F as calculateRasterMapBounds,z as calculateRasterRoomCenter,o as calculateRoomCenterPoint,u as calculateScaleRatio,$ as calculateUprightLineAngle,d as createVector,n as ensureClosedPath,K as extendLineSegment,a as findBestInnerPoint,j as findExtremePoints,R as fourColorGreedyAlgorithm,t as generateOutlineData,S as getBisectorDirection,M as getDistance,w as getPerpendicularUnitVector,Y as getPerpendicularVector,X as getUnitVector,g as getVectorLength,H as isPointInBox,s as isPointInPolygon,c as isPointOnLineSegment,i as isPointOnPolygonBoundary,G as lineIntersectsBox,k as lineSegmentsIntersection,B as mergeBounds,m as normalizeToRectangle,p as normalizeVector,O as optimizeRasterCenterWithLineIntersection,h as pointToSegmentDistance,q as rotatePointAroundCenter,v as rotatePointsAroundCenter,x as sampleLinePoints};
|
package/dist/utils/browser.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{isMobile as t}from"pixi.js";navigator?.userAgent?.includes("tuya-ark-ide")||navigator?.userAgent?.includes("miniProgram");const e=()=>{if(!t.any)return!0;const e=navigator.userAgent.toLowerCase();let r=!1;if(/iphone|ipad|ipod/.test(e)){const t=e.match(/os (\d+)_/)?.[1];r=(t?parseInt(t):0)>=12}else if(/android/.test(e)){const t=e.match(/android (\d+)/)?.[1];r=(t?parseInt(t):0)>=10}return r&&(()=>{const t=navigator.deviceMemory;return!t||t>=4})()};export{e as getOptimalAntialiasingStrategy};
|
package/dist/utils/logger.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
const r={log(r,...e){},warn(r,...e){},error(r,...e){},debug(r,...e){},success(r,...e){}};export{r as Logger};
|