diff --git a/src/core/manager/EntityManager.ts b/src/core/manager/EntityManager.ts index 7fd4756..ba1e160 100644 --- a/src/core/manager/EntityManager.ts +++ b/src/core/manager/EntityManager.ts @@ -504,6 +504,21 @@ export default class EntityManager { return this.___entityMap.get(linkStartPointId) } + findItemByLogicXY(logicX: number, logicY: number): ItemJson | undefined { + if (logicX < 0 || logicY < 0) { + return + } + let item: ItemJson | undefined = undefined + this.___entityMap.forEach((value) => { + if (value.logicX === logicX && value.logicY === logicY) { + item = value + return + } + }) + return item + } + + getObjectByCanvasMouse(event: MouseEvent): Object3DLike[] { const _domElement = this.viewport.renderer.domElement const rect = _domElement.getBoundingClientRect() diff --git a/src/core/script/ModelManager.ts b/src/core/script/ModelManager.ts index 7581562..38662a6 100644 --- a/src/core/script/ModelManager.ts +++ b/src/core/script/ModelManager.ts @@ -81,6 +81,13 @@ export default class ModelManager implements IControls, Model { matrix.decompose(position, new THREE.Quaternion(), new THREE.Vector3()) return position } + getPositionByLogicXY(logicX: number, logicY: number): THREE.Vector3 { + const item = this.viewport.entityManager.findItemByLogicXY(logicX, logicY) + const matrix = getMatrixFromTf(item.tf) + const position = new THREE.Vector3() + matrix.decompose(position, new THREE.Quaternion(), new THREE.Vector3()) + return position + } dispose() { this.viewport = null as any diff --git a/src/modules/cl2/Cl23dObject.ts b/src/modules/cl2/Cl23dObject.ts index 983aafc..5ef104f 100644 --- a/src/modules/cl2/Cl23dObject.ts +++ b/src/modules/cl2/Cl23dObject.ts @@ -516,8 +516,12 @@ export default class Cl23dObject extends THREE.Object3D { if (data.id === 10010) { const cl2: Cl2Entity = Model.getCl2("10") as Cl2Entity cl2.addRobotTask(data) - cl2.taskStartRun() + this.fn(cl2) } } + fn = _.debounce((cl2: Cl2Entity) => { + cl2.taskStartRun() + }, 2000) + } diff --git a/src/modules/cl2/Cl2Entity.ts b/src/modules/cl2/Cl2Entity.ts index 591c8a5..280ffe0 100644 --- a/src/modules/cl2/Cl2Entity.ts +++ b/src/modules/cl2/Cl2Entity.ts @@ -47,7 +47,7 @@ export default class Cl2Entity extends BaseEntity { () => this.cl2Object.addRotation(moveDirection * Math.PI/2) )) this.taskQueue.add(this.createTask('TRAVEL', - () => this.cl2Object.addTravel(Model.getPositionByEntityId(link.id) ,Math.abs(link.Speed/1000)) + () => this.cl2Object.addTravel(Model.getPositionByLogicXY(link.X, link.Y) ,Math.abs(link.Speed/1000)) )) startX = link.X startY = link.Y diff --git a/src/types/ScriptSupport.d.ts b/src/types/ScriptSupport.d.ts index 1ef3628..e9639ab 100644 --- a/src/types/ScriptSupport.d.ts +++ b/src/types/ScriptSupport.d.ts @@ -1,3 +1,5 @@ +import * as THREE from "three"; + /** * 物流模型 API 接口 */ @@ -14,6 +16,11 @@ declare interface Model { getPositionByEntityId(entityId: string): Vector3IF /** + * 根据逻辑坐标获取位置 + */ + getPositionByLogicXY(logicX: number, logicY: number): THREE.Vector3 + + /** * 根据ID获取 CL2 叉车控制器 */ getCl2(id: string): Cl2If