created interface to implement for UserInputManager
This commit is contained in:
parent
b1cad1e5d3
commit
173d10738d
10
front/src/Interfaces/UserInputHandlerInterface.ts
Normal file
10
front/src/Interfaces/UserInputHandlerInterface.ts
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
export interface UserInputHandlerInterface {
|
||||||
|
handleMouseWheelEvent: (
|
||||||
|
pointer: Phaser.Input.Pointer,
|
||||||
|
gameObjects: Phaser.GameObjects.GameObject[],
|
||||||
|
deltaX: number,
|
||||||
|
deltaY: number,
|
||||||
|
deltaZ: number
|
||||||
|
) => void;
|
||||||
|
handleSpaceKeyUpEvent: (event: Event) => Event;
|
||||||
|
}
|
@ -90,6 +90,7 @@ import FILE_LOAD_ERROR = Phaser.Loader.Events.FILE_LOAD_ERROR;
|
|||||||
import { MapStore } from "../../Stores/Utils/MapStore";
|
import { MapStore } from "../../Stores/Utils/MapStore";
|
||||||
import { followUsersColorStore } from "../../Stores/FollowStore";
|
import { followUsersColorStore } from "../../Stores/FollowStore";
|
||||||
import Camera = Phaser.Cameras.Scene2D.Camera;
|
import Camera = Phaser.Cameras.Scene2D.Camera;
|
||||||
|
import { GameSceneUserInputHandler } from "../UserInput/GameSceneUserInputHandler";
|
||||||
|
|
||||||
export interface GameSceneInitInterface {
|
export interface GameSceneInitInterface {
|
||||||
initPosition: PointInterface | null;
|
initPosition: PointInterface | null;
|
||||||
@ -548,7 +549,7 @@ export class GameScene extends DirtyScene {
|
|||||||
this.MapPlayers = this.physics.add.group({ immovable: true });
|
this.MapPlayers = this.physics.add.group({ immovable: true });
|
||||||
|
|
||||||
//create input to move
|
//create input to move
|
||||||
this.userInputManager = new UserInputManager(this);
|
this.userInputManager = new UserInputManager(this, new GameSceneUserInputHandler(this));
|
||||||
mediaManager.setUserInputManager(this.userInputManager);
|
mediaManager.setUserInputManager(this.userInputManager);
|
||||||
|
|
||||||
if (localUserStore.getFullscreen()) {
|
if (localUserStore.getFullscreen()) {
|
||||||
@ -607,10 +608,6 @@ export class GameScene extends DirtyScene {
|
|||||||
scriptPromises.push(iframeListener.registerScript(script, !disableModuleMode));
|
scriptPromises.push(iframeListener.registerScript(script, !disableModuleMode));
|
||||||
}
|
}
|
||||||
|
|
||||||
this.userInputManager.spaceEvent(() => {
|
|
||||||
this.outlinedItem?.activate();
|
|
||||||
});
|
|
||||||
|
|
||||||
this.reposition();
|
this.reposition();
|
||||||
|
|
||||||
// From now, this game scene will be notified of reposition events
|
// From now, this game scene will be notified of reposition events
|
||||||
@ -679,6 +676,10 @@ export class GameScene extends DirtyScene {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public activateOutlinedItem(): void {
|
||||||
|
this.outlinedItem?.activate();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initializes the connection to Pusher.
|
* Initializes the connection to Pusher.
|
||||||
*/
|
*/
|
||||||
|
25
front/src/Phaser/UserInput/GameSceneUserInputHandler.ts
Normal file
25
front/src/Phaser/UserInput/GameSceneUserInputHandler.ts
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
import type { UserInputHandlerInterface } from "../../Interfaces/UserInputHandlerInterface";
|
||||||
|
import type { GameScene } from "../Game/GameScene";
|
||||||
|
|
||||||
|
export class GameSceneUserInputHandler implements UserInputHandlerInterface {
|
||||||
|
private gameScene: GameScene;
|
||||||
|
|
||||||
|
constructor(gameScene: GameScene) {
|
||||||
|
this.gameScene = gameScene;
|
||||||
|
}
|
||||||
|
|
||||||
|
public handleMouseWheelEvent(
|
||||||
|
pointer: Phaser.Input.Pointer,
|
||||||
|
gameObjects: Phaser.GameObjects.GameObject[],
|
||||||
|
deltaX: number,
|
||||||
|
deltaY: number,
|
||||||
|
deltaZ: number
|
||||||
|
): void {
|
||||||
|
this.gameScene.zoomByFactor(1 - (deltaY / 53) * 0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
public handleSpaceKeyUpEvent(event: Event): Event {
|
||||||
|
this.gameScene.activateOutlinedItem();
|
||||||
|
return event;
|
||||||
|
}
|
||||||
|
}
|
@ -1,8 +1,8 @@
|
|||||||
import type { GameScene } from "../Game/GameScene";
|
|
||||||
import { touchScreenManager } from "../../Touch/TouchScreenManager";
|
import { touchScreenManager } from "../../Touch/TouchScreenManager";
|
||||||
import { MobileJoystick } from "../Components/MobileJoystick";
|
import { MobileJoystick } from "../Components/MobileJoystick";
|
||||||
import { enableUserInputsStore } from "../../Stores/UserInputStore";
|
import { enableUserInputsStore } from "../../Stores/UserInputStore";
|
||||||
import type { Direction } from "phaser3-rex-plugins/plugins/virtualjoystick.js";
|
import type { Direction } from "phaser3-rex-plugins/plugins/virtualjoystick.js";
|
||||||
|
import type { UserInputHandlerInterface } from "../../Interfaces/UserInputHandlerInterface";
|
||||||
|
|
||||||
interface UserInputManagerDatum {
|
interface UserInputManagerDatum {
|
||||||
keyInstance: Phaser.Input.Keyboard.Key;
|
keyInstance: Phaser.Input.Keyboard.Key;
|
||||||
@ -41,8 +41,8 @@ export class ActiveEventList {
|
|||||||
|
|
||||||
//this class is responsible for catching user inputs and listing all active user actions at every game tick events.
|
//this class is responsible for catching user inputs and listing all active user actions at every game tick events.
|
||||||
export class UserInputManager {
|
export class UserInputManager {
|
||||||
private KeysCode!: UserInputManagerDatum[];
|
private keysCode!: UserInputManagerDatum[];
|
||||||
private Scene: GameScene;
|
private scene: Phaser.Scene;
|
||||||
private isInputDisabled: boolean;
|
private isInputDisabled: boolean;
|
||||||
|
|
||||||
private joystick!: MobileJoystick;
|
private joystick!: MobileJoystick;
|
||||||
@ -51,11 +51,15 @@ export class UserInputManager {
|
|||||||
private joystickForceAccuX = 0;
|
private joystickForceAccuX = 0;
|
||||||
private joystickForceAccuY = 0;
|
private joystickForceAccuY = 0;
|
||||||
|
|
||||||
constructor(Scene: GameScene) {
|
private userInputHandler: UserInputHandlerInterface;
|
||||||
this.Scene = Scene;
|
|
||||||
|
constructor(scene: Phaser.Scene, userInputHandler: UserInputHandlerInterface) {
|
||||||
|
this.scene = scene;
|
||||||
|
this.userInputHandler = userInputHandler;
|
||||||
|
|
||||||
this.isInputDisabled = false;
|
this.isInputDisabled = false;
|
||||||
this.initKeyBoardEvent();
|
this.initKeyBoardEvent();
|
||||||
this.initMouseWheel();
|
this.bindInputEventHandlers();
|
||||||
if (touchScreenManager.supportTouchScreen) {
|
if (touchScreenManager.supportTouchScreen) {
|
||||||
this.initVirtualJoystick();
|
this.initVirtualJoystick();
|
||||||
}
|
}
|
||||||
@ -66,7 +70,7 @@ export class UserInputManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
initVirtualJoystick() {
|
initVirtualJoystick() {
|
||||||
this.joystick = new MobileJoystick(this.Scene);
|
this.joystick = new MobileJoystick(this.scene);
|
||||||
this.joystick.on("update", () => {
|
this.joystick.on("update", () => {
|
||||||
this.joystickForceAccuX = this.joystick.forceX ? this.joystickForceAccuX : 0;
|
this.joystickForceAccuX = this.joystick.forceX ? this.joystickForceAccuX : 0;
|
||||||
this.joystickForceAccuY = this.joystick.forceY ? this.joystickForceAccuY : 0;
|
this.joystickForceAccuY = this.joystick.forceY ? this.joystickForceAccuY : 0;
|
||||||
@ -92,80 +96,80 @@ export class UserInputManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
initKeyBoardEvent() {
|
initKeyBoardEvent() {
|
||||||
this.KeysCode = [
|
this.keysCode = [
|
||||||
{
|
{
|
||||||
event: UserInputEvent.MoveUp,
|
event: UserInputEvent.MoveUp,
|
||||||
keyInstance: this.Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.Z, false),
|
keyInstance: this.scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.Z, false),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
event: UserInputEvent.MoveUp,
|
event: UserInputEvent.MoveUp,
|
||||||
keyInstance: this.Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.W, false),
|
keyInstance: this.scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.W, false),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
event: UserInputEvent.MoveLeft,
|
event: UserInputEvent.MoveLeft,
|
||||||
keyInstance: this.Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.Q, false),
|
keyInstance: this.scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.Q, false),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
event: UserInputEvent.MoveLeft,
|
event: UserInputEvent.MoveLeft,
|
||||||
keyInstance: this.Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.A, false),
|
keyInstance: this.scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.A, false),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
event: UserInputEvent.MoveDown,
|
event: UserInputEvent.MoveDown,
|
||||||
keyInstance: this.Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.S, false),
|
keyInstance: this.scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.S, false),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
event: UserInputEvent.MoveRight,
|
event: UserInputEvent.MoveRight,
|
||||||
keyInstance: this.Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.D, false),
|
keyInstance: this.scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.D, false),
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
event: UserInputEvent.MoveUp,
|
event: UserInputEvent.MoveUp,
|
||||||
keyInstance: this.Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.UP, false),
|
keyInstance: this.scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.UP, false),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
event: UserInputEvent.MoveLeft,
|
event: UserInputEvent.MoveLeft,
|
||||||
keyInstance: this.Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.LEFT, false),
|
keyInstance: this.scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.LEFT, false),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
event: UserInputEvent.MoveDown,
|
event: UserInputEvent.MoveDown,
|
||||||
keyInstance: this.Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.DOWN, false),
|
keyInstance: this.scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.DOWN, false),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
event: UserInputEvent.MoveRight,
|
event: UserInputEvent.MoveRight,
|
||||||
keyInstance: this.Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.RIGHT, false),
|
keyInstance: this.scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.RIGHT, false),
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
event: UserInputEvent.SpeedUp,
|
event: UserInputEvent.SpeedUp,
|
||||||
keyInstance: this.Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.SHIFT, false),
|
keyInstance: this.scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.SHIFT, false),
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
event: UserInputEvent.Interact,
|
event: UserInputEvent.Interact,
|
||||||
keyInstance: this.Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.E, false),
|
keyInstance: this.scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.E, false),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
event: UserInputEvent.Interact,
|
event: UserInputEvent.Interact,
|
||||||
keyInstance: this.Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.SPACE, false),
|
keyInstance: this.scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.SPACE, false),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
event: UserInputEvent.Follow,
|
event: UserInputEvent.Follow,
|
||||||
keyInstance: this.Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.F, false),
|
keyInstance: this.scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.F, false),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
event: UserInputEvent.Shout,
|
event: UserInputEvent.Shout,
|
||||||
keyInstance: this.Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.F, false),
|
keyInstance: this.scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.F, false),
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
clearAllListeners() {
|
clearAllListeners() {
|
||||||
this.Scene.input.keyboard.removeAllListeners();
|
this.scene.input.keyboard.removeAllListeners();
|
||||||
}
|
}
|
||||||
|
|
||||||
//todo: should we also disable the joystick?
|
//todo: should we also disable the joystick?
|
||||||
disableControls() {
|
disableControls() {
|
||||||
this.Scene.input.keyboard.removeAllKeys();
|
this.scene.input.keyboard.removeAllKeys();
|
||||||
this.isInputDisabled = true;
|
this.isInputDisabled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -201,7 +205,7 @@ export class UserInputManager {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
eventsMap.set(UserInputEvent.JoystickMove, this.joystickEvents.any());
|
eventsMap.set(UserInputEvent.JoystickMove, this.joystickEvents.any());
|
||||||
this.KeysCode.forEach((d) => {
|
this.keysCode.forEach((d) => {
|
||||||
if (d.keyInstance.isDown) {
|
if (d.keyInstance.isDown) {
|
||||||
eventsMap.set(d.event, true);
|
eventsMap.set(d.event, true);
|
||||||
}
|
}
|
||||||
@ -209,30 +213,36 @@ export class UserInputManager {
|
|||||||
return eventsMap;
|
return eventsMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
spaceEvent(callback: Function) {
|
|
||||||
this.Scene.input.keyboard.on("keyup-SPACE", (event: Event) => {
|
|
||||||
callback();
|
|
||||||
return event;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
addSpaceEventListner(callback: Function) {
|
addSpaceEventListner(callback: Function) {
|
||||||
this.Scene.input.keyboard.addListener("keyup-SPACE", callback);
|
this.scene.input.keyboard.addListener("keyup-SPACE", callback);
|
||||||
}
|
}
|
||||||
removeSpaceEventListner(callback: Function) {
|
removeSpaceEventListner(callback: Function) {
|
||||||
this.Scene.input.keyboard.removeListener("keyup-SPACE", callback);
|
this.scene.input.keyboard.removeListener("keyup-SPACE", callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
destroy(): void {
|
destroy(): void {
|
||||||
this.joystick?.destroy();
|
this.joystick?.destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
private initMouseWheel() {
|
private bindInputEventHandlers() {
|
||||||
this.Scene.input.on(
|
this.scene.input.on(
|
||||||
"wheel",
|
"wheel",
|
||||||
(pointer: unknown, gameObjects: unknown, deltaX: number, deltaY: number, deltaZ: number) => {
|
(
|
||||||
this.Scene.zoomByFactor(1 - (deltaY / 53) * 0.1);
|
pointer: Phaser.Input.Pointer,
|
||||||
|
gameObjects: Phaser.GameObjects.GameObject[],
|
||||||
|
deltaX: number,
|
||||||
|
deltaY: number,
|
||||||
|
deltaZ: number
|
||||||
|
) => {
|
||||||
|
if (this.isInputDisabled) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.userInputHandler.handleMouseWheelEvent(pointer, gameObjects, deltaX, deltaY, deltaZ);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
this.scene.input.keyboard.on("keyup-SPACE", (event: Event) => {
|
||||||
|
this.userInputHandler.handleSpaceKeyUpEvent(event);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user