UNPKG

@vuemap/vue-amap-extra

Version:

@vuemap/vue-amap扩展库,包含threejs相关图层

1 lines 10.7 kB
{"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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"}