in src/input/directional-debouncer.ts [40:71]
public attempt(now: number): boolean {
const result = this.predicate();
if (!result) {
this.stage = DebouncerStage.IDLE;
return false;
}
switch (this.stage) {
case DebouncerStage.IDLE:
this.stage = DebouncerStage.HELD;
this.heldAt = now;
return true;
case DebouncerStage.HELD:
if (now - this.heldAt < DirectionalDebouncer.initialDebounce) {
return false;
}
this.heldAt = now;
this.stage = DebouncerStage.FAST;
return true;
case DebouncerStage.FAST:
if (now - this.heldAt < DirectionalDebouncer.fastDebounce) {
return false;
}
this.heldAt = now;
return true;
default:
throw new Error(`Unknown debouncer stage ${this.stage}!`);
}
}