mirror of
https://github.com/logsol/chuck.js.git
synced 2026-05-11 18:47:35 +00:00
When we require a singleton, its instance name should be named by lowercase, since it is not a class. Relates to #128
155 lines
No EOL
4.6 KiB
JavaScript
155 lines
No EOL
4.6 KiB
JavaScript
define([
|
|
"Game/Core/Loader/TiledLevel",
|
|
"Game/Config/Settings",
|
|
"Lib/Utilities/NotificationCenter",
|
|
],
|
|
|
|
function (Parent, Settings, nc) {
|
|
|
|
"use strict";
|
|
|
|
function TiledLevel(uid, engine) {
|
|
this.layerId = "background";
|
|
Parent.call(this, uid, engine);
|
|
}
|
|
|
|
TiledLevel.prototype = Object.create(Parent.prototype);
|
|
|
|
TiledLevel.prototype.setup = function(levelData) {
|
|
var tilesLayerData = this.getLayer(levelData, "tiles");
|
|
this.levelSize = {
|
|
width: tilesLayerData.width * Settings.TILE_SIZE,
|
|
height: tilesLayerData.height * Settings.TILE_SIZE
|
|
};
|
|
|
|
nc.trigger(nc.ns.client.view.layer.levelSizeUpdate, this.levelSize);
|
|
|
|
Parent.prototype.setup.call(this, levelData);
|
|
};
|
|
|
|
TiledLevel.prototype.getAssetPaths = function(levelData) {
|
|
var paths = Parent.prototype.getAssetPaths.call(this, levelData);
|
|
|
|
// Get tiles images
|
|
for (var i = 0; i < levelData.tilesets.length; i++) {
|
|
var tileset = levelData.tilesets[i];
|
|
for (var key in tileset.tiles) {
|
|
var imagePpath = tileset.tiles[key].image;
|
|
if(imagePpath) {
|
|
paths.push(Settings.MAPS_PATH + imagePpath);
|
|
}
|
|
}
|
|
};
|
|
|
|
// Get items images
|
|
var objects = this.getLayer(levelData, "items").objects;
|
|
for (var i = 0; i < objects.length; i++) {
|
|
var object = objects[i];
|
|
|
|
var options = this.gatherOptions(object);
|
|
|
|
var texturePath = Settings.GRAPHICS_PATH
|
|
+ Settings.GRAPHICS_SUBPATH_ITEMS
|
|
+ options.category + '/'
|
|
+ options.image;
|
|
|
|
paths.push(texturePath);
|
|
};
|
|
|
|
for (var i = 0; i < levelData.layers.length; i++) {
|
|
var layer = levelData.layers[i];
|
|
if (layer.type == "imagelayer") {
|
|
paths.push(Settings.MAPS_PATH + layer.image);
|
|
}
|
|
};
|
|
|
|
return paths;
|
|
}
|
|
|
|
TiledLevel.prototype.setupLayer = function(options, behind, referenceId) {
|
|
|
|
var self = this;
|
|
|
|
Parent.prototype.setupLayer.call(this, options, behind, referenceId);
|
|
|
|
// So far only one image per layer is possible because of Tiled editor
|
|
if (options.type == "imagelayer") {
|
|
|
|
var texturePath = Settings.MAPS_PATH + options.image;
|
|
|
|
var callback = function(mesh) {
|
|
nc.trigger(nc.ns.client.view.mesh.add, options.layerId, mesh);
|
|
nc.trigger(nc.ns.client.view.mesh.update, options.layerId, mesh, {
|
|
x: 0,//self.levelData.width * Settings.TILE_SIZE / 2,
|
|
y: 0,//self.levelData.height * Settings.TILE_SIZE / 2,
|
|
pivot: {
|
|
x: mesh.texture.width / 2,
|
|
y: mesh.texture.height / 2
|
|
},
|
|
xScale: 1,
|
|
yScale: 1
|
|
});
|
|
}
|
|
|
|
nc.trigger(nc.ns.client.view.mesh.create,
|
|
options.layerId,
|
|
texturePath,
|
|
callback,
|
|
{
|
|
alpha: options.opacity
|
|
}
|
|
);
|
|
}
|
|
|
|
// Adding tiles without collision
|
|
else if (options.type == "tilelayer" && options.name != "tiles") {
|
|
this.createNonCollidingTiles(options);
|
|
}
|
|
|
|
};
|
|
|
|
|
|
TiledLevel.prototype.createNonCollidingTiles = function(options) {
|
|
|
|
var data = options.data;
|
|
var tilesOptions = [];
|
|
for (var i = 0; i < data.length; i++) {
|
|
|
|
var gid = data[i];
|
|
if(gid === 0) continue;
|
|
|
|
var imagePath = this.getTileImagePath(gid);
|
|
var parts = imagePath.split("/");
|
|
var tileType = parts[parts.length - 1].split(".")[0].split("")
|
|
|
|
var callback = function(mesh) {
|
|
nc.trigger(nc.ns.client.view.mesh.add, options.layerId, mesh);
|
|
}
|
|
|
|
nc.trigger(nc.ns.client.view.mesh.create,
|
|
options.layerId,
|
|
Settings.MAPS_PATH + imagePath,
|
|
callback,
|
|
{
|
|
width: Settings.TILE_SIZE,
|
|
height: Settings.TILE_SIZE,
|
|
x: (i % options.width) * Settings.TILE_SIZE,
|
|
y: parseInt(i / options.width , 10) * Settings.TILE_SIZE,
|
|
}
|
|
);
|
|
}
|
|
}
|
|
|
|
TiledLevel.prototype.getLayer = function(levelData, name) {
|
|
for (var i = 0; i < levelData.layers.length; i++) {
|
|
if(levelData.layers[i].name === name) {
|
|
return levelData.layers[i];
|
|
}
|
|
}
|
|
|
|
throw "Layer '" + name + "' not found.";
|
|
};
|
|
|
|
return TiledLevel;
|
|
|
|
}); |