summaryrefslogtreecommitdiffstats
path: root/src/view/input/directionhandler.ts
blob: 0a3687ed872a1cd2b4a1e210a083ba8e855e8bed (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import { InputHandler } from './inputhandler';

import { Listenable } from '../../util';

import { vec2 } from 'gl-matrix';

export const enum Keycode {
	Left = 37,
	Up = 38,
	Right = 39,
	Down = 40,
}

export class DirectionHandler extends Listenable<[vec2]> {
	private readonly input: InputHandler;

	constructor() {
		super();

		this.input = new InputHandler(new Set([Keycode.Left, Keycode.Up, Keycode.Right, Keycode.Down]));

		this.input.addListener(() => {
			const dir = vec2.create();

			if (this.input.has(Keycode.Left))
				vec2.add(dir, dir, [-1, 0]);
			if (this.input.has(Keycode.Up))
				vec2.add(dir, dir, [0, -1]);
			if (this.input.has(Keycode.Right))
				vec2.add(dir, dir, [1, 0]);
			if (this.input.has(Keycode.Down))
				vec2.add(dir, dir, [0, 1]);

			this.runListeners(dir);
		});
	}
}