refactor XR controller handling in design mode
This commit is contained in:
@@ -148,6 +148,7 @@ export default {
|
||||
value: s.data.id
|
||||
}))
|
||||
window.addEventListener('resize', this.resize);
|
||||
engine.addEventListener('controller', this.onController);
|
||||
},
|
||||
|
||||
async unmounted(){
|
||||
@@ -249,14 +250,45 @@ export default {
|
||||
}));
|
||||
},
|
||||
|
||||
onController(event){
|
||||
engine.transformControls.getRaycaster().setFromXRController(event.data.target);
|
||||
switch (event.data.type) {
|
||||
case 'selectstart':
|
||||
engine.transformControls.pointerDown(null);
|
||||
break;
|
||||
case 'selectend':
|
||||
engine.transformControls.pointerUp(null);
|
||||
break;
|
||||
case 'move':
|
||||
engine.transformControls.pointerHover(null);
|
||||
engine.transformControls.pointerMove(null);
|
||||
break;
|
||||
case 'select':
|
||||
this.intersect();
|
||||
break;
|
||||
}
|
||||
},
|
||||
|
||||
targetClick(e){
|
||||
if (performance.now() - this.pointerDownTime < 200){
|
||||
let intersects = engine.intersect(e, this.$refs.target, this.flatObjects.map(o=>o.value.__o), true);
|
||||
if (intersects.length){
|
||||
this.selectObject(intersects[0].object.__pn_id)
|
||||
}else{
|
||||
engine.transformControls.detach();
|
||||
let mouse = engine.getMouseVector(e, this.$refs.target);
|
||||
engine.transformControls.getRaycaster().setFromCamera(mouse, engine.camera);
|
||||
this.intersect()
|
||||
}
|
||||
},
|
||||
|
||||
intersect(){
|
||||
let objects = this.flatObjects.map(o=>o.value.__o).filter(o => o.visible);
|
||||
let intersects = engine.transformControls.getRaycaster().intersectObjects(objects, true);
|
||||
intersects.forEach(o => {
|
||||
while (o.object && !objects.includes(o.object)) {
|
||||
o.object = o.object.parent;
|
||||
}
|
||||
})
|
||||
if (intersects.length){
|
||||
this.selectObject(intersects[0].object.__pn_id)
|
||||
}else{
|
||||
engine.transformControls.detach();
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
@@ -53,7 +53,6 @@ export default {
|
||||
|
||||
resize(){
|
||||
let r = this.$refs.target;
|
||||
this.debug('resizing', r.clientWidth, r.clientHeight, r)
|
||||
engine.resize(r.clientWidth, r.clientHeight);
|
||||
},
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@ export default {
|
||||
xr: true,
|
||||
gizmo: false,
|
||||
stats: true,
|
||||
depthSense: this.store.prefs.xr.depthSense,
|
||||
//depthSense: this.store.prefs.xr.depthSense,
|
||||
mode: 'GamePreview'
|
||||
});
|
||||
manager = await new GameManager(engine, this.id);
|
||||
@@ -75,7 +75,6 @@ export default {
|
||||
},
|
||||
resize(){
|
||||
let r = this.$refs.target;
|
||||
this.debug('resizing', r.clientWidth, r.clientHeight, r)
|
||||
engine.resize(r.clientWidth, r.clientHeight);
|
||||
},
|
||||
|
||||
|
||||
Reference in New Issue
Block a user