@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 +71 -23
- package/dist/index.esm.js +1 -1
- package/dist/index.js +1 -1
- package/package.json +2 -2
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 {
|
|
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
|
-
|
|
10
|
-
|
|
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
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
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,
|
|
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,
|
|
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.
|
|
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": "
|
|
16
|
+
"gitHead": "6004d6cf392ffc66992b8d3d2b83a7cd5b33dc5f"
|
|
17
17
|
}
|