@hiddentao/clockwork-engine
Version:
A TypeScript/PIXI.js game engine for deterministic, replayable games with built-in rendering
66 lines (65 loc) • 2.04 kB
JavaScript
/**
* Memory Input Layer
*
* Headless input implementation for testing and replay.
* Provides manual event triggering for test scenarios.
*/
import { EventCallbackManager } from "../utils/EventCallbackManager";
export class MemoryInputLayer {
constructor() {
this.pointerDownCallbacks = new EventCallbackManager();
this.pointerUpCallbacks = new EventCallbackManager();
this.pointerMoveCallbacks = new EventCallbackManager();
this.clickCallbacks = new EventCallbackManager();
this.keyDownCallbacks = new EventCallbackManager();
this.keyUpCallbacks = new EventCallbackManager();
}
// Pointer event subscription
onPointerDown(callback) {
this.pointerDownCallbacks.register(callback);
}
onPointerUp(callback) {
this.pointerUpCallbacks.register(callback);
}
onPointerMove(callback) {
this.pointerMoveCallbacks.register(callback);
}
onClick(callback) {
this.clickCallbacks.register(callback);
}
// Keyboard event subscription
onKeyDown(callback) {
this.keyDownCallbacks.register(callback);
}
onKeyUp(callback) {
this.keyUpCallbacks.register(callback);
}
// Cleanup
removeAllListeners() {
this.pointerDownCallbacks.clear();
this.pointerUpCallbacks.clear();
this.pointerMoveCallbacks.clear();
this.clickCallbacks.clear();
this.keyDownCallbacks.clear();
this.keyUpCallbacks.clear();
}
// Manual event triggering for testing
triggerPointerDown(event) {
this.pointerDownCallbacks.trigger(event);
}
triggerPointerUp(event) {
this.pointerUpCallbacks.trigger(event);
}
triggerPointerMove(event) {
this.pointerMoveCallbacks.trigger(event);
}
triggerClick(event) {
this.clickCallbacks.trigger(event);
}
triggerKeyDown(event) {
this.keyDownCallbacks.trigger(event);
}
triggerKeyUp(event) {
this.keyUpCallbacks.trigger(event);
}
}