mirror of
https://github.com/simon987/Much-Assembly-Required-Frontend.git
synced 2025-04-10 14:26:44 +00:00
241 lines
6.4 KiB
JavaScript
241 lines
6.4 KiB
JavaScript
|
|
|
|
WORLD_WIDTH = 16;
|
|
WORLD_HEIGHT = 16;
|
|
|
|
|
|
/**
|
|
*
|
|
* @param terrain
|
|
* @constructor
|
|
*/
|
|
function Word(terrain) {
|
|
|
|
setupWorldLayer(this);
|
|
// game.worldLayer = new PIXI.Container();
|
|
|
|
this.tiles = {};
|
|
this.objects = [];
|
|
|
|
var self = this;
|
|
|
|
for (var x = 0; x < WORLD_HEIGHT; x++) {
|
|
for (var y = 0; y < WORLD_HEIGHT; y++) {
|
|
|
|
var terrainType = terrain[y * WORLD_WIDTH + x];
|
|
|
|
var tile = new Tile(terrainType);
|
|
|
|
tile.sprite.x = (x - y) * 64 + getTileXOffset(terrainType);
|
|
tile.sprite.y = (x + y) * 32 + getTileYOffset(terrainType);
|
|
tile.sprite.z = y + x;
|
|
|
|
this.tiles[x + ',' + y] = tile;
|
|
|
|
game.worldLayer.addChild(tile.sprite);
|
|
game.rootContainer.addChild(game.worldLayer);
|
|
|
|
}
|
|
}
|
|
|
|
game.worldLayer.children.sort(depthCompare);
|
|
|
|
/**
|
|
* Update object from parsed JSON string sent from the server
|
|
* @param response parsed JSON string sent from the server
|
|
*/
|
|
this.updateObjects = function(response) {
|
|
|
|
|
|
//Mark objects as not updated
|
|
for(var i = 0; i < self.objects.length ; i++){
|
|
self.objects[i].updated = false;
|
|
}
|
|
|
|
|
|
for(var i = 0; i < response.length ; i++){
|
|
|
|
response[i].updated = true;
|
|
|
|
//Update/Create the object
|
|
|
|
var existingObject = self.getObject(response[i].id);
|
|
if(existingObject !== null){
|
|
//Object already exists
|
|
existingObject = updateGameObject(existingObject, response[i]);
|
|
|
|
} else {
|
|
|
|
//Object is new
|
|
var newObj = createGameObject(response[i]);
|
|
self.addObject(newObj);
|
|
}
|
|
}
|
|
|
|
//Delete not updated objects (see above comments)
|
|
for (var i = 0; i < self.objects.length; i++) {
|
|
if (!self.objects[i].updated) {
|
|
console.log("DEBUG: removed " + self.objects[i].id);
|
|
game.worldLayer.removeChild(self.objects[i].sprite);
|
|
self.objects.splice(i, 1);
|
|
}
|
|
}
|
|
|
|
game.worldLayer.children.sort(depthCompare);
|
|
};
|
|
|
|
|
|
/**
|
|
* Add an object the the 'current' objects
|
|
* @param object
|
|
*/
|
|
this.addObject = function(object) {
|
|
|
|
self.objects.push(object);
|
|
};
|
|
|
|
/**
|
|
* Get object from the list of 'current' objects (Objects shown on the screen)
|
|
* @param id objectId of the object
|
|
*/
|
|
this.getObject = function(id) {
|
|
|
|
for(var i = 0; i < self.objects.length; i++) {
|
|
if (self.objects[i].id === id) {
|
|
return self.objects[i];
|
|
}
|
|
}
|
|
|
|
return null;
|
|
};
|
|
|
|
this.update = function(terrain){
|
|
|
|
for (key in this.tiles) {
|
|
game.worldLayer.removeChild(this.tiles[key].sprite);
|
|
}
|
|
|
|
for (var j = 0; j < this.objects.length; j++) {
|
|
game.worldLayer.removeChild(this.objects[j].sprite);
|
|
}
|
|
|
|
this.tiles = {};
|
|
this.objects = [];
|
|
|
|
for (var x = 0; x < WORLD_HEIGHT; x++) {
|
|
for (var y = 0; y < WORLD_HEIGHT; y++) {
|
|
|
|
var terrainType = terrain[y * WORLD_WIDTH + x];
|
|
|
|
var tile = new Tile(terrainType);
|
|
|
|
tile.sprite.x = (x - y) * 64 + getTileXOffset(terrainType);
|
|
tile.sprite.y = (x + y) * 32 + getTileYOffset(terrainType);
|
|
tile.sprite.z = y + x;
|
|
|
|
this.tiles[x + ',' + y] = tile;
|
|
|
|
game.worldLayer.addChild(tile.sprite);
|
|
game.rootContainer.addChild(game.worldLayer);
|
|
|
|
}
|
|
}
|
|
|
|
game.worldLayer.children.sort(depthCompare);
|
|
}
|
|
|
|
}
|
|
|
|
function setupWorldLayer(world) {
|
|
game.worldLayer = new PIXI.Container();
|
|
game.worldLayer.x = 736;
|
|
game.worldLayer.y = -32;
|
|
game.rootContainer.addChild(game.worldLayer);
|
|
|
|
//NORTH
|
|
var arrow_north = new PIXI.Sprite(PIXI.Texture.fromFrame("ui/arrow_north"));
|
|
arrow_north.x = 528;
|
|
arrow_north.y = 224;
|
|
arrow_north.interactive = true;
|
|
arrow_north.buttonMode = true;
|
|
arrow_north.on("pointerover", function () {
|
|
arrow_north.texture = PIXI.Texture.fromFrame("ui/arrow_north_s");
|
|
});
|
|
arrow_north.on("pointerout", function () {
|
|
arrow_north.texture = PIXI.Texture.fromFrame("ui/arrow_north");
|
|
});
|
|
arrow_north.on("pointerdown", function () {
|
|
game.worldY--;
|
|
client.requestTerrain()
|
|
});
|
|
game.worldLayer.addChild(arrow_north);
|
|
|
|
//EAST
|
|
var arrow_east = new PIXI.Sprite(PIXI.Texture.fromFrame("ui/arrow_east"));
|
|
arrow_east.x = 528;
|
|
arrow_east.y = 750;
|
|
arrow_east.interactive = true;
|
|
arrow_east.buttonMode = true;
|
|
arrow_east.on("pointerover", function () {
|
|
arrow_east.texture = PIXI.Texture.fromFrame("ui/arrow_east_s");
|
|
});
|
|
arrow_east.on("pointerout", function () {
|
|
arrow_east.texture = PIXI.Texture.fromFrame("ui/arrow_east");
|
|
});
|
|
arrow_east.on("pointerdown", function () {
|
|
game.worldX++;
|
|
client.requestTerrain();
|
|
});
|
|
game.worldLayer.addChild(arrow_east);
|
|
|
|
//SOUTH
|
|
var arrow_south = new PIXI.Sprite(PIXI.Texture.fromFrame("ui/arrow_south"));
|
|
arrow_south.x = -496;
|
|
arrow_south.y = 750;
|
|
arrow_south.interactive = true;
|
|
arrow_south.buttonMode = true;
|
|
arrow_south.on("pointerover", function () {
|
|
arrow_south.texture = PIXI.Texture.fromFrame("ui/arrow_south_s");
|
|
});
|
|
arrow_south.on("pointerout", function () {
|
|
arrow_south.texture = PIXI.Texture.fromFrame("ui/arrow_south");
|
|
});
|
|
arrow_south.on("pointerdown", function () {
|
|
game.worldY++;
|
|
client.requestTerrain();
|
|
});
|
|
game.worldLayer.addChild(arrow_south);
|
|
|
|
//WEST
|
|
var arrow_west = new PIXI.Sprite(PIXI.Texture.fromFrame("ui/arrow_west"));
|
|
arrow_west.x = -496;
|
|
arrow_west.y = 224;
|
|
arrow_west.interactive = true;
|
|
arrow_west.buttonMode = true;
|
|
arrow_west.on("pointerover", function () {
|
|
arrow_west.texture = PIXI.Texture.fromFrame("ui/arrow_west_s");
|
|
});
|
|
arrow_west.on("pointerout", function () {
|
|
arrow_west.texture = PIXI.Texture.fromFrame("ui/arrow_west");
|
|
});
|
|
arrow_west.on("pointerdown", function () {
|
|
game.worldX--;
|
|
client.requestTerrain();
|
|
});
|
|
game.worldLayer.addChild(arrow_west)
|
|
}
|
|
|
|
/**
|
|
* Compare depth of two sprites based on their z property
|
|
*/
|
|
function depthCompare(a, b) {
|
|
if (a.z < b.z) {
|
|
return -1;
|
|
}
|
|
if (a.z > b.z) {
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|