chuck.js/app/Game/Core/Loader/TiledLevel.js
2014-02-03 14:08:45 +01:00

81 lines
No EOL
2.5 KiB
JavaScript
Executable file

define([
"Game/" + GLOBALS.context + "/Loader/Level",
"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 (Parent, Settings, Box2D, CollisionDetector, Tile, Item, Skateboard) {
// Public
function TiledLevel (path, engine, gameObjects) {
this.levelData = null;
Parent.call(this, path, engine, gameObjects);
}
TiledLevel.prototype = Object.create(Parent.prototype);
TiledLevel.prototype.createTiles = function (levelData) {
this.levelData = levelData;
if (!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;
}
}
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;
}
}
}
return TiledLevel;
})