diff --git a/app/Game/Config/Settings.js b/app/Game/Config/Settings.js index 1815c32..655122b 100755 --- a/app/Game/Config/Settings.js +++ b/app/Game/Config/Settings.js @@ -19,6 +19,7 @@ define({ DEFAULT_LEVELS: ['stones2'], RATIO: 21, //35 + OBJECT_RATIO: 21 / 25, TILE_SIZE: 20, //15, 25 is original picture CAMERA_IS_ORTHOGRAPHIC: true, VIEW_CONTROLLER: 0 ? 'Three' : 'Pixi', diff --git a/app/Game/Core/GameObjects/Item.js b/app/Game/Core/GameObjects/Item.js index 667c3f1..ca760fb 100644 --- a/app/Game/Core/GameObjects/Item.js +++ b/app/Game/Core/GameObjects/Item.js @@ -7,7 +7,20 @@ define([ function (Parent, Box2D, Settings) { function Item(physicsEngine, uid, options) { - this.options = options; + this.options = { + category: options.category, + image: options.image, + name: options.name, + type: options.type, + grabAngle: parseFloat(options.grabAngle), + weight: parseFloat(options.weight), + width: parseFloat(options.width), + height: parseFloat(options.height), + rotation: parseFloat(options.rotation), + bounce: parseFloat(options.bounce), + x: parseFloat(options.x), + y: parseFloat(options.y) + }; Parent.call(this, physicsEngine, uid); this.createFixture(); this.body.ResetMassData(); diff --git a/app/Game/Core/Loader/Level.js b/app/Game/Core/Loader/Level.js index 98aace9..f4d3d2b 100755 --- a/app/Game/Core/Loader/Level.js +++ b/app/Game/Core/Loader/Level.js @@ -21,8 +21,9 @@ define([ var self = this; var path = Settings.MAPS_PATH + uid + ".json" this.loadLevelDataFromPath(path, function(levelData) { - self.createTiles(levelData); - //self.createItems(levelData); + self.levelData = levelData; + self.createTiles(); + self.createItems(); NotificationCenter.trigger("game/level/loaded"); }); } @@ -36,13 +37,13 @@ define([ } } - Level.prototype.createTiles = function (levelData) { + Level.prototype.createTiles = function () { - if (!levelData || !levelData.tiles || levelData.tiles.length < 1) { + if (!this.levelData || !this.levelData.tiles || this.levelData.tiles.length < 1) { throw "Level: Can't create physic tiles, no tiles found"; } - var tiles = levelData.tiles; + var tiles = this.levelData.tiles; for (var i = 0; i < tiles.length; i++) { var options = tiles[i]; @@ -52,11 +53,11 @@ define([ } } - Level.prototype.createItems = function(levelData) { - if (!levelData || !levelData.items) { + Level.prototype.createItems = function() { + if (!this.levelData || !this.levelData.items) { return; } - var items = levelData.items; + var items = this.levelData.items; for (var i = 0; i < items.length; i++) { var options = items[i]; diff --git a/app/Game/Core/Loader/TiledLevel.js b/app/Game/Core/Loader/TiledLevel.js index c6fbf24..1a15d96 100755 --- a/app/Game/Core/Loader/TiledLevel.js +++ b/app/Game/Core/Loader/TiledLevel.js @@ -17,21 +17,12 @@ define([ TiledLevel.prototype = Object.create(Parent.prototype); - TiledLevel.prototype.createTiles = function (levelData) { - this.levelData = levelData; - - if (!levelData) { + TiledLevel.prototype.createTiles = function () { + if (!this.levelData) { throw "Level: Can't create level, nothing found"; } - var collisionLayer = null; - - for (var i = 0; i < levelData.layers.length; i++) { - if(levelData.layers[i].name === "collision") { - collisionLayer = levelData.layers[i]; - break; - } - } + var collisionLayer = this.getLayer("collision"); if(collisionLayer) { @@ -64,6 +55,28 @@ define([ } } + TiledLevel.prototype.createItems = function() { + var objects = this.getLayer("items").objects; + for (var i = 0; i < objects.length; i++) { + var object = objects[i]; + var options = object.properties; + options.x = object.x * Settings.OBJECT_RATIO; + options.y = object.y * Settings.OBJECT_RATIO; + var item; + var uid = "item-" + i; + + switch(options.type) { + case 'skateboard': + item = new Skateboard(this.engine, uid, options); + break; + default: + item = new Item(this.engine, uid, options); + break + } + this.gameObjects.animated.push(item); + }; + }; + TiledLevel.prototype.getTileImagePath = function(gid) { //console.log(this.levelData.tilesets) for (var i = 0; i < this.levelData.tilesets.length; i++) { @@ -76,24 +89,31 @@ define([ } TiledLevel.prototype.getRandomSpawnPoint = function() { - if(!this.levelData) { return Parent.prototype.getRandomSpawnPoint.call(this); + } else { + + var spawnLayer = this.getLayer("spawnpoints"); + + var size = spawnLayer.objects.length; + var object = spawnLayer.objects[parseInt(Math.random() * (size -1), 10)]; + + return { + x: object.x * Settings.OBJECT_RATIO, + y: object.y * Settings.OBJECT_RATIO + } + } + }; + TiledLevel.prototype.getLayer = function(name) { for (var i = 0; i < this.levelData.layers.length; i++) { - if(this.levelData.layers[i].name === "spawnpoints") { - var spawnLayer = this.levelData.layers[i]; - - var size = spawnLayer.objects.length; - var object = spawnLayer.objects[parseInt(Math.random() * (size -1), 10)]; - - return { - x: object.x, - y: object.y - } + if(this.levelData.layers[i].name === name) { + return this.levelData.layers[i]; } } + + throw "Layer '" + name + "' not found."; }; return TiledLevel; diff --git a/static/maps/tiled/stones.json b/static/maps/tiled/stones.json old mode 100644 new mode 100755