{"version":3,"file":"DynamicOverlay.mjs","sources":["../../../../../packages/shared/src/DynamicOverlay.ts"],"sourcesContent":["/*\n * @Author: zouyaoji@https://github.com/zouyaoji\n * @Date: 2021-11-24 14:20:28\n * @LastEditTime: 2022-09-08 15:41:35\n * @LastEditors: zouyaoji\n * @Description:\n * @FilePath: \\vue-cesium@next\\packages\\shared\\src\\DynamicOverlay.ts\n */\nimport { makeCartesian3, makeJulianDate } from '@vue-cesium/utils/cesium-helpers'\nimport type { DynamicOverlayOpts, VcPosition } from '@vue-cesium/utils/types'\n\nclass DynamicOverlay {\n  _sampledPosition: Cesium.SampledPositionProperty\n  _entity: Cesium.Entity\n  _cache: Cesium.JulianDate[]\n  _maxCacheSize: number\n  _lastTime: Cesium.JulianDate | undefined\n  _velocityVectorProperty: Cesium.VelocityVectorProperty\n\n  constructor(options: DynamicOverlayOpts) {\n    const { SampledPositionProperty, Entity, ExtrapolationType, VelocityOrientationProperty, CallbackProperty } = Cesium\n    this._lastTime = undefined\n    this._sampledPosition = new SampledPositionProperty()\n    this._sampledPosition.forwardExtrapolationType = options.forwardExtrapolationType || ExtrapolationType.HOLD\n    this._sampledPosition.backwardExtrapolationType = options.backwardExtrapolationType || ExtrapolationType.HOLD\n    this._cache = []\n    this._maxCacheSize = options.maxCacheSize || 10\n\n    const entity = new Entity(options)\n    entity.position = this._sampledPosition\n\n    if (!Cesium.defined(options.orientation)) {\n      // entity.orientation = new VelocityOrientationProperty(this._sampledPosition)\n      const orientation = new VelocityOrientationProperty(this._sampledPosition)\n      // 停止时保持方向\n      let lastOri\n      entity.orientation = new CallbackProperty((time, result) => {\n        const ori = orientation.getValue(time)\n        if (ori) {\n          lastOri = ori\n        } else {\n          return lastOri\n        }\n        return ori\n      }, false)\n    }\n\n    this._entity = entity\n    // A velocity vector property will give us the entity's speed and direction at any given time.\n    this._velocityVectorProperty = new Cesium.VelocityVectorProperty(this._sampledPosition, false)\n  }\n\n  get id() {\n    return this._entity.id\n  }\n  set id(id) {\n    this._entity.id = id\n  }\n\n  set maxCacheSize(maxCacheSize) {\n    this._maxCacheSize = maxCacheSize\n  }\n  get maxCacheSize() {\n    return this._maxCacheSize\n  }\n\n  get position() {\n    return this._sampledPosition.getValue(Cesium.JulianDate.now())\n  }\n\n  _removePosition() {\n    if (this._cache.length > this._maxCacheSize) {\n      const start = Cesium.JulianDate.addSeconds(this._cache[0], -0.2, new Cesium.JulianDate())\n      const stop = Cesium.JulianDate.addSeconds(this._cache[this._cache.length - this._maxCacheSize], -0.2, new Cesium.JulianDate())\n      this._sampledPosition.removeSamples(\n        new Cesium.TimeInterval({\n          start: start,\n          stop: stop\n        })\n      )\n      this._cache.splice(0, this._cache.length - this._maxCacheSize)\n    }\n  }\n  /**\n   *\n   * @param position\n   * @param interval\n   * @returns\n   */\n  addPosition(position: VcPosition, timeOrInterval: string | number | Cesium.JulianDate | Date) {\n    this._removePosition()\n    let time: Cesium.JulianDate\n    if (typeof timeOrInterval === 'number') {\n      const now = Cesium.JulianDate.now()\n      time = Cesium.JulianDate.addSeconds(now, timeOrInterval, new Cesium.JulianDate())\n      Cesium.destroyObject(now)\n    } else {\n      time = makeJulianDate(timeOrInterval)\n    }\n\n    this._sampledPosition.addSample(time, makeCartesian3(position) as Cesium.Cartesian3)\n    this._lastTime = time!\n    this._cache.push(this._lastTime!)\n\n    return time\n  }\n}\n\nexport default DynamicOverlay\n"],"names":[],"mappings":"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"}