mirror of
https://github.com/logsol/chuck.js.git
synced 2026-05-11 10:37:34 +00:00
added tiled level support
This commit is contained in:
parent
83e78a5732
commit
3782fa345b
13 changed files with 113 additions and 39 deletions
|
|
@ -9,7 +9,6 @@ define([
|
|||
|
||||
], function (Settings, Box2D, NotificationCenter, CollisionDetector, Tile, Item, Skateboard) {
|
||||
|
||||
// Public
|
||||
function Level (uid, engine, gameObjects) {
|
||||
this.uid = uid;
|
||||
this.engine = engine;
|
||||
|
|
@ -23,7 +22,7 @@ define([
|
|||
var path = Settings.MAPS_PATH + uid + ".json"
|
||||
this.loadLevelDataFromPath(path, function(levelData) {
|
||||
self.createTiles(levelData);
|
||||
self.createItems(levelData);
|
||||
//self.createItems(levelData);
|
||||
NotificationCenter.trigger("game/level/loaded");
|
||||
});
|
||||
}
|
||||
|
|
@ -37,8 +36,6 @@ define([
|
|||
}
|
||||
}
|
||||
|
||||
// Private
|
||||
|
||||
Level.prototype.createTiles = function (levelData) {
|
||||
|
||||
if (!levelData || !levelData.tiles || levelData.tiles.length < 1) {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
define([
|
||||
"Game/" + GLOBALS.context + "/Loader/Level",
|
||||
"Game/Config/Settings",
|
||||
"Lib/Vendor/Box2D",
|
||||
"Game/" + GLOBALS.context + "/Collision/Detector",
|
||||
|
|
@ -6,41 +7,75 @@ define([
|
|||
"Game/" + GLOBALS.context + "/GameObjects/Item",
|
||||
"Game/" + GLOBALS.context + "/GameObjects/Items/Skateboard",
|
||||
|
||||
], function (Settings, Box2D, CollisionDetector, Tile, Item, Skateboard) {
|
||||
], function (Parent, Settings, Box2D, CollisionDetector, Tile, Item, Skateboard) {
|
||||
|
||||
// Public
|
||||
function Level (path, engine, gameObjects) {
|
||||
this.path = path;
|
||||
this.engine = engine;
|
||||
this.levelObject = null;
|
||||
this.gameObjects = gameObjects;
|
||||
function TiledLevel (path, engine, gameObjects) {
|
||||
this.levelData = null;
|
||||
Parent.call(this, path, engine, gameObjects);
|
||||
}
|
||||
|
||||
Level.prototype.loadLevelInToEngine = function () {
|
||||
this.loadLevelObjectFromPath(this.path);
|
||||
this.createTiles();
|
||||
//this.createItems();
|
||||
}
|
||||
TiledLevel.prototype = Object.create(Parent.prototype);
|
||||
|
||||
// Private
|
||||
TiledLevel.prototype.createTiles = function (levelData) {
|
||||
this.levelData = levelData;
|
||||
|
||||
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";
|
||||
if (!levelData) {
|
||||
throw "Level: Can't create level, nothing found";
|
||||
}
|
||||
|
||||
var tiles = this.levelObject.tiles;
|
||||
var collisionLayer = null;
|
||||
|
||||
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));
|
||||
for (var i = 0; i < levelData.layers.length; i++) {
|
||||
if(levelData.layers[i].name === "collision") {
|
||||
collisionLayer = levelData.layers[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(collisionLayer) {
|
||||
|
||||
for (var i = 0; i < collisionLayer.data.length; i++) {
|
||||
|
||||
var gid = collisionLayer.data[i];
|
||||
if(gid === 0) continue;
|
||||
|
||||
var imagePath = this.getTileImagePath(gid);
|
||||
|
||||
|
||||
var parts = imagePath.split("/");
|
||||
var tileType = parts[parts.length - 1].split(".")[0].split("");
|
||||
|
||||
// FIXME rename s to shape, r to rotation etc.
|
||||
|
||||
var options = {
|
||||
s: parseInt(tileType[0], 10),
|
||||
r: parseInt(tileType[1], 10),
|
||||
t: imagePath,
|
||||
x: i % collisionLayer.width,
|
||||
y: parseInt(i / collisionLayer.height , 10)
|
||||
}
|
||||
|
||||
this.gameObjects.fixed.push(new Tile(this.engine, "tile-" + i, options));
|
||||
}
|
||||
|
||||
} else {
|
||||
console.warn("Level: No collision Layer given");
|
||||
}
|
||||
|
||||
this.levelData = null; // free up memory
|
||||
}
|
||||
|
||||
TiledLevel.prototype.getTileImagePath = function(gid) {
|
||||
//console.log(this.levelData.tilesets)
|
||||
for (var i = 0; i < this.levelData.tilesets.length; i++) {
|
||||
var tileset = this.levelData.tilesets[i];
|
||||
var offset = tileset.firstgid;
|
||||
if(gid >= offset && gid < offset + Object.keys(tileset.tiles).length) {
|
||||
return tileset.tiles["" + (gid - offset)].image;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Level.prototype.loadLevelObjectFromPath = function (path) {
|
||||
|
||||
}
|
||||
|
||||
return Level;
|
||||
return TiledLevel;
|
||||
})
|
||||
Loading…
Add table
Add a link
Reference in a new issue