import FireEffect from './particle/FireEffect'
import { setCustomMark } from '../utils/Layers'
import { flyToPos } from './Navigation'
import WaterGunEffect from './particle/WaterGunEffect'
// import explosionEffect from './particle/ExplotEffect'
/**
* 粒子效果类
* @class
*/
export class Particle {
/**
* 构造函数
* @param {Object} viewer 地图场景对象
*/
constructor(viewer) {
this._viewer = viewer
this._collection = []
}
/**
* 创建新的火焰粒子对象
* @param {Cartesian3} position 火焰粒子位置,笛卡尔坐标
* @param {String} [type="cone"] 粒子类型:"cone"-锥型,"sphere"-球型,"box"-盒型,"circle"-圆型,
* @param {Number} [size=25] 粒子大小
* @returns {FireEffect} 火焰粒子对象
*/
newFire(position, type = 'cone', size = 25) {
const fire = new FireEffect(this._viewer, position, type, size)
this._mark(fire, 'fire')
this._collection.push(fire)
return fire
}
/**
* 水枪粒子
* @param {Cartesian3} sourcePos 起始点位置,笛卡尔坐标
* @param {Cartesian3} targetPos 目标点位置,笛卡尔坐标
* @param {WaterGunOption} [options={}] 粒子参数,主要包括喷射角度,重力系数和喷射速度
* @returns {WaterGunEffect} 水枪粒子对象
*/
newWaterGun(sourcePos, targetPos, options = {}) {
const water = new WaterGunEffect(
this._viewer,
sourcePos,
targetPos,
options
)
this._mark(water, 'water')
this._collection.push(water)
return water
}
// newExplosion() {
// const explosion = new explosionEffect(this._viewer)
// return explosion
// }
_mark(item, type) {
setCustomMark(item, 'particle', type, true)
}
/**
* 移除对象
* @param {FireEffect | WaterGunEffect} item 待移除粒子对象
*/
remove(item) {
if (!item) return
const index = this._collection.findIndex((ele) => ele.id === item.id)
this._collection.splice(index, 1)
item.remove()
}
/**
* 移除所有
*/
removeAll() {
this._collection.forEach((element) => {
element && element.remove()
})
this._collection = []
}
}
/***
* 跳转到粒子对象
* @param {*} viewer
* @param {*} item
*/
export const flyToParticle = (viewer, item) => {
const geo = item.CustomGeo
switch (geo) {
case 'fire':
case 'water':
flyToPos(viewer, item.position)
break
default:
break
}
}