First working version of the office map! Yay!
This commit is contained in:
commit
2037147d18
5 changed files with 603 additions and 87 deletions
|
@ -3,14 +3,12 @@ import {MessageUserPositionInterface} from "../../Connexion";
|
|||
import {CurrentGamerInterface, GamerInterface, Player} from "../Player/Player";
|
||||
import {DEBUG_MODE, RESOLUTION, ZOOM_LEVEL} from "../../Enum/EnvironmentVariable";
|
||||
import Tile = Phaser.Tilemaps.Tile;
|
||||
import {ITiledMap} from "../Map/ITiledMap";
|
||||
import {ITiledMap, ITiledTileSet} from "../Map/ITiledMap";
|
||||
|
||||
export enum Textures {
|
||||
Rock = 'rock',
|
||||
Player = 'playerModel',
|
||||
Map = 'map',
|
||||
Tiles = 'tiles',
|
||||
Tiles2 = 'tiles2'
|
||||
Map = 'map'
|
||||
}
|
||||
|
||||
export interface GameSceneInterface extends Phaser.Scene {
|
||||
|
@ -22,21 +20,24 @@ export interface GameSceneInterface extends Phaser.Scene {
|
|||
export class GameScene extends Phaser.Scene implements GameSceneInterface{
|
||||
GameManager : GameManagerInterface;
|
||||
RoomId : string;
|
||||
Terrain : Phaser.Tilemaps.Tileset;
|
||||
Terrains : Array<Phaser.Tilemaps.Tileset>;
|
||||
CurrentPlayer: CurrentGamerInterface;
|
||||
MapPlayers : Phaser.Physics.Arcade.Group;
|
||||
Map: Phaser.Tilemaps.Tilemap;
|
||||
Layers : Array<Phaser.Tilemaps.StaticTilemapLayer>;
|
||||
Objects : Array<Phaser.Physics.Arcade.Sprite>;
|
||||
map: ITiledMap;
|
||||
startX = (window.innerWidth / 2) / RESOLUTION;
|
||||
startY = (window.innerHeight / 2) / RESOLUTION;
|
||||
|
||||
|
||||
constructor(RoomId : string, GameManager : GameManagerInterface) {
|
||||
super({
|
||||
key: "GameScene"
|
||||
});
|
||||
this.RoomId = RoomId;
|
||||
this.GameManager = GameManager;
|
||||
this.Terrains = [];
|
||||
}
|
||||
|
||||
//hook preload scene
|
||||
|
@ -45,8 +46,12 @@ export class GameScene extends Phaser.Scene implements GameSceneInterface{
|
|||
this.load.on('filecomplete-tilemapJSON-'+Textures.Map, (key: string, type: string, data: any) => {
|
||||
// Triggered when the map is loaded
|
||||
// Load tiles attached to the map recursively
|
||||
let map: ITiledMap = data.data;
|
||||
map.tilesets.forEach((tileset) => {
|
||||
this.map = data.data;
|
||||
this.map.tilesets.forEach((tileset) => {
|
||||
if (typeof tileset.name === 'undefined' || typeof tileset.image === 'undefined') {
|
||||
console.warn("Don't know how to handle tileset ", tileset)
|
||||
return;
|
||||
}
|
||||
let path = mapUrl.substr(0, mapUrl.lastIndexOf('/'));
|
||||
this.load.image(tileset.name, path + '/' + tileset.image);
|
||||
})
|
||||
|
@ -67,18 +72,27 @@ export class GameScene extends Phaser.Scene implements GameSceneInterface{
|
|||
|
||||
//initalise map
|
||||
this.Map = this.add.tilemap("map");
|
||||
this.Terrain = this.Map.addTilesetImage("tiles", "tiles");
|
||||
this.Map.createStaticLayer("tiles", "tiles");
|
||||
this.Terrain = this.Map.addTilesetImage("tiles2", "tiles2");
|
||||
this.Map.createStaticLayer("tiles2", "tiles2");
|
||||
this.map.tilesets.forEach((tileset: ITiledTileSet) => {
|
||||
this.Terrains.push(this.Map.addTilesetImage(tileset.name, tileset.name));
|
||||
});
|
||||
|
||||
//permit to set bound collision
|
||||
this.physics.world.setBounds(0,0, this.Map.widthInPixels, this.Map.heightInPixels);
|
||||
|
||||
//add layer on map
|
||||
this.Layers = new Array<Phaser.Tilemaps.StaticTilemapLayer>();
|
||||
this.addLayer( this.Map.createStaticLayer("bottom", [this.Terrain], 0, 0).setDepth(-2) );
|
||||
this.addLayer( this.Map.createStaticLayer("top", [this.Terrain], 0, 0).setDepth(-1) );
|
||||
let depth = -2;
|
||||
this.map.layers.forEach((layer) => {
|
||||
if (layer.type === 'tilelayer') {
|
||||
this.addLayer( this.Map.createStaticLayer(layer.name, this.Terrains, 0, 0).setDepth(depth) );
|
||||
} else if (layer.type === 'objectgroup' && layer.name === 'floorLayer') {
|
||||
depth = -1;
|
||||
}
|
||||
});
|
||||
|
||||
if (depth === -2) {
|
||||
throw new Error('Your map MUST contain a layer of type "objectgroup" whose name is "floorLayer" that represents the layer characters are drawn at.');
|
||||
}
|
||||
|
||||
//add entities
|
||||
this.Objects = new Array<Phaser.Physics.Arcade.Sprite>();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue