{"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-01-23 00:50:50\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 } = 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    entity.orientation = new VelocityOrientationProperty(this._sampledPosition)\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) {\n    this._removePosition()\n    let time\n    if (typeof timeOrInterval === 'number') {\n      const now = Cesium.JulianDate.now()\n      time = Cesium.JulianDate.addSeconds(now, timeOrInterval, new Cesium.JulianDate())\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 this\n  }\n}\n\nexport default DynamicOverlay\n"],"names":[],"mappings":"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"}