From b02036a01960924ba196bb00d6a4d406cd7cabbc Mon Sep 17 00:00:00 2001 From: logsol Date: Tue, 28 Jan 2014 21:34:46 +0100 Subject: [PATCH] first attempt to implement tiled style maps --- app/Game/Config/Settings.js | 3 +- app/Game/Core/Loader/Level.js | 26 ++++++++---- app/Game/Core/Loader/TiledLevel.js | 46 +++++++++++++++++++++ app/Game/Server/Loader/Level.js | 28 ++++++++++--- static/img/Characters/Chuck/chuck-hats.psd | Bin 0 -> 26654 bytes 5 files changed, 87 insertions(+), 16 deletions(-) create mode 100755 app/Game/Core/Loader/TiledLevel.js create mode 100644 static/img/Characters/Chuck/chuck-hats.psd diff --git a/app/Game/Config/Settings.js b/app/Game/Config/Settings.js index fa88c81..dbeb854 100755 --- a/app/Game/Config/Settings.js +++ b/app/Game/Config/Settings.js @@ -10,11 +10,12 @@ define({ BOX2D_POSITION_ITERATIONS: 5, BOX2D_TIME_STEP: 1 / 60, - // GRAPHIC PATHS + // PATHS GRAPHICS_PATH: 'static/img/', GRAPHICS_SUBPATH_ITEMS: 'Items/', GRAPHICS_SUBPATH_CHARACTERS: 'Characters/', GRAPHICS_SUBPATH_TILES: 'Tiles/', + MAPS_PATH: 'static/maps/' RATIO: 21, //35 TILE_SIZE: 15, //15, 25 is original picture diff --git a/app/Game/Core/Loader/Level.js b/app/Game/Core/Loader/Level.js index a23a937..74791b5 100755 --- a/app/Game/Core/Loader/Level.js +++ b/app/Game/Core/Loader/Level.js @@ -16,10 +16,12 @@ define([ this.gameObjects = gameObjects; } - Level.prototype.loadLevelInToEngine = function () { - this.loadLevelObjectFromPath(this.path); - this.createTiles(); - this.createItems(); + Level.prototype.loadLevelInToEngine = function (callback) { + this.loadLevelObjectFromPath(this.path, function(levelData){ + this.createTiles(levelData); + this.createItems(levelData); + callback(); + }); } Level.prototype.destroy = function () { @@ -33,22 +35,26 @@ define([ // Private - Level.prototype.createTiles = function () { - if (!this.levelObject || !this.levelObject.tiles || this.levelObject.tiles.length < 1) { + Level.prototype.createTiles = function (levelData) { + + if (!levelData || !levelData.tiles || levelData.tiles.length < 1) { throw "Level: Can't create physic tiles, no tiles found"; } - var tiles = this.levelObject.tiles; + var tiles = levelData.tiles; for (var i = 0; i < tiles.length; i++) { var options = tiles[i]; - options.m = this.tileAtPositionExists(options.x, options.y - 1) ? "Soil" : "GrassSoil"; + //options.m = this.tileAtPositionExists(options.x, options.y - 1) ? "Soil" : "GrassSoil"; this.gameObjects.fixed.push(new Tile(this.engine, "tile-" + i, options)); } } Level.prototype.createItems = function() { - var items = this.levelObject.items; + if (!levelData || !levelData.tiles) { + return; + } + var items = levelData.items; for (var i = 0; i < items.length; i++) { var options = items[i]; @@ -358,6 +364,7 @@ microwave: 3.744 } // TODO remove hack + /* Level.prototype.tileAtPositionExists = function(x, y) { for (var i = 0; i < this.levelObject.tiles.length; i++) { @@ -366,6 +373,7 @@ microwave: 3.744 } return false; }; + */ return Level; }) \ No newline at end of file diff --git a/app/Game/Core/Loader/TiledLevel.js b/app/Game/Core/Loader/TiledLevel.js new file mode 100755 index 0000000..ccde020 --- /dev/null +++ b/app/Game/Core/Loader/TiledLevel.js @@ -0,0 +1,46 @@ +define([ + "Game/Config/Settings", + "Lib/Vendor/Box2D", + "Game/" + GLOBALS.context + "/Collision/Detector", + "Game/" + GLOBALS.context + "/GameObjects/Tile", + "Game/" + GLOBALS.context + "/GameObjects/Item", + "Game/" + GLOBALS.context + "/GameObjects/Items/Skateboard", + +], function (Settings, Box2D, CollisionDetector, Tile, Item, Skateboard) { + + // Public + function Level (path, engine, gameObjects) { + this.path = path; + this.engine = engine; + this.levelObject = null; + this.gameObjects = gameObjects; + } + + Level.prototype.loadLevelInToEngine = function () { + this.loadLevelObjectFromPath(this.path); + this.createTiles(); + //this.createItems(); + } + + // Private + + Level.prototype.createTiles = function () { + if (!this.levelObject || !this.levelObject.tiles || this.levelObject.tiles.length < 1) { + throw "Level: Can't create physic tiles, no tiles found"; + } + + var tiles = this.levelObject.tiles; + + for (var i = 0; i < tiles.length; i++) { + var options = tiles[i]; + options.m = this.tileAtPositionExists(options.x, options.y - 1) ? "Soil" : "GrassSoil"; + this.gameObjects.fixed.push(new Tile(this.engine, "tile-" + i, options)); + } + } + + Level.prototype.loadLevelObjectFromPath = function (path) { + + } + + return Level; +}) \ No newline at end of file diff --git a/app/Game/Server/Loader/Level.js b/app/Game/Server/Loader/Level.js index dbf60f5..547ac4a 100755 --- a/app/Game/Server/Loader/Level.js +++ b/app/Game/Server/Loader/Level.js @@ -1,9 +1,25 @@ define([ - "Game/Core/Loader/Level" + "Game/Core/Loader/Level", + "Game/Config/Settings" + "fs" ], - -function(Parent) { - - return Parent; - + +function (Parent, Fs) { + + function Level () { + Parent.call(this); + } + + Level.prototype = Object.create(Parent.prototype); + + Level.prototype.loadLevelObjectFromPath = function (path, callback) { + // overwriting parent + + fs.readFile( + path, function (err, data) { + if (err) throw err; + callback(data); + }); + } + + return Level; }); \ No newline at end of file diff --git a/static/img/Characters/Chuck/chuck-hats.psd b/static/img/Characters/Chuck/chuck-hats.psd new file mode 100644 index 0000000000000000000000000000000000000000..189cc3fe429cf3ecb202e26e4b0069f0fee7d88e GIT binary patch literal 26654 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 P^^@2--tAwBNMrsBCDIom literal 0 HcmV?d00001