mirror of
https://github.com/openfrontio/OpenFrontIO.git
synced 2026-06-25 19:12:43 +00:00
93 lines
2.7 KiB
TypeScript
93 lines
2.7 KiB
TypeScript
import {EventBus, GameEvent} from "../core/EventBus";
|
|
import {Cell} from "../core/Game";
|
|
|
|
export class MouseUpEvent implements GameEvent {
|
|
constructor(
|
|
public readonly x: number,
|
|
public readonly y: number,
|
|
) { }
|
|
}
|
|
|
|
export class MouseDownEvent implements GameEvent {
|
|
constructor(
|
|
public readonly x: number,
|
|
public readonly y: number,
|
|
) { }
|
|
}
|
|
|
|
export class ZoomEvent implements GameEvent {
|
|
constructor(
|
|
public readonly x: number,
|
|
public readonly y: number,
|
|
public readonly delta: number
|
|
) { }
|
|
}
|
|
|
|
export class DragEvent implements GameEvent {
|
|
constructor(
|
|
public readonly deltaX: number,
|
|
public readonly deltaY: number,
|
|
) { }
|
|
}
|
|
|
|
export class InputHandler {
|
|
|
|
private lastMouseDownX: number = 0
|
|
private lastMouseDownY: number
|
|
|
|
private isMouseDown: boolean = false;
|
|
private lastMouseX: number = 0;
|
|
private lastMouseY: number = 0;
|
|
|
|
constructor(private eventBus: EventBus) { }
|
|
|
|
initialize() {
|
|
document.addEventListener("pointerdown", (e) => this.onPointerDown(e));
|
|
document.addEventListener("pointerup", (e) => this.onPointerUp(e));
|
|
document.addEventListener("wheel", (e) => this.onScroll(e), {passive: false});
|
|
document.addEventListener('mousedown', this.onMouseDown.bind(this));
|
|
document.addEventListener('mousemove', this.onMouseMove.bind(this));
|
|
document.addEventListener('mouseup', this.onMouseUp.bind(this));
|
|
document.addEventListener('mouseleave', this.onMouseUp.bind(this))
|
|
}
|
|
|
|
onPointerDown(event: PointerEvent) {
|
|
this.lastMouseDownX = event.x
|
|
this.lastMouseDownY = event.y
|
|
this.eventBus.emit(new MouseDownEvent(event.x, event.y))
|
|
}
|
|
|
|
onPointerUp(event: PointerEvent) {
|
|
const dist = Math.abs(event.x - this.lastMouseDownX) + Math.abs(event.y - this.lastMouseDownY);
|
|
if (dist < 10) {
|
|
this.eventBus.emit(new MouseUpEvent(event.x, event.y))
|
|
}
|
|
}
|
|
|
|
private onScroll(event: WheelEvent) {
|
|
this.eventBus.emit(new ZoomEvent(event.x, event.y, event.deltaY))
|
|
}
|
|
|
|
private onMouseDown(event: MouseEvent) {
|
|
this.isMouseDown = true;
|
|
this.lastMouseX = event.clientX;
|
|
this.lastMouseY = event.clientY;
|
|
}
|
|
|
|
private onMouseMove(event: MouseEvent) {
|
|
if (!this.isMouseDown) return;
|
|
|
|
const deltaX = event.clientX - this.lastMouseX;
|
|
const deltaY = event.clientY - this.lastMouseY;
|
|
|
|
this.eventBus.emit(new DragEvent(deltaX, deltaY))
|
|
|
|
this.lastMouseX = event.clientX;
|
|
this.lastMouseY = event.clientY;
|
|
}
|
|
|
|
private onMouseUp(event: MouseEvent) {
|
|
this.isMouseDown = false;
|
|
}
|
|
|
|
} |