@soonspacejs/plugin-follow-mouse 2.6.1 → 2.6.3

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 CHANGED
@@ -1 +1 @@
1
- import{Vector3 as s,Box3 as e}from"three";function t(s,e,t,o){return new(t||(t=Promise))((function(i,n){function c(s){try{l(o.next(s))}catch(s){n(s)}}function h(s){try{l(o.throw(s))}catch(s){n(s)}}function l(s){var e;s.done?i(s.value):(e=s.value,e instanceof t?e:new t((function(s){s(e)}))).then(c,h)}l((o=o.apply(s,e||[])).next())}))}const o="followMouseBoxHelper";class i{constructor(t){this.ssp=t,this.mouseDownModelPosition=new s,this.object=null,this.objectBbox=new e(new s,new s),this.objectSourcePosition=new s,this.sceneMesh=[],this.helper=null,this.placedObject=[],this.options={},this.onMouseMove=this.onMouseMove.bind(this),this.onMouseDown=this.onMouseDown.bind(this),this.onClick=this.onClick.bind(this),this.onRightClick=this.onRightClick.bind(this),this.onDblClick=this.onDblClick.bind(this),this.onKeyUp=this.onKeyUp.bind(this)}start(s){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.options=e,this.object=s,this.objectBbox.setFromObject(s),this.objectSourcePosition.copy(s.position.clone()),this.sceneMesh=this.ssp.viewport.scener.intersectsList.getAll().filter((s=>{let e=s.visible;return s.traverseAncestors((s=>{!1===s.visible&&(e=!1)})),e}));const{openHelper:t=!0,helperColor:i=16776960}=this.options;t&&"Model"===this.object.stype&&(s.updateWorldMatrix(!0,!0),this.helper=this.ssp.addBoxHelper({id:o,box:this.objectBbox,color:i}),this.ssp.signals.sceneChanged.dispatch()),s.traverse((s=>{const e=this.sceneMesh.findIndex((e=>e.uuid===s.uuid));-1!==e&&this.sceneMesh.splice(e,1)})),this.ssp.signals.mouseMove.add(this.onMouseMove),this.ssp.signals.mouseDown.add(this.onMouseDown),this.ssp.signals.click.add(this.onClick),this.ssp.signals.rightClick.add(this.onRightClick),this.ssp.signals.dblClick.add(this.onDblClick),this.ssp.signals.keyUp.add(this.onKeyUp)}stop(){var t;null===(t=this.object)||void 0===t||t.position.copy(this.objectSourcePosition.clone()),this.ssp.removeObjectById(o),this.object=null,this.objectBbox=new e(new s,new s),this.objectSourcePosition=new s,this.sceneMesh=[],this.helper=null,this.placedObject=[],this.options={},this.mouseDownModelPosition=new s,this.ssp.signals.mouseMove.remove(this.onMouseMove),this.ssp.signals.mouseDown.remove(this.onMouseDown),this.ssp.signals.click.remove(this.onClick),this.ssp.signals.dblClick.remove(this.onDblClick),this.ssp.signals.keyUp.remove(this.onKeyUp)}onMouseMove(t){if(t.preventDefault(),!this.object)return;const{offset:o=new s(1,1,1)}=this.options,i=this.ssp.viewport.getIntersects(t,this.sceneMesh),n=this.object.getWorldPosition(new s).sub(this.object.position),c=new s;let h="y";if(i.length>0){const{point:s,face:e}=i[0];if(c.copy(s.clone()),e){const{normal:s}=e;0===s.y&&0===s.z&&(1===s.x?h="x":-1===s.x&&(h="-x")),0===s.x&&0===s.z&&(1===s.y?h="y":-1===s.y&&(h="-y")),0===s.x&&0===s.y&&(1===s.z?h="z":-1===s.z&&(h="-z"))}}else c.copy(this.ssp.getPositionByOffset(t,.1));const l=c.sub(n),p=this.objectBbox.getSize(new s);switch(h){case"x":l.setX(l.x+p.x/2+o.x);break;case"-x":l.setX(l.x-p.x/2-o.x);break;case"y":l.setY(l.y+o.y);break;case"-y":l.setY(l.y-p.y-o.y);break;case"z":l.setZ(l.z+p.z/2+o.z);break;case"-z":l.setZ(l.z-p.z/2-o.z)}this.object.position.copy(l).setY(l.y),this.helper&&this.helper.box.copy(new e(new s,new s).setFromObject(this.object)),this.ssp.signals.sceneChanged.dispatch()}onMouseDown(e){this.object&&this.mouseDownModelPosition.copy(this.object.getWorldPosition(new s))}onClick(s){this.onPlace()}onRightClick(s){this.onDelPrev()}onDblClick(s){return t(this,void 0,void 0,(function*(){yield this.onPlace(),this.options.onDone&&this.options.onDone(this.placedObject),this.stop()}))}onKeyUp(s){switch(s.code){case"Backspace":this.onDelPrev();break;case"Enter":this.options.onDone&&this.options.onDone(this.placedObject),this.stop();break;case"Escape":this.options.onCancel&&this.options.onCancel(),this.stop()}}onPlace(){var s,e,o,i;return t(this,void 0,void 0,(function*(){if("Model"===(null===(s=this.object)||void 0===s?void 0:s.stype))return this.ssp.cloneModel(this.object,{id:`clone_${this.object.sid}_${this.placedObject.length+1}`,position:this.mouseDownModelPosition.clone()}).then((s=>{var e,t;this.placedObject.push(s),null===(t=(e=this.options).onPlace)||void 0===t||t.call(e,s)}));if("Poi"!==(null===(e=this.object)||void 0===e?void 0:e.stype))return Promise.reject("In soonspacejs: 插件(plugin-follow-mouse)传入对象类型错误,仅支持 sbm、model、poi !");{const s=this.ssp.clonePoi(this.object,{id:`clone_${this.object.sid}_${this.placedObject.length+1}`,position:this.mouseDownModelPosition.clone()});if(!s)return Promise.reject("In soonspacejs: 插件(plugin-follow-mouse)摆放 Poi 对象时错误!");this.placedObject.push(s),null===(i=(o=this.options).onPlace)||void 0===i||i.call(o,s)}}))}onDelPrev(){if(0===this.placedObject.length)return;const s=this.placedObject[this.placedObject.length-1];this.ssp.removeObject(s),this.placedObject.splice(this.placedObject.length-1,1),this.options.onBack&&this.options.onBack(s)}}export{i as default};
1
+ import{Vector3 as s,Box3 as e}from"three";const t="followMouseBoxHelper";class o{constructor(t){this.ssp=t,this.mouseDownModelPosition=new s,this.object=null,this.objectBbox=new e(new s,new s),this.objectSourcePosition=new s,this.sceneMesh=[],this.helper=null,this.placedObject=[],this.options={},this.onMouseMove=this.onMouseMove.bind(this),this.onMouseDown=this.onMouseDown.bind(this),this.onClick=this.onClick.bind(this),this.onRightClick=this.onRightClick.bind(this),this.onDblClick=this.onDblClick.bind(this),this.onKeyUp=this.onKeyUp.bind(this)}start(s){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.options=e,this.object=s,this.objectBbox.setFromObject(s),this.objectSourcePosition.copy(s.position.clone()),this.sceneMesh=this.ssp.viewport.scener.intersectsList.getAll().filter((s=>{let e=s.visible;return s.traverseAncestors((s=>{!1===s.visible&&(e=!1)})),e}));const{openHelper:o=!0,helperColor:i=16776960}=this.options;o&&"Model"===this.object.stype&&(s.updateWorldMatrix(!0,!0),this.helper=this.ssp.addBoxHelper({id:t,box:this.objectBbox,color:i}),this.ssp.signals.sceneChanged.dispatch()),s.traverse((s=>{const e=this.sceneMesh.findIndex((e=>e.uuid===s.uuid));-1!==e&&this.sceneMesh.splice(e,1)})),this.ssp.signals.mouseMove.add(this.onMouseMove),this.ssp.signals.mouseDown.add(this.onMouseDown),this.ssp.signals.click.add(this.onClick),this.ssp.signals.rightClick.add(this.onRightClick),this.ssp.signals.dblClick.add(this.onDblClick),this.ssp.signals.keyUp.add(this.onKeyUp)}stop(){var o;null===(o=this.object)||void 0===o||o.position.copy(this.objectSourcePosition.clone()),this.ssp.removeObjectById(t),this.object=null,this.objectBbox=new e(new s,new s),this.objectSourcePosition=new s,this.sceneMesh=[],this.helper=null,this.placedObject=[],this.options={},this.mouseDownModelPosition=new s,this.ssp.signals.mouseMove.remove(this.onMouseMove),this.ssp.signals.mouseDown.remove(this.onMouseDown),this.ssp.signals.click.remove(this.onClick),this.ssp.signals.dblClick.remove(this.onDblClick),this.ssp.signals.keyUp.remove(this.onKeyUp)}onMouseMove(t){if(t.preventDefault(),!this.object)return;const{offset:o=new s(1,1,1)}=this.options,i=this.ssp.viewport.getIntersects(t,this.sceneMesh),n=this.object.getWorldPosition(new s).sub(this.object.position),h=new s;let c="y";if(i.length>0){const{point:s,face:e}=i[0];if(h.copy(s.clone()),e){const{normal:s}=e;0===s.y&&0===s.z&&(1===s.x?c="x":-1===s.x&&(c="-x")),0===s.x&&0===s.z&&(1===s.y?c="y":-1===s.y&&(c="-y")),0===s.x&&0===s.y&&(1===s.z?c="z":-1===s.z&&(c="-z"))}}else h.copy(this.ssp.getPositionByOffset(t,.1));const l=h.sub(n),p=this.objectBbox.getSize(new s);switch(c){case"x":l.setX(l.x+p.x/2+o.x);break;case"-x":l.setX(l.x-p.x/2-o.x);break;case"y":l.setY(l.y+o.y);break;case"-y":l.setY(l.y-p.y-o.y);break;case"z":l.setZ(l.z+p.z/2+o.z);break;case"-z":l.setZ(l.z-p.z/2-o.z)}this.object.position.copy(l).setY(l.y),this.helper&&this.helper.box.copy(new e(new s,new s).setFromObject(this.object)),this.ssp.signals.sceneChanged.dispatch()}onMouseDown(e){this.object&&this.mouseDownModelPosition.copy(this.object.getWorldPosition(new s))}onClick(s){this.onPlace()}onRightClick(s){this.onDelPrev()}async onDblClick(s){await this.onPlace(),this.options.onDone&&this.options.onDone(this.placedObject),this.stop()}onKeyUp(s){switch(s.code){case"Backspace":this.onDelPrev();break;case"Enter":this.options.onDone&&this.options.onDone(this.placedObject),this.stop();break;case"Escape":this.options.onCancel&&this.options.onCancel(),this.stop()}}async onPlace(){var s,e,t,o;if("Model"===(null===(s=this.object)||void 0===s?void 0:s.stype))return this.ssp.cloneModel(this.object,{id:`clone_${this.object.sid}_${this.placedObject.length+1}`,position:this.mouseDownModelPosition.clone()}).then((s=>{var e,t;this.placedObject.push(s),null===(t=(e=this.options).onPlace)||void 0===t||t.call(e,s)}));if("Poi"!==(null===(e=this.object)||void 0===e?void 0:e.stype))return Promise.reject("In soonspacejs: 插件(plugin-follow-mouse)传入对象类型错误,仅支持 sbm、model、poi !");{const s=this.ssp.clonePoi(this.object,{id:`clone_${this.object.sid}_${this.placedObject.length+1}`,position:this.mouseDownModelPosition.clone()});if(!s)return Promise.reject("In soonspacejs: 插件(plugin-follow-mouse)摆放 Poi 对象时错误!");this.placedObject.push(s),null===(o=(t=this.options).onPlace)||void 0===o||o.call(t,s)}}onDelPrev(){if(0===this.placedObject.length)return;const s=this.placedObject[this.placedObject.length-1];this.ssp.removeObject(s),this.placedObject.splice(this.placedObject.length-1,1),this.options.onBack&&this.options.onBack(s)}}export{o as default};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@soonspacejs/plugin-follow-mouse",
3
3
  "pluginName": "FollowMousePlugin",
4
- "version": "2.6.1",
4
+ "version": "2.6.3",
5
5
  "description": "Scene object follow mouse 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": "xuek",
15
15
  "license": "UNLICENSED",
16
- "gitHead": "7c3d5b68b469b40bce705edf9fc5b25aa23d972c",
16
+ "gitHead": "7db7818ccacedf46a9ade36e0885320325813b36",
17
17
  "peerDependencies": {
18
- "soonspacejs": "2.6.1"
18
+ "soonspacejs": "2.6.3"
19
19
  }
20
20
  }