/** * _ ___ Another * / |/ (_)______ __ _____ * / / / __(_- 0) { let hit = null for(let i=0; i item.atp_id==typeId) if(!agentSprite) { console.warn(`No sprite for type: ${typeId}`) return } const agentObj = this.agentFromJSON(aid, agentSprite.asp_3d) agentObj.position.set(values.position.x, values.position.z, values.position.y ) this.scene.add(agentObj) //Speed vector const objAboveHead = this.getObjectTopCenter(this.scene.getObjectByName(aid)) this.createArrow(objAboveHead, { x: values.speed.x, y: values.speed.z, z:values.speed.y }, { name: `_speed_${aid}`, color: 0xff0055, scale: 0.5, }) this.agents[aid] = { type: typeId, props: properties, values: values, } } removeAgent(aid){ const obj3d = this.scene.getObjectByName(aid) this.clearHighlight3DObj(obj3d, this.scene) this.scene.remove(obj3d) const arrow3d = this.scene.getObjectByName(`_speed_${aid}`) if(arrow3d) { this.clearHighlight3DObj(arrow3d, this.scene) this.scene.remove(arrow3d) } if(aid in this.agents) delete(this.agents[aid]) } moveAgent(aid, position){ const obj3d = this.scene.getObjectByName(aid) this.clearHighlight3DObj(obj3d, this.scene) const dx = Number(position.x) - obj3d.position.x const dy = Number(position.z) - obj3d.position.y const dz = Number(position.y) - obj3d.position.z if(this.moveAgentTween) this.moveAgentTween.stop() this.moveAgentTween = new TWEEN.Tween(obj3d.position) .to({ x: Number(position.x), y: Number(position.z), z: Number(position.y), }, 500) .easing(TWEEN.Easing.Quadratic.InOut) .onComplete(() => { this.highlight3DObj(obj3d, this.scene) } ) .start() const arrow3d = this.scene.getObjectByName(`_speed_${aid}`) if(arrow3d){ if(this.moveArrowTween) this.moveArrowTween.stop() this.moveArrowTween = new TWEEN.Tween(arrow3d.position) .to({ x: arrow3d.position.x + dx, y: arrow3d.position.y + dy, z: arrow3d.position.z + dz, }, 500) .easing(TWEEN.Easing.Quadratic.InOut) .start() } } changeAgentSpeed(aid, speed){ const objName = `_speed_${aid}` const obj3d = this.scene.getObjectByName(objName) if(obj3d) this.scene.remove(obj3d) const objAboveHead = this.getObjectTopCenter(this.scene.getObjectByName(aid)) this.createArrow(objAboveHead, { x: speed.x, y: speed.z, z: speed.y }, { name: objName, color: 0xff0055, scale: 0.5, }) } reloadAgents(agents){ for(const aid in this.agents){ this.removeAgent(aid) } for(const agent of agents){ this.addAgent(agent.ekfs_atp_id, agent.aid, agent.atp_props, {...agent.gps_values, ...agent.store_values}) } } // getAllAgents(){ // const agents = [] // scene.traverse(o => o.name && names.push(o.name)) } // Make this module available to common JS if(!app.LoadedModules) app.LoadedModules = {} app.LoadedModules.kfArena = kfArena