2017-11-22 19:13:00 -05:00

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;
}