import Rectangle = Phaser.GameObjects.Rectangle;
import {PLAYER_RESOURCES} from "../Entity/PlayableCaracter";
import {cypressAsserter} from "../../Cypress/CypressAsserter";
-import {GroupCreatedUpdatedMessageInterface, MessageUserJoined, MessageUserPositionInterface} from "../../Connection";
+import {SelectCharacterSceneInitDataInterface, SelectCharacterSceneName} from "./SelectCharacterScene";
//todo: put this constants in a dedicated file
export const LoginSceneName = "LoginScene";
enum LoginTextures {
- //playButton = "play_button",
icon = "icon",
mainFont = "main_font"
}
export class LoginScene extends Phaser.Scene {
private nameInput: TextInput;
private textField: TextField;
- private playButton: ClickButton;
private infoTextField: TextField;
private pressReturnField: TextField;
private logo: Image;
- private selectedRectangle: Rectangle;
- private selectedPlayer: Phaser.Physics.Arcade.Sprite;
- private players: Array<Phaser.Physics.Arcade.Sprite> = new Array<Phaser.Physics.Arcade.Sprite>();
-
constructor() {
super({
key: LoginSceneName
this.pressReturnField = new TextField(this, this.game.renderer.width / 2, 130, 'Press enter to start');
this.pressReturnField.setOrigin(0.5).setCenterAlign()
- this.selectedRectangle = this.add.rectangle(32, 32, 32, 32).setStrokeStyle(2, 0xFFFFFF);
-
this.logo = new Image(this, this.game.renderer.width - 30, this.game.renderer.height - 20, LoginTextures.icon);
this.add.existing(this.logo);
if (name === '') {
return
}
- return this.login(name);
+ this.login(name);
});
- /*create user*/
- this.createCurrentPlayer();
cypressAsserter.initFinished();
}
}
}
- private async login(name: string) {
- return gameManager.connect(name, this.selectedPlayer.texture.key).then(() => {
- // Do we have a start URL in the address bar? If so, let's redirect to this address
- let instanceAndMapUrl = this.findMapUrl();
- if (instanceAndMapUrl !== null) {
- let [mapUrl, instance] = instanceAndMapUrl;
- let key = gameManager.loadMap(mapUrl, this.scene, instance);
- this.scene.start(key);
- return mapUrl;
- } else {
- // If we do not have a map address in the URL, let's ask the server for a start map.
- return gameManager.loadStartMap().then((scene : any) => {
- if (!scene) {
- return;
- }
- let key = gameManager.loadMap(window.location.protocol + "//" + scene.mapUrlStart, this.scene, scene.startInstance);
- this.scene.start(key);
- return scene;
- }).catch((err) => {
- console.error(err);
- throw err;
- });
- }
- }).catch((err) => {
- console.error(err);
- throw err;
- });
- }
-
- /**
- * Returns the map URL and the instance from the current URL
- */
- private findMapUrl(): [string, string]|null {
- let path = window.location.pathname;
- if (!path.startsWith('/_/')) {
- return null;
- }
- let instanceAndMap = path.substr(3);
- let firstSlash = instanceAndMap.indexOf('/');
- if (firstSlash === -1) {
- return null;
- }
- let instance = instanceAndMap.substr(0, firstSlash);
- return [window.location.protocol+'//'+instanceAndMap.substr(firstSlash+1), instance];
- }
-
- Map: Phaser.Tilemaps.Tilemap;
-
- initAnimation(): void {
- throw new Error("Method not implemented.");
- }
-
- createCurrentPlayer(): void {
- for (let i = 0; i <PLAYER_RESOURCES.length; i++) {
- let playerResource = PLAYER_RESOURCES[i];
- let player = this.physics.add.sprite(playerResource.x, playerResource.y, playerResource.name, playerResource.name);
- player.setBounce(0.2);
- player.setCollideWorldBounds(true);
- this.anims.create({
- key: playerResource.name,
- frames: this.anims.generateFrameNumbers(playerResource.name, {start: 0, end: 2,}),
- frameRate: 10,
- repeat: -1
- });
- player.setInteractive().on("pointerdown", () => {
- this.selectedPlayer.anims.pause();
- this.selectedRectangle.setY(player.y);
- this.selectedRectangle.setX(player.x);
- player.play(playerResource.name);
- this.selectedPlayer = player;
- });
- this.players.push(player);
- }
- this.selectedPlayer = this.players[0];
- this.selectedPlayer.play(PLAYER_RESOURCES[0].name);
+ private login(name: string): void {
+ this.scene.start(SelectCharacterSceneName, { name } as SelectCharacterSceneInitDataInterface);
}
}
say(text : string) : void;
}
+interface AnimationData {
+ key: string;
+ frameRate: number;
+ repeat: number;
+ frameModel: string; //todo use an enum
+ frameStart: number;
+ frameEnd: number;
+}
+
+
export class Player extends PlayableCaracter implements CurrentGamerInterface, GamerInterface {
userId: string;
userInputManager: UserInputManager;
}
private initAnimation(): void {
- getPlayerAnimations(this.PlayerTexture).forEach(d => {
+ this.getPlayerAnimations(this.PlayerTexture).forEach(d => {
this.scene.anims.create({
key: d.key,
frames: this.scene.anims.generateFrameNumbers(d.frameModel, {start: d.frameStart, end: d.frameEnd}),
})
}
+ private getPlayerAnimations(name: string): AnimationData[] {
+ return [{
+ key: `${name}-${PlayerAnimationNames.WalkDown}`,
+ frameModel: name,
+ frameStart: 0,
+ frameEnd: 2,
+ frameRate: 10,
+ repeat: -1
+ }, {
+ key: `${name}-${PlayerAnimationNames.WalkLeft}`,
+ frameModel: name,
+ frameStart: 3,
+ frameEnd: 5,
+ frameRate: 10,
+ repeat: -1
+ }, {
+ key: `${name}-${PlayerAnimationNames.WalkRight}`,
+ frameModel: name,
+ frameStart: 6,
+ frameEnd: 8,
+ frameRate: 10,
+ repeat: -1
+ }, {
+ key: `${name}-${PlayerAnimationNames.WalkUp}`,
+ frameModel: name,
+ frameStart: 9,
+ frameEnd: 11,
+ frameRate: 10,
+ repeat: -1
+ }];
+ };
+
moveUser(delta: number): void {
//if user client on shift, camera and player speed
let direction = null;