{"version":3,"file":"CustomThreeGltf.mjs","sources":["../../../../packages/ThreeGltf/CustomThreeGltf.ts"],"sourcesContent":["import {Tween, Easing} from '@tweenjs/tween.js';\r\nimport {ThreeGltf} from '@vuemap/three-layer';\r\nimport type {GltfOptions} from '@vuemap/three-layer';\r\nimport type {MoveAnimation, Vec} from './Type';\r\n\r\ninterface Options extends GltfOptions{\r\n  moveAnimation?: MoveAnimation  // 位置移动是否开启动画，开启后将会以参数中的duration进行插帧移动\r\n}\r\n\r\nclass CustomThreeGltf extends ThreeGltf{\r\n  moveAnimation?: MoveAnimation;\r\n  prePosition?: number[]; // 前一次位置信息\r\n  prePositionTween?: Tween<any>;\r\n  moveFrame = -1; // 缓慢移动的动画帧\r\n  preAngle?: number; // 前一次角度信息\r\n  preAngleTween?: Tween<any>;\r\n  angleFrame = -1;\r\n\r\n  constructor (layer: any, options: Options, $vue: any, callback: () => void) {\r\n    options.onLoaded = (gltf) => {\r\n      gltf.userData.acceptEvent = true;\r\n      gltf.userData.$vue = $vue;\r\n      if(callback){\r\n        callback();\r\n      }\r\n    };\r\n    super(layer, options);\r\n    this.moveAnimation = options.moveAnimation;\r\n  }\r\n\r\n  setScale (scale: number | number[] | Vec) {\r\n    let scaleArray: number[];\r\n    if (typeof scale === 'number') {\r\n      scaleArray = [scale, scale, scale];\r\n    } else {\r\n      scaleArray = scale as number[];\r\n    }\r\n    this.object.scale.set(...scaleArray);\r\n  }\r\n\r\n  setPosition (position) {\r\n    const positionConvert = this.layer.convertLngLat(position);\r\n    if (!this.moveAnimation || !this.moveAnimation.smooth) {\r\n      this._updatePosition(positionConvert);\r\n      this.prePosition = positionConvert;\r\n    } else {\r\n      if (!this.prePosition) {\r\n        this._updatePosition(positionConvert);\r\n        this.prePosition = positionConvert;\r\n      } else {\r\n        this._updatePositionTween(positionConvert);\r\n      }\r\n    }\r\n  }\r\n\r\n  _updatePositionTween (newPosition: number[]) {\r\n    if (!this.prePosition) {\r\n      return;\r\n    }\r\n    if (this.prePositionTween) {\r\n      this.prePositionTween.end();\r\n    }\r\n    const preObj = {\r\n      x: this.prePosition[0],\r\n      y: this.prePosition[1]\r\n    };\r\n    this._stopMoveAnimation();\r\n    const duration = this.moveAnimation?.duration || 1000;\r\n    this.prePositionTween = new Tween<any>(preObj).to({\r\n      x: newPosition[0],\r\n      y: newPosition[1]\r\n    }).duration(duration).easing(Easing.Linear.None).onUpdate(() => {\r\n      this._updatePosition([preObj.x, preObj.y]);\r\n    }).start();\r\n    this._moveAnimate();\r\n    this.prePosition = newPosition;\r\n  }\r\n\r\n  _moveAnimate () {\r\n    this.prePositionTween?.update();\r\n    this.moveFrame = requestAnimationFrame(() => {\r\n      this._moveAnimate();\r\n    });\r\n  }\r\n\r\n  _stopMoveAnimation () {\r\n    cancelAnimationFrame(this.moveFrame);\r\n  }\r\n\r\n  _updatePosition (position) {\r\n    this.object.position.setX(position[0]);\r\n    this.object.position.setY(position[1]);\r\n    this.refresh();\r\n  }\r\n\r\n  setAngle (angle: number) {\r\n    if (!this.moveAnimation || !this.moveAnimation.smooth) {\r\n      this._updateAngle(angle);\r\n      this.preAngle = angle;\r\n    } else {\r\n      if (this.preAngle === undefined) {\r\n        this._updateAngle(angle);\r\n        this.preAngle = angle;\r\n      } else {\r\n        this._updateAngleTween(angle);\r\n      }\r\n    }\r\n  }\r\n\r\n  _updateAngle (angle){\r\n    const x = this.object.rotation.x;\r\n    const z = this.object.rotation.z;\r\n    const y = Math.PI / 180 * angle;\r\n    this.object.rotation.set(x, y, z);\r\n    this.refresh();\r\n  }\r\n\r\n  _updateAngleTween (angle){\r\n    if (this.preAngle === undefined) {\r\n      return;\r\n    }\r\n    if (this.preAngleTween) {\r\n      this.preAngleTween.end();\r\n    }\r\n    const preObj = {\r\n      angle: this.preAngle\r\n    };\r\n    this._stopAngleAnimation();\r\n    const duration = this.moveAnimation?.duration || 1000;\r\n    this.preAngleTween = new Tween<any>(preObj).to({\r\n      angle\r\n    }).duration(duration).easing(Easing.Linear.None).onUpdate(() => {\r\n      this._updateAngle(preObj.angle);\r\n    }).onComplete(() => {\r\n      this._stopAngleAnimation();\r\n    }).start();\r\n    this._angleAnimate();\r\n    this.preAngle = angle;\r\n  }\r\n\r\n  _angleAnimate () {\r\n    this.preAngleTween?.update();\r\n    this.angleFrame = requestAnimationFrame(() => {\r\n      this._angleAnimate();\r\n    });\r\n  }\r\n\r\n  _stopAngleAnimation () {\r\n    cancelAnimationFrame(this.angleFrame);\r\n  }\r\n\r\n\r\n  setMoveAnimation (move){\r\n    this.moveAnimation = move;\r\n  }\r\n\r\n  destroy () {\r\n    this._stopAngleAnimation();\r\n    this._stopMoveAnimation();\r\n    this.prePosition = undefined;\r\n    this.preAngle = undefined;\r\n    this.prePositionTween = undefined;\r\n    this.preAngleTween = undefined;\r\n    if (this.object) {\r\n      this.object.$vue = null;\r\n    }\r\n    super.destroy();\r\n  }\r\n}\r\n\r\nexport default CustomThreeGltf;\r\n"],"names":[],"mappings":"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"}