@soonspacejs/plugin-patrol-controls 2.4.15 → 2.5.0-alpha.0
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.esm.js +1 -1
- package/dist/index.js +2 -2
- package/package.json +2 -2
- package/dist/index.d.ts +0 -98
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,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())}))}class
|
|
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(),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
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
var PatrolControlsPlugin=function(){"use strict";
|
|
2
2
|
/*! *****************************************************************************
|
|
3
3
|
Copyright (c) Microsoft Corporation.
|
|
4
4
|
|
|
@@ -12,4 +12,4 @@
|
|
|
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,e
|
|
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(),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.
|
|
4
|
+
"version": "2.5.0-alpha.0",
|
|
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": "b8187989f9105b6b235cc22a8e093b4ecab698fb"
|
|
17
17
|
}
|
package/dist/index.d.ts
DELETED
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
import SoonSpace, { CameraViewpointData, Position } from 'soonspacejs';
|
|
2
|
-
import { Topology } from 'soonspacejs/types/Library';
|
|
3
|
-
import { Tween } from '@tweenjs/tween.js';
|
|
4
|
-
import { PerspectiveCamera, Vector3, Euler } from 'three';
|
|
5
|
-
export interface DefaultOptions {
|
|
6
|
-
/**
|
|
7
|
-
* 眼睛高度
|
|
8
|
-
*/
|
|
9
|
-
eyeHeight: number;
|
|
10
|
-
/**
|
|
11
|
-
* 巡检速度
|
|
12
|
-
*/
|
|
13
|
-
naviSpeed: number;
|
|
14
|
-
/**
|
|
15
|
-
* 相机转向速度
|
|
16
|
-
*/
|
|
17
|
-
rotateSpeed: number;
|
|
18
|
-
/**
|
|
19
|
-
* 是否飞向起始点位置
|
|
20
|
-
*/
|
|
21
|
-
flyToStartPoint: boolean;
|
|
22
|
-
/**
|
|
23
|
-
* 更新回调
|
|
24
|
-
*/
|
|
25
|
-
onUpdate: (realTimePosition: Position) => void;
|
|
26
|
-
/**
|
|
27
|
-
* 结束回调
|
|
28
|
-
*/
|
|
29
|
-
onEnd: (endPosition: Position) => void;
|
|
30
|
-
}
|
|
31
|
-
export declare type StartOptions = Partial<DefaultOptions>;
|
|
32
|
-
export declare type ResetOptions = Pick<StartOptions, 'eyeHeight' | 'naviSpeed' | 'rotateSpeed'>;
|
|
33
|
-
export default class PatrolControls {
|
|
34
|
-
ssp: SoonSpace;
|
|
35
|
-
camera: PerspectiveCamera;
|
|
36
|
-
options: DefaultOptions;
|
|
37
|
-
states: {
|
|
38
|
-
moveDuration: number;
|
|
39
|
-
rotateDuration: number;
|
|
40
|
-
};
|
|
41
|
-
points: Vector3[];
|
|
42
|
-
nextPointIndex: number;
|
|
43
|
-
isPaused: boolean;
|
|
44
|
-
isStoped: boolean;
|
|
45
|
-
_positionTween: Tween<Vector3> | null;
|
|
46
|
-
_rotationTween: Tween<Euler> | null;
|
|
47
|
-
_cameraViewpointData: CameraViewpointData | null;
|
|
48
|
-
/**
|
|
49
|
-
* 主相机视角数据
|
|
50
|
-
*/
|
|
51
|
-
_mainCameraViewpointData: CameraViewpointData | null;
|
|
52
|
-
constructor(ssp: SoonSpace);
|
|
53
|
-
/**
|
|
54
|
-
* 开始巡检
|
|
55
|
-
*
|
|
56
|
-
* @param path
|
|
57
|
-
* @param options
|
|
58
|
-
*/
|
|
59
|
-
start(path: Topology, options: StartOptions): void;
|
|
60
|
-
/**
|
|
61
|
-
* 设置巡检参数
|
|
62
|
-
* @param options
|
|
63
|
-
* @returns
|
|
64
|
-
*/
|
|
65
|
-
setOptions(options: ResetOptions): void;
|
|
66
|
-
/**
|
|
67
|
-
* 暂停巡检
|
|
68
|
-
*/
|
|
69
|
-
pause(): void;
|
|
70
|
-
/**
|
|
71
|
-
* 恢复巡检
|
|
72
|
-
*/
|
|
73
|
-
resume(): void;
|
|
74
|
-
/**
|
|
75
|
-
* 中断巡检
|
|
76
|
-
*/
|
|
77
|
-
stop(): void;
|
|
78
|
-
private init;
|
|
79
|
-
private initOptions;
|
|
80
|
-
/**
|
|
81
|
-
* 计算两点之间的弧度
|
|
82
|
-
* @param sourcePoint
|
|
83
|
-
* @param targetPoint
|
|
84
|
-
* @returns
|
|
85
|
-
*/
|
|
86
|
-
private computedRotation;
|
|
87
|
-
/**
|
|
88
|
-
* 计算下一弧度
|
|
89
|
-
* @returns
|
|
90
|
-
*/
|
|
91
|
-
private computedNextRotation;
|
|
92
|
-
/**
|
|
93
|
-
* 开始巡检
|
|
94
|
-
* @returns
|
|
95
|
-
*/
|
|
96
|
-
private patrolStart;
|
|
97
|
-
private patrolStop;
|
|
98
|
-
}
|