This commit is contained in:
syuilo 2026-05-13 19:26:55 +09:00
commit b69efeeb79
5 changed files with 28 additions and 4 deletions

View file

@ -182,9 +182,9 @@ export abstract class EngineControllerBase {
if (prevTwoTouchPointsDistance > 0) {
const delta = distance - prevTwoTouchPointsDistance;
if (this.worker != null) {
this.worker.postMessage({ type: 'input:wheel', ev: { deltaY: -delta * 3 } });
this.worker.postMessage({ type: 'input:zoom', ev: { delta: delta } });
} else if (this.engine != null) {
this.engine.inputs.emit('wheel', { deltaY: -delta * 3 });
this.engine.inputs.emit('zoom', { delta: delta });
}
}
prevTwoTouchPointsDistance = distance;

View file

@ -208,6 +208,7 @@ export class RoomEngine extends EventEmitter {
'keydown': (event: { code: string; shiftKey: boolean; }) => void;
'keyup': (event: { code: string; shiftKey: boolean; }) => void;
'wheel': (event: { deltaY: number; }) => void;
'zoom': (event: { delta: number; }) => void;
'pointer': (event: { x: number; y: number; }) => void;
}> = new EventEmitter();
@ -444,6 +445,15 @@ export class RoomEngine extends EventEmitter {
}
});
this.inputs.on('zoom', (ev) => {
if (this.grabbingCtx != null) {
this.changeGrabbingDistance(ev.delta * 0.1);
} else {
this.camera.fov += -ev.delta * 0.003;
this.camera.fov = Math.max(0.25, Math.min(1, this.camera.fov));
}
});
this.inputs.on('click', (ev) => {
if (this.grabbingCtx != null) return;

View file

@ -39,6 +39,7 @@ export class RoomObjectPreviewEngine extends EventEmitter {
'keydown': (event: { code: string; shiftKey: boolean; }) => void;
'keyup': (event: { code: string; shiftKey: boolean; }) => void;
'wheel': (event: { deltaY: number; }) => void;
'zoom': (event: { delta: number; }) => void;
'pointer': (event: { x: number; y: number; }) => void;
}> = new EventEmitter();
@ -207,6 +208,11 @@ export class RoomObjectPreviewEngine extends EventEmitter {
this.camera.fov = Math.max(0.25, Math.min(0.5, this.camera.fov));
});
this.inputs.on('zoom', (ev) => {
this.camera.fov += -ev.delta * 0.0015;
this.camera.fov = Math.max(0.25, Math.min(0.5, this.camera.fov));
});
this.inputs.on('pointer', (ev) => {
(this.camera.inputs.attached.manual as ArcRotateCameraManualInput).setRotationVector({ x: ev.x, y: ev.y });
});
@ -244,8 +250,6 @@ export class RoomObjectPreviewEngine extends EventEmitter {
this.camera.upperRadiusLimit = cm(1000);
this.camera.useAutoRotationBehavior = true;
this.camera.autoRotationBehavior!.idleRotationSpeed = 0.3;
this.camera.panningSensibility = 0;
this.camera.wheelDeltaPercentage = 0.01;
//this.camera.mode = BABYLON.Camera.ORTHOGRAPHIC_CAMERA;
this.camera.setTarget(new BABYLON.Vector3(0, boundingInfo.centerWorld.y, 0));
this.camera.inputs.clear();

View file

@ -63,6 +63,11 @@ onmessage = async (event) => {
engine.inputs.emit('wheel', event.data.ev);
break;
}
case 'input:zoom': {
if (engine == null) break;
engine.inputs.emit('zoom', event.data.ev);
break;
}
case 'input:pointer': {
if (engine == null) break;
engine.inputs.emit('pointer', event.data.ev);

View file

@ -65,6 +65,11 @@ onmessage = async (event) => {
engine.inputs.emit('wheel', event.data.ev);
break;
}
case 'input:zoom': {
if (engine == null) break;
engine.inputs.emit('zoom', event.data.ev);
break;
}
case 'input:pointer': {
if (engine == null) break;
engine.inputs.emit('pointer', event.data.ev);