Files
esengine/demo/libs/framework_tiled/framework_tiled.js

1576 lines
76 KiB
JavaScript
Raw Normal View History

var __extends = (this && this.__extends) || (function () {
var extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
var es;
(function (es) {
var TiledMapRenderer = (function (_super) {
__extends(TiledMapRenderer, _super);
function TiledMapRenderer(tiledMap, collisionLayerName, shouldCreateColliders) {
if (collisionLayerName === void 0) { collisionLayerName = null; }
if (shouldCreateColliders === void 0) { shouldCreateColliders = true; }
var _this = _super.call(this) || this;
_this.physicsLayer = new es.Ref(1 << 0);
_this.toContainer = false;
_this.tiledMap = tiledMap;
_this._shouldCreateColliders = shouldCreateColliders;
_this.displayObject = new egret.DisplayObjectContainer();
if (collisionLayerName) {
_this.collisionLayer = tiledMap.tileLayers.find(function (layer) { return layer.name == collisionLayerName; });
}
return _this;
}
Object.defineProperty(TiledMapRenderer.prototype, "width", {
get: function () {
return this.tiledMap.width * this.tiledMap.tileWidth;
},
enumerable: true,
configurable: true
});
Object.defineProperty(TiledMapRenderer.prototype, "height", {
get: function () {
return this.tiledMap.height * this.tiledMap.tileHeight;
},
enumerable: true,
configurable: true
});
TiledMapRenderer.prototype.setLayerToRender = function (layerName) {
this.layerIndicesToRender = [];
this.layerIndicesToRender[0] = this.getLayerIndex(layerName);
};
TiledMapRenderer.prototype.setLayersToRender = function () {
var layerNames = [];
for (var _i = 0; _i < arguments.length; _i++) {
layerNames[_i] = arguments[_i];
}
this.layerIndicesToRender = [];
for (var i = 0; i < layerNames.length; i++)
this.layerIndicesToRender[i] = this.getLayerIndex(layerNames[i]);
};
TiledMapRenderer.prototype.getLayerIndex = function (layerName) {
var index = 0;
var layerType = this.tiledMap.getLayer(layerName);
for (var layer in this.tiledMap.layers) {
if (this.tiledMap.layers.hasOwnProperty(layer) &&
this.tiledMap.layers[layer] == layerType) {
return index;
}
}
return -1;
};
TiledMapRenderer.prototype.getRowAtWorldPosition = function (yPos) {
yPos -= this.entity.transform.position.y + this._localOffset.y;
return this.tiledMap.worldToTilePositionY(yPos);
};
TiledMapRenderer.prototype.getColumnAtWorldPosition = function (xPos) {
xPos -= this.entity.transform.position.x + this._localOffset.x;
return this.tiledMap.worldToTilePositionX(xPos);
};
TiledMapRenderer.prototype.onEntityTransformChanged = function (comp) {
if (this._shouldCreateColliders && comp == transform.Component.position) {
this.removeColliders();
this.addColliders();
}
};
TiledMapRenderer.prototype.onAddedToEntity = function () {
this.addColliders();
};
TiledMapRenderer.prototype.onRemovedFromEntity = function () {
this.removeColliders();
};
TiledMapRenderer.prototype.update = function () {
this.tiledMap.update();
};
TiledMapRenderer.prototype.render = function (camera) {
this.sync(camera);
if (!this.layerIndicesToRender) {
es.TiledRendering.renderMap(this.tiledMap, !this.toContainer ? this.displayObject : null, es.Vector2.add(this.entity.transform.position, this._localOffset), this.transform.scale, this.renderLayer);
}
else {
for (var i = 0; i < this.tiledMap.layers.length; i++) {
if (this.tiledMap.layers[i].visible && this.layerIndicesToRender.contains(i))
es.TiledRendering.renderLayerRenderCamera(this.tiledMap.layers[i], !this.toContainer ? this.displayObject : null, es.Vector2.add(this.entity.transform.position, this._localOffset), this.transform.scale, this.renderLayer, camera.bounds);
}
}
if (!this.toContainer) {
this.displayObject.cacheAsBitmap = true;
this.toContainer = true;
}
};
TiledMapRenderer.prototype.addColliders = function () {
if (!this.collisionLayer || !this._shouldCreateColliders)
return;
var collisionRects = this.collisionLayer.getCollisionRectangles();
this._colliders = [];
for (var i = 0; i < collisionRects.length; i++) {
var collider = new es.BoxCollider(collisionRects[i].x + this._localOffset.x, collisionRects[i].y + this._localOffset.y, collisionRects[i].width, collisionRects[i].height);
collider.physicsLayer = this.physicsLayer;
collider.entity = this.entity;
this._colliders[i] = collider;
es.Physics.addCollider(collider);
}
};
TiledMapRenderer.prototype.removeColliders = function () {
if (this._colliders == null)
return;
for (var _i = 0, _a = this._colliders; _i < _a.length; _i++) {
var collider = _a[_i];
es.Physics.removeCollider(collider);
}
this._colliders = null;
};
return TiledMapRenderer;
}(es.RenderableComponent));
es.TiledMapRenderer = TiledMapRenderer;
})(es || (es = {}));
var es;
(function (es) {
var TmxGroup = (function () {
function TmxGroup() {
}
return TmxGroup;
}());
es.TmxGroup = TmxGroup;
})(es || (es = {}));
var es;
(function (es) {
var TmxImageLayer = (function () {
function TmxImageLayer() {
}
return TmxImageLayer;
}());
es.TmxImageLayer = TmxImageLayer;
})(es || (es = {}));
var es;
(function (es) {
var TmxLayer = (function () {
function TmxLayer() {
}
Object.defineProperty(TmxLayer.prototype, "offset", {
get: function () {
return new es.Vector2(this.offsetX, this.offsetY);
},
enumerable: true,
configurable: true
});
TmxLayer.prototype.getTileWithGid = function (gid) {
for (var i = 0; i < this.tiles.length; i++) {
if (this.tiles[i] && this.tiles[i].gid == gid)
return this.tiles[i];
}
return null;
};
TmxLayer.prototype.getTile = function (x, y) {
return this.tiles[x + y * this.width];
};
TmxLayer.prototype.getCollisionRectangles = function () {
var checkedIndexes = new Array(this.tiles.length);
var rectangles = [];
var startCol = -1;
var index = -1;
for (var y = 0; y < this.map.height; y++) {
for (var x = 0; x < this.map.width; x++) {
index = y * this.map.width + x;
var tile = this.getTile(x, y);
if (tile && !checkedIndexes[index]) {
if (startCol < 0)
startCol = x;
checkedIndexes[index] = true;
}
else if (!tile || checkedIndexes[index] == true) {
if (startCol >= 0) {
rectangles.push(this.findBoundsRect(startCol, x, y, checkedIndexes));
startCol = -1;
}
}
}
if (startCol >= 0) {
rectangles.push(this.findBoundsRect(startCol, this.map.width, y, checkedIndexes));
startCol = -1;
}
}
return rectangles;
};
TmxLayer.prototype.findBoundsRect = function (startX, endX, startY, checkedIndexes) {
var index = -1;
for (var y = startY + 1; y < this.map.height; y++) {
for (var x = startX; x < endX; x++) {
index = y * this.map.width + x;
var tile = this.getTile(x, y);
if (!tile || checkedIndexes[index]) {
for (var _x = startX; _x < x; _x++) {
index = y * this.map.width + _x;
checkedIndexes[index] = false;
}
return new es.Rectangle(startX * this.map.tileWidth, startY * this.map.tileHeight, (endX - startX) * this.map.tileWidth, (y - startY) * this.map.tileHeight);
}
checkedIndexes[index] = true;
}
}
return new es.Rectangle(startX * this.map.tileWidth, startY * this.map.tileHeight, (endX - startX) * this.map.tileWidth, (this.map.height - startY) * this.map.tileHeight);
};
return TmxLayer;
}());
es.TmxLayer = TmxLayer;
var TmxLayerTile = (function () {
function TmxLayerTile(map, id, x, y) {
this.x = x;
this.y = y;
var rawGid = id;
var flip;
flip = (rawGid & TmxLayerTile.FLIPPED_HORIZONTALLY_FLAG) != 0;
this.horizontalFlip = flip;
flip = (rawGid & TmxLayerTile.FLIPPED_VERTICALLY_FLAG) != 0;
this.verticalFlip = flip;
rawGid &= ~(TmxLayerTile.FLIPPED_HORIZONTALLY_FLAG | TmxLayerTile.FLIPPED_VERTICALLY_FLAG);
this.gid = Math.floor(rawGid);
this.tileset = map.getTilesetForTileGid(this.gid);
}
Object.defineProperty(TmxLayerTile.prototype, "position", {
get: function () {
return new es.Vector2(this.x, this.y);
},
enumerable: true,
configurable: true
});
Object.defineProperty(TmxLayerTile.prototype, "tilesetTile", {
get: function () {
if (!this._tilesetTileIndex) {
this._tilesetTileIndex = -1;
if (this.tileset.firstGid <= this.gid) {
var tilesetTile = this.tileset.tiles.get(this.gid - this.tileset.firstGid);
if (tilesetTile) {
this._tilesetTileIndex = this.gid - this.tileset.firstGid;
}
}
}
if (this._tilesetTileIndex < 0)
return null;
return this.tileset.tiles.get(this._tilesetTileIndex);
},
enumerable: true,
configurable: true
});
TmxLayerTile.FLIPPED_HORIZONTALLY_FLAG = 0x80000000;
TmxLayerTile.FLIPPED_VERTICALLY_FLAG = 0x40000000;
return TmxLayerTile;
}());
es.TmxLayerTile = TmxLayerTile;
})(es || (es = {}));
var es;
(function (es) {
var TmxDocument = (function () {
function TmxDocument() {
this.tmxDirectory = "resource/assets/";
}
return TmxDocument;
}());
es.TmxDocument = TmxDocument;
var TmxImage = (function () {
function TmxImage() {
}
TmxImage.prototype.dispose = function () {
if (this.bitmap) {
this.bitmap.dispose();
this.bitmap = null;
}
};
return TmxImage;
}());
es.TmxImage = TmxImage;
})(es || (es = {}));
var es;
(function (es) {
var TmxMap = (function (_super) {
__extends(TmxMap, _super);
function TmxMap() {
return _super !== null && _super.apply(this, arguments) || this;
}
Object.defineProperty(TmxMap.prototype, "worldWidth", {
get: function () {
return this.width * this.tileWidth;
},
enumerable: true,
configurable: true
});
Object.defineProperty(TmxMap.prototype, "worldHeight", {
get: function () {
return this.height * this.tileHeight;
},
enumerable: true,
configurable: true
});
Object.defineProperty(TmxMap.prototype, "requiresLargeTileCulling", {
get: function () {
return this.maxTileHeight > this.tileHeight || this.maxTileWidth > this.tileWidth;
},
enumerable: true,
configurable: true
});
TmxMap.prototype.getTilesetForTileGid = function (gid) {
if (gid == 0)
return null;
for (var i = this.tilesets.length - 1; i >= 0; i--) {
if (this.tilesets[i].firstGid <= gid)
return this.tilesets[i];
}
console.error("tile gid" + gid + "\u672A\u5728\u4EFB\u4F55tileset\u4E2D\u627E\u5230");
};
TmxMap.prototype.worldToTilePositionX = function (x, clampToTilemapBounds) {
if (clampToTilemapBounds === void 0) { clampToTilemapBounds = true; }
var tileX = Math.floor(x / this.tileWidth);
if (!clampToTilemapBounds)
return tileX;
return es.MathHelper.clamp(tileX, 0, this.width - 1);
};
TmxMap.prototype.worldToTilePositionY = function (y, clampToTilemapBounds) {
if (clampToTilemapBounds === void 0) { clampToTilemapBounds = true; }
var tileY = Math.floor(y / this.tileHeight);
if (!clampToTilemapBounds)
return tileY;
return es.MathHelper.clamp(tileY, 0, this.height - 1);
};
TmxMap.prototype.getLayer = function (name) {
return this.layers[name];
};
TmxMap.prototype.update = function () {
this.tilesets.forEach(function (tileset) { tileset.update(); });
};
TmxMap.prototype.dispose = function (disposing) {
if (disposing === void 0) { disposing = true; }
if (!this._isDisposed) {
if (disposing) {
this.tilesets.forEach(function (tileset) { if (tileset.image)
tileset.image.dispose(); });
this.imageLayers.forEach(function (layer) { if (layer.image)
layer.image.dispose(); });
}
this._isDisposed = true;
}
};
return TmxMap;
}(es.TmxDocument));
es.TmxMap = TmxMap;
var OrientationType;
(function (OrientationType) {
OrientationType[OrientationType["unknown"] = 0] = "unknown";
OrientationType[OrientationType["orthogonal"] = 1] = "orthogonal";
OrientationType[OrientationType["isometric"] = 2] = "isometric";
OrientationType[OrientationType["staggered"] = 3] = "staggered";
OrientationType[OrientationType["hexagonal"] = 4] = "hexagonal";
})(OrientationType = es.OrientationType || (es.OrientationType = {}));
var StaggerAxisType;
(function (StaggerAxisType) {
StaggerAxisType[StaggerAxisType["x"] = 0] = "x";
StaggerAxisType[StaggerAxisType["y"] = 1] = "y";
})(StaggerAxisType = es.StaggerAxisType || (es.StaggerAxisType = {}));
var StaggerIndexType;
(function (StaggerIndexType) {
StaggerIndexType[StaggerIndexType["odd"] = 0] = "odd";
StaggerIndexType[StaggerIndexType["even"] = 1] = "even";
})(StaggerIndexType = es.StaggerIndexType || (es.StaggerIndexType = {}));
var RenderOrderType;
(function (RenderOrderType) {
RenderOrderType[RenderOrderType["rightDown"] = 0] = "rightDown";
RenderOrderType[RenderOrderType["rightUp"] = 1] = "rightUp";
RenderOrderType[RenderOrderType["leftDown"] = 2] = "leftDown";
RenderOrderType[RenderOrderType["leftUp"] = 3] = "leftUp";
})(RenderOrderType = es.RenderOrderType || (es.RenderOrderType = {}));
})(es || (es = {}));
var es;
(function (es) {
var TmxObjectGroup = (function () {
function TmxObjectGroup() {
}
return TmxObjectGroup;
}());
es.TmxObjectGroup = TmxObjectGroup;
var TmxObject = (function () {
function TmxObject() {
this.shape = new egret.Shape();
this.textField = new egret.TextField();
}
return TmxObject;
}());
es.TmxObject = TmxObject;
var TmxText = (function () {
function TmxText() {
}
return TmxText;
}());
es.TmxText = TmxText;
var TmxAlignment = (function () {
function TmxAlignment() {
}
return TmxAlignment;
}());
es.TmxAlignment = TmxAlignment;
var TmxObjectType;
(function (TmxObjectType) {
TmxObjectType[TmxObjectType["basic"] = 0] = "basic";
TmxObjectType[TmxObjectType["point"] = 1] = "point";
TmxObjectType[TmxObjectType["tile"] = 2] = "tile";
TmxObjectType[TmxObjectType["ellipse"] = 3] = "ellipse";
TmxObjectType[TmxObjectType["polygon"] = 4] = "polygon";
TmxObjectType[TmxObjectType["polyline"] = 5] = "polyline";
TmxObjectType[TmxObjectType["text"] = 6] = "text";
})(TmxObjectType = es.TmxObjectType || (es.TmxObjectType = {}));
var DrawOrderType;
(function (DrawOrderType) {
DrawOrderType[DrawOrderType["unkownOrder"] = -1] = "unkownOrder";
DrawOrderType[DrawOrderType["TopDown"] = 0] = "TopDown";
DrawOrderType[DrawOrderType["IndexOrder"] = 1] = "IndexOrder";
})(DrawOrderType = es.DrawOrderType || (es.DrawOrderType = {}));
var TmxHorizontalAlignment;
(function (TmxHorizontalAlignment) {
TmxHorizontalAlignment[TmxHorizontalAlignment["left"] = 0] = "left";
TmxHorizontalAlignment[TmxHorizontalAlignment["center"] = 1] = "center";
TmxHorizontalAlignment[TmxHorizontalAlignment["right"] = 2] = "right";
TmxHorizontalAlignment[TmxHorizontalAlignment["justify"] = 3] = "justify";
})(TmxHorizontalAlignment = es.TmxHorizontalAlignment || (es.TmxHorizontalAlignment = {}));
var TmxVerticalAlignment;
(function (TmxVerticalAlignment) {
TmxVerticalAlignment[TmxVerticalAlignment["top"] = 0] = "top";
TmxVerticalAlignment[TmxVerticalAlignment["center"] = 1] = "center";
TmxVerticalAlignment[TmxVerticalAlignment["bottom"] = 2] = "bottom";
})(TmxVerticalAlignment = es.TmxVerticalAlignment || (es.TmxVerticalAlignment = {}));
})(es || (es = {}));
var es;
(function (es) {
var TiledMapLoader = (function () {
function TiledMapLoader() {
}
TiledMapLoader.loadTmxMap = function (map, filePath) {
var xMap = RES.getRes(filePath);
return this.loadTmxMapData(map, xMap, RES.getResourceInfo(filePath));
};
TiledMapLoader.loadTmxMapData = function (map, xMap, info) {
return __awaiter(this, void 0, void 0, function () {
var _i, _a, e, tileset;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
map.version = xMap["version"];
map.tiledVersion = xMap["tiledversion"];
map.width = xMap["width"];
map.height = xMap["height"];
map.tileWidth = xMap["tilewidth"];
map.tileHeight = xMap["tileheight"];
map.hexSideLength = xMap["hexsidelength"];
map.orientation = this.parseOrientationType(xMap["orientation"]);
map.staggerAxis = this.parseStaggerAxisType(xMap["staggeraxis"]);
map.staggerIndex = this.parseStaggerIndexType(xMap["staggerindex"]);
map.renderOrder = this.parseRenderOrderType(xMap["renderorder"]);
map.nextObjectID = xMap["nextobjectid"];
map.backgroundColor = es.TmxUtils.color16ToUnit(xMap["color"]);
map.properties = this.parsePropertyDict(xMap["properties"]);
map.maxTileWidth = map.tileWidth;
map.maxTileHeight = map.tileHeight;
map.tmxDirectory = info.root + info.url.replace(".", "_").replace(info.name, "");
map.tilesets = [];
_i = 0, _a = xMap["tilesets"];
_b.label = 1;
case 1:
if (!(_i < _a.length)) return [3, 4];
e = _a[_i];
return [4, this.parseTmxTileset(map, e)];
case 2:
tileset = _b.sent();
map.tilesets.push(tileset);
this.updateMaxTileSizes(tileset);
_b.label = 3;
case 3:
_i++;
return [3, 1];
case 4:
map.layers = [];
map.tileLayers = [];
map.objectGroups = [];
map.imageLayers = [];
map.groups = [];
this.parseLayers(map, xMap, map, map.width, map.height, map.tmxDirectory);
return [2, map];
}
});
});
};
TiledMapLoader.parseLayers = function (container, xEle, map, width, height, tmxDirectory) {
return __awaiter(this, void 0, void 0, function () {
var _i, _a, e, layer, _b, tileLayer, objectgroup, imagelayer, newGroup;
return __generator(this, function (_c) {
switch (_c.label) {
case 0:
_i = 0, _a = ObjectUtils.elements(xEle).where(function (x) {
return x.type == "tilelayer" || x.type == "objectgroup" || x.type == "imagelayer" || x.type == "group";
});
_c.label = 1;
case 1:
if (!(_i < _a.length)) return [3, 11];
e = _a[_i];
layer = void 0;
_b = e.type;
switch (_b) {
case "tilelayer": return [3, 2];
case "objectgroup": return [3, 3];
case "imagelayer": return [3, 4];
case "group": return [3, 6];
}
return [3, 8];
case 2:
tileLayer = this.loadTmxLayer(new es.TmxLayer(), map, e, width, height);
layer = tileLayer;
if (container instanceof es.TmxMap || container instanceof es.TmxGroup)
container.tileLayers.push(tileLayer);
return [3, 9];
case 3:
objectgroup = this.loadTmxObjectGroup(new es.TmxObjectGroup(), map, e);
layer = objectgroup;
if (container instanceof es.TmxMap || container instanceof es.TmxGroup)
container.objectGroups.push(objectgroup);
return [3, 9];
case 4: return [4, this.loadTmxImageLayer(new es.TmxImageLayer(), map, e, tmxDirectory)];
case 5:
imagelayer = _c.sent();
layer = imagelayer;
if (container instanceof es.TmxMap || container instanceof es.TmxGroup)
container.imageLayers.push(imagelayer);
return [3, 9];
case 6: return [4, this.loadTmxGroup(new es.TmxGroup(), map, e, width, height, tmxDirectory)];
case 7:
newGroup = _c.sent();
layer = newGroup;
if (container instanceof es.TmxMap || container instanceof es.TmxGroup)
container.groups.push(newGroup);
return [3, 9];
case 8: throw new Error("无效的操作");
case 9:
if (container instanceof es.TmxMap || container instanceof es.TmxGroup)
container.layers.push(layer);
_c.label = 10;
case 10:
_i++;
return [3, 1];
case 11: return [2];
}
});
});
};
TiledMapLoader.loadTmxGroup = function (group, map, xGroup, width, height, tmxDirectory) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
group.map = map;
group.name = xGroup["name"] != undefined ? xGroup["name"] : "";
group.opacity = xGroup["opacity"] != undefined ? xGroup["opacity"] : 1;
group.visible = xGroup["visible"] != undefined ? xGroup["visible"] : true;
group.offsetX = xGroup["offsetx"] != undefined ? xGroup["offsetx"] : 0;
group.offsetY = xGroup["offsety"] != undefined ? xGroup["offsety"] : 0;
group.properties = this.parsePropertyDict(xGroup["properties"]);
group.layers = [];
group.tileLayers = [];
group.objectGroups = [];
group.imageLayers = [];
group.groups = [];
return [4, this.parseLayers(group, xGroup, map, width, height, tmxDirectory)];
case 1:
_a.sent();
return [2, group];
}
});
});
};
TiledMapLoader.loadTmxImageLayer = function (layer, map, xImageLayer, tmxDirectory) {
return __awaiter(this, void 0, void 0, function () {
var xImage, _a;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
layer.map = map;
layer.name = xImageLayer["name"];
layer.width = xImageLayer["width"];
layer.height = xImageLayer["height"];
layer.visible = xImageLayer["visible"] != undefined ? xImageLayer["visible"] : true;
layer.opacity = xImageLayer["opacity"] != undefined ? xImageLayer["opacity"] : 1;
layer.offsetX = xImageLayer["offsetx"] != undefined ? xImageLayer["offsetx"] : 0;
layer.offsetY = xImageLayer["offsety"] != undefined ? xImageLayer["offsety"] : 0;
xImage = xImageLayer["image"];
if (!xImage) return [3, 2];
_a = layer;
return [4, this.loadTmxImage(new es.TmxImage(), xImage, tmxDirectory)];
case 1:
_a.image = _b.sent();
_b.label = 2;
case 2:
layer.properties = this.parsePropertyDict(xImageLayer["properties"]);
return [2, layer];
}
});
});
};
TiledMapLoader.loadTmxLayer = function (layer, map, xLayer, width, height) {
layer.map = map;
layer.name = xLayer["name"];
layer.opacity = xLayer["opacity"] != undefined ? xLayer["opacity"] : 1;
layer.visible = xLayer["visible"] != undefined ? xLayer["visible"] : true;
layer.offsetX = xLayer["offsetx"] != undefined ? xLayer["offsetx"] : 0;
layer.offsetY = xLayer["offsety"] != undefined ? xLayer["offsety"] : 0;
layer.width = xLayer["width"];
layer.height = xLayer["height"];
var xData = xLayer["data"];
var encoding = xData["encoding"] != undefined ? xData["encoding"] : "csv";
layer.tiles = new Array(width * height);
if (encoding == "base64") {
var br = es.TmxUtils.decode(xData.toString(), encoding, xData["compression"]);
var index = 0;
for (var j = 0; j < height; j++) {
for (var i = 0; i < width; i++) {
var gid = br[index];
layer.tiles[index++] = gid != 0 ? new es.TmxLayerTile(map, gid, i, j) : null;
}
}
}
else if (encoding == "csv") {
var k = 0;
for (var _i = 0, xData_1 = xData; _i < xData_1.length; _i++) {
var s = xData_1[_i];
var gid = s;
var x = k % width;
var y = k / width;
layer.tiles[k++] = gid != 0 ? new es.TmxLayerTile(map, gid, x, y) : null;
}
}
else if (!encoding) {
var k = 0;
for (var _a = 0, _b = xData["tile"]; _a < _b.length; _a++) {
var e = _b[_a];
var gid = e["gid"] != undefined ? e["gid"] : 0;
var x = k % width;
var y = k / width;
layer.tiles[k++] = gid != 0 ? new es.TmxLayerTile(map, gid, x, y) : null;
}
}
else {
throw new Error("TmxLayer:未知编码");
}
layer.properties = TiledMapLoader.parsePropertyDict(xLayer["properties"]);
return layer;
};
TiledMapLoader.updateMaxTileSizes = function (tileset) {
tileset.tiles.forEach(function (tile) {
if (tile.image) {
if (tile.image.width > tileset.map.maxTileWidth)
tileset.map.maxTileWidth = tile.image.width;
if (tile.image.height > tileset.map.maxTileHeight)
tileset.map.maxTileHeight = tile.image.height;
}
});
tileset.tileRegions.forEach(function (region) {
var width = region.width;
var height = region.height;
if (width > tileset.map.maxTileWidth)
tileset.map.maxTileWidth = width;
if (width > tileset.map.maxTileHeight)
tileset.map.maxTileHeight = height;
});
};
TiledMapLoader.parseOrientationType = function (type) {
if (type == "unknown")
return es.OrientationType.unknown;
if (type == "orthogonal")
return es.OrientationType.orthogonal;
if (type == "isometric")
return es.OrientationType.isometric;
if (type == "staggered")
return es.OrientationType.staggered;
if (type == "hexagonal")
return es.OrientationType.hexagonal;
return es.OrientationType.unknown;
};
TiledMapLoader.parseStaggerAxisType = function (type) {
if (type == "y")
return es.StaggerAxisType.y;
return es.StaggerAxisType.x;
};
TiledMapLoader.parseStaggerIndexType = function (type) {
if (type == "even")
return es.StaggerIndexType.even;
return es.StaggerIndexType.odd;
};
TiledMapLoader.parseRenderOrderType = function (type) {
if (type == "right-up")
return es.RenderOrderType.rightUp;
if (type == "left-down")
return es.RenderOrderType.leftDown;
if (type == "left-up")
return es.RenderOrderType.leftUp;
return es.RenderOrderType.rightDown;
};
TiledMapLoader.parsePropertyDict = function (prop) {
if (!prop)
return null;
var dict = new Map();
for (var _i = 0, prop_1 = prop; _i < prop_1.length; _i++) {
var p = prop_1[_i];
var pname = p["name"];
var valueAttr = p["value"];
if (p["type"] == "color")
dict.set(pname, es.TmxUtils.color16ToUnit(valueAttr).toString());
else
dict.set(pname, valueAttr);
}
return dict;
};
TiledMapLoader.parseTmxTileset = function (map, xTileset) {
return __awaiter(this, void 0, void 0, function () {
var xFirstGid, firstGid, source, xDocTileset;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
xFirstGid = xTileset["firstgid"];
firstGid = xFirstGid;
source = xTileset["source"];
if (!(source != undefined)) return [3, 2];
source = map.tmxDirectory + source;
return [4, RES.getResByUrl(source).catch(function (err) {
throw new Error(err);
})];
case 1:
xDocTileset = _a.sent();
return [2, this.loadTmxTileset(new es.TmxTileset(), map, xDocTileset["tileset"], firstGid)];
case 2: return [2, this.loadTmxTileset(new es.TmxTileset(), map, xTileset, firstGid)];
}
});
});
};
TiledMapLoader.loadTmxTileset = function (tileset, map, xTileset, firstGid) {
return __awaiter(this, void 0, void 0, function () {
var xImage, _i, _a, e, _b, _c, _d, t, xTile, tile, id, y, column, x;
return __generator(this, function (_e) {
switch (_e.label) {
case 0:
tileset.map = map;
tileset.firstGid = firstGid;
tileset.name = xTileset["name"];
tileset.tileWidth = xTileset["tilewidth"];
tileset.tileHeight = xTileset["tileheight"];
tileset.spacing = xTileset["spacing"] != undefined ? xTileset["spacing"] : 0;
tileset.margin = xTileset["margin"] != undefined ? xTileset["margin"] : 0;
tileset.columns = xTileset["columns"];
tileset.tileCount = xTileset["tilecount"];
tileset.tileOffset = this.parseTmxTileOffset(xTileset["tileoffset"]);
xImage = xTileset["image"];
if (!xImage) return [3, 2];
return [4, this.loadTmxImage(new es.TmxImage(), xTileset, map.tmxDirectory).then(function (image) {
tileset.image = image;
}).catch(function (err) {
throw new Error(err);
})];
case 1:
_e.sent();
_e.label = 2;
case 2:
tileset.terrains = [];
if (xTileset["terrains"])
for (_i = 0, _a = xTileset["terrains"]; _i < _a.length; _i++) {
e = _a[_i];
tileset.terrains.push(this.parseTmxTerrain(e));
}
tileset.tiles = new Map();
_b = [];
for (_c in xTileset["tiles"])
_b.push(_c);
_d = 0;
_e.label = 3;
case 3:
if (!(_d < _b.length)) return [3, 6];
t = _b[_d];
if (!xTileset["tiles"].hasOwnProperty(t)) return [3, 5];
xTile = xTileset["tiles"][t];
return [4, this.loadTmxTilesetTile(new es.TmxTilesetTile(), tileset, xTile, tileset.terrains, map.tmxDirectory)];
case 4:
tile = _e.sent();
tileset.tiles.set(tile.id == undefined ? Number(t) + 1 : tile.id, tile);
_e.label = 5;
case 5:
_d++;
return [3, 3];
case 6:
tileset.properties = this.parsePropertyDict(xTileset["properties"]);
tileset.tileRegions = new Map();
if (tileset.image) {
id = firstGid;
for (y = tileset.margin; y < tileset.image.height - tileset.margin; y += tileset.tileHeight + tileset.spacing) {
column = 0;
for (x = tileset.margin; x < tileset.image.width - tileset.margin; x += tileset.tileWidth + tileset.spacing) {
tileset.tileRegions.set(id++, new es.Rectangle(x, y, tileset.tileWidth, tileset.tileHeight));
if (++column >= tileset.columns)
break;
}
}
}
else {
tileset.tiles.forEach(function (tile, key) {
tileset.tileRegions.set(key, new es.Rectangle(0, 0, tile.image.width, tile.image.height));
});
}
return [2, tileset];
}
});
});
};
TiledMapLoader.loadTmxTilesetTile = function (tile, tileset, xTile, terrains, tmxDirectory) {
return __awaiter(this, void 0, void 0, function () {
var strTerrain, index, _i, strTerrain_1, v, edge, xImage, _a, _b, _c, e, _d, _e, e;
return __generator(this, function (_f) {
switch (_f.label) {
case 0:
tile.tileset = tileset;
tile.id = xTile["id"];
strTerrain = xTile["terrain"];
if (strTerrain) {
tile.terrainEdges = new Array(4);
index = 0;
for (_i = 0, strTerrain_1 = strTerrain; _i < strTerrain_1.length; _i++) {
v = strTerrain_1[_i];
edge = terrains[v];
tile.terrainEdges[index++] = edge;
}
}
tile.probability = xTile["probability"] != undefined ? xTile["probability"] : 1;
tile.type = xTile["type"];
xImage = xTile["image"];
if (!xImage) return [3, 2];
_a = tile;
return [4, this.loadTmxImage(new es.TmxImage(), xImage, tmxDirectory)];
case 1:
_a.image = _f.sent();
_f.label = 2;
case 2:
tile.objectGroups = [];
if (xTile["objectgroup"])
for (_b = 0, _c = xTile["objectgroup"]; _b < _c.length; _b++) {
e = _c[_b];
tile.objectGroups.push(this.loadTmxObjectGroup(new es.TmxObjectGroup(), tileset.map, e));
}
tile.animationFrames = [];
if (xTile["animation"]) {
for (_d = 0, _e = xTile["animation"]["frame"]; _d < _e.length; _d++) {
e = _e[_d];
tile.animationFrames.push(this.loadTmxAnimationFrame(new es.TmxAnimationFrame(), e));
}
}
tile.properties = this.parsePropertyDict(xTile["properties"]);
if (tile.properties)
tile.processProperties();
return [2, tile];
}
});
});
};
TiledMapLoader.loadTmxAnimationFrame = function (frame, xFrame) {
frame.gid = xFrame["tileid"];
frame.duration = xFrame["duration"] / 1000;
return frame;
};
TiledMapLoader.loadTmxObjectGroup = function (group, map, xObjectGroup) {
group.map = map;
group.name = xObjectGroup["name"] != undefined ? xObjectGroup["name"] : "";
group.color = es.TmxUtils.color16ToUnit(xObjectGroup["color"]);
group.opacity = xObjectGroup["opacity"] != undefined ? xObjectGroup["opacity"] : 1;
group.visible = xObjectGroup["visible"] != undefined ? xObjectGroup["visible"] : true;
group.offsetX = xObjectGroup["offsetx"] != undefined ? xObjectGroup["offsetx"] : 0;
group.offsetY = xObjectGroup["offsety"] != undefined ? xObjectGroup["offsety"] : 0;
var drawOrderDict = new Map();
drawOrderDict.set("unknown", es.DrawOrderType.unkownOrder);
drawOrderDict.set("topdown", es.DrawOrderType.IndexOrder);
drawOrderDict.set("index", es.DrawOrderType.TopDown);
var drawOrderValue = xObjectGroup["draworder"];
if (drawOrderValue)
group.drawOrder = drawOrderDict.get(drawOrderValue);
group.objects = [];
for (var _i = 0, _a = xObjectGroup["objects"]; _i < _a.length; _i++) {
var e = _a[_i];
group.objects.push(this.loadTmxObject(new es.TmxObject(), map, e));
}
group.properties = this.parsePropertyDict(xObjectGroup["properties"]);
return group;
};
TiledMapLoader.loadTmxObject = function (obj, map, xObject) {
obj.id = xObject["id"] != undefined ? xObject["id"] : 0;
obj.name = xObject["name"] != undefined ? xObject["name"] : "";
obj.x = xObject["x"];
obj.y = xObject["y"];
obj.width = xObject["width"] != undefined ? xObject["width"] : 0;
obj.height = xObject["height"] != undefined ? xObject["height"] : 0;
obj.type = xObject["type"] != undefined ? xObject["type"] : "";
obj.visible = xObject["visible"] != undefined ? xObject["visible"] : true;
obj.rotation = xObject["rotation"] != undefined ? xObject["rotation"] : 0;
var xGid = xObject["gid"];
var xEllipse = xObject["ellipse"];
var xPolygon = xObject["polygon"];
var xPolyline = xObject["polyline"];
var xText = xObject["text"];
var xPoint = xObject["point"];
if (xGid) {
obj.tile = new es.TmxLayerTile(map, xGid, Math.round(obj.x), Math.round(obj.y));
obj.objectType = es.TmxObjectType.tile;
}
else if (xEllipse) {
obj.objectType = es.TmxObjectType.ellipse;
}
else if (xPolygon) {
obj.points = this.parsePoints(xPolygon);
obj.objectType = es.TmxObjectType.polygon;
}
else if (xPolyline) {
obj.points = this.parsePoints(xPolyline);
obj.objectType = es.TmxObjectType.polyline;
}
else if (xText) {
obj.text = this.loadTmxText(new es.TmxText(), xText);
obj.objectType = es.TmxObjectType.text;
}
else if (xPoint) {
obj.objectType = es.TmxObjectType.point;
}
else {
obj.objectType = es.TmxObjectType.basic;
}
obj.properties = this.parsePropertyDict(xObject["properties"]);
return obj;
};
TiledMapLoader.loadTmxText = function (text, xText) {
text.fontFamily = xText["fontfamily"] != undefined ? xText["fontfamily"] : "sans-serif";
text.pixelSize = xText["pixelsize"] != undefined ? xText["pixelsize"] : 16;
text.wrap = xText["wrap"] != undefined ? xText["wrap"] : false;
text.color = es.TmxUtils.color16ToUnit(xText["color"]);
text.bold = xText["bold"] ? xText["bold"] : false;
text.italic = xText["italic"] ? xText["italic"] : false;
text.underline = xText["underline"] ? xText["underline"] : false;
text.strikeout = xText["strikeout"] ? xText["strikeout"] : false;
text.kerning = xText["kerning"] ? xText["kerning"] : true;
text.alignment = this.loadTmxAlignment(new es.TmxAlignment(), xText);
text.value = xText;
return text;
};
TiledMapLoader.loadTmxAlignment = function (alignment, xText) {
function firstLetterToUpperCase(str) {
if (!str || str == "")
return str;
return str[0].toString().toUpperCase() + str.substr(1);
}
var xHorizontal = xText["halign"] != undefined ? xText["halign"] : "left";
alignment.horizontal = es.TmxHorizontalAlignment[firstLetterToUpperCase(xHorizontal)];
var xVertical = xText["valign"] != undefined ? xText["valign"] : "top";
alignment.vertical = es.TmxVerticalAlignment[firstLetterToUpperCase((xVertical))];
return alignment;
};
TiledMapLoader.parsePoints = function (xPoints) {
var points = [];
var index = 0;
for (var _i = 0, xPoints_1 = xPoints; _i < xPoints_1.length; _i++) {
var s = xPoints_1[_i];
points[index++] = this.parsePoint(s);
}
return points;
};
TiledMapLoader.parsePoint = function (pt) {
return new es.Vector2(pt.x, pt.y);
};
TiledMapLoader.parseTmxTerrain = function (xTerrain) {
var terrain = new es.TmxTerrain();
terrain.name = xTerrain["name"];
terrain.tile = xTerrain["tile"];
terrain.properties = this.parsePropertyDict(xTerrain["properties"]);
return terrain;
};
TiledMapLoader.parseTmxTileOffset = function (xTileOffset) {
var tmxTileOffset = new es.TmxTileOffset();
if (!xTileOffset) {
tmxTileOffset.x = 0;
tmxTileOffset.y = 0;
return tmxTileOffset;
}
tmxTileOffset.x = xTileOffset["x"];
tmxTileOffset.y = xTileOffset["y"];
return tmxTileOffset;
};
TiledMapLoader.loadTmxImage = function (image, xImage, tmxDirectory) {
return __awaiter(this, void 0, void 0, function () {
var xSource, texture;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
xSource = xImage["image"];
if (xSource != undefined) {
image.source = tmxDirectory + xSource;
}
else {
image.source = tmxDirectory + xImage;
}
return [4, RES.getResByUrl(image.source, null, this, RES.ResourceItem.TYPE_IMAGE).catch(function (err) {
throw new Error(err);
})];
case 1:
texture = _a.sent();
image.bitmap = new egret.SpriteSheet(texture);
image.trans = es.TmxUtils.color16ToUnit(xImage["trans"]);
image.width = xImage["imagewidth"] != undefined ? xImage["imagewidth"] : texture.textureWidth;
image.height = xImage["imageheight"] != undefined ? xImage["imageheight"] : texture.textureHeight;
return [2, image];
}
});
});
};
return TiledMapLoader;
}());
es.TiledMapLoader = TiledMapLoader;
})(es || (es = {}));
var es;
(function (es) {
var Bitmap = egret.Bitmap;
var TiledRendering = (function () {
function TiledRendering() {
}
TiledRendering.renderMap = function (map, container, position, scale, layerDepth) {
var _this = this;
map.layers.forEach(function (layer) {
if (layer instanceof es.TmxLayer && layer.visible) {
_this.renderLayer(layer, container, position, scale, layerDepth);
}
else if (layer instanceof es.TmxImageLayer && layer.visible) {
_this.renderImageLayer(layer, container, position, scale, layerDepth);
}
else if (layer instanceof es.TmxGroup && layer.visible) {
_this.renderGroup(layer, container, position, scale, layerDepth);
}
else if (layer instanceof es.TmxObjectGroup && layer.visible) {
_this.renderObjectGroup(layer, container, position, scale, layerDepth);
}
});
};
TiledRendering.renderLayer = function (layer, container, position, scale, layerDepth) {
if (!layer.visible)
return;
var tileWidth = layer.map.tileWidth * scale.x;
var tileHeight = layer.map.tileHeight * scale.y;
var color = es.DrawUtils.getColorMatrix(0xFFFFFF);
for (var i = 0; i < layer.tiles.length; i++) {
var tile = layer.tiles[i];
if (!tile)
continue;
this.renderTile(tile, container, position, scale, tileWidth, tileHeight, color, layerDepth);
}
};
TiledRendering.renderLayerRenderCamera = function (layer, container, position, scale, layerDepth, camerClipBounds) {
if (layer instanceof es.TmxLayer && layer.visible) {
this.renderLayerCamera(layer, container, position, scale, layerDepth, camerClipBounds);
}
else if (layer instanceof es.TmxImageLayer && layer.visible) {
this.renderImageLayer(layer, container, position, scale, layerDepth);
}
else if (layer instanceof es.TmxGroup && layer.visible) {
this.renderGroup(layer, container, position, scale, layerDepth);
}
else if (layer instanceof es.TmxObjectGroup && layer.visible) {
this.renderObjectGroup(layer, container, position, scale, layerDepth);
}
};
TiledRendering.renderLayerCamera = function (layer, container, position, scale, layerDepth, camerClipBounds) {
if (!layer.visible)
return;
position = position.add(layer.offset);
camerClipBounds.location = camerClipBounds.location.subtract(position);
var tileWidth = layer.map.tileWidth * scale.x;
var tileHeight = layer.map.tileHeight * scale.y;
var minX, minY, maxX, maxY = 0;
if (layer.map.requiresLargeTileCulling) {
minX = layer.map.worldToTilePositionX(camerClipBounds.left - (layer.map.maxTileWidth * scale.x - tileWidth));
minY = layer.map.worldToTilePositionY(camerClipBounds.top - (layer.map.maxTileHeight * scale.y - tileHeight));
maxX = layer.map.worldToTilePositionX(camerClipBounds.right + (layer.map.maxTileWidth * scale.x - tileWidth));
maxY = layer.map.worldToTilePositionY(camerClipBounds.bottom + (layer.map.maxTileHeight * scale.y - tileHeight));
}
else {
minX = layer.map.worldToTilePositionX(camerClipBounds.left);
minY = layer.map.worldToTilePositionY(camerClipBounds.top);
maxX = layer.map.worldToTilePositionX(camerClipBounds.right);
maxY = layer.map.worldToTilePositionY(camerClipBounds.bottom);
}
var color = es.DrawUtils.getColorMatrix(0xFFFFFF);
for (var y = minY; y <= maxY; y++) {
for (var x = minX; x <= maxX; x++) {
var tile = layer.getTile(x, y);
if (tile)
this.renderTile(tile, container, position, scale, tileWidth, tileHeight, color, layerDepth);
}
}
};
TiledRendering.renderImageLayer = function (layer, container, position, scale, layerDepth) {
if (!layer.visible)
return;
var color = es.DrawUtils.getColorMatrix(0xFFFFFF);
var pos = es.Vector2.add(position, new es.Vector2(layer.offsetX, layer.offsetY).multiply(scale));
if (!layer.image.texture.parent)
container.addChild(layer.image.texture);
layer.image.texture.x = pos.x;
layer.image.texture.y = pos.y;
layer.image.texture.scaleX = scale.x;
layer.image.texture.scaleY = scale.y;
layer.image.texture.filters = [color];
};
TiledRendering.renderObjectGroup = function (objGroup, container, position, scale, layerDepth) {
if (!objGroup.visible)
return;
function debugRender(obj, pos) {
if (!container)
return;
if (!es.Core.debugRenderEndabled)
return;
if (!obj.textField.parent && obj.name) {
obj.textField.text = obj.name;
obj.textField.size = 12;
obj.textField.fontFamily = "sans-serif";
if (obj.shape) {
obj.textField.x = pos.x + (obj.shape.getBounds().width - obj.textField.width) / 2 + obj.shape.getBounds().x;
obj.textField.y = pos.y - obj.textField.height - 5 + obj.shape.getBounds().y;
}
else {
obj.textField.x = pos.x + (obj.width - obj.textField.width) / 2;
obj.textField.y = pos.y - obj.textField.height - 5;
}
obj.textField.background = true;
obj.textField.backgroundColor = 0xa0a0a4;
obj.textField.textColor = 0xffffff;
container.addChild(obj.textField);
}
}
for (var object in objGroup.objects) {
var obj = objGroup.objects[object];
if (!obj.visible)
continue;
if (!es.Core.debugRenderEndabled) {
if (obj.objectType != es.TmxObjectType.tile && obj.objectType != es.TmxObjectType.text)
continue;
}
var pos = es.Vector2.add(position, new es.Vector2(obj.x, obj.y).multiply(scale));
switch (obj.objectType) {
case es.TmxObjectType.basic:
if (!obj.shape.parent) {
obj.shape.x = obj.x;
obj.shape.y = obj.y;
container.addChild(obj.shape);
obj.shape.graphics.clear();
obj.shape.graphics.lineStyle(1, 0xa0a0a4);
obj.shape.graphics.beginFill(0x979798, 0.5);
obj.shape.graphics.drawRect(0, 0, obj.width * scale.x, obj.height * scale.y);
obj.shape.graphics.endFill();
debugRender(obj, pos);
}
break;
case es.TmxObjectType.point:
var size = objGroup.map.tileWidth * 0.5;
pos.x -= size * 0.5;
pos.y -= size * 0.5;
if (!obj.shape.parent) {
obj.shape.x = pos.x;
obj.shape.y = pos.y;
container.addChild(obj.shape);
obj.shape.graphics.clear();
obj.shape.graphics.lineStyle(1, 0xa0a0a4);
obj.shape.graphics.beginFill(0x979798, 0.5);
obj.shape.graphics.drawCircle(0, 0, 1);
obj.shape.graphics.endFill();
debugRender(obj, pos);
}
break;
case es.TmxObjectType.tile:
this.renderTilesetTile(objGroup, obj, container, pos, scale, debugRender);
break;
case es.TmxObjectType.ellipse:
pos = new es.Vector2(obj.x + obj.width * 0.5, obj.y + obj.height * 0.5).multiply(scale);
if (!obj.shape.parent) {
obj.shape.x = pos.x;
obj.shape.y = pos.y;
container.addChild(obj.shape);
obj.shape.graphics.clear();
obj.shape.graphics.lineStyle(1, 0xa0a0a4);
obj.shape.graphics.beginFill(0x979798, 0.5);
obj.shape.graphics.drawCircle(0, 0, obj.width * 0.5);
obj.shape.graphics.endFill();
debugRender(obj, pos);
}
break;
case es.TmxObjectType.polygon:
case es.TmxObjectType.polyline:
var points = [];
for (var i = 0; i < obj.points.length; i++)
points[i] = es.Vector2.multiply(obj.points[i], scale);
if (!obj.shape.parent && points.length > 0) {
obj.shape.x = pos.x;
obj.shape.y = pos.y;
container.addChild(obj.shape);
obj.shape.graphics.clear();
obj.shape.graphics.lineStyle(1, 0xa0a0a4);
for (var i = 0; i < points.length; i++) {
if (i == 0) {
obj.shape.graphics.moveTo(points[i].x, points[i].y);
}
else {
obj.shape.graphics.lineTo(points[i].x, points[i].y);
}
}
obj.shape.graphics.endFill();
debugRender(obj, pos);
}
break;
case es.TmxObjectType.text:
if (!obj.textField.parent) {
obj.textField.x = pos.x;
obj.textField.y = pos.y;
container.addChild(obj.textField);
obj.textField.text = obj.text.value;
obj.textField.textColor = obj.text.color;
obj.textField.bold = obj.text.bold != undefined ? obj.text.bold : false;
obj.textField.italic = obj.text.italic != undefined ? obj.text.italic : false;
obj.textField.size = obj.text.pixelSize;
obj.textField.fontFamily = obj.text.fontFamily;
}
break;
default:
break;
}
}
};
TiledRendering.renderTilesetTile = function (objGroup, obj, container, pos, scale, debugRender) {
var tileset = objGroup.map.getTilesetForTileGid(obj.tile.gid);
var sourceRect = tileset.tileRegions.get(obj.tile.gid);
if (container) {
if (tileset.image) {
if (obj.tile.horizontalFlip && obj.tile.verticalFlip) {
pos.x += tileset.tileHeight + (sourceRect.height * scale.y - tileset.tileHeight);
pos.y -= (sourceRect.width * scale.x - tileset.tileWidth);
}
else if (obj.tile.horizontalFlip) {
pos.x += tileset.tileWidth + (sourceRect.height * scale.y - tileset.tileHeight);
}
else if (obj.tile.verticalFlip) {
pos.y += (tileset.tileWidth - sourceRect.width * scale.x);
}
else {
pos.y += (tileset.tileHeight - sourceRect.height * scale.y);
}
var texture = tileset.image.bitmap.getTexture("" + obj.tile.gid);
if (!texture) {
texture = tileset.image.bitmap.createTexture("" + obj.tile.gid, sourceRect.x, sourceRect.y, sourceRect.width, sourceRect.height);
}
tileset.image.texture = new Bitmap(texture);
container.addChild(tileset.image.texture);
tileset.image.texture.x = pos.x;
tileset.image.texture.y = pos.y;
if (obj.tile.verticalFlip && obj.tile.horizontalFlip) {
tileset.image.texture.scaleX = -1;
tileset.image.texture.scaleY = -1;
}
else if (obj.tile.verticalFlip) {
tileset.image.texture.scaleX = scale.x;
tileset.image.texture.scaleY = -1;
}
else if (obj.tile.horizontalFlip) {
tileset.image.texture.scaleX = -1;
tileset.image.texture.scaleY = scale.y;
}
else {
tileset.image.texture.scaleX = scale.x;
tileset.image.texture.scaleY = scale.y;
}
tileset.image.texture.anchorOffsetX = 0;
tileset.image.texture.anchorOffsetY = 0;
debugRender(obj, pos);
}
else {
var tilesetTile = tileset.tiles.get(obj.tile.gid);
var texture = tilesetTile.image.bitmap.getTexture("" + obj.tile.gid);
if (!texture) {
texture = tilesetTile.image.bitmap.createTexture("" + obj.tile.gid, sourceRect.x, sourceRect.y, sourceRect.width, sourceRect.height);
}
pos.y -= obj.height;
tilesetTile.image.texture = new Bitmap(texture);
container.addChild(tilesetTile.image.texture);
tilesetTile.image.texture.width = obj.width;
tilesetTile.image.texture.height = obj.height;
tilesetTile.image.texture.x = pos.x;
tilesetTile.image.texture.y = pos.y;
if (obj.tile.verticalFlip && obj.tile.horizontalFlip) {
tilesetTile.image.texture.scaleX = -1;
tilesetTile.image.texture.scaleY = -1;
}
else if (obj.tile.verticalFlip) {
tilesetTile.image.texture.scaleX = scale.x;
tilesetTile.image.texture.scaleY = -1;
}
else if (obj.tile.horizontalFlip) {
tilesetTile.image.texture.scaleX = -1;
tilesetTile.image.texture.scaleY = scale.y;
}
else {
tilesetTile.image.texture.scaleX = scale.x;
tilesetTile.image.texture.scaleY = scale.y;
}
tilesetTile.image.texture.anchorOffsetX = 0;
tilesetTile.image.texture.anchorOffsetY = 0;
}
}
};
TiledRendering.renderGroup = function (group, container, position, scale, layerDepth) {
var _this = this;
if (!group.visible)
return;
group.layers.forEach(function (layer) {
if (layer instanceof es.TmxGroup) {
_this.renderGroup(layer, container, position, scale, layerDepth);
}
if (layer instanceof es.TmxObjectGroup) {
_this.renderObjectGroup(layer, container, position, scale, layerDepth);
}
if (layer instanceof es.TmxLayer) {
_this.renderLayer(layer, container, position, scale, layerDepth);
}
if (layer instanceof es.TmxImageLayer) {
_this.renderImageLayer(layer, container, position, scale, layerDepth);
}
});
};
TiledRendering.renderTile = function (tile, container, position, scale, tileWidth, tileHeight, color, layerDepth) {
var gid = tile.gid;
var tilesetTile = tile.tilesetTile;
if (tilesetTile && tilesetTile.animationFrames.length > 0)
gid = tilesetTile.currentAnimationFrameGid;
var sourceRect = tile.tileset.tileRegions.get(gid);
var tx = Math.floor(tile.x) * tileWidth;
var ty = Math.floor(tile.y) * tileHeight;
var rotation = 0;
if (tile.horizontalFlip && tile.verticalFlip) {
tx += tileHeight + (sourceRect.height * scale.y - tileHeight);
ty -= (sourceRect.width * scale.x - tileWidth);
}
else if (tile.horizontalFlip) {
tx += tileWidth + (sourceRect.height * scale.y - tileHeight);
}
else if (tile.verticalFlip) {
ty += (tileWidth - sourceRect.width * scale.x);
}
else {
ty += (tileHeight - sourceRect.height * scale.y);
}
var pos = new es.Vector2(tx, ty).add(position);
if (tile.tileset.image) {
if (container) {
var texture = tile.tileset.image.bitmap.getTexture("" + gid);
if (!texture) {
texture = tile.tileset.image.bitmap.createTexture("" + gid, sourceRect.x, sourceRect.y, sourceRect.width, sourceRect.height);
}
tile.tileset.image.texture = new Bitmap(texture);
container.addChild(tile.tileset.image.texture);
if (tile.tileset.image.texture.x != pos.x)
tile.tileset.image.texture.x = pos.x;
if (tile.tileset.image.texture.y != pos.y)
tile.tileset.image.texture.y = pos.y;
if (tile.verticalFlip && tile.horizontalFlip) {
tile.tileset.image.texture.scaleX = -1;
tile.tileset.image.texture.scaleY = -1;
}
else if (tile.verticalFlip) {
tile.tileset.image.texture.scaleX = scale.x;
tile.tileset.image.texture.scaleY = -1;
}
else if (tile.horizontalFlip) {
tile.tileset.image.texture.scaleX = -1;
tile.tileset.image.texture.scaleY = scale.y;
}
else {
tile.tileset.image.texture.scaleX = scale.x;
tile.tileset.image.texture.scaleY = scale.y;
}
if (tile.tileset.image.texture.rotation != rotation)
tile.tileset.image.texture.rotation = rotation;
if (tile.tileset.image.texture.anchorOffsetX != 0)
tile.tileset.image.texture.anchorOffsetX = 0;
if (tile.tileset.image.texture.anchorOffsetY != 0)
tile.tileset.image.texture.anchorOffsetY = 0;
}
}
else {
if (tilesetTile.image.texture) {
if (!tilesetTile.image.bitmap.getTexture(gid.toString())) {
tilesetTile.image.texture = new Bitmap(tilesetTile.image.bitmap.createTexture(gid.toString(), sourceRect.x, sourceRect.y, sourceRect.width, sourceRect.height));
container.addChild(tilesetTile.image.texture);
}
tilesetTile.image.texture.x = pos.x;
tilesetTile.image.texture.y = pos.y;
tilesetTile.image.texture.scaleX = scale.x;
tilesetTile.image.texture.scaleY = scale.y;
tilesetTile.image.texture.rotation = rotation;
tilesetTile.image.texture.anchorOffsetX = 0;
tilesetTile.image.texture.anchorOffsetY = 0;
tilesetTile.image.texture.filters = [color];
}
}
};
return TiledRendering;
}());
es.TiledRendering = TiledRendering;
})(es || (es = {}));
var es;
(function (es) {
var TmxTileset = (function (_super) {
__extends(TmxTileset, _super);
function TmxTileset() {
return _super !== null && _super.apply(this, arguments) || this;
}
TmxTileset.prototype.update = function () {
this.tiles.forEach(function (value) {
value.updateAnimatedTiles();
});
};
return TmxTileset;
}(es.TmxDocument));
es.TmxTileset = TmxTileset;
var TmxTileOffset = (function () {
function TmxTileOffset() {
}
return TmxTileOffset;
}());
es.TmxTileOffset = TmxTileOffset;
var TmxTerrain = (function () {
function TmxTerrain() {
}
return TmxTerrain;
}());
es.TmxTerrain = TmxTerrain;
})(es || (es = {}));
var es;
(function (es) {
var TmxTilesetTile = (function () {
function TmxTilesetTile() {
}
Object.defineProperty(TmxTilesetTile.prototype, "currentAnimationFrameGid", {
get: function () {
return this.animationFrames[this._animationCurrentFrame].gid + this.tileset.firstGid;
},
enumerable: true,
configurable: true
});
TmxTilesetTile.prototype.processProperties = function () {
var value;
value = this.properties.get("engine.isDestructable");
if (value)
this.isDestructable = Boolean(value);
value = this.properties.get("engine:isSlope");
if (value)
this.isSlope = Boolean(value);
value = this.properties.get("engine:isOneWayPlatform");
if (value)
this.isOneWayPlatform = Boolean(value);
value = this.properties.get("engine:slopeTopLeft");
if (value)
this.slopeTopLeft = Number(value);
value = this.properties.get("engine:slopeTopRight");
if (value)
this.slopeTopRight = Number(value);
};
TmxTilesetTile.prototype.updateAnimatedTiles = function () {
if (this.animationFrames.length == 0)
return;
this._animationElapsedTime += es.Time.deltaTime;
if (this._animationElapsedTime > this.animationFrames[this._animationCurrentFrame].duration) {
this._animationCurrentFrame = es.MathHelper.incrementWithWrap(this._animationCurrentFrame, this.animationFrames.length);
this._animationElapsedTime = 0;
}
};
return TmxTilesetTile;
}());
es.TmxTilesetTile = TmxTilesetTile;
var TmxAnimationFrame = (function () {
function TmxAnimationFrame() {
}
return TmxAnimationFrame;
}());
es.TmxAnimationFrame = TmxAnimationFrame;
})(es || (es = {}));
var es;
(function (es) {
var TmxUtils = (function () {
function TmxUtils() {
}
TmxUtils.decode = function (data, encoding, compression) {
compression = compression || "none";
encoding = encoding || "none";
switch (encoding) {
case "base64":
var decoded = es.Base64Utils.decodeBase64AsArray(data, 4);
return (compression === "none") ? decoded : es.Base64Utils.decompress(data, decoded, compression);
case "csv":
return es.Base64Utils.decodeCSV(data);
case "none":
var datas = [];
for (var i = 0; i < data.length; i++) {
datas[i] = +data[i].gid;
}
return datas;
default:
throw new Error("未定义的编码:" + encoding);
}
};
TmxUtils.color16ToUnit = function ($color) {
if (!$color)
return 0xFFFFFF;
var colorStr = "0x" + $color.slice(1);
return parseInt(colorStr, 16);
};
return TmxUtils;
}());
es.TmxUtils = TmxUtils;
})(es || (es = {}));