@soonspacejs/plugin-patrol-controls 2.2.31 → 2.2.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,26 +1,36 @@
1
- import SoonSpace, { Position } from 'soonspacejs';
1
+ import SoonSpace, { CameraViewpointData, Position } from 'soonspacejs';
2
2
  import { Topology } from 'soonspacejs/types/Library';
3
- import { PerspectiveCamera } from 'three';
3
+ import { Tween } from '@tweenjs/tween.js';
4
+ import { PerspectiveCamera, Vector3, Euler } from 'three';
4
5
  export interface DefaultOptions {
6
+ /**
7
+ * 眼睛高度
8
+ */
5
9
  eyeHeight: number;
10
+ /**
11
+ * 巡检速度
12
+ */
6
13
  naviSpeed: number;
14
+ /**
15
+ * 相机转向速度
16
+ */
7
17
  rotateSpeed: number;
18
+ /**
19
+ * 是否飞向起始点位置
20
+ */
8
21
  flyToStartPoint: boolean;
9
- onUpdate: Function;
10
- onEnd: Function;
22
+ /**
23
+ * 更新回调
24
+ */
25
+ onUpdate: (realTimePosition: Position) => void;
26
+ /**
27
+ * 结束回调
28
+ */
29
+ onEnd: (endPosition: Position) => void;
11
30
  }
12
- export interface StartOptions {
13
- eyeHeight?: number;
14
- naviSpeed?: number;
15
- rotateSpeed?: number;
16
- flyToStartPoint?: boolean;
17
- onUpdate?: (realTimePosition: Position) => {};
18
- onEnd?: (endPosition: Position) => {};
31
+ export interface StartOptions extends Partial<DefaultOptions> {
19
32
  }
20
- export interface ResetOptions {
21
- eyeHeight?: number;
22
- naviSpeed?: number;
23
- rotateSpeed?: number;
33
+ export interface ResetOptions extends Pick<StartOptions, 'eyeHeight' | 'naviSpeed' | 'rotateSpeed'> {
24
34
  }
25
35
  export default class PatrolControls {
26
36
  ssp: SoonSpace;
@@ -30,23 +40,61 @@ export default class PatrolControls {
30
40
  moveDuration: number;
31
41
  rotateDuration: number;
32
42
  };
33
- private points;
34
- private nextPointIndex;
35
- private isChangeOptions;
36
- private isPaused;
37
- private isStoped;
38
- private _positionTween;
39
- private _rotationTween;
40
- private _cameraViewpointData;
43
+ points: Vector3[];
44
+ nextPointIndex: number;
45
+ isPaused: boolean;
46
+ isStoped: boolean;
47
+ _positionTween: Tween<Vector3> | null;
48
+ _rotationTween: Tween<Euler> | null;
49
+ _cameraViewpointData: CameraViewpointData | null;
50
+ /**
51
+ * 主相机视角数据
52
+ */
53
+ _mainCameraViewpointData: CameraViewpointData | null;
41
54
  constructor(ssp: SoonSpace);
55
+ /**
56
+ * 开始巡检
57
+ *
58
+ * @param path
59
+ * @param options
60
+ */
42
61
  start(path: Topology, options: StartOptions): void;
62
+ /**
63
+ * 设置巡检参数
64
+ * @param options
65
+ * @returns
66
+ */
43
67
  setOptions(options: ResetOptions): void;
68
+ /**
69
+ * 暂停巡检
70
+ */
44
71
  pause(): void;
72
+ /**
73
+ * 恢复巡检
74
+ */
45
75
  resume(): void;
76
+ /**
77
+ * 中断巡检
78
+ */
46
79
  stop(): void;
47
80
  private init;
48
81
  private initOptions;
82
+ /**
83
+ * 计算两点之间的弧度
84
+ * @param sourcePoint
85
+ * @param targetPoint
86
+ * @returns
87
+ */
88
+ private computedRotation;
89
+ /**
90
+ * 计算下一弧度
91
+ * @returns
92
+ */
49
93
  private computedNextRotation;
94
+ /**
95
+ * 开始巡检
96
+ * @returns
97
+ */
50
98
  private patrolStart;
51
99
  private patrolStop;
52
100
  }
package/dist/index.esm.js CHANGED
@@ -12,4 +12,4 @@ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
12
12
  OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
13
13
  PERFORMANCE OF THIS SOFTWARE.
14
14
  ***************************************************************************** */
15
- function t(t,i,s,o){return new(s||(s=Promise))((function(n,e){function a(t){try{r(o.next(t))}catch(t){e(t)}}function h(t){try{r(o.throw(t))}catch(t){e(t)}}function r(t){var i;t.done?n(t.value):(i=t.value,i instanceof s?i:new s((function(t){t(i)}))).then(a,h)}r((o=o.apply(t,i||[])).next())}))}export default class{constructor(t){this.ssp=t,this.camera=t.viewport.camera,this.options={naviSpeed:1,rotateSpeed:1,eyeHeight:150,flyToStartPoint:!0,onUpdate:()=>{},onEnd:()=>{}},this.states={moveDuration:0,rotateDuration:0},this.points=[],this.nextPointIndex=0,this.isChangeOptions=!1,this.isPaused=!1,this.isStoped=!1,this._positionTween=null,this._rotationTween=null,this._cameraViewpointData=null}start(t,i){this.initOptions(i),this.init(t),this.patrolStart()}setOptions(t){if(this.isStoped)return;const{naviSpeed:i,rotateSpeed:s}=t;if(i&&this._positionTween){const t=this.states.moveDuration*this.options.naviSpeed/i;this._positionTween.duration(t),this.states.moveDuration=t}if(s&&this._rotationTween){const t=this.states.rotateDuration*this.options.rotateSpeed/s;this._rotationTween.duration(t),this.states.rotateDuration=t}this.initOptions(t)}pause(){var t,i;this._cameraViewpointData=this.ssp.getCameraViewpoint(),this.isPaused=!0,null===(t=this._positionTween)||void 0===t||t.pause(),null===(i=this._rotationTween)||void 0===i||i.pause()}resume(){var t,i;this._cameraViewpointData&&this.ssp.setCameraViewpoint(this._cameraViewpointData),this.isPaused=!1,null===(t=this._positionTween)||void 0===t||t.resume(),null===(i=this._rotationTween)||void 0===i||i.resume()}stop(){this.patrolStop();const{cameraManager:t}=this.ssp.viewport,i=t.getMainCamera();t.setCurrentCamera(i)}init(t){this.isPaused=!1,this.isStoped=!1;const{cameraManager:i}=this.ssp.viewport;this.camera=i.createCamera("patrolControls"),i.setCurrentCamera(this.camera),t.nodes.forEach((t=>{this.points.push(t.getWorldPosition(new this.ssp.THREE.Vector3))}))}initOptions(t){const{eyeHeight:i,naviSpeed:s,rotateSpeed:o,flyToStartPoint:n=!0,onUpdate:e,onEnd:a}=t;i&&(this.options.eyeHeight=i),s&&(this.options.naviSpeed=s),o&&(this.options.rotateSpeed=o),this.options.flyToStartPoint=n,e&&(this.options.onUpdate=e),a&&(this.options.onEnd=a)}computedNextRotation(){const t=this.isChangeOptions?this.camera.position.clone():this.points[this.nextPointIndex],i=this.points[this.nextPointIndex+1];if(Math.abs(t.x-i.x)<=5&&Math.abs(t.z-i.z)<=5)return this.camera.rotation.clone();{const s=new this.ssp.THREE.Matrix4;s.lookAt(t,i,this.camera.up);const o=(new this.ssp.THREE.Euler).setFromRotationMatrix(s,"YXZ");return o.copy(this.ssp.utils.rotationAFix(this.camera.rotation,o.clone())),0===o.y&&(0===o.z?o.x=0:0===o.x&&(o.z=0)),o}}patrolStart(){return t(this,void 0,void 0,(function*(){return new Promise((i=>t(this,void 0,void 0,(function*(){!0===this.isChangeOptions&&(this.isChangeOptions=!1);const{onUpdate:t,onEnd:s}=this.options;if(this.nextPointIndex===this.points.length)null==s||s(this.camera.position.clone()),i(!0),this.isStoped=!0;else{const s=this.camera.position.clone(),o=this.points[this.nextPointIndex].clone().setY(this.points[this.nextPointIndex].y+this.options.eyeHeight),n=s.distanceTo(o);if(this.states.moveDuration=0===this.nextPointIndex?1e3:n/this.options.naviSpeed/.6,0!==this.nextPointIndex||this.options.flyToStartPoint?yield this.ssp.animation(this.camera.position,o,{duration:this.states.moveDuration},((s,o)=>{null==t||t(s),this.ssp.signals.cameraChange.dispatch(s.clone()),this.isChangeOptions&&(o.stop(),i(!1))}),(t=>{this._positionTween=t})):this.camera.position.copy(o),this.nextPointIndex<this.points.length-1){const t=this.camera.rotation.clone(),s=this.computedNextRotation(),o=Math.abs(t.x-s.x)+Math.abs(t.y-s.y)+Math.abs(t.y-s.y);0!==this.nextPointIndex||this.options.flyToStartPoint?yield this.ssp.animation(this.camera.rotation,s,{duration:0===this.nextPointIndex?1e3:100*o/this.options.rotateSpeed},((t,s)=>{this.isChangeOptions&&(s.stop(),i(!1))}),(t=>{this._rotationTween=t})):this.camera.rotation.copy(s)}this.nextPointIndex+=1,yield this.patrolStart()}}))))}))}patrolStop(){var t,i;this.options={naviSpeed:1,rotateSpeed:1,eyeHeight:150,flyToStartPoint:!0,onUpdate:()=>{},onEnd:()=>{}},this.points=[],this.nextPointIndex=0,this.isPaused=!1,this.isStoped=!0,null===(t=this._positionTween)||void 0===t||t.stop(),null===(i=this._rotationTween)||void 0===i||i.stop(),this._positionTween=null,this._rotationTween=null}}
15
+ function t(t,i,s,e){return new(s||(s=Promise))((function(o,n){function a(t){try{h(e.next(t))}catch(t){n(t)}}function r(t){try{h(e.throw(t))}catch(t){n(t)}}function h(t){var i;t.done?o(t.value):(i=t.value,i instanceof s?i:new s((function(t){t(i)}))).then(a,r)}h((e=e.apply(t,i||[])).next())}))}export default class{constructor(t){this._mainCameraViewpointData=null,this.ssp=t,this.camera=t.viewport.camera,this.options={naviSpeed:1,rotateSpeed:1,eyeHeight:150,flyToStartPoint:!0,onUpdate:()=>{},onEnd:()=>{}},this.states={moveDuration:0,rotateDuration:0},this.points=[],this.nextPointIndex=0,this.isPaused=!1,this.isStoped=!1,this._positionTween=null,this._rotationTween=null,this._cameraViewpointData=null}start(t,i){this.initOptions(i),this.init(t),this.patrolStart()}setOptions(t){if(this.isStoped)return;const{naviSpeed:i,rotateSpeed:s}=t;if(i&&this._positionTween){const t=this.states.moveDuration*this.options.naviSpeed/i;this._positionTween.duration(t),this.states.moveDuration=t}if(s&&this._rotationTween){const t=this.states.rotateDuration*this.options.rotateSpeed/s;this._rotationTween.duration(t),this.states.rotateDuration=t}this.initOptions(t)}pause(){var t,i;if(this.isPaused)return;this._cameraViewpointData=this.ssp.getCameraViewpoint();const{cameraManager:s}=this.ssp.viewport,e=s.getMainCamera();s.setCurrentCamera(e),this.ssp.setCameraViewpoint(this._cameraViewpointData),this.ssp.setControlsOptions({enabled:!1}),this.isPaused=!0,null===(t=this._positionTween)||void 0===t||t.pause(),null===(i=this._rotationTween)||void 0===i||i.pause()}resume(){var t,i;if(this.isPaused){if(this._cameraViewpointData){const{cameraManager:t}=this.ssp.viewport;t.setCurrentCamera(this.camera),this.ssp.setCameraViewpoint(this._cameraViewpointData)}this.isPaused=!1,null===(t=this._positionTween)||void 0===t||t.resume(),null===(i=this._rotationTween)||void 0===i||i.resume()}}stop(){this.patrolStop();const{cameraManager:t}=this.ssp.viewport,i=t.getMainCamera();t.setCurrentCamera(i),this._mainCameraViewpointData&&this.ssp.setCameraViewpoint(this._mainCameraViewpointData),this.ssp.setControlsOptions({enabled:!0})}init(t){const{cameraManager:i}=this.ssp.viewport;this.isPaused=!1,this.isStoped=!1,this._mainCameraViewpointData=i.getCameraViewpoint(),console.log("_mainCameraViewpointData",this._mainCameraViewpointData),this.camera=i.createCamera("patrolControls"),i.setCurrentCamera(this.camera),t.nodes.forEach((t=>{this.points.push(t.getWorldPosition(new this.ssp.THREE.Vector3))}))}initOptions(t){const{eyeHeight:i,naviSpeed:s,rotateSpeed:e,flyToStartPoint:o=!0,onUpdate:n,onEnd:a}=t;i&&(this.options.eyeHeight=i),s&&(this.options.naviSpeed=s),e&&(this.options.rotateSpeed=e),this.options.flyToStartPoint=o,n&&(this.options.onUpdate=n),a&&(this.options.onEnd=a)}computedRotation(t,i){if(Math.abs(t.x-i.x)<=5&&Math.abs(t.z-i.z)<=5)return this.camera.rotation.clone();{const s=new this.ssp.THREE.Matrix4;s.lookAt(t,i,this.camera.up);const e=(new this.ssp.THREE.Euler).setFromRotationMatrix(s,"YXZ");return e.copy(this.ssp.utils.rotationAFix(this.camera.rotation,e.clone())),0===e.y&&(0===e.z?e.x=0:0===e.x&&(e.z=0)),e}}computedNextRotation(){const t=this.points[this.nextPointIndex],i=this.points[this.nextPointIndex+1];return this.computedRotation(t,i)}patrolStart(){return t(this,void 0,void 0,(function*(){return new Promise((i=>t(this,void 0,void 0,(function*(){const{onUpdate:t,onEnd:s}=this.options;if(this.nextPointIndex===this.points.length)null==s||s(this.camera.position.clone()),i(!0),this.isStoped=!0;else{const i=this.camera.position.clone(),s=this.points[this.nextPointIndex].clone().setY(this.points[this.nextPointIndex].y+this.options.eyeHeight),e=i.distanceTo(s);if(this.states.moveDuration=0===this.nextPointIndex?1e3:e/this.options.naviSpeed/.6,0!==this.nextPointIndex||this.options.flyToStartPoint?yield this.ssp.animation(this.camera.position,s,{duration:this.states.moveDuration},((i,s)=>{null==t||t(i),this.ssp.signals.cameraChange.dispatch()}),(t=>{this._positionTween=t})):this.camera.position.copy(s),this.nextPointIndex<this.points.length-1){const t=this.camera.rotation.clone(),i=this.computedNextRotation(),s=Math.abs(t.x-i.x)+Math.abs(t.y-i.y)+Math.abs(t.y-i.y);this.states.rotateDuration=0===this.nextPointIndex?1e3:100*s/this.options.rotateSpeed,0!==this.nextPointIndex||this.options.flyToStartPoint?yield this.ssp.animation(this.camera.rotation,i,{duration:this.states.rotateDuration},((t,i)=>{}),(t=>{this._rotationTween=t})):this.camera.rotation.copy(i)}this.nextPointIndex++,yield this.patrolStart()}}))))}))}patrolStop(){var t,i;this.options={naviSpeed:1,rotateSpeed:1,eyeHeight:150,flyToStartPoint:!0,onUpdate:()=>{},onEnd:()=>{}},this.points=[],this.nextPointIndex=0,this.isPaused=!1,this.isStoped=!0,null===(t=this._positionTween)||void 0===t||t.stop(),null===(i=this._rotationTween)||void 0===i||i.stop(),this._positionTween=null,this._rotationTween=null}}
package/dist/index.js CHANGED
@@ -12,4 +12,4 @@ var PatrolControlsPlugin=function(){"use strict";
12
12
  LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
13
13
  OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
14
14
  PERFORMANCE OF THIS SOFTWARE.
15
- ***************************************************************************** */function t(t,i,s,o){return new(s||(s=Promise))((function(n,e){function a(t){try{r(o.next(t))}catch(t){e(t)}}function h(t){try{r(o.throw(t))}catch(t){e(t)}}function r(t){var i;t.done?n(t.value):(i=t.value,i instanceof s?i:new s((function(t){t(i)}))).then(a,h)}r((o=o.apply(t,i||[])).next())}))}return class{constructor(t){this.ssp=t,this.camera=t.viewport.camera,this.options={naviSpeed:1,rotateSpeed:1,eyeHeight:150,flyToStartPoint:!0,onUpdate:()=>{},onEnd:()=>{}},this.states={moveDuration:0,rotateDuration:0},this.points=[],this.nextPointIndex=0,this.isChangeOptions=!1,this.isPaused=!1,this.isStoped=!1,this._positionTween=null,this._rotationTween=null,this._cameraViewpointData=null}start(t,i){this.initOptions(i),this.init(t),this.patrolStart()}setOptions(t){if(this.isStoped)return;const{naviSpeed:i,rotateSpeed:s}=t;if(i&&this._positionTween){const t=this.states.moveDuration*this.options.naviSpeed/i;this._positionTween.duration(t),this.states.moveDuration=t}if(s&&this._rotationTween){const t=this.states.rotateDuration*this.options.rotateSpeed/s;this._rotationTween.duration(t),this.states.rotateDuration=t}this.initOptions(t)}pause(){var t,i;this._cameraViewpointData=this.ssp.getCameraViewpoint(),this.isPaused=!0,null===(t=this._positionTween)||void 0===t||t.pause(),null===(i=this._rotationTween)||void 0===i||i.pause()}resume(){var t,i;this._cameraViewpointData&&this.ssp.setCameraViewpoint(this._cameraViewpointData),this.isPaused=!1,null===(t=this._positionTween)||void 0===t||t.resume(),null===(i=this._rotationTween)||void 0===i||i.resume()}stop(){this.patrolStop();const{cameraManager:t}=this.ssp.viewport,i=t.getMainCamera();t.setCurrentCamera(i)}init(t){this.isPaused=!1,this.isStoped=!1;const{cameraManager:i}=this.ssp.viewport;this.camera=i.createCamera("patrolControls"),i.setCurrentCamera(this.camera),t.nodes.forEach((t=>{this.points.push(t.getWorldPosition(new this.ssp.THREE.Vector3))}))}initOptions(t){const{eyeHeight:i,naviSpeed:s,rotateSpeed:o,flyToStartPoint:n=!0,onUpdate:e,onEnd:a}=t;i&&(this.options.eyeHeight=i),s&&(this.options.naviSpeed=s),o&&(this.options.rotateSpeed=o),this.options.flyToStartPoint=n,e&&(this.options.onUpdate=e),a&&(this.options.onEnd=a)}computedNextRotation(){const t=this.isChangeOptions?this.camera.position.clone():this.points[this.nextPointIndex],i=this.points[this.nextPointIndex+1];if(Math.abs(t.x-i.x)<=5&&Math.abs(t.z-i.z)<=5)return this.camera.rotation.clone();{const s=new this.ssp.THREE.Matrix4;s.lookAt(t,i,this.camera.up);const o=(new this.ssp.THREE.Euler).setFromRotationMatrix(s,"YXZ");return o.copy(this.ssp.utils.rotationAFix(this.camera.rotation,o.clone())),0===o.y&&(0===o.z?o.x=0:0===o.x&&(o.z=0)),o}}patrolStart(){return t(this,void 0,void 0,(function*(){return new Promise((i=>t(this,void 0,void 0,(function*(){!0===this.isChangeOptions&&(this.isChangeOptions=!1);const{onUpdate:t,onEnd:s}=this.options;if(this.nextPointIndex===this.points.length)null==s||s(this.camera.position.clone()),i(!0),this.isStoped=!0;else{const s=this.camera.position.clone(),o=this.points[this.nextPointIndex].clone().setY(this.points[this.nextPointIndex].y+this.options.eyeHeight),n=s.distanceTo(o);if(this.states.moveDuration=0===this.nextPointIndex?1e3:n/this.options.naviSpeed/.6,0!==this.nextPointIndex||this.options.flyToStartPoint?yield this.ssp.animation(this.camera.position,o,{duration:this.states.moveDuration},((s,o)=>{null==t||t(s),this.ssp.signals.cameraChange.dispatch(s.clone()),this.isChangeOptions&&(o.stop(),i(!1))}),(t=>{this._positionTween=t})):this.camera.position.copy(o),this.nextPointIndex<this.points.length-1){const t=this.camera.rotation.clone(),s=this.computedNextRotation(),o=Math.abs(t.x-s.x)+Math.abs(t.y-s.y)+Math.abs(t.y-s.y);0!==this.nextPointIndex||this.options.flyToStartPoint?yield this.ssp.animation(this.camera.rotation,s,{duration:0===this.nextPointIndex?1e3:100*o/this.options.rotateSpeed},((t,s)=>{this.isChangeOptions&&(s.stop(),i(!1))}),(t=>{this._rotationTween=t})):this.camera.rotation.copy(s)}this.nextPointIndex+=1,yield this.patrolStart()}}))))}))}patrolStop(){var t,i;this.options={naviSpeed:1,rotateSpeed:1,eyeHeight:150,flyToStartPoint:!0,onUpdate:()=>{},onEnd:()=>{}},this.points=[],this.nextPointIndex=0,this.isPaused=!1,this.isStoped=!0,null===(t=this._positionTween)||void 0===t||t.stop(),null===(i=this._rotationTween)||void 0===i||i.stop(),this._positionTween=null,this._rotationTween=null}}}();
15
+ ***************************************************************************** */function t(t,i,s,e){return new(s||(s=Promise))((function(n,o){function a(t){try{h(e.next(t))}catch(t){o(t)}}function r(t){try{h(e.throw(t))}catch(t){o(t)}}function h(t){var i;t.done?n(t.value):(i=t.value,i instanceof s?i:new s((function(t){t(i)}))).then(a,r)}h((e=e.apply(t,i||[])).next())}))}return class{constructor(t){this._mainCameraViewpointData=null,this.ssp=t,this.camera=t.viewport.camera,this.options={naviSpeed:1,rotateSpeed:1,eyeHeight:150,flyToStartPoint:!0,onUpdate:()=>{},onEnd:()=>{}},this.states={moveDuration:0,rotateDuration:0},this.points=[],this.nextPointIndex=0,this.isPaused=!1,this.isStoped=!1,this._positionTween=null,this._rotationTween=null,this._cameraViewpointData=null}start(t,i){this.initOptions(i),this.init(t),this.patrolStart()}setOptions(t){if(this.isStoped)return;const{naviSpeed:i,rotateSpeed:s}=t;if(i&&this._positionTween){const t=this.states.moveDuration*this.options.naviSpeed/i;this._positionTween.duration(t),this.states.moveDuration=t}if(s&&this._rotationTween){const t=this.states.rotateDuration*this.options.rotateSpeed/s;this._rotationTween.duration(t),this.states.rotateDuration=t}this.initOptions(t)}pause(){var t,i;if(this.isPaused)return;this._cameraViewpointData=this.ssp.getCameraViewpoint();const{cameraManager:s}=this.ssp.viewport,e=s.getMainCamera();s.setCurrentCamera(e),this.ssp.setCameraViewpoint(this._cameraViewpointData),this.ssp.setControlsOptions({enabled:!1}),this.isPaused=!0,null===(t=this._positionTween)||void 0===t||t.pause(),null===(i=this._rotationTween)||void 0===i||i.pause()}resume(){var t,i;if(this.isPaused){if(this._cameraViewpointData){const{cameraManager:t}=this.ssp.viewport;t.setCurrentCamera(this.camera),this.ssp.setCameraViewpoint(this._cameraViewpointData)}this.isPaused=!1,null===(t=this._positionTween)||void 0===t||t.resume(),null===(i=this._rotationTween)||void 0===i||i.resume()}}stop(){this.patrolStop();const{cameraManager:t}=this.ssp.viewport,i=t.getMainCamera();t.setCurrentCamera(i),this._mainCameraViewpointData&&this.ssp.setCameraViewpoint(this._mainCameraViewpointData),this.ssp.setControlsOptions({enabled:!0})}init(t){const{cameraManager:i}=this.ssp.viewport;this.isPaused=!1,this.isStoped=!1,this._mainCameraViewpointData=i.getCameraViewpoint(),console.log("_mainCameraViewpointData",this._mainCameraViewpointData),this.camera=i.createCamera("patrolControls"),i.setCurrentCamera(this.camera),t.nodes.forEach((t=>{this.points.push(t.getWorldPosition(new this.ssp.THREE.Vector3))}))}initOptions(t){const{eyeHeight:i,naviSpeed:s,rotateSpeed:e,flyToStartPoint:n=!0,onUpdate:o,onEnd:a}=t;i&&(this.options.eyeHeight=i),s&&(this.options.naviSpeed=s),e&&(this.options.rotateSpeed=e),this.options.flyToStartPoint=n,o&&(this.options.onUpdate=o),a&&(this.options.onEnd=a)}computedRotation(t,i){if(Math.abs(t.x-i.x)<=5&&Math.abs(t.z-i.z)<=5)return this.camera.rotation.clone();{const s=new this.ssp.THREE.Matrix4;s.lookAt(t,i,this.camera.up);const e=(new this.ssp.THREE.Euler).setFromRotationMatrix(s,"YXZ");return e.copy(this.ssp.utils.rotationAFix(this.camera.rotation,e.clone())),0===e.y&&(0===e.z?e.x=0:0===e.x&&(e.z=0)),e}}computedNextRotation(){const t=this.points[this.nextPointIndex],i=this.points[this.nextPointIndex+1];return this.computedRotation(t,i)}patrolStart(){return t(this,void 0,void 0,(function*(){return new Promise((i=>t(this,void 0,void 0,(function*(){const{onUpdate:t,onEnd:s}=this.options;if(this.nextPointIndex===this.points.length)null==s||s(this.camera.position.clone()),i(!0),this.isStoped=!0;else{const i=this.camera.position.clone(),s=this.points[this.nextPointIndex].clone().setY(this.points[this.nextPointIndex].y+this.options.eyeHeight),e=i.distanceTo(s);if(this.states.moveDuration=0===this.nextPointIndex?1e3:e/this.options.naviSpeed/.6,0!==this.nextPointIndex||this.options.flyToStartPoint?yield this.ssp.animation(this.camera.position,s,{duration:this.states.moveDuration},((i,s)=>{null==t||t(i),this.ssp.signals.cameraChange.dispatch()}),(t=>{this._positionTween=t})):this.camera.position.copy(s),this.nextPointIndex<this.points.length-1){const t=this.camera.rotation.clone(),i=this.computedNextRotation(),s=Math.abs(t.x-i.x)+Math.abs(t.y-i.y)+Math.abs(t.y-i.y);this.states.rotateDuration=0===this.nextPointIndex?1e3:100*s/this.options.rotateSpeed,0!==this.nextPointIndex||this.options.flyToStartPoint?yield this.ssp.animation(this.camera.rotation,i,{duration:this.states.rotateDuration},((t,i)=>{}),(t=>{this._rotationTween=t})):this.camera.rotation.copy(i)}this.nextPointIndex++,yield this.patrolStart()}}))))}))}patrolStop(){var t,i;this.options={naviSpeed:1,rotateSpeed:1,eyeHeight:150,flyToStartPoint:!0,onUpdate:()=>{},onEnd:()=>{}},this.points=[],this.nextPointIndex=0,this.isPaused=!1,this.isStoped=!0,null===(t=this._positionTween)||void 0===t||t.stop(),null===(i=this._rotationTween)||void 0===i||i.stop(),this._positionTween=null,this._rotationTween=null}}}();
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@soonspacejs/plugin-patrol-controls",
3
3
  "pluginName": "PatrolControlsPlugin",
4
- "version": "2.2.31",
4
+ "version": "2.2.35",
5
5
  "description": "Patrol-controls plugin for SoonSpace.js",
6
6
  "main": "dist/index.js",
7
7
  "module": "dist/index.esm.js",
@@ -13,5 +13,5 @@
13
13
  ],
14
14
  "author": "xuek",
15
15
  "license": "UNLICENSED",
16
- "gitHead": "1beba8c3485d7488c9f6d20c3e4a96d332bdbc49"
16
+ "gitHead": "6004d6cf392ffc66992b8d3d2b83a7cd5b33dc5f"
17
17
  }