VoxelPainterControls doesn't have to be an EventDispatcher imo

This commit is contained in:
HF 2024-01-20 19:25:59 +01:00
parent 0abefce305
commit ca067fa87d

View File

@ -16,7 +16,6 @@
/* eslint-disable no-console */ /* eslint-disable no-console */
import { import {
EventDispatcher,
MOUSE, MOUSE,
Quaternion, Quaternion,
Spherical, Spherical,
@ -50,9 +49,6 @@ const STATE = {
TOUCH_DOLLY_PAN: 5, TOUCH_DOLLY_PAN: 5,
TOUCH_DOLLY_ROTATE: 6, TOUCH_DOLLY_ROTATE: 6,
}; };
const CHANGE_EVENT = { type: 'change' };
const START_EVENT = { type: 'start' };
const END_EVENT = { type: 'end' };
/* /*
* configuration * configuration
@ -89,7 +85,7 @@ const screenSpacePanning = true; // if true, pan in screen-space
// Pan - right mouse, or left mouse + ctrl/meta/shiftKey, // Pan - right mouse, or left mouse + ctrl/meta/shiftKey,
// or arrow keys / touch: two-finger move // or arrow keys / touch: two-finger move
class VoxelPainterControls extends EventDispatcher { class VoxelPainterControls {
store; store;
camera; camera;
renderer; renderer;
@ -141,7 +137,6 @@ class VoxelPainterControls extends EventDispatcher {
vec = new Vector3(); vec = new Vector3();
constructor(renderer, camera, target, domElement, store) { constructor(renderer, camera, target, domElement, store) {
super();
this.renderer = renderer; this.renderer = renderer;
this.camera = camera; this.camera = camera;
this.domElement = domElement; this.domElement = domElement;
@ -550,7 +545,6 @@ class VoxelPainterControls extends EventDispatcher {
this.handleMouseUp(event); this.handleMouseUp(event);
document.removeEventListener('mousemove', this.onMouseMove, false); document.removeEventListener('mousemove', this.onMouseMove, false);
document.removeEventListener('mouseup', this.onMouseUp, false); document.removeEventListener('mouseup', this.onMouseUp, false);
this.dispatchEvent(END_EVENT);
this.state = STATE.NONE; this.state = STATE.NONE;
} }
@ -566,9 +560,7 @@ class VoxelPainterControls extends EventDispatcher {
event.preventDefault(); event.preventDefault();
event.stopPropagation(); event.stopPropagation();
this.dispatchEvent(START_EVENT);
this.handleMouseWheel(event); this.handleMouseWheel(event);
this.dispatchEvent(END_EVENT);
} }
onTouchStart(event) { onTouchStart(event) {
@ -580,67 +572,48 @@ class VoxelPainterControls extends EventDispatcher {
switch (event.touches.length) { switch (event.touches.length) {
case 1: case 1:
switch (TOUCHES.ONE) { switch (TOUCHES.ONE) {
case TOUCH.ROTATE: case TOUCH.ROTATE:
if (!enableRotate) { if (!enableRotate) {
return; return;
} }
this.handleTouchStartRotate(event); this.handleTouchStartRotate(event);
this.state = STATE.TOUCH_ROTATE; this.state = STATE.TOUCH_ROTATE;
break; break;
case TOUCH.PAN: case TOUCH.PAN:
if (!enablePan) { if (!enablePan) {
return; return;
} }
this.handleTouchStartPan(event); this.handleTouchStartPan(event);
this.state = STATE.TOUCH_PAN; this.state = STATE.TOUCH_PAN;
break; break;
default: default:
this.state = STATE.NONE; this.state = STATE.NONE;
} }
break; break;
case 2: case 2:
switch (TOUCHES.TWO) { switch (TOUCHES.TWO) {
case TOUCH.DOLLY_PAN: case TOUCH.DOLLY_PAN:
if (!enableZoom && !enablePan) { if (!enableZoom && !enablePan) {
return; return;
} }
this.handleTouchStartDollyPan(event); this.handleTouchStartDollyPan(event);
this.state = STATE.TOUCH_DOLLY_PAN; this.state = STATE.TOUCH_DOLLY_PAN;
break; break;
case TOUCH.DOLLY_ROTATE: case TOUCH.DOLLY_ROTATE:
if (!enableZoom && !enableRotate) { if (!enableZoom && !enableRotate) {
return; return;
} }
this.handleTouchStartDollyRotate(event); this.handleTouchStartDollyRotate(event);
this.state = STATE.TOUCH_DOLLY_ROTATE; this.state = STATE.TOUCH_DOLLY_ROTATE;
break; break;
default: default:
this.state = STATE.NONE; this.state = STATE.NONE;
} }
break; break;
default: default:
this.state = STATE.NONE; this.state = STATE.NONE;
} }
if (this.state !== STATE.NONE) {
this.dispatchEvent(START_EVENT);
}
} }
onTouchMove(event) { onTouchMove(event) {
@ -656,38 +629,30 @@ class VoxelPainterControls extends EventDispatcher {
if (!enableRotate) { if (!enableRotate) {
return; return;
} }
this.handleTouchMoveRotate(event); this.handleTouchMoveRotate(event);
this.update(); this.update();
break; break;
case STATE.TOUCH_PAN: case STATE.TOUCH_PAN:
if (!enablePan) { if (!enablePan) {
return; return;
} }
this.handleTouchMovePan(event); this.handleTouchMovePan(event);
this.update(); this.update();
break; break;
case STATE.TOUCH_DOLLY_PAN: case STATE.TOUCH_DOLLY_PAN:
if (!enableZoom && !enablePan) { if (!enableZoom && !enablePan) {
return; return;
} }
this.handleTouchMoveDollyPan(event); this.handleTouchMoveDollyPan(event);
this.update(); this.update();
break; break;
case STATE.TOUCH_DOLLY_ROTATE: case STATE.TOUCH_DOLLY_ROTATE:
if (!enableZoom && !enableRotate) { if (!enableZoom && !enableRotate) {
return; return;
} }
this.handleTouchMoveDollyRotate(event); this.handleTouchMoveDollyRotate(event);
this.update(); this.update();
break; break;
default: default:
this.state = STATE.NONE; this.state = STATE.NONE;
} }
@ -699,7 +664,6 @@ class VoxelPainterControls extends EventDispatcher {
} }
this.handleTouchEnd(event); this.handleTouchEnd(event);
this.dispatchEvent(END_EVENT);
this.state = STATE.NONE; this.state = STATE.NONE;
} }
@ -773,8 +737,6 @@ class VoxelPainterControls extends EventDispatcher {
if (this.state !== STATE.NONE) { if (this.state !== STATE.NONE) {
document.addEventListener('mousemove', this.onMouseMove, false); document.addEventListener('mousemove', this.onMouseMove, false);
document.addEventListener('mouseup', this.onMouseUp, false); document.addEventListener('mouseup', this.onMouseUp, false);
this.dispatchEvent(START_EVENT);
} }
} }
@ -799,7 +761,6 @@ class VoxelPainterControls extends EventDispatcher {
this.camera.zoom = this.zoom0; this.camera.zoom = this.zoom0;
this.camera.updateProjectionMatrix(); this.camera.updateProjectionMatrix();
this.dispatchEvent(CHANGE_EVENT);
this.update(); this.update();
this.state = STATE.NONE; this.state = STATE.NONE;
} }
@ -939,7 +900,6 @@ class VoxelPainterControls extends EventDispatcher {
panOffset.set(0, 0, 0); panOffset.set(0, 0, 0);
this.scale = 1; this.scale = 1;
this.dispatchEvent(CHANGE_EVENT);
return true; return true;
} }
} }