2020-05-19 19:11:12 +02:00
|
|
|
import {GameScene} from "../Game/GameScene";
|
2020-04-11 16:46:28 +02:00
|
|
|
|
|
|
|
interface UserInputManagerDatum {
|
|
|
|
keyInstance: Phaser.Input.Keyboard.Key;
|
|
|
|
event: UserInputEvent
|
|
|
|
}
|
|
|
|
|
|
|
|
export enum UserInputEvent {
|
|
|
|
MoveLeft = 1,
|
|
|
|
MoveUp,
|
|
|
|
MoveRight,
|
|
|
|
MoveDown,
|
|
|
|
SpeedUp,
|
2020-04-11 18:17:36 +02:00
|
|
|
Interact,
|
2020-04-12 19:35:51 +02:00
|
|
|
Shout,
|
2020-04-11 16:46:28 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
//we cannot the map structure so we have to create a replacment
|
|
|
|
export class ActiveEventList {
|
2020-06-10 12:15:25 +02:00
|
|
|
private KeysCode : Map<UserInputEvent, boolean> = new Map<UserInputEvent, boolean>();
|
|
|
|
|
2020-04-11 16:46:28 +02:00
|
|
|
get(event: UserInputEvent): boolean {
|
2020-06-10 12:15:25 +02:00
|
|
|
return this.KeysCode.get(event) || false;
|
2020-04-11 16:46:28 +02:00
|
|
|
}
|
2020-06-10 12:15:25 +02:00
|
|
|
set(event: UserInputEvent, value: boolean): void {
|
|
|
|
this.KeysCode.set(event, value);
|
2020-04-11 16:46:28 +02:00
|
|
|
}
|
2020-05-19 19:11:12 +02:00
|
|
|
}
|
2020-04-11 16:46:28 +02:00
|
|
|
|
|
|
|
//this class is responsible for catching user inputs and listing all active user actions at every game tick events.
|
|
|
|
export class UserInputManager {
|
2020-06-04 18:11:07 +02:00
|
|
|
private KeysCode: UserInputManagerDatum[];
|
2020-05-19 19:11:12 +02:00
|
|
|
|
2020-06-04 18:11:07 +02:00
|
|
|
constructor(Scene : GameScene) {
|
2020-05-19 19:11:12 +02:00
|
|
|
|
2020-06-04 18:11:07 +02:00
|
|
|
this.KeysCode = [
|
|
|
|
{event: UserInputEvent.MoveUp, keyInstance: Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.Z) },
|
|
|
|
{event: UserInputEvent.MoveLeft, keyInstance: Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.Q) },
|
|
|
|
{event: UserInputEvent.MoveDown, keyInstance: Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.S) },
|
|
|
|
{event: UserInputEvent.MoveRight, keyInstance: Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.D) },
|
2020-05-19 19:11:12 +02:00
|
|
|
|
2020-06-04 18:11:07 +02:00
|
|
|
{event: UserInputEvent.MoveUp, keyInstance: Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.UP) },
|
|
|
|
{event: UserInputEvent.MoveLeft, keyInstance: Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.LEFT) },
|
|
|
|
{event: UserInputEvent.MoveDown, keyInstance: Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.DOWN) },
|
|
|
|
{event: UserInputEvent.MoveRight, keyInstance: Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.RIGHT) },
|
2020-05-19 19:11:12 +02:00
|
|
|
|
2020-06-04 18:11:07 +02:00
|
|
|
{event: UserInputEvent.SpeedUp, keyInstance: Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.SHIFT) },
|
|
|
|
|
|
|
|
{event: UserInputEvent.Interact, keyInstance: Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.E) },
|
2020-07-23 18:09:24 +02:00
|
|
|
{event: UserInputEvent.Interact, keyInstance: Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.SPACE) },
|
2020-06-04 18:11:07 +02:00
|
|
|
{event: UserInputEvent.Shout, keyInstance: Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.F) },
|
|
|
|
];
|
2020-04-11 16:46:28 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
getEventListForGameTick(): ActiveEventList {
|
2020-06-09 23:13:26 +02:00
|
|
|
const eventsMap = new ActiveEventList();
|
2020-04-13 13:42:21 +02:00
|
|
|
this.KeysCode.forEach(d => {
|
2020-04-11 16:46:28 +02:00
|
|
|
if (d. keyInstance.isDown) {
|
|
|
|
eventsMap.set(d.event, true);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
return eventsMap;
|
|
|
|
}
|
2020-05-19 19:11:12 +02:00
|
|
|
}
|