design mode
This commit is contained in:
+69
-49
@@ -19,6 +19,7 @@ class GameEngine {
|
||||
async init(domNode, opts = {}) {
|
||||
this.w = domNode.clientWidth || 1200, this.h = domNode.clientHeight || 800;
|
||||
this.aspect = this.w / this.h
|
||||
this.opts = opts;
|
||||
const gameEngine = this;
|
||||
|
||||
this.perspectiveCamera = new THREE.PerspectiveCamera(45, this.aspect, 0.01, 1000);
|
||||
@@ -120,7 +121,9 @@ class GameEngine {
|
||||
gameEngine.mixers.forEach(m => m.update(delta));
|
||||
gameEngine.handleXrAction(gameEngine, delta)
|
||||
gameEngine.render(scene, gameEngine.camera);
|
||||
gameEngine.gizmo?.render();
|
||||
if (!renderer.xr.isPresenting) {
|
||||
gameEngine.gizmo?.render();
|
||||
}
|
||||
}
|
||||
renderer.setAnimationLoop(animate);
|
||||
|
||||
@@ -290,19 +293,30 @@ class GameEngine {
|
||||
}
|
||||
}
|
||||
if (gp.buttons[4]?.pressed) {
|
||||
// gameEngine.setCameraOrthographic();
|
||||
// gameEngine.renderer.xr.updateCamera(gameEngine.orthographicCamera);
|
||||
let session = gameEngine.renderer.xr.getFrame().session;
|
||||
console.log(session);
|
||||
session.pauseDepthSensing();
|
||||
}
|
||||
if (gp.buttons[5]?.pressed) {
|
||||
// gameEngine.setCameraOrthographic();
|
||||
// gameEngine.renderer.xr.updateCamera(gameEngine.orthographicCamera);
|
||||
let session = gameEngine.renderer.xr.getFrame().session;
|
||||
console.log(session);
|
||||
session.resumeDepthSensing();
|
||||
let x = performance.now() % 1000;
|
||||
if (x < 333) {
|
||||
gameEngine.transformControls.setMode('translate');
|
||||
}else if (x < 666) {
|
||||
gameEngine.transformControls.setMode('scale');
|
||||
}else{
|
||||
gameEngine.transformControls.setMode('rotate');
|
||||
}
|
||||
// let nextMode = {
|
||||
// 'translate': 'scale',
|
||||
// 'scale': 'rotate',
|
||||
// 'rotate': 'translate'
|
||||
// }
|
||||
// if(gameEngine.opts.designMode){;
|
||||
// gameEngine.transformControls.setMode(nextMode[gameEngine.transformControls.getMode()]);
|
||||
// }
|
||||
}
|
||||
// if (gp.buttons[5]?.pressed) {
|
||||
// // gameEngine.setCameraOrthographic();
|
||||
// // gameEngine.renderer.xr.updateCamera(gameEngine.orthographicCamera);
|
||||
// let session = gameEngine.renderer.xr.getFrame().session;
|
||||
// console.log(session);
|
||||
// session.resumeDepthSensing();
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -311,51 +325,57 @@ class GameEngine {
|
||||
//event.type !== 'move' && console.log(event)
|
||||
const controller = event.target;
|
||||
//console.log(event)
|
||||
if (!controller.userData) return
|
||||
if (controller.userData.active === false) return;
|
||||
this.transformControls.getRaycaster().setFromXRController(controller);
|
||||
switch (event.type) {
|
||||
case 'selectstart':
|
||||
this.transformControls.pointerDown(null);
|
||||
break;
|
||||
case 'selectend':
|
||||
this.transformControls.pointerUp(null);
|
||||
break;
|
||||
case 'move':
|
||||
this.transformControls.pointerHover(null);
|
||||
this.transformControls.pointerMove(null);
|
||||
break;
|
||||
|
||||
if (this.opts.designMode){
|
||||
if (!controller.userData) return
|
||||
if (controller.userData.active === false) return;
|
||||
this.transformControls.getRaycaster().setFromXRController(controller);
|
||||
switch (event.type) {
|
||||
case 'selectstart':
|
||||
this.transformControls.pointerDown(null);
|
||||
break;
|
||||
case 'selectend':
|
||||
this.transformControls.pointerUp(null);
|
||||
break;
|
||||
case 'move':
|
||||
this.transformControls.pointerHover(null);
|
||||
this.transformControls.pointerMove(null);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
onSelect(event) {
|
||||
const controller = event.target;
|
||||
this.xrController1.userData.active = false;
|
||||
this.xrController2.userData.active = false;
|
||||
|
||||
if (controller === this.xrController1) {
|
||||
this.xrController1.userData.active = true;
|
||||
this.xrController1.add(this.controllerLine);
|
||||
}
|
||||
if (this.opts.designMode){
|
||||
this.xrController1.userData.active = false;
|
||||
this.xrController2.userData.active = false;
|
||||
|
||||
if (controller === this.xrController2) {
|
||||
this.xrController2.userData.active = true;
|
||||
this.xrController2.add(this.controllerLine);
|
||||
}
|
||||
|
||||
this.raycaster.setFromXRController(controller);
|
||||
const intersects = this.raycaster.intersectObjects(this.activeObjects.children, true);
|
||||
|
||||
intersects.forEach(o => {
|
||||
while (o.object && !this.activeObjects.children.includes(o.object)) {
|
||||
o.object = o.object.parent;
|
||||
if (controller === this.xrController1) {
|
||||
this.xrController1.userData.active = true;
|
||||
this.xrController1.add(this.controllerLine);
|
||||
}
|
||||
})
|
||||
|
||||
if (intersects.length > 0) {
|
||||
setTimeout(() => {
|
||||
this.transformControls.attach(intersects[0].object);
|
||||
}, 100);
|
||||
if (controller === this.xrController2) {
|
||||
this.xrController2.userData.active = true;
|
||||
this.xrController2.add(this.controllerLine);
|
||||
}
|
||||
|
||||
this.raycaster.setFromXRController(controller);
|
||||
const intersects = this.raycaster.intersectObjects(this.activeObjects.children, true);
|
||||
|
||||
intersects.forEach(o => {
|
||||
while (o.object && !this.activeObjects.children.includes(o.object)) {
|
||||
o.object = o.object.parent;
|
||||
}
|
||||
})
|
||||
|
||||
if (intersects.length > 0) {
|
||||
setTimeout(() => {
|
||||
this.transformControls.attach(intersects[0].object);
|
||||
}, 100);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user