{name: "Female8", img: "resources/characters/pipoya/Female 16-4.png"/*, x: 128, y: 128*/}
];
-export class PlayableCaracter extends Phaser.Physics.Arcade.Sprite {
- private bubble: SpeechBubble;
+export class PlayableCharacter extends Phaser.Physics.Arcade.Sprite {
+ private bubble: SpeechBubble|null = null;
private readonly playerName: BitmapText;
public PlayerValue: string;
public PlayerTexture: string;
this.bubble = new SpeechBubble(this.scene, this, text)
//todo make the bubble destroy on player movement?
setTimeout(() => {
- this.bubble.destroy();
- this.bubble = null;
+ if (this.bubble !== null) {
+ this.bubble.destroy();
+ this.bubble = null;
+ }
}, 3000)
}
import Scene = Phaser.Scene;
-import {PlayableCaracter} from "./PlayableCaracter";
+import {PlayableCharacter} from "./PlayableCharacter";
export class SpeechBubble {
private bubble: Phaser.GameObjects.Graphics;
* @param player
* @param text
*/
- constructor(scene: Scene, player: PlayableCaracter, text: string = "") {
+ constructor(scene: Scene, player: PlayableCharacter, text: string = "") {
let bubbleHeight = 50;
let bubblePadding = 10;
this.content.setPosition(this.bubble.x + (bubbleWidth / 2) - (bounds.width / 2), this.bubble.y + (bubbleHeight / 2) - (bounds.height / 2));
}
}
-
+
destroy(): void {
this.bubble.setVisible(false) //todo find a better way
this.bubble.destroy();
- this.bubble = null;
this.content.destroy();
- this.content = null;
}
-
-}
\ No newline at end of file
+}
let sceneKey = GameScene.getMapKeyByUrl(mapUrl);
let gameIndex = scene.getIndex(sceneKey);
- let game : Phaser.Scene = null;
if(gameIndex === -1){
- game = GameScene.createFromUrl(mapUrl, instance);
+ let game : Phaser.Scene = GameScene.createFromUrl(mapUrl, instance);
scene.add(sceneKey, game, false);
}
return sceneKey;
import {CurrentGamerInterface, GamerInterface, hasMovedEventName, Player} from "../Player/Player";
import { DEBUG_MODE, ZOOM_LEVEL, POSITION_DELAY } from "../../Enum/EnvironmentVariable";
import {ITiledMap, ITiledMapLayer, ITiledTileSet} from "../Map/ITiledMap";
-import {PLAYER_RESOURCES} from "../Entity/PlayableCaracter";
+import {PLAYER_RESOURCES} from "../Entity/PlayableCharacter";
import Texture = Phaser.Textures.Texture;
import Sprite = Phaser.GameObjects.Sprite;
import CanvasTexture = Phaser.Textures.CanvasTexture;
CurrentPlayer: CurrentGamerInterface;
MapPlayers : Phaser.Physics.Arcade.Group;
MapPlayersByKey : Map<string, GamerInterface> = new Map<string, GamerInterface>();
- Map: Phaser.Tilemaps.Tilemap|null = null;
+ Map: Phaser.Tilemaps.Tilemap;
Layers : Array<Phaser.Tilemaps.StaticTilemapLayer>;
Objects : Array<Phaser.Physics.Arcade.Sprite>;
mapFile: ITiledMap|null;
startX = 704;// 22 case
startY = 32; // 1 case
circleTexture: CanvasTexture;
- initPosition: PositionInterface|null = null;
+ private initPosition: PositionInterface|null = null;
private playersPositionInterpolator = new PlayersPositionInterpolator();
MapKey: string;
//hook initialisation
init(initData : GameSceneInitInterface) {
- this.initPosition = initData.initPosition;
+ if (initData.initPosition !== undefined) {
+ this.initPosition = initData.initPosition;
+ }
}
//hook create scene
//initialise player
//TODO create animation moving between exit and start
this.CurrentPlayer = new Player(
- null, // The current player is not has no id (because the id can change if connection is lost and we should check that id using the GameManager.
+ null, // The current player has no id (because the id can change if connection is lost and we should check that id using the GameManager.)
this,
this.startX,
this.startY,
let player = this.MapPlayersByKey.get(userId);
if (player === undefined) {
console.error('Cannot find user with id ', userId);
+ } else {
+ player.destroy();
+ this.MapPlayers.remove(player);
}
- player.destroy();
- this.MapPlayers.remove(player);
this.MapPlayersByKey.delete(userId);
this.playersPositionInterpolator.removePlayer(userId);
}
shareGroupPosition(groupPositionMessage: GroupCreatedUpdatedMessageInterface) {
let groupId = groupPositionMessage.groupId;
- if (this.groups.has(groupId)) {
- this.groups.get(groupId).setPosition(Math.round(groupPositionMessage.position.x), Math.round(groupPositionMessage.position.y));
+ let group = this.groups.get(groupId);
+ if (group !== undefined) {
+ group.setPosition(Math.round(groupPositionMessage.position.x), Math.round(groupPositionMessage.position.y));
} else {
// TODO: circle radius should not be hard stored
let sprite = new Sprite(
}
deleteGroup(groupId: string): void {
- if(!this.groups.get(groupId)){
+ let group = this.groups.get(groupId);
+ if(!group){
return;
}
- this.groups.get(groupId).destroy();
+ group.destroy();
this.groups.delete(groupId);
}
import {ClickButton} from "../Components/ClickButton";
import Image = Phaser.GameObjects.Image;
import Rectangle = Phaser.GameObjects.Rectangle;
-import {PLAYER_RESOURCES} from "../Entity/PlayableCaracter";
+import {PLAYER_RESOURCES} from "../Entity/PlayableCharacter";
import {cypressAsserter} from "../../Cypress/CypressAsserter";
import {SelectCharacterSceneInitDataInterface, SelectCharacterSceneName} from "./SelectCharacterScene";
import {ClickButton} from "../Components/ClickButton";
import Image = Phaser.GameObjects.Image;
import Rectangle = Phaser.GameObjects.Rectangle;
-import {PLAYER_RESOURCES} from "../Entity/PlayableCaracter";
+import {PLAYER_RESOURCES} from "../Entity/PlayableCharacter";
//todo: put this constants in a dedicated file
export const SelectCharacterSceneName = "SelectCharacterScene";
import {GameScene, Textures} from "../Game/GameScene";
import {MessageUserPositionInterface, PointInterface} from "../../Connection";
import {ActiveEventList, UserInputEvent, UserInputManager} from "../UserInput/UserInputManager";
-import {PlayableCaracter} from "../Entity/PlayableCaracter";
+import {PlayableCharacter} from "../Entity/PlayableCharacter";
export const hasMovedEventName = "hasMoved";
-export interface CurrentGamerInterface extends PlayableCaracter{
+export interface CurrentGamerInterface extends PlayableCharacter{
moveUser(delta: number) : void;
say(text : string) : void;
}
-export interface GamerInterface extends PlayableCaracter{
+export interface GamerInterface extends PlayableCharacter{
userId : string;
updatePosition(position: PointInterface): void;
say(text : string) : void;
}
-export class Player extends PlayableCaracter implements CurrentGamerInterface, GamerInterface {
+export class Player extends PlayableCharacter implements CurrentGamerInterface, GamerInterface {
userId: string;
userInputManager: UserInputManager;
previousDirection: string;
import {ClickButton} from "../Components/ClickButton";
import Image = Phaser.GameObjects.Image;
import Rectangle = Phaser.GameObjects.Rectangle;
-import {PLAYER_RESOURCES} from "../Entity/PlayableCaracter";
+import {PLAYER_RESOURCES} from "../Entity/PlayableCharacter";
import {cypressAsserter} from "../../Cypress/CypressAsserter";
import Sprite = Phaser.GameObjects.Sprite;
import {GameScene} from "../Game/GameScene";
interface UserInputManagerDatum {
- keyCode: number;
keyInstance: Phaser.Input.Keyboard.Key;
event: UserInputEvent
}
//this class is responsible for catching user inputs and listing all active user actions at every game tick events.
export class UserInputManager {
- private KeysCode: UserInputManagerDatum[] = [
- {keyCode: Phaser.Input.Keyboard.KeyCodes.Z, event: UserInputEvent.MoveUp, keyInstance: null},
- {keyCode: Phaser.Input.Keyboard.KeyCodes.Q, event: UserInputEvent.MoveLeft, keyInstance: null},
- {keyCode: Phaser.Input.Keyboard.KeyCodes.S, event: UserInputEvent.MoveDown, keyInstance: null},
- {keyCode: Phaser.Input.Keyboard.KeyCodes.D, event: UserInputEvent.MoveRight, keyInstance: null},
+ private KeysCode: UserInputManagerDatum[];
- {keyCode: Phaser.Input.Keyboard.KeyCodes.UP, event: UserInputEvent.MoveUp, keyInstance: null},
- {keyCode: Phaser.Input.Keyboard.KeyCodes.LEFT, event: UserInputEvent.MoveLeft, keyInstance: null},
- {keyCode: Phaser.Input.Keyboard.KeyCodes.DOWN, event: UserInputEvent.MoveDown, keyInstance: null},
- {keyCode: Phaser.Input.Keyboard.KeyCodes.RIGHT, event: UserInputEvent.MoveRight, keyInstance: null},
+ constructor(Scene : GameScene) {
- {keyCode: Phaser.Input.Keyboard.KeyCodes.SHIFT, event: UserInputEvent.SpeedUp, keyInstance: null},
+ 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) },
- {keyCode: Phaser.Input.Keyboard.KeyCodes.E, event: UserInputEvent.Interact, keyInstance: null},
- {keyCode: Phaser.Input.Keyboard.KeyCodes.F, event: UserInputEvent.Shout, keyInstance: null},
- ];
+ {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) },
- constructor(Scene : GameScene) {
- this.KeysCode.forEach(d => {
- d.keyInstance = Scene.input.keyboard.addKey(d.keyCode);
- });
+ {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) },
+ {event: UserInputEvent.Shout, keyInstance: Scene.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.F) },
+ ];
}
getEventListForGameTick(): ActiveEventList {