Skip to content

Commit

Permalink
feat(input): reset axis values on window blur
Browse files Browse the repository at this point in the history
  • Loading branch information
tomaisthorpe committed Jul 5, 2024
1 parent ea23c72 commit d11e903
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 1 deletion.
5 changes: 5 additions & 0 deletions .changeset/curvy-numbers-eat.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@tedengine/ted': minor
---

Reset controller axis values on window blur
36 changes: 35 additions & 1 deletion packages/ted/src/input/controller.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import TEventQueue from '../core/event-queue';
import type TPawn from '../core/pawn';
import type { TWindowBlurEvent } from '../fred/events';
import { TEventTypesWindow } from '../fred/events';
import { TEventTypesInput } from './events';
import type { TMouseLocation, TMouseMoveEvent } from './events';
import type {
Expand All @@ -25,7 +27,16 @@ export default class TController {

public mouseLocation?: TMouseLocation;

constructor(private engineEventQueue: TEventQueue) {}
constructor(private engineEventQueue: TEventQueue) {
this.resetAxisValues = this.resetAxisValues.bind(this);

// Reset all axis values when the window loses focus
// This is to prevent axis getting stuck in a pressed state
engineEventQueue.addListener<TWindowBlurEvent>(
TEventTypesWindow.Blur,
this.resetAxisValues,
);
}

// @todo add validation on button
// @todo add support for different event types
Expand Down Expand Up @@ -160,4 +171,27 @@ export default class TController {
public update() {
this.events.update();
}

/**
* Resets all current axis values to 0.
*/
private resetAxisValues() {
Object.keys(this.axes).forEach((key) => {
this.axes[key] = 0;
});

console.log('reset axis values');
}

/**
* Tears down the controller and removes all event listeners.
*
* @todo add rest of event listeners
*/
public destroy() {
this.engineEventQueue.removeListener<TWindowBlurEvent>(
TEventTypesWindow.Blur,
this.resetAxisValues,
);
}
}

0 comments on commit d11e903

Please sign in to comment.