@soonspacejs/plugin-drag-controls 2.13.17 → 2.14.1

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.
@@ -0,0 +1,33 @@
1
+ import { Controls, Raycaster, MOUSE, TOUCH } from 'three';
2
+ export class DragControls extends Controls<any> {
3
+ constructor(objects: any, camera: any, domElement?: null);
4
+ objects: any;
5
+ objectSet: WeakSet<WeakKey>;
6
+ poiNodeSet: Set<any>;
7
+ recursive: boolean;
8
+ transformGroup: boolean;
9
+ rotateSpeed: number;
10
+ raycaster: Raycaster;
11
+ mouseButtons: {
12
+ LEFT: MOUSE;
13
+ MIDDLE: MOUSE;
14
+ RIGHT: MOUSE;
15
+ };
16
+ touches: {
17
+ ONE: TOUCH;
18
+ };
19
+ _onPointerMove: typeof onPointerMove;
20
+ _onPointerDown: typeof onPointerDown;
21
+ _onPointerCancel: typeof onPointerCancel;
22
+ connect(): void;
23
+ _updatePointer(event: any): void;
24
+ _updateState(event: any): void;
25
+ state: number | undefined;
26
+ }
27
+ declare function onPointerMove(event: any): void;
28
+ declare function onPointerDown(event: any): void;
29
+ declare function onPointerCancel(): void;
30
+ declare class onPointerCancel {
31
+ state: number | undefined;
32
+ }
33
+ export {};
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import SoonSpace from 'soonspacejs';
1
+ import { default as SoonSpace } from 'soonspacejs';
2
2
  import { DragControls } from 'three/examples/jsm/controls/DragControls.js';
3
3
  import { Object3D } from 'three';
4
4
  export interface StartOptions {
package/dist/index.esm.js CHANGED
@@ -1 +1,108 @@
1
- import{Plane as t,Vector2 as e,Vector3 as n,Matrix4 as o,Controls as s,Raycaster as i,MOUSE as r,TOUCH as a}from"three";const l=new t,h=new e,c=new n,d=new e,u=new e,m=new n,p=new n,E=new o,v=new n,b=new n;let w=null;const y=[],P=-1,_=0,L=1;class x extends s{constructor(t,e,n=null){super(e,n),this.objects=t,this.objectSet=new WeakSet(t),this.poiNodeSet=new Set,t.forEach(t=>{"PoiNode"===t.stype&&this.poiNodeSet.add(t)}),this.recursive=!0,this.transformGroup=!1,this.rotateSpeed=1,this.raycaster=new i,this.mouseButtons={LEFT:r.PAN,MIDDLE:r.PAN,RIGHT:r.ROTATE},this.touches={ONE:a.PAN},this._onPointerMove=f.bind(this),this._onPointerDown=g.bind(this),this._onPointerCancel=S.bind(this),null!==n&&this.connect()}connect(){this.domElement.addEventListener("pointermove",this._onPointerMove),this.domElement.addEventListener("pointerdown",this._onPointerDown),this.domElement.addEventListener("pointerup",this._onPointerCancel),this.domElement.addEventListener("pointerleave",this._onPointerCancel),this.domElement.addEventListener("contextmenu",this._onContextMenu),this.domElement.style.touchAction="none",this.domElement.style.userSelect="none"}disconnect(){this.domElement.removeEventListener("pointermove",this._onPointerMove),this.domElement.removeEventListener("pointerdown",this._onPointerDown),this.domElement.removeEventListener("pointerup",this._onPointerCancel),this.domElement.removeEventListener("pointerleave",this._onPointerCancel),this.domElement.removeEventListener("contextmenu",this._onContextMenu),this.domElement.style.touchAction="auto",this.domElement.style.userSelect="auto",this.domElement.style.cursor=""}dispose(){this.disconnect()}_updatePointer(t){const e=this.domElement.getBoundingClientRect();h.x=(t.clientX-e.left)/e.width*2-1,h.y=-(t.clientY-e.top)/e.height*2+1}_updateState(t){let e;if("touch"===t.pointerType)e=this.touches.ONE;else switch(t.button){case 0:e=this.mouseButtons.LEFT;break;case 1:e=this.mouseButtons.MIDDLE;break;case 2:e=this.mouseButtons.RIGHT;break;default:e=null}switch(e){case r.PAN:case a.PAN:this.state=_;break;case r.ROTATE:case a.ROTATE:this.state=L;break;default:this.state=P}}}function f(t){const e=this.object;this.domElement;const n=this.raycaster;!1!==this.enabled&&(this._updatePointer(t),n.setFromCamera(h,e),w&&(this.state===_?n.ray.intersectPlane(l,m)&&w.position.copy(m.sub(c).applyMatrix4(E)):this.state===L&&(d.subVectors(h,u).multiplyScalar(this.rotateSpeed),w.rotateOnWorldAxis(v,d.x),w.rotateOnWorldAxis(b.normalize(),-d.y)),this.dispatchEvent({type:"drag",object:w}),u.copy(h)),u.copy(h))}function g(t){const e=this.object,n=this.domElement,o=this.raycaster;if(!1===this.enabled)return;this._updatePointer(t),this._updateState(t),y.length=0;let s=null;var i;(this.poiNodeSet.forEach(e=>{e.element.contains(t.target)&&(s=e)}),s||(o.setFromCamera(h,e),o.intersectObjects(this.objects,this.recursive,y),s=y[0]?y[0].object:null),s)&&(w=null!==(i=j(s,this.objectSet))&&void 0!==i?i:s,l.setFromNormalAndCoplanarPoint(e.getWorldDirection(l.normal),p.setFromMatrixPosition(w.matrixWorld)),o.ray.intersectPlane(l,m)&&(this.state===_?(E.copy(w.parent.matrixWorld).invert(),c.copy(m).sub(p.setFromMatrixPosition(w.matrixWorld))):this.state===L&&(v.set(0,1,0).applyQuaternion(e.quaternion).normalize(),b.set(1,0,0).applyQuaternion(e.quaternion).normalize())),n.style.cursor="move",this.dispatchEvent({type:"dragstart",object:w}));u.copy(h)}function S(){!1!==this.enabled&&(w&&(this.dispatchEvent({type:"dragend",object:w}),w=null),this.domElement.style.cursor="auto",this.state=P)}function j(t,e){return e.has(t)?t:null===t.parent?null:j(t.parent,e)}class A{constructor(t){this.controls=null,this.viewport=t.viewport}start(t,e={}){var n,o,s;if(!this.controls){const{dragStart:i,drag:r,dragEnd:a}=e;this.controls=new x(t,this.viewport.camera,this.viewport.container),null===(n=this.controls)||void 0===n||n.addEventListener("dragstart",t=>{this.viewport.controls.enabled=!1,null==i||i(t.object)}),null===(o=this.controls)||void 0===o||o.addEventListener("drag",t=>{this.viewport.render(),null==r||r(t.object)}),null===(s=this.controls)||void 0===s||s.addEventListener("dragend",t=>{this.viewport.controls.enabled=!0,null==a||a(t.object)})}}stop(){this.controls&&(this.controls.dispose(),this.controls=null)}}export{A as default};
1
+ import { Plane as N, Vector2 as P, Vector3 as h, Matrix4 as g, Controls as O, Raycaster as x, MOUSE as l, TOUCH as f } from "three";
2
+ const m = new N(), r = new P(), y = new h(), v = new P(), p = new P(), E = new h(), w = new h(), _ = new g(), b = new h(), A = new h();
3
+ let n = null;
4
+ const u = [], a = {
5
+ NONE: -1,
6
+ PAN: 0,
7
+ ROTATE: 1
8
+ };
9
+ class L extends O {
10
+ constructor(t, e, i = null) {
11
+ super(e, i), this.objects = t, this.objectSet = new WeakSet(t), this.poiNodeSet = /* @__PURE__ */ new Set(), t.forEach((s) => {
12
+ s.stype === "PoiNode" && this.poiNodeSet.add(s);
13
+ }), this.recursive = !0, this.transformGroup = !1, this.rotateSpeed = 1, this.raycaster = new x(), this.mouseButtons = { LEFT: l.PAN, MIDDLE: l.PAN, RIGHT: l.ROTATE }, this.touches = { ONE: f.PAN }, this._onPointerMove = C.bind(this), this._onPointerDown = S.bind(this), this._onPointerCancel = M.bind(this), i !== null && this.connect();
14
+ }
15
+ connect() {
16
+ this.domElement.addEventListener("pointermove", this._onPointerMove), this.domElement.addEventListener("pointerdown", this._onPointerDown), this.domElement.addEventListener("pointerup", this._onPointerCancel), this.domElement.addEventListener("pointerleave", this._onPointerCancel), this.domElement.addEventListener("contextmenu", this._onContextMenu), this.domElement.style.touchAction = "none", this.domElement.style.userSelect = "none";
17
+ }
18
+ disconnect() {
19
+ this.domElement.removeEventListener("pointermove", this._onPointerMove), this.domElement.removeEventListener("pointerdown", this._onPointerDown), this.domElement.removeEventListener("pointerup", this._onPointerCancel), this.domElement.removeEventListener("pointerleave", this._onPointerCancel), this.domElement.removeEventListener("contextmenu", this._onContextMenu), this.domElement.style.touchAction = "auto", this.domElement.style.userSelect = "auto", this.domElement.style.cursor = "";
20
+ }
21
+ dispose() {
22
+ this.disconnect();
23
+ }
24
+ _updatePointer(t) {
25
+ const e = this.domElement.getBoundingClientRect();
26
+ r.x = (t.clientX - e.left) / e.width * 2 - 1, r.y = -(t.clientY - e.top) / e.height * 2 + 1;
27
+ }
28
+ _updateState(t) {
29
+ let e;
30
+ if (t.pointerType === "touch")
31
+ e = this.touches.ONE;
32
+ else
33
+ switch (t.button) {
34
+ case 0:
35
+ e = this.mouseButtons.LEFT;
36
+ break;
37
+ case 1:
38
+ e = this.mouseButtons.MIDDLE;
39
+ break;
40
+ case 2:
41
+ e = this.mouseButtons.RIGHT;
42
+ break;
43
+ default:
44
+ e = null;
45
+ }
46
+ switch (e) {
47
+ case l.PAN:
48
+ case f.PAN:
49
+ this.state = a.PAN;
50
+ break;
51
+ case l.ROTATE:
52
+ case f.ROTATE:
53
+ this.state = a.ROTATE;
54
+ break;
55
+ default:
56
+ this.state = a.NONE;
57
+ }
58
+ }
59
+ }
60
+ function C(o) {
61
+ const t = this.object;
62
+ this.domElement;
63
+ const e = this.raycaster;
64
+ this.enabled !== !1 && (this._updatePointer(o), e.setFromCamera(r, t), n && (this.state === a.PAN ? e.ray.intersectPlane(m, E) && n.position.copy(E.sub(y).applyMatrix4(_)) : this.state === a.ROTATE && (v.subVectors(r, p).multiplyScalar(this.rotateSpeed), n.rotateOnWorldAxis(b, v.x), n.rotateOnWorldAxis(A.normalize(), -v.y)), this.dispatchEvent({ type: "drag", object: n }), p.copy(r)), p.copy(r));
65
+ }
66
+ function S(o) {
67
+ const t = this.object, e = this.domElement, i = this.raycaster;
68
+ if (this.enabled === !1) return;
69
+ this._updatePointer(o), this._updateState(o), u.length = 0;
70
+ let s = null;
71
+ this.poiNodeSet.forEach((d) => {
72
+ d.element.contains(o.target) && (s = d);
73
+ }), s || (i.setFromCamera(r, t), i.intersectObjects(this.objects, this.recursive, u), s = u[0] ? u[0].object : null), s && (n = T(s, this.objectSet) ?? s, m.setFromNormalAndCoplanarPoint(
74
+ t.getWorldDirection(m.normal),
75
+ w.setFromMatrixPosition(n.matrixWorld)
76
+ ), i.ray.intersectPlane(m, E) && (this.state === a.PAN ? (_.copy(n.parent.matrixWorld).invert(), y.copy(E).sub(w.setFromMatrixPosition(n.matrixWorld))) : this.state === a.ROTATE && (b.set(0, 1, 0).applyQuaternion(t.quaternion).normalize(), A.set(1, 0, 0).applyQuaternion(t.quaternion).normalize())), e.style.cursor = "move", this.dispatchEvent({ type: "dragstart", object: n })), p.copy(r);
77
+ }
78
+ function M() {
79
+ this.enabled !== !1 && (n && (this.dispatchEvent({ type: "dragend", object: n }), n = null), this.domElement.style.cursor = "auto", this.state = a.NONE);
80
+ }
81
+ function T(o, t) {
82
+ return t.has(o) ? o : o.parent === null ? null : T(o.parent, t);
83
+ }
84
+ class R {
85
+ controls = null;
86
+ viewport;
87
+ constructor(t) {
88
+ this.viewport = t.viewport;
89
+ }
90
+ start(t, e = {}) {
91
+ if (!this.controls) {
92
+ const { dragStart: i, drag: s, dragEnd: d } = e;
93
+ this.controls = new L(t, this.viewport.camera, this.viewport.container), this.controls?.addEventListener("dragstart", (c) => {
94
+ this.viewport.controls.enabled = !1, i?.(c.object);
95
+ }), this.controls?.addEventListener("drag", (c) => {
96
+ this.viewport.render(), s?.(c.object);
97
+ }), this.controls?.addEventListener("dragend", (c) => {
98
+ this.viewport.controls.enabled = !0, d?.(c.object);
99
+ });
100
+ }
101
+ }
102
+ stop() {
103
+ this.controls && (this.controls.dispose(), this.controls = null);
104
+ }
105
+ }
106
+ export {
107
+ R as default
108
+ };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@soonspacejs/plugin-drag-controls",
3
3
  "pluginName": "Drag Controls Plugin",
4
- "version": "2.13.17",
4
+ "version": "2.14.1",
5
5
  "description": "Drag Controls Plugin plugin for SoonSpace.js",
6
6
  "main": "dist/index.esm.js",
7
7
  "module": "dist/index.esm.js",
@@ -13,8 +13,8 @@
13
13
  ],
14
14
  "author": "xunwei",
15
15
  "license": "UNLICENSED",
16
- "gitHead": "8afa5fda9a0ef2c080060e7d8e71a8bf168fd4d2",
16
+ "gitHead": "27d5e0bcd79ff71c8e2943a8420c39624ae6f8e6",
17
17
  "peerDependencies": {
18
- "soonspacejs": "2.13.17"
18
+ "soonspacejs": "2.14.1"
19
19
  }
20
20
  }