1602 lines
69 KiB
JavaScript
1602 lines
69 KiB
JavaScript
|
(function (exports, Laya) {
|
||
|
'use strict';
|
||
|
|
||
|
class GridSprite extends Laya.Sprite {
|
||
|
constructor() {
|
||
|
super(...arguments);
|
||
|
this.relativeX = 0;
|
||
|
this.relativeY = 0;
|
||
|
this.isAloneObject = false;
|
||
|
this.isHaveAnimation = false;
|
||
|
this.drawImageNum = 0;
|
||
|
this._map = null;
|
||
|
}
|
||
|
initData(map, objectKey = false) {
|
||
|
this._map = map;
|
||
|
this.isAloneObject = objectKey;
|
||
|
}
|
||
|
addAniSprite(sprite) {
|
||
|
if (this.aniSpriteArray == null) {
|
||
|
this.aniSpriteArray = [];
|
||
|
}
|
||
|
this.aniSpriteArray.push(sprite);
|
||
|
}
|
||
|
show() {
|
||
|
if (!this.visible) {
|
||
|
this.visible = true;
|
||
|
if (this.aniSpriteArray == null) {
|
||
|
return;
|
||
|
}
|
||
|
var tAniSprite;
|
||
|
for (var i = 0; i < this.aniSpriteArray.length; i++) {
|
||
|
tAniSprite = this.aniSpriteArray[i];
|
||
|
tAniSprite.show();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
hide() {
|
||
|
if (this.visible) {
|
||
|
this.visible = false;
|
||
|
if (this.aniSpriteArray == null) {
|
||
|
return;
|
||
|
}
|
||
|
var tAniSprite;
|
||
|
for (var i = 0; i < this.aniSpriteArray.length; i++) {
|
||
|
tAniSprite = this.aniSpriteArray[i];
|
||
|
tAniSprite.hide();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
updatePos() {
|
||
|
if (this.isAloneObject) {
|
||
|
if (this._map) {
|
||
|
this.x = this.relativeX - this._map._viewPortX;
|
||
|
this.y = this.relativeY - this._map._viewPortY;
|
||
|
}
|
||
|
if (this.x < 0 || this.x > this._map.viewPortWidth || this.y < 0 || this.y > this._map.viewPortHeight) {
|
||
|
this.hide();
|
||
|
}
|
||
|
else {
|
||
|
this.show();
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
if (this._map) {
|
||
|
this.x = this.relativeX - this._map._viewPortX;
|
||
|
this.y = this.relativeY - this._map._viewPortY;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
clearAll() {
|
||
|
if (this._map) {
|
||
|
this._map = null;
|
||
|
}
|
||
|
this.visible = false;
|
||
|
var tAniSprite;
|
||
|
if (this.aniSpriteArray != null) {
|
||
|
for (var i = 0; i < this.aniSpriteArray.length; i++) {
|
||
|
tAniSprite = this.aniSpriteArray[i];
|
||
|
tAniSprite.clearAll();
|
||
|
}
|
||
|
}
|
||
|
this.destroy();
|
||
|
this.relativeX = 0;
|
||
|
this.relativeY = 0;
|
||
|
this.isHaveAnimation = false;
|
||
|
this.aniSpriteArray = null;
|
||
|
this.drawImageNum = 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class IMap {
|
||
|
}
|
||
|
IMap.TiledMap = null;
|
||
|
|
||
|
class TileAniSprite extends Laya.Sprite {
|
||
|
constructor() {
|
||
|
super(...arguments);
|
||
|
this._tileTextureSet = null;
|
||
|
this._aniName = null;
|
||
|
}
|
||
|
setTileTextureSet(aniName, tileTextureSet) {
|
||
|
this._aniName = aniName;
|
||
|
this._tileTextureSet = tileTextureSet;
|
||
|
tileTextureSet.addAniSprite(this._aniName, this);
|
||
|
}
|
||
|
show() {
|
||
|
this._tileTextureSet.addAniSprite(this._aniName, this);
|
||
|
}
|
||
|
hide() {
|
||
|
this._tileTextureSet.removeAniSprite(this._aniName);
|
||
|
}
|
||
|
clearAll() {
|
||
|
this._tileTextureSet.removeAniSprite(this._aniName);
|
||
|
this.destroy();
|
||
|
this._tileTextureSet = null;
|
||
|
this._aniName = null;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class MapLayer extends Laya.Sprite {
|
||
|
constructor() {
|
||
|
super(...arguments);
|
||
|
this._mapData = null;
|
||
|
this._tileWidthHalf = 0;
|
||
|
this._tileHeightHalf = 0;
|
||
|
this._mapWidthHalf = 0;
|
||
|
this._mapHeightHalf = 0;
|
||
|
this._gridSpriteArray = [];
|
||
|
this._objDic = null;
|
||
|
this._dataDic = null;
|
||
|
this._tempMapPos = new Laya.Point();
|
||
|
this.layerName = null;
|
||
|
}
|
||
|
init(layerData, map) {
|
||
|
this._map = map;
|
||
|
this._mapData = layerData.data;
|
||
|
var tHeight = layerData.height;
|
||
|
var tWidth = layerData.width;
|
||
|
var tTileW = map.tileWidth;
|
||
|
var tTileH = map.tileHeight;
|
||
|
this.layerName = layerData.name;
|
||
|
this._properties = layerData.properties;
|
||
|
this.alpha = layerData.opacity;
|
||
|
this._tileWidthHalf = tTileW / 2;
|
||
|
this._tileHeightHalf = tTileH / 2;
|
||
|
this._mapWidthHalf = this._map.width / 2 - this._tileWidthHalf;
|
||
|
this._mapHeightHalf = this._map.height / 2;
|
||
|
switch (layerData.type) {
|
||
|
case "tilelayer":
|
||
|
break;
|
||
|
case "objectgroup":
|
||
|
var tArray = layerData.objects;
|
||
|
if (tArray.length > 0) {
|
||
|
this._objDic = {};
|
||
|
this._dataDic = {};
|
||
|
}
|
||
|
var tObjectData;
|
||
|
var tObjWidth;
|
||
|
var tObjHeight;
|
||
|
for (var i = 0; i < tArray.length; i++) {
|
||
|
tObjectData = tArray[i];
|
||
|
this._dataDic[tObjectData.name] = tObjectData;
|
||
|
if (tObjectData.visible == true) {
|
||
|
tObjWidth = tObjectData.width;
|
||
|
tObjHeight = tObjectData.height;
|
||
|
var tSprite = map.getSprite(tObjectData.gid, tObjWidth, tObjHeight);
|
||
|
if (tSprite != null) {
|
||
|
switch (this._map.orientation) {
|
||
|
case IMap.TiledMap.ORIENTATION_ISOMETRIC:
|
||
|
this.getScreenPositionByTilePos(tObjectData.x / tTileH, tObjectData.y / tTileH, Laya.Point.TEMP);
|
||
|
tSprite.pivot(tObjWidth / 2, tObjHeight / 2);
|
||
|
tSprite.rotation = tObjectData.rotation;
|
||
|
tSprite.x = tSprite.relativeX = Laya.Point.TEMP.x + this._map.viewPortX;
|
||
|
tSprite.y = tSprite.relativeY = Laya.Point.TEMP.y + this._map.viewPortY - tObjHeight / 2;
|
||
|
break;
|
||
|
case IMap.TiledMap.ORIENTATION_STAGGERED:
|
||
|
tSprite.pivot(tObjWidth / 2, tObjHeight / 2);
|
||
|
tSprite.rotation = tObjectData.rotation;
|
||
|
tSprite.x = tSprite.relativeX = tObjectData.x + tObjWidth / 2;
|
||
|
tSprite.y = tSprite.relativeY = tObjectData.y - tObjHeight / 2;
|
||
|
break;
|
||
|
case IMap.TiledMap.ORIENTATION_ORTHOGONAL:
|
||
|
tSprite.pivot(tObjWidth / 2, tObjHeight / 2);
|
||
|
tSprite.rotation = tObjectData.rotation;
|
||
|
tSprite.x = tSprite.relativeX = tObjectData.x + tObjWidth / 2;
|
||
|
tSprite.y = tSprite.relativeY = tObjectData.y - tObjHeight / 2;
|
||
|
break;
|
||
|
case IMap.TiledMap.ORIENTATION_HEXAGONAL:
|
||
|
tSprite.x = tSprite.relativeX = tObjectData.x;
|
||
|
tSprite.y = tSprite.relativeY = tObjectData.y;
|
||
|
break;
|
||
|
}
|
||
|
this.addChild(tSprite);
|
||
|
this._gridSpriteArray.push(tSprite);
|
||
|
this._objDic[tObjectData.name] = tSprite;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
getObjectByName(objName) {
|
||
|
if (this._objDic) {
|
||
|
return this._objDic[objName];
|
||
|
}
|
||
|
return null;
|
||
|
}
|
||
|
getObjectDataByName(objName) {
|
||
|
if (this._dataDic) {
|
||
|
return this._dataDic[objName];
|
||
|
}
|
||
|
return null;
|
||
|
}
|
||
|
getLayerProperties(name) {
|
||
|
if (this._properties) {
|
||
|
return this._properties[name];
|
||
|
}
|
||
|
return null;
|
||
|
}
|
||
|
getTileData(tileX, tileY) {
|
||
|
if (tileY >= 0 && tileY < this._map.numRowsTile && tileX >= 0 && tileX < this._map.numColumnsTile) {
|
||
|
var tIndex = tileY * this._map.numColumnsTile + tileX;
|
||
|
var tMapData = this._mapData;
|
||
|
if (tMapData != null && tIndex < tMapData.length) {
|
||
|
return tMapData[tIndex];
|
||
|
}
|
||
|
}
|
||
|
return 0;
|
||
|
}
|
||
|
getScreenPositionByTilePos(tileX, tileY, screenPos = null) {
|
||
|
if (screenPos) {
|
||
|
switch (this._map.orientation) {
|
||
|
case IMap.TiledMap.ORIENTATION_ISOMETRIC:
|
||
|
screenPos.x = this._map.width / 2 - (tileY - tileX) * this._tileWidthHalf;
|
||
|
screenPos.y = (tileY + tileX) * this._tileHeightHalf;
|
||
|
break;
|
||
|
case IMap.TiledMap.ORIENTATION_STAGGERED:
|
||
|
tileX = Math.floor(tileX);
|
||
|
tileY = Math.floor(tileY);
|
||
|
screenPos.x = tileX * this._map.tileWidth + (tileY & 1) * this._tileWidthHalf;
|
||
|
screenPos.y = tileY * this._tileHeightHalf;
|
||
|
break;
|
||
|
case IMap.TiledMap.ORIENTATION_ORTHOGONAL:
|
||
|
screenPos.x = tileX * this._map.tileWidth;
|
||
|
screenPos.y = tileY * this._map.tileHeight;
|
||
|
break;
|
||
|
case IMap.TiledMap.ORIENTATION_HEXAGONAL:
|
||
|
tileX = Math.floor(tileX);
|
||
|
tileY = Math.floor(tileY);
|
||
|
var tTileHeight = this._map.tileHeight * 2 / 3;
|
||
|
screenPos.x = (tileX * this._map.tileWidth + tileY % 2 * this._tileWidthHalf) % this._map.gridWidth;
|
||
|
screenPos.y = (tileY * tTileHeight) % this._map.gridHeight;
|
||
|
break;
|
||
|
}
|
||
|
screenPos.x = (screenPos.x + this._map.viewPortX) * this._map.scale;
|
||
|
screenPos.y = (screenPos.y + this._map.viewPortY) * this._map.scale;
|
||
|
}
|
||
|
}
|
||
|
getTileDataByScreenPos(screenX, screenY) {
|
||
|
var tData = 0;
|
||
|
if (this.getTilePositionByScreenPos(screenX, screenY, this._tempMapPos)) {
|
||
|
tData = this.getTileData(Math.floor(this._tempMapPos.x), Math.floor(this._tempMapPos.y));
|
||
|
}
|
||
|
return tData;
|
||
|
}
|
||
|
getTilePositionByScreenPos(screenX, screenY, result = null) {
|
||
|
screenX = screenX / this._map.scale - this._map.viewPortX;
|
||
|
screenY = screenY / this._map.scale - this._map.viewPortY;
|
||
|
var tTileW = this._map.tileWidth;
|
||
|
var tTileH = this._map.tileHeight;
|
||
|
var tV = 0;
|
||
|
var tU = 0;
|
||
|
switch (this._map.orientation) {
|
||
|
case IMap.TiledMap.ORIENTATION_ISOMETRIC:
|
||
|
var tDirX = screenX - this._map.width / 2;
|
||
|
var tDirY = screenY;
|
||
|
tV = -(tDirX / tTileW - tDirY / tTileH);
|
||
|
tU = tDirX / tTileW + tDirY / tTileH;
|
||
|
if (result) {
|
||
|
result.x = tU;
|
||
|
result.y = tV;
|
||
|
}
|
||
|
return true;
|
||
|
case IMap.TiledMap.ORIENTATION_STAGGERED:
|
||
|
if (result) {
|
||
|
var cx, cy, rx, ry;
|
||
|
cx = Math.floor(screenX / tTileW) * tTileW + tTileW / 2;
|
||
|
cy = Math.floor(screenY / tTileH) * tTileH + tTileH / 2;
|
||
|
rx = (screenX - cx) * tTileH / 2;
|
||
|
ry = (screenY - cy) * tTileW / 2;
|
||
|
if (Math.abs(rx) + Math.abs(ry) <= tTileW * tTileH / 4) {
|
||
|
tU = Math.floor(screenX / tTileW);
|
||
|
tV = Math.floor(screenY / tTileH) * 2;
|
||
|
}
|
||
|
else {
|
||
|
screenX = screenX - tTileW / 2;
|
||
|
tU = Math.floor(screenX / tTileW) + 1;
|
||
|
screenY = screenY - tTileH / 2;
|
||
|
tV = Math.floor(screenY / tTileH) * 2 + 1;
|
||
|
}
|
||
|
result.x = tU - (tV & 1);
|
||
|
result.y = tV;
|
||
|
}
|
||
|
return true;
|
||
|
case IMap.TiledMap.ORIENTATION_ORTHOGONAL:
|
||
|
tU = screenX / tTileW;
|
||
|
tV = screenY / tTileH;
|
||
|
if (result) {
|
||
|
result.x = tU;
|
||
|
result.y = tV;
|
||
|
}
|
||
|
return true;
|
||
|
case IMap.TiledMap.ORIENTATION_HEXAGONAL:
|
||
|
var tTileHeight = tTileH * 2 / 3;
|
||
|
tV = screenY / tTileHeight;
|
||
|
tU = (screenX - tV % 2 * this._tileWidthHalf) / tTileW;
|
||
|
if (result) {
|
||
|
result.x = tU;
|
||
|
result.y = tV;
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
return false;
|
||
|
}
|
||
|
getDrawSprite(gridX, gridY) {
|
||
|
var tSprite = new GridSprite();
|
||
|
tSprite.relativeX = gridX * this._map.gridWidth;
|
||
|
tSprite.relativeY = gridY * this._map.gridHeight;
|
||
|
tSprite.initData(this._map);
|
||
|
this._gridSpriteArray.push(tSprite);
|
||
|
return tSprite;
|
||
|
}
|
||
|
updateGridPos() {
|
||
|
var tSprite;
|
||
|
for (var i = 0; i < this._gridSpriteArray.length; i++) {
|
||
|
tSprite = this._gridSpriteArray[i];
|
||
|
if ((tSprite.visible || tSprite.isAloneObject) && tSprite.drawImageNum > 0) {
|
||
|
tSprite.updatePos();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
drawTileTexture(gridSprite, tileX, tileY) {
|
||
|
if (tileY >= 0 && tileY < this._map.numRowsTile && tileX >= 0 && tileX < this._map.numColumnsTile) {
|
||
|
var tIndex = tileY * this._map.numColumnsTile + tileX;
|
||
|
var tMapData = this._mapData;
|
||
|
if (tMapData != null && tIndex < tMapData.length) {
|
||
|
if (tMapData[tIndex] != 0) {
|
||
|
var tTileTexSet = this._map.getTexture(tMapData[tIndex]);
|
||
|
if (tTileTexSet) {
|
||
|
var tX = 0;
|
||
|
var tY = 0;
|
||
|
var tTexture = tTileTexSet.texture;
|
||
|
switch (this._map.orientation) {
|
||
|
case IMap.TiledMap.ORIENTATION_STAGGERED:
|
||
|
tX = tileX * this._map.tileWidth % this._map.gridWidth + (tileY & 1) * this._tileWidthHalf;
|
||
|
tY = tileY * this._tileHeightHalf % this._map.gridHeight;
|
||
|
break;
|
||
|
case IMap.TiledMap.ORIENTATION_ORTHOGONAL:
|
||
|
tX = tileX * this._map.tileWidth % this._map.gridWidth;
|
||
|
tY = tileY * this._map.tileHeight % this._map.gridHeight;
|
||
|
break;
|
||
|
case IMap.TiledMap.ORIENTATION_ISOMETRIC:
|
||
|
tX = (this._mapWidthHalf + (tileX - tileY) * this._tileWidthHalf) % this._map.gridWidth;
|
||
|
tY = ((tileX + tileY) * this._tileHeightHalf) % this._map.gridHeight;
|
||
|
break;
|
||
|
case IMap.TiledMap.ORIENTATION_HEXAGONAL:
|
||
|
var tTileHeight = this._map.tileHeight * 2 / 3;
|
||
|
tX = (tileX * this._map.tileWidth + tileY % 2 * this._tileWidthHalf) % this._map.gridWidth;
|
||
|
tY = (tileY * tTileHeight) % this._map.gridHeight;
|
||
|
break;
|
||
|
}
|
||
|
if (tTileTexSet.isAnimation) {
|
||
|
var tAnimationSprite = new TileAniSprite();
|
||
|
tAnimationSprite.x = tX;
|
||
|
tAnimationSprite.y = tY;
|
||
|
tAnimationSprite.setTileTextureSet(tIndex.toString(), tTileTexSet);
|
||
|
gridSprite.addAniSprite(tAnimationSprite);
|
||
|
gridSprite.addChild(tAnimationSprite);
|
||
|
gridSprite.isHaveAnimation = true;
|
||
|
}
|
||
|
else {
|
||
|
gridSprite.graphics.drawImage(tTileTexSet.texture, tX + tTileTexSet.offX, tY + tTileTexSet.offY);
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return false;
|
||
|
}
|
||
|
clearAll() {
|
||
|
this._map = null;
|
||
|
this._mapData = null;
|
||
|
this._tileWidthHalf = 0;
|
||
|
this._tileHeightHalf = 0;
|
||
|
this._mapWidthHalf = 0;
|
||
|
this._mapHeightHalf = 0;
|
||
|
this.layerName = null;
|
||
|
var i = 0;
|
||
|
if (this._objDic) {
|
||
|
for (var p in this._objDic) {
|
||
|
delete this._objDic[p];
|
||
|
}
|
||
|
this._objDic = null;
|
||
|
}
|
||
|
if (this._dataDic) {
|
||
|
for (p in this._dataDic) {
|
||
|
delete this._dataDic[p];
|
||
|
}
|
||
|
this._dataDic = null;
|
||
|
}
|
||
|
var tGridSprite;
|
||
|
for (i = 0; i < this._gridSpriteArray.length; i++) {
|
||
|
tGridSprite = this._gridSpriteArray[i];
|
||
|
tGridSprite.clearAll();
|
||
|
}
|
||
|
this._properties = null;
|
||
|
this._tempMapPos = null;
|
||
|
this.tarLayer = null;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class TileTexSet {
|
||
|
constructor() {
|
||
|
this.gid = -1;
|
||
|
this.offX = 0;
|
||
|
this.offY = 0;
|
||
|
this.textureArray = null;
|
||
|
this.durationTimeArray = null;
|
||
|
this.animationTotalTime = 0;
|
||
|
this.isAnimation = false;
|
||
|
this._spriteNum = 0;
|
||
|
this._aniDic = null;
|
||
|
this._frameIndex = 0;
|
||
|
this._time = 0;
|
||
|
this._interval = 0;
|
||
|
this._preFrameTime = 0;
|
||
|
}
|
||
|
addAniSprite(aniName, sprite) {
|
||
|
if (this.animationTotalTime == 0) {
|
||
|
return;
|
||
|
}
|
||
|
if (this._aniDic == null) {
|
||
|
this._aniDic = {};
|
||
|
}
|
||
|
if (this._spriteNum == 0) {
|
||
|
Laya.ILaya.timer.frameLoop(3, this, this.animate);
|
||
|
this._preFrameTime = Laya.ILaya.Browser.now();
|
||
|
this._frameIndex = 0;
|
||
|
this._time = 0;
|
||
|
this._interval = 0;
|
||
|
}
|
||
|
this._spriteNum++;
|
||
|
this._aniDic[aniName] = sprite;
|
||
|
if (this.textureArray && this._frameIndex < this.textureArray.length) {
|
||
|
var tTileTextureSet = this.textureArray[this._frameIndex];
|
||
|
this.drawTexture(sprite, tTileTextureSet);
|
||
|
}
|
||
|
}
|
||
|
animate() {
|
||
|
if (this.textureArray && this.textureArray.length > 0 && this.durationTimeArray && this.durationTimeArray.length > 0) {
|
||
|
var tNow = Laya.ILaya.Browser.now();
|
||
|
this._interval = tNow - this._preFrameTime;
|
||
|
this._preFrameTime = tNow;
|
||
|
if (this._interval > this.animationTotalTime) {
|
||
|
this._interval = this._interval % this.animationTotalTime;
|
||
|
}
|
||
|
this._time += this._interval;
|
||
|
var tTime = this.durationTimeArray[this._frameIndex];
|
||
|
while (this._time > tTime) {
|
||
|
this._time -= tTime;
|
||
|
this._frameIndex++;
|
||
|
if (this._frameIndex >= this.durationTimeArray.length || this._frameIndex >= this.textureArray.length) {
|
||
|
this._frameIndex = 0;
|
||
|
}
|
||
|
var tTileTextureSet = this.textureArray[this._frameIndex];
|
||
|
var tSprite;
|
||
|
for (var p in this._aniDic) {
|
||
|
tSprite = this._aniDic[p];
|
||
|
this.drawTexture(tSprite, tTileTextureSet);
|
||
|
}
|
||
|
tTime = this.durationTimeArray[this._frameIndex];
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
drawTexture(sprite, tileTextSet) {
|
||
|
sprite.graphics.clear(true);
|
||
|
sprite.graphics.drawImage(tileTextSet.texture, tileTextSet.offX, tileTextSet.offY);
|
||
|
}
|
||
|
removeAniSprite(_name) {
|
||
|
if (this._aniDic && this._aniDic[_name]) {
|
||
|
delete this._aniDic[_name];
|
||
|
this._spriteNum--;
|
||
|
if (this._spriteNum == 0) {
|
||
|
Laya.ILaya.timer.clear(this, this.animate);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
showDebugInfo() {
|
||
|
var tInfo = null;
|
||
|
if (this._spriteNum > 0) {
|
||
|
tInfo = "TileTextureSet::gid:" + this.gid.toString() + " 动画数:" + this._spriteNum.toString();
|
||
|
}
|
||
|
return tInfo;
|
||
|
}
|
||
|
clearAll() {
|
||
|
this.gid = -1;
|
||
|
if (this.texture) {
|
||
|
this.texture.destroy();
|
||
|
this.texture = null;
|
||
|
}
|
||
|
this.offX = 0;
|
||
|
this.offY = 0;
|
||
|
this.textureArray = null;
|
||
|
this.durationTimeArray = null;
|
||
|
this.isAnimation = false;
|
||
|
this._spriteNum = 0;
|
||
|
this._aniDic = null;
|
||
|
this._frameIndex = 0;
|
||
|
this._preFrameTime = 0;
|
||
|
this._time = 0;
|
||
|
this._interval = 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class TiledMap {
|
||
|
constructor() {
|
||
|
this._tileTexSetArr = [];
|
||
|
this._texArray = [];
|
||
|
this._x = 0;
|
||
|
this._y = 0;
|
||
|
this._width = 0;
|
||
|
this._height = 0;
|
||
|
this._mapW = 0;
|
||
|
this._mapH = 0;
|
||
|
this._mapTileW = 0;
|
||
|
this._mapTileH = 0;
|
||
|
this._rect = new Laya.Rectangle();
|
||
|
this._paddingRect = new Laya.Rectangle();
|
||
|
this._mapSprite = null;
|
||
|
this._layerArray = [];
|
||
|
this._renderLayerArray = [];
|
||
|
this._gridArray = [];
|
||
|
this._showGridKey = false;
|
||
|
this._totalGridNum = 0;
|
||
|
this._gridW = 0;
|
||
|
this._gridH = 0;
|
||
|
this._gridWidth = 450;
|
||
|
this._gridHeight = 450;
|
||
|
this._jsonLoader = null;
|
||
|
this._loader = null;
|
||
|
this._tileSetArray = [];
|
||
|
this._currTileSet = null;
|
||
|
this._completeHandler = null;
|
||
|
this._mapRect = new GRect();
|
||
|
this._mapLastRect = new GRect();
|
||
|
this._index = 0;
|
||
|
this._animationDic = {};
|
||
|
this._tileProperties = {};
|
||
|
this._tileProperties2 = {};
|
||
|
this._orientation = "orthogonal";
|
||
|
this._renderOrder = "right-down";
|
||
|
this._colorArray = ["FF", "00", "33", "66"];
|
||
|
this._scale = 1;
|
||
|
this._pivotScaleX = 0.5;
|
||
|
this._pivotScaleY = 0.5;
|
||
|
this._centerX = 0;
|
||
|
this._centerY = 0;
|
||
|
this._viewPortX = 0;
|
||
|
this._viewPortY = 0;
|
||
|
this._viewPortWidth = 0;
|
||
|
this._viewPortHeight = 0;
|
||
|
this._enableLinear = true;
|
||
|
this._limitRange = false;
|
||
|
this.autoCache = true;
|
||
|
this.autoCacheType = "normal";
|
||
|
this.enableMergeLayer = false;
|
||
|
this.removeCoveredTile = false;
|
||
|
this.showGridTextureCount = false;
|
||
|
this.antiCrack = true;
|
||
|
this.cacheAllAfterInit = false;
|
||
|
this._texutreStartDic = {};
|
||
|
}
|
||
|
createMap(mapName, viewRect, completeHandler, viewRectPadding = null, gridSize = null, enableLinear = true, limitRange = false) {
|
||
|
this._enableLinear = enableLinear;
|
||
|
this._limitRange = limitRange;
|
||
|
this._rect.x = viewRect.x;
|
||
|
this._rect.y = viewRect.y;
|
||
|
this._rect.width = viewRect.width;
|
||
|
this._rect.height = viewRect.height;
|
||
|
this._viewPortWidth = viewRect.width / this._scale;
|
||
|
this._viewPortHeight = viewRect.height / this._scale;
|
||
|
this._completeHandler = completeHandler;
|
||
|
if (viewRectPadding) {
|
||
|
this._paddingRect.copyFrom(viewRectPadding);
|
||
|
}
|
||
|
else {
|
||
|
this._paddingRect.setTo(0, 0, 0, 0);
|
||
|
}
|
||
|
if (gridSize) {
|
||
|
this._gridWidth = gridSize.x;
|
||
|
this._gridHeight = gridSize.y;
|
||
|
}
|
||
|
var tIndex = mapName.lastIndexOf("/");
|
||
|
if (tIndex > -1) {
|
||
|
this._resPath = mapName.substr(0, tIndex);
|
||
|
this._pathArray = this._resPath.split("/");
|
||
|
}
|
||
|
else {
|
||
|
this._resPath = "";
|
||
|
this._pathArray = [];
|
||
|
}
|
||
|
this._jsonLoader = new Laya.Loader();
|
||
|
this._jsonLoader.once("complete", this, this.onJsonComplete);
|
||
|
this._jsonLoader.load(mapName, Laya.Loader.JSON, false);
|
||
|
}
|
||
|
onJsonComplete(e) {
|
||
|
this._mapSprite = new Laya.Sprite();
|
||
|
Laya.ILaya.stage.addChild(this._mapSprite);
|
||
|
var tJsonData = this._jsonData = e;
|
||
|
this._properties = tJsonData.properties;
|
||
|
this._orientation = tJsonData.orientation;
|
||
|
this._renderOrder = tJsonData.renderorder;
|
||
|
this._mapW = tJsonData.width;
|
||
|
this._mapH = tJsonData.height;
|
||
|
this._mapTileW = tJsonData.tilewidth;
|
||
|
this._mapTileH = tJsonData.tileheight;
|
||
|
this._width = this._mapTileW * this._mapW;
|
||
|
this._height = this._mapTileH * this._mapH;
|
||
|
if (this._orientation == TiledMap.ORIENTATION_STAGGERED) {
|
||
|
this._height = (0.5 + this._mapH * 0.5) * this._mapTileH;
|
||
|
}
|
||
|
this._mapLastRect.top = this._mapLastRect.bottom = this._mapLastRect.left = this._mapLastRect.right = -1;
|
||
|
var tArray = tJsonData.tilesets;
|
||
|
var tileset;
|
||
|
var tTileSet;
|
||
|
var i = 0;
|
||
|
for (i = 0; i < tArray.length; i++) {
|
||
|
tileset = tArray[i];
|
||
|
tTileSet = new TileSet();
|
||
|
tTileSet.init(tileset);
|
||
|
if (tTileSet.properties && tTileSet.properties.ignore)
|
||
|
continue;
|
||
|
this._tileProperties[i] = tTileSet.tileproperties;
|
||
|
this.addTileProperties(tTileSet.tileproperties);
|
||
|
this._tileSetArray.push(tTileSet);
|
||
|
var tTiles = tileset.tiles;
|
||
|
if (tTiles) {
|
||
|
for (var p in tTiles) {
|
||
|
var tAnimation = tTiles[p].animation;
|
||
|
if (tAnimation) {
|
||
|
var tAniData = new TileMapAniData();
|
||
|
this._animationDic[p] = tAniData;
|
||
|
tAniData.image = tileset.image;
|
||
|
for (var j = 0; j < tAnimation.length; j++) {
|
||
|
var tAnimationItem = tAnimation[j];
|
||
|
tAniData.mAniIdArray.push(tAnimationItem.tileid);
|
||
|
tAniData.mDurationTimeArray.push(tAnimationItem.duration);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
this._tileTexSetArr.push(null);
|
||
|
if (this._tileSetArray.length > 0) {
|
||
|
tTileSet = this._currTileSet = this._tileSetArray.shift();
|
||
|
this._loader = new Laya.Loader();
|
||
|
this._loader.once("complete", this, this.onTextureComplete);
|
||
|
var tPath = this.mergePath(this._resPath, tTileSet.image);
|
||
|
this._loader.load(tPath, Laya.Loader.IMAGE, false);
|
||
|
}
|
||
|
}
|
||
|
mergePath(resPath, relativePath) {
|
||
|
var tResultPath = "";
|
||
|
var tImageArray = relativePath.split("/");
|
||
|
var tParentPathNum = 0;
|
||
|
var i = 0;
|
||
|
for (i = tImageArray.length - 1; i >= 0; i--) {
|
||
|
if (tImageArray[i] == "..") {
|
||
|
tParentPathNum++;
|
||
|
}
|
||
|
}
|
||
|
if (tParentPathNum == 0) {
|
||
|
if (this._pathArray.length > 0) {
|
||
|
tResultPath = resPath + "/" + relativePath;
|
||
|
}
|
||
|
else {
|
||
|
tResultPath = relativePath;
|
||
|
}
|
||
|
return tResultPath;
|
||
|
}
|
||
|
var tSrcNum = this._pathArray.length - tParentPathNum;
|
||
|
if (tSrcNum < 0) {
|
||
|
console.log("[error]path does not exist", this._pathArray, tImageArray, resPath, relativePath);
|
||
|
}
|
||
|
for (i = 0; i < tSrcNum; i++) {
|
||
|
if (i == 0) {
|
||
|
tResultPath += this._pathArray[i];
|
||
|
}
|
||
|
else {
|
||
|
tResultPath = tResultPath + "/" + this._pathArray[i];
|
||
|
}
|
||
|
}
|
||
|
for (i = tParentPathNum; i < tImageArray.length; i++) {
|
||
|
tResultPath = tResultPath + "/" + tImageArray[i];
|
||
|
}
|
||
|
return tResultPath;
|
||
|
}
|
||
|
onTextureComplete(e) {
|
||
|
var json = this._jsonData;
|
||
|
var tTexture = e;
|
||
|
if (!this._enableLinear) {
|
||
|
tTexture.bitmap.minFifter = 0x2600;
|
||
|
tTexture.bitmap.magFifter = 0x2600;
|
||
|
}
|
||
|
this._texArray.push(tTexture);
|
||
|
var tTileSet = this._currTileSet;
|
||
|
var tTileTextureW = tTileSet.tilewidth;
|
||
|
var tTileTextureH = tTileSet.tileheight;
|
||
|
var tImageWidth = tTileSet.imagewidth;
|
||
|
var tImageHeight = tTileSet.imageheight;
|
||
|
var tFirstgid = tTileSet.firstgid;
|
||
|
var tTileWNum = Math.floor((tImageWidth - tTileSet.margin - tTileTextureW) / (tTileTextureW + tTileSet.spacing)) + 1;
|
||
|
var tTileHNum = Math.floor((tImageHeight - tTileSet.margin - tTileTextureH) / (tTileTextureH + tTileSet.spacing)) + 1;
|
||
|
var tTileTexSet = null;
|
||
|
this._texutreStartDic[tTileSet.image] = this._tileTexSetArr.length;
|
||
|
for (var i = 0; i < tTileHNum; i++) {
|
||
|
for (var j = 0; j < tTileWNum; j++) {
|
||
|
tTileTexSet = new TileTexSet();
|
||
|
tTileTexSet.offX = tTileSet.titleoffsetX;
|
||
|
tTileTexSet.offY = tTileSet.titleoffsetY - (tTileTextureH - this._mapTileH);
|
||
|
tTileTexSet.texture = Laya.Texture.createFromTexture(tTexture, tTileSet.margin + (tTileTextureW + tTileSet.spacing) * j, tTileSet.margin + (tTileTextureH + tTileSet.spacing) * i, tTileTextureW, tTileTextureH);
|
||
|
if (this.antiCrack)
|
||
|
this.adptTexture(tTileTexSet.texture);
|
||
|
this._tileTexSetArr.push(tTileTexSet);
|
||
|
tTileTexSet.gid = this._tileTexSetArr.length;
|
||
|
}
|
||
|
}
|
||
|
if (this._tileSetArray.length > 0) {
|
||
|
tTileSet = this._currTileSet = this._tileSetArray.shift();
|
||
|
this._loader.once("complete", this, this.onTextureComplete);
|
||
|
var tPath = this.mergePath(this._resPath, tTileSet.image);
|
||
|
this._loader.load(tPath, Laya.Loader.IMAGE, false);
|
||
|
}
|
||
|
else {
|
||
|
this._currTileSet = null;
|
||
|
this.initMap();
|
||
|
}
|
||
|
}
|
||
|
adptTexture(tex) {
|
||
|
if (!tex)
|
||
|
return;
|
||
|
var pX = tex.uv[0];
|
||
|
var pX1 = tex.uv[2];
|
||
|
var pY = tex.uv[1];
|
||
|
var pY1 = tex.uv[7];
|
||
|
var dW = 1 / tex.bitmap.width;
|
||
|
var dH = 1 / tex.bitmap.height;
|
||
|
var Tex = tex;
|
||
|
Tex.uv[0] = Tex.uv[6] = pX + dW;
|
||
|
Tex.uv[2] = Tex.uv[4] = pX1 - dW;
|
||
|
Tex.uv[1] = Tex.uv[3] = pY + dH;
|
||
|
Tex.uv[5] = Tex.uv[7] = pY1 - dH;
|
||
|
}
|
||
|
initMap() {
|
||
|
var i, n;
|
||
|
for (var p in this._animationDic) {
|
||
|
var tAniData = this._animationDic[p];
|
||
|
var gStart;
|
||
|
gStart = this._texutreStartDic[tAniData.image];
|
||
|
var tTileTexSet = this.getTexture(parseInt(p) + gStart);
|
||
|
if (tAniData.mAniIdArray.length > 0) {
|
||
|
tTileTexSet.textureArray = [];
|
||
|
tTileTexSet.durationTimeArray = tAniData.mDurationTimeArray;
|
||
|
tTileTexSet.isAnimation = true;
|
||
|
tTileTexSet.animationTotalTime = 0;
|
||
|
for (i = 0, n = tTileTexSet.durationTimeArray.length; i < n; i++) {
|
||
|
tTileTexSet.animationTotalTime += tTileTexSet.durationTimeArray[i];
|
||
|
}
|
||
|
for (i = 0, n = tAniData.mAniIdArray.length; i < n; i++) {
|
||
|
var tTexture = this.getTexture(tAniData.mAniIdArray[i] + gStart);
|
||
|
tTileTexSet.textureArray.push(tTexture);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
this._gridWidth = Math.floor(this._gridWidth / this._mapTileW) * this._mapTileW;
|
||
|
this._gridHeight = Math.floor(this._gridHeight / this._mapTileH) * this._mapTileH;
|
||
|
if (this._gridWidth < this._mapTileW) {
|
||
|
this._gridWidth = this._mapTileW;
|
||
|
}
|
||
|
if (this._gridHeight < this._mapTileH) {
|
||
|
this._gridHeight = this._mapTileH;
|
||
|
}
|
||
|
this._gridW = Math.ceil(this._width / this._gridWidth);
|
||
|
this._gridH = Math.ceil(this._height / this._gridHeight);
|
||
|
this._totalGridNum = this._gridW * this._gridH;
|
||
|
for (i = 0; i < this._gridH; i++) {
|
||
|
var tGridArray = [];
|
||
|
this._gridArray.push(tGridArray);
|
||
|
for (var j = 0; j < this._gridW; j++) {
|
||
|
tGridArray.push(null);
|
||
|
}
|
||
|
}
|
||
|
var tLayerArray = this._jsonData.layers;
|
||
|
var isFirst = true;
|
||
|
var tLayerTarLayerName;
|
||
|
var preLayerTarName;
|
||
|
var preLayer;
|
||
|
for (var tLayerLoop = 0; tLayerLoop < tLayerArray.length; tLayerLoop++) {
|
||
|
var tLayerData = tLayerArray[tLayerLoop];
|
||
|
if (tLayerData.visible == true) {
|
||
|
var tMapLayer = new MapLayer();
|
||
|
tMapLayer.init(tLayerData, this);
|
||
|
if (!this.enableMergeLayer) {
|
||
|
this._mapSprite.addChild(tMapLayer);
|
||
|
this._renderLayerArray.push(tMapLayer);
|
||
|
}
|
||
|
else {
|
||
|
tLayerTarLayerName = tMapLayer.getLayerProperties("layer");
|
||
|
isFirst = isFirst || (!preLayer) || (tLayerTarLayerName != preLayerTarName);
|
||
|
if (isFirst) {
|
||
|
isFirst = false;
|
||
|
tMapLayer.tarLayer = tMapLayer;
|
||
|
preLayer = tMapLayer;
|
||
|
this._mapSprite.addChild(tMapLayer);
|
||
|
this._renderLayerArray.push(tMapLayer);
|
||
|
}
|
||
|
else {
|
||
|
tMapLayer.tarLayer = preLayer;
|
||
|
}
|
||
|
preLayerTarName = tLayerTarLayerName;
|
||
|
}
|
||
|
this._layerArray.push(tMapLayer);
|
||
|
}
|
||
|
}
|
||
|
if (this.removeCoveredTile) {
|
||
|
this.adptTiledMapData();
|
||
|
}
|
||
|
if (this.cacheAllAfterInit) {
|
||
|
this.cacheAllGrid();
|
||
|
}
|
||
|
this.moveViewPort(this._rect.x, this._rect.y);
|
||
|
if (this._completeHandler != null) {
|
||
|
this._completeHandler.run();
|
||
|
}
|
||
|
}
|
||
|
addTileProperties(tileDataDic) {
|
||
|
var key;
|
||
|
for (key in tileDataDic) {
|
||
|
this._tileProperties2[key] = tileDataDic[key];
|
||
|
}
|
||
|
}
|
||
|
getTileUserData(id, sign, defaultV = null) {
|
||
|
if (!this._tileProperties2 || !this._tileProperties2[id] || !(sign in this._tileProperties2[id]))
|
||
|
return defaultV;
|
||
|
return this._tileProperties2[id][sign];
|
||
|
}
|
||
|
adptTiledMapData() {
|
||
|
var i, len;
|
||
|
len = this._layerArray.length;
|
||
|
var tLayer;
|
||
|
var noNeeds = {};
|
||
|
var tDatas;
|
||
|
for (i = len - 1; i >= 0; i--) {
|
||
|
tLayer = this._layerArray[i];
|
||
|
tDatas = tLayer._mapData;
|
||
|
if (!tDatas)
|
||
|
continue;
|
||
|
this.removeCoverd(tDatas, noNeeds);
|
||
|
this.collectCovers(tDatas, noNeeds, i);
|
||
|
}
|
||
|
}
|
||
|
removeCoverd(datas, noNeeds) {
|
||
|
var i, len;
|
||
|
len = datas.length;
|
||
|
for (i = 0; i < len; i++) {
|
||
|
if (noNeeds[i]) {
|
||
|
datas[i] = 0;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
collectCovers(datas, noNeeds, layer) {
|
||
|
var i, len;
|
||
|
len = datas.length;
|
||
|
var tTileData;
|
||
|
var isCover;
|
||
|
for (i = 0; i < len; i++) {
|
||
|
tTileData = datas[i];
|
||
|
if (tTileData > 0) {
|
||
|
isCover = this.getTileUserData(tTileData - 1, "type", 0);
|
||
|
if (isCover > 0) {
|
||
|
noNeeds[i] = tTileData;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
getTexture(index) {
|
||
|
if (index < this._tileTexSetArr.length) {
|
||
|
return this._tileTexSetArr[index];
|
||
|
}
|
||
|
return null;
|
||
|
}
|
||
|
getMapProperties(name) {
|
||
|
if (this._properties) {
|
||
|
return this._properties[name];
|
||
|
}
|
||
|
return null;
|
||
|
}
|
||
|
getTileProperties(index, id, name) {
|
||
|
if (this._tileProperties[index] && this._tileProperties[index][id]) {
|
||
|
return this._tileProperties[index][id][name];
|
||
|
}
|
||
|
return null;
|
||
|
}
|
||
|
getSprite(index, width, height) {
|
||
|
if (0 < this._tileTexSetArr.length) {
|
||
|
var tGridSprite = new GridSprite();
|
||
|
tGridSprite.initData(this, true);
|
||
|
tGridSprite.size(width, height);
|
||
|
var tTileTexSet = this._tileTexSetArr[index];
|
||
|
if (tTileTexSet != null && tTileTexSet.texture != null) {
|
||
|
if (tTileTexSet.isAnimation) {
|
||
|
var tAnimationSprite = new TileAniSprite();
|
||
|
this._index++;
|
||
|
tAnimationSprite.setTileTextureSet(this._index.toString(), tTileTexSet);
|
||
|
tGridSprite.addAniSprite(tAnimationSprite);
|
||
|
tGridSprite.addChild(tAnimationSprite);
|
||
|
}
|
||
|
else {
|
||
|
tGridSprite.graphics.drawImage(tTileTexSet.texture, 0, 0, width, height);
|
||
|
}
|
||
|
tGridSprite.drawImageNum++;
|
||
|
}
|
||
|
return tGridSprite;
|
||
|
}
|
||
|
return null;
|
||
|
}
|
||
|
setViewPortPivotByScale(scaleX, scaleY) {
|
||
|
this._pivotScaleX = scaleX;
|
||
|
this._pivotScaleY = scaleY;
|
||
|
}
|
||
|
set scale(scale) {
|
||
|
if (scale <= 0)
|
||
|
return;
|
||
|
this._scale = scale;
|
||
|
this._viewPortWidth = this._rect.width / scale;
|
||
|
this._viewPortHeight = this._rect.height / scale;
|
||
|
this._mapSprite.scale(this._scale, this._scale);
|
||
|
this.updateViewPort();
|
||
|
}
|
||
|
get scale() {
|
||
|
return this._scale;
|
||
|
}
|
||
|
moveViewPort(moveX, moveY) {
|
||
|
this._x = -moveX;
|
||
|
this._y = -moveY;
|
||
|
this._rect.x = moveX;
|
||
|
this._rect.y = moveY;
|
||
|
this.updateViewPort();
|
||
|
}
|
||
|
changeViewPort(moveX, moveY, width, height) {
|
||
|
if (moveX == this._rect.x && moveY == this._rect.y && width == this._rect.width && height == this._rect.height)
|
||
|
return;
|
||
|
this._x = -moveX;
|
||
|
this._y = -moveY;
|
||
|
this._rect.x = moveX;
|
||
|
this._rect.y = moveY;
|
||
|
this._rect.width = width;
|
||
|
this._rect.height = height;
|
||
|
this._viewPortWidth = width / this._scale;
|
||
|
this._viewPortHeight = height / this._scale;
|
||
|
this.updateViewPort();
|
||
|
}
|
||
|
changeViewPortBySize(width, height, rect = null) {
|
||
|
if (rect == null) {
|
||
|
rect = new Laya.Rectangle();
|
||
|
}
|
||
|
this._centerX = this._rect.x + this._rect.width * this._pivotScaleX;
|
||
|
this._centerY = this._rect.y + this._rect.height * this._pivotScaleY;
|
||
|
rect.x = this._centerX - width * this._pivotScaleX;
|
||
|
rect.y = this._centerY - height * this._pivotScaleY;
|
||
|
rect.width = width;
|
||
|
rect.height = height;
|
||
|
this.changeViewPort(rect.x, rect.y, rect.width, rect.height);
|
||
|
return rect;
|
||
|
}
|
||
|
updateViewPort() {
|
||
|
this._centerX = this._rect.x + this._rect.width * this._pivotScaleX;
|
||
|
this._centerY = this._rect.y + this._rect.height * this._pivotScaleY;
|
||
|
var posChanged = false;
|
||
|
var preValue = this._viewPortX;
|
||
|
this._viewPortX = this._centerX - this._rect.width * this._pivotScaleX / this._scale;
|
||
|
if (preValue != this._viewPortX) {
|
||
|
posChanged = true;
|
||
|
}
|
||
|
else {
|
||
|
preValue = this._viewPortY;
|
||
|
}
|
||
|
this._viewPortY = this._centerY - this._rect.height * this._pivotScaleY / this._scale;
|
||
|
if (!posChanged && preValue != this._viewPortY) {
|
||
|
posChanged = true;
|
||
|
}
|
||
|
if (this._limitRange) {
|
||
|
var tRight = this._viewPortX + this._viewPortWidth;
|
||
|
if (tRight > this._width) {
|
||
|
this._viewPortX = this._width - this._viewPortWidth;
|
||
|
}
|
||
|
var tBottom = this._viewPortY + this._viewPortHeight;
|
||
|
if (tBottom > this._height) {
|
||
|
this._viewPortY = this._height - this._viewPortHeight;
|
||
|
}
|
||
|
if (this._viewPortX < 0) {
|
||
|
this._viewPortX = 0;
|
||
|
}
|
||
|
if (this._viewPortY < 0) {
|
||
|
this._viewPortY = 0;
|
||
|
}
|
||
|
}
|
||
|
var tPaddingRect = this._paddingRect;
|
||
|
this._mapRect.top = Math.floor((this._viewPortY - tPaddingRect.y) / this._gridHeight);
|
||
|
this._mapRect.bottom = Math.floor((this._viewPortY + this._viewPortHeight + tPaddingRect.height + tPaddingRect.y) / this._gridHeight);
|
||
|
this._mapRect.left = Math.floor((this._viewPortX - tPaddingRect.x) / this._gridWidth);
|
||
|
this._mapRect.right = Math.floor((this._viewPortX + this._viewPortWidth + tPaddingRect.width + tPaddingRect.x) / this._gridWidth);
|
||
|
if (this._mapRect.top != this._mapLastRect.top || this._mapRect.bottom != this._mapLastRect.bottom || this._mapRect.left != this._mapLastRect.left || this._mapRect.right != this._mapLastRect.right) {
|
||
|
this.clipViewPort();
|
||
|
this._mapLastRect.top = this._mapRect.top;
|
||
|
this._mapLastRect.bottom = this._mapRect.bottom;
|
||
|
this._mapLastRect.left = this._mapRect.left;
|
||
|
this._mapLastRect.right = this._mapRect.right;
|
||
|
posChanged = true;
|
||
|
}
|
||
|
if (!posChanged)
|
||
|
return;
|
||
|
var tMapLayer;
|
||
|
var len = this._renderLayerArray.length;
|
||
|
for (var i = 0; i < len; i++) {
|
||
|
tMapLayer = this._renderLayerArray[i];
|
||
|
if (tMapLayer._gridSpriteArray.length > 0)
|
||
|
tMapLayer.updateGridPos();
|
||
|
}
|
||
|
}
|
||
|
clipViewPort() {
|
||
|
var tSub = 0;
|
||
|
var tAdd = 0;
|
||
|
var i, j;
|
||
|
if (this._mapRect.left > this._mapLastRect.left) {
|
||
|
tSub = this._mapRect.left - this._mapLastRect.left;
|
||
|
if (tSub > 0) {
|
||
|
for (j = this._mapLastRect.left; j < this._mapLastRect.left + tSub; j++) {
|
||
|
for (i = this._mapLastRect.top; i <= this._mapLastRect.bottom; i++) {
|
||
|
this.hideGrid(j, i);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
tAdd = Math.min(this._mapLastRect.left, this._mapRect.right + 1) - this._mapRect.left;
|
||
|
if (tAdd > 0) {
|
||
|
for (j = this._mapRect.left; j < this._mapRect.left + tAdd; j++) {
|
||
|
for (i = this._mapRect.top; i <= this._mapRect.bottom; i++) {
|
||
|
this.showGrid(j, i);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if (this._mapRect.right > this._mapLastRect.right) {
|
||
|
tAdd = this._mapRect.right - this._mapLastRect.right;
|
||
|
if (tAdd > 0) {
|
||
|
for (j = Math.max(this._mapLastRect.right + 1, this._mapRect.left); j <= this._mapLastRect.right + tAdd; j++) {
|
||
|
for (i = this._mapRect.top; i <= this._mapRect.bottom; i++) {
|
||
|
this.showGrid(j, i);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
tSub = this._mapLastRect.right - this._mapRect.right;
|
||
|
if (tSub > 0) {
|
||
|
for (j = this._mapRect.right + 1; j <= this._mapRect.right + tSub; j++) {
|
||
|
for (i = this._mapLastRect.top; i <= this._mapLastRect.bottom; i++) {
|
||
|
this.hideGrid(j, i);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if (this._mapRect.top > this._mapLastRect.top) {
|
||
|
tSub = this._mapRect.top - this._mapLastRect.top;
|
||
|
if (tSub > 0) {
|
||
|
for (i = this._mapLastRect.top; i < this._mapLastRect.top + tSub; i++) {
|
||
|
for (j = this._mapLastRect.left; j <= this._mapLastRect.right; j++) {
|
||
|
this.hideGrid(j, i);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
tAdd = Math.min(this._mapLastRect.top, this._mapRect.bottom + 1) - this._mapRect.top;
|
||
|
if (tAdd > 0) {
|
||
|
for (i = this._mapRect.top; i < this._mapRect.top + tAdd; i++) {
|
||
|
for (j = this._mapRect.left; j <= this._mapRect.right; j++) {
|
||
|
this.showGrid(j, i);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if (this._mapRect.bottom > this._mapLastRect.bottom) {
|
||
|
tAdd = this._mapRect.bottom - this._mapLastRect.bottom;
|
||
|
if (tAdd > 0) {
|
||
|
for (i = Math.max(this._mapLastRect.bottom + 1, this._mapRect.top); i <= this._mapLastRect.bottom + tAdd; i++) {
|
||
|
for (j = this._mapRect.left; j <= this._mapRect.right; j++) {
|
||
|
this.showGrid(j, i);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
tSub = this._mapLastRect.bottom - this._mapRect.bottom;
|
||
|
if (tSub > 0) {
|
||
|
for (i = this._mapRect.bottom + 1; i <= this._mapRect.bottom + tSub; i++) {
|
||
|
for (j = this._mapLastRect.left; j <= this._mapLastRect.right; j++) {
|
||
|
this.hideGrid(j, i);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
showGrid(gridX, gridY) {
|
||
|
if (gridX < 0 || gridX >= this._gridW || gridY < 0 || gridY >= this._gridH) {
|
||
|
return;
|
||
|
}
|
||
|
var i;
|
||
|
var tGridSprite;
|
||
|
var tTempArray = this._gridArray[gridY][gridX];
|
||
|
if (tTempArray == null) {
|
||
|
tTempArray = this.getGridArray(gridX, gridY);
|
||
|
}
|
||
|
else {
|
||
|
for (i = 0; i < tTempArray.length && i < this._layerArray.length; i++) {
|
||
|
var tLayerSprite = this._layerArray[i];
|
||
|
if (tLayerSprite && tTempArray[i]) {
|
||
|
tGridSprite = tTempArray[i];
|
||
|
if (tGridSprite.visible == false && tGridSprite.drawImageNum > 0) {
|
||
|
tGridSprite.show();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
cacheAllGrid() {
|
||
|
var i, j;
|
||
|
var tempArr;
|
||
|
for (i = 0; i < this._gridW; i++) {
|
||
|
for (j = 0; j < this._gridH; j++) {
|
||
|
tempArr = this.getGridArray(i, j);
|
||
|
this.cacheGridsArray(tempArr);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
cacheGridsArray(arr) {
|
||
|
var canvas;
|
||
|
if (!TiledMap._tempCanvas) {
|
||
|
TiledMap._tempCanvas = new Laya.HTMLCanvas();
|
||
|
var tx = TiledMap._tempCanvas.context;
|
||
|
if (!tx) {
|
||
|
tx = TiledMap._tempCanvas.getContext('2d');
|
||
|
}
|
||
|
}
|
||
|
canvas = TiledMap._tempCanvas;
|
||
|
canvas.context.asBitmap = false;
|
||
|
var i, len;
|
||
|
len = arr.length;
|
||
|
var tGrid;
|
||
|
for (i = 0; i < len; i++) {
|
||
|
tGrid = arr[i];
|
||
|
canvas.clear();
|
||
|
canvas.size(1, 1);
|
||
|
tGrid.render(canvas.context, 0, 0);
|
||
|
tGrid.hide();
|
||
|
}
|
||
|
canvas.clear();
|
||
|
canvas.size(1, 1);
|
||
|
}
|
||
|
getGridArray(gridX, gridY) {
|
||
|
var i, j;
|
||
|
var tGridSprite;
|
||
|
var tTempArray = this._gridArray[gridY][gridX];
|
||
|
if (tTempArray == null) {
|
||
|
tTempArray = this._gridArray[gridY][gridX] = [];
|
||
|
var tLeft = 0;
|
||
|
var tRight = 0;
|
||
|
var tTop = 0;
|
||
|
var tBottom = 0;
|
||
|
var tGridWidth = this._gridWidth;
|
||
|
var tGridHeight = this._gridHeight;
|
||
|
switch (this.orientation) {
|
||
|
case TiledMap.ORIENTATION_ISOMETRIC:
|
||
|
tLeft = Math.floor(gridX * tGridWidth);
|
||
|
tRight = Math.floor(gridX * tGridWidth + tGridWidth);
|
||
|
tTop = Math.floor(gridY * tGridHeight);
|
||
|
tBottom = Math.floor(gridY * tGridHeight + tGridHeight);
|
||
|
var tLeft1, tRight1, tTop1, tBottom1;
|
||
|
break;
|
||
|
case TiledMap.ORIENTATION_STAGGERED:
|
||
|
tLeft = Math.floor(gridX * tGridWidth / this._mapTileW);
|
||
|
tRight = Math.floor((gridX * tGridWidth + tGridWidth) / this._mapTileW);
|
||
|
tTop = Math.floor(gridY * tGridHeight / (this._mapTileH / 2));
|
||
|
tBottom = Math.floor((gridY * tGridHeight + tGridHeight) / (this._mapTileH / 2));
|
||
|
break;
|
||
|
case TiledMap.ORIENTATION_ORTHOGONAL:
|
||
|
tLeft = Math.floor(gridX * tGridWidth / this._mapTileW);
|
||
|
tRight = Math.floor((gridX * tGridWidth + tGridWidth) / this._mapTileW);
|
||
|
tTop = Math.floor(gridY * tGridHeight / this._mapTileH);
|
||
|
tBottom = Math.floor((gridY * tGridHeight + tGridHeight) / this._mapTileH);
|
||
|
break;
|
||
|
case TiledMap.ORIENTATION_HEXAGONAL:
|
||
|
var tHeight = this._mapTileH * 2 / 3;
|
||
|
tLeft = Math.floor(gridX * tGridWidth / this._mapTileW);
|
||
|
tRight = Math.ceil((gridX * tGridWidth + tGridWidth) / this._mapTileW);
|
||
|
tTop = Math.floor(gridY * tGridHeight / tHeight);
|
||
|
tBottom = Math.ceil((gridY * tGridHeight + tGridHeight) / tHeight);
|
||
|
break;
|
||
|
}
|
||
|
var tLayer = null;
|
||
|
var tTGridSprite;
|
||
|
var tDrawMapLayer;
|
||
|
for (var z = 0; z < this._layerArray.length; z++) {
|
||
|
tLayer = this._layerArray[z];
|
||
|
if (this.enableMergeLayer) {
|
||
|
if (tLayer.tarLayer != tDrawMapLayer) {
|
||
|
tTGridSprite = null;
|
||
|
tDrawMapLayer = tLayer.tarLayer;
|
||
|
}
|
||
|
if (!tTGridSprite) {
|
||
|
tTGridSprite = tDrawMapLayer.getDrawSprite(gridX, gridY);
|
||
|
tTempArray.push(tTGridSprite);
|
||
|
}
|
||
|
tGridSprite = tTGridSprite;
|
||
|
}
|
||
|
else {
|
||
|
tGridSprite = tLayer.getDrawSprite(gridX, gridY);
|
||
|
tTempArray.push(tGridSprite);
|
||
|
}
|
||
|
var tColorStr;
|
||
|
if (this._showGridKey) {
|
||
|
tColorStr = "#";
|
||
|
tColorStr += this._colorArray[Math.floor(Math.random() * this._colorArray.length)];
|
||
|
tColorStr += this._colorArray[Math.floor(Math.random() * this._colorArray.length)];
|
||
|
tColorStr += this._colorArray[Math.floor(Math.random() * this._colorArray.length)];
|
||
|
}
|
||
|
switch (this.orientation) {
|
||
|
case TiledMap.ORIENTATION_ISOMETRIC:
|
||
|
var tHalfTileHeight = this.tileHeight / 2;
|
||
|
var tHalfTileWidth = this.tileWidth / 2;
|
||
|
var tHalfMapWidth = this._width / 2;
|
||
|
tTop1 = Math.floor(tTop / tHalfTileHeight);
|
||
|
tBottom1 = Math.floor(tBottom / tHalfTileHeight);
|
||
|
tLeft1 = this._mapW + Math.floor((tLeft - tHalfMapWidth) / tHalfTileWidth);
|
||
|
tRight1 = this._mapW + Math.floor((tRight - tHalfMapWidth) / tHalfTileWidth);
|
||
|
var tMapW = this._mapW * 2;
|
||
|
var tMapH = this._mapH * 2;
|
||
|
if (tTop1 < 0) {
|
||
|
tTop1 = 0;
|
||
|
}
|
||
|
if (tTop1 >= tMapH) {
|
||
|
tTop1 = tMapH - 1;
|
||
|
}
|
||
|
if (tBottom1 < 0) {
|
||
|
tBottom = 0;
|
||
|
}
|
||
|
if (tBottom1 >= tMapH) {
|
||
|
tBottom1 = tMapH - 1;
|
||
|
}
|
||
|
tGridSprite.zOrder = this._totalGridNum * z + gridY * this._gridW + gridX;
|
||
|
for (i = tTop1; i < tBottom1; i++) {
|
||
|
for (j = 0; j <= i; j++) {
|
||
|
var tIndexX = i - j;
|
||
|
var tIndexY = j;
|
||
|
var tIndexValue = (tIndexX - tIndexY) + this._mapW;
|
||
|
if (tIndexValue > tLeft1 && tIndexValue <= tRight1) {
|
||
|
if (tLayer.drawTileTexture(tGridSprite, tIndexX, tIndexY)) {
|
||
|
tGridSprite.drawImageNum++;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
case TiledMap.ORIENTATION_STAGGERED:
|
||
|
tGridSprite.zOrder = z * this._totalGridNum + gridY * this._gridW + gridX;
|
||
|
for (i = tTop; i < tBottom; i++) {
|
||
|
for (j = tLeft; j < tRight; j++) {
|
||
|
if (tLayer.drawTileTexture(tGridSprite, j, i)) {
|
||
|
tGridSprite.drawImageNum++;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
case TiledMap.ORIENTATION_ORTHOGONAL:
|
||
|
case TiledMap.ORIENTATION_HEXAGONAL:
|
||
|
switch (this._renderOrder) {
|
||
|
case TiledMap.RENDERORDER_RIGHTDOWN:
|
||
|
tGridSprite.zOrder = z * this._totalGridNum + gridY * this._gridW + gridX;
|
||
|
for (i = tTop; i < tBottom; i++) {
|
||
|
for (j = tLeft; j < tRight; j++) {
|
||
|
if (tLayer.drawTileTexture(tGridSprite, j, i)) {
|
||
|
tGridSprite.drawImageNum++;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
case TiledMap.RENDERORDER_RIGHTUP:
|
||
|
tGridSprite.zOrder = z * this._totalGridNum + (this._gridH - 1 - gridY) * this._gridW + gridX;
|
||
|
for (i = tBottom - 1; i >= tTop; i--) {
|
||
|
for (j = tLeft; j < tRight; j++) {
|
||
|
if (tLayer.drawTileTexture(tGridSprite, j, i)) {
|
||
|
tGridSprite.drawImageNum++;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
case TiledMap.RENDERORDER_LEFTDOWN:
|
||
|
tGridSprite.zOrder = z * this._totalGridNum + gridY * this._gridW + (this._gridW - 1 - gridX);
|
||
|
for (i = tTop; i < tBottom; i++) {
|
||
|
for (j = tRight - 1; j >= tLeft; j--) {
|
||
|
if (tLayer.drawTileTexture(tGridSprite, j, i)) {
|
||
|
tGridSprite.drawImageNum++;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
case TiledMap.RENDERORDER_LEFTUP:
|
||
|
tGridSprite.zOrder = z * this._totalGridNum + (this._gridH - 1 - gridY) * this._gridW + (this._gridW - 1 - gridX);
|
||
|
for (i = tBottom - 1; i >= tTop; i--) {
|
||
|
for (j = tRight - 1; j >= tLeft; j--) {
|
||
|
if (tLayer.drawTileTexture(tGridSprite, j, i)) {
|
||
|
tGridSprite.drawImageNum++;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
if (!tGridSprite.isHaveAnimation) {
|
||
|
tGridSprite.autoSize = true;
|
||
|
if (this.autoCache)
|
||
|
tGridSprite.cacheAs = this.autoCacheType;
|
||
|
tGridSprite.autoSize = false;
|
||
|
}
|
||
|
if (!this.enableMergeLayer) {
|
||
|
if (tGridSprite.drawImageNum > 0) {
|
||
|
tLayer.addChild(tGridSprite);
|
||
|
}
|
||
|
if (this._showGridKey) {
|
||
|
tGridSprite.graphics.drawRect(0, 0, tGridWidth, tGridHeight, null, tColorStr);
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
if (tTGridSprite && tTGridSprite.drawImageNum > 0 && tDrawMapLayer) {
|
||
|
tDrawMapLayer.addChild(tTGridSprite);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if (this.enableMergeLayer && this.showGridTextureCount) {
|
||
|
if (tTGridSprite) {
|
||
|
tTGridSprite.graphics.fillText(tTGridSprite.drawImageNum + "", 20, 20, null, "#ff0000", "left");
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return tTempArray;
|
||
|
}
|
||
|
hideGrid(gridX, gridY) {
|
||
|
if (gridX < 0 || gridX >= this._gridW || gridY < 0 || gridY >= this._gridH) {
|
||
|
return;
|
||
|
}
|
||
|
var tTempArray = this._gridArray[gridY][gridX];
|
||
|
if (tTempArray) {
|
||
|
var tGridSprite;
|
||
|
for (var i = 0; i < tTempArray.length; i++) {
|
||
|
tGridSprite = tTempArray[i];
|
||
|
if (tGridSprite.drawImageNum > 0) {
|
||
|
if (tGridSprite != null) {
|
||
|
tGridSprite.hide();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
getLayerObject(layerName, objectName) {
|
||
|
var tLayer = null;
|
||
|
for (var i = 0; i < this._layerArray.length; i++) {
|
||
|
tLayer = this._layerArray[i];
|
||
|
if (tLayer.layerName == layerName) {
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
if (tLayer) {
|
||
|
return tLayer.getObjectByName(objectName);
|
||
|
}
|
||
|
return null;
|
||
|
}
|
||
|
destroy() {
|
||
|
this._orientation = TiledMap.ORIENTATION_ORTHOGONAL;
|
||
|
this._jsonData = null;
|
||
|
var i = 0;
|
||
|
this._gridArray = [];
|
||
|
var tTileTexSet;
|
||
|
for (i = 0; i < this._tileTexSetArr.length; i++) {
|
||
|
tTileTexSet = this._tileTexSetArr[i];
|
||
|
if (tTileTexSet) {
|
||
|
tTileTexSet.clearAll();
|
||
|
}
|
||
|
}
|
||
|
this._tileTexSetArr = [];
|
||
|
var tTexture;
|
||
|
for (i = 0; i < this._texArray.length; i++) {
|
||
|
tTexture = this._texArray[i];
|
||
|
tTexture.destroy();
|
||
|
}
|
||
|
this._texArray = [];
|
||
|
this._width = 0;
|
||
|
this._height = 0;
|
||
|
this._mapW = 0;
|
||
|
this._mapH = 0;
|
||
|
this._mapTileW = 0;
|
||
|
this._mapTileH = 0;
|
||
|
this._rect.setTo(0, 0, 0, 0);
|
||
|
var tLayer;
|
||
|
for (i = 0; i < this._layerArray.length; i++) {
|
||
|
tLayer = this._layerArray[i];
|
||
|
tLayer.clearAll();
|
||
|
}
|
||
|
this._layerArray = [];
|
||
|
this._renderLayerArray = [];
|
||
|
if (this._mapSprite) {
|
||
|
this._mapSprite.destroy();
|
||
|
this._mapSprite = null;
|
||
|
}
|
||
|
this._jsonLoader = null;
|
||
|
this._loader = null;
|
||
|
var tDic = this._animationDic;
|
||
|
for (var p in tDic) {
|
||
|
delete tDic[p];
|
||
|
}
|
||
|
this._properties = null;
|
||
|
tDic = this._tileProperties;
|
||
|
for (p in tDic) {
|
||
|
delete tDic[p];
|
||
|
}
|
||
|
this._currTileSet = null;
|
||
|
this._completeHandler = null;
|
||
|
this._mapRect.clearAll();
|
||
|
this._mapLastRect.clearAll();
|
||
|
this._tileSetArray = [];
|
||
|
this._gridWidth = 450;
|
||
|
this._gridHeight = 450;
|
||
|
this._gridW = 0;
|
||
|
this._gridH = 0;
|
||
|
this._x = 0;
|
||
|
this._y = 0;
|
||
|
this._index = 0;
|
||
|
this._enableLinear = true;
|
||
|
this._resPath = null;
|
||
|
this._pathArray = null;
|
||
|
}
|
||
|
get tileWidth() {
|
||
|
return this._mapTileW;
|
||
|
}
|
||
|
get tileHeight() {
|
||
|
return this._mapTileH;
|
||
|
}
|
||
|
get width() {
|
||
|
return this._width;
|
||
|
}
|
||
|
get height() {
|
||
|
return this._height;
|
||
|
}
|
||
|
get numColumnsTile() {
|
||
|
return this._mapW;
|
||
|
}
|
||
|
get numRowsTile() {
|
||
|
return this._mapH;
|
||
|
}
|
||
|
get viewPortX() {
|
||
|
return -this._viewPortX;
|
||
|
}
|
||
|
get viewPortY() {
|
||
|
return -this._viewPortY;
|
||
|
}
|
||
|
get viewPortWidth() {
|
||
|
return this._viewPortWidth;
|
||
|
}
|
||
|
get viewPortHeight() {
|
||
|
return this._viewPortHeight;
|
||
|
}
|
||
|
get x() {
|
||
|
return this._x;
|
||
|
}
|
||
|
get y() {
|
||
|
return this._y;
|
||
|
}
|
||
|
get gridWidth() {
|
||
|
return this._gridWidth;
|
||
|
}
|
||
|
get gridHeight() {
|
||
|
return this._gridHeight;
|
||
|
}
|
||
|
get numColumnsGrid() {
|
||
|
return this._gridW;
|
||
|
}
|
||
|
get numRowsGrid() {
|
||
|
return this._gridH;
|
||
|
}
|
||
|
get orientation() {
|
||
|
return this._orientation;
|
||
|
}
|
||
|
get renderOrder() {
|
||
|
return this._renderOrder;
|
||
|
}
|
||
|
mapSprite() {
|
||
|
return this._mapSprite;
|
||
|
}
|
||
|
getLayerByName(layerName) {
|
||
|
var tMapLayer;
|
||
|
for (var i = 0; i < this._layerArray.length; i++) {
|
||
|
tMapLayer = this._layerArray[i];
|
||
|
if (layerName == tMapLayer.layerName) {
|
||
|
return tMapLayer;
|
||
|
}
|
||
|
}
|
||
|
return null;
|
||
|
}
|
||
|
getLayerByIndex(index) {
|
||
|
if (index < this._layerArray.length) {
|
||
|
return this._layerArray[index];
|
||
|
}
|
||
|
return null;
|
||
|
}
|
||
|
}
|
||
|
TiledMap.ORIENTATION_ORTHOGONAL = "orthogonal";
|
||
|
TiledMap.ORIENTATION_ISOMETRIC = "isometric";
|
||
|
TiledMap.ORIENTATION_STAGGERED = "staggered";
|
||
|
TiledMap.ORIENTATION_HEXAGONAL = "hexagonal";
|
||
|
TiledMap.RENDERORDER_RIGHTDOWN = "right-down";
|
||
|
TiledMap.RENDERORDER_RIGHTUP = "right-up";
|
||
|
TiledMap.RENDERORDER_LEFTDOWN = "left-down";
|
||
|
TiledMap.RENDERORDER_LEFTUP = "left-up";
|
||
|
class GRect {
|
||
|
clearAll() {
|
||
|
this.left = this.top = this.right = this.bottom = 0;
|
||
|
}
|
||
|
}
|
||
|
class TileMapAniData {
|
||
|
constructor() {
|
||
|
this.mAniIdArray = [];
|
||
|
this.mDurationTimeArray = [];
|
||
|
this.mTileTexSetArr = [];
|
||
|
}
|
||
|
}
|
||
|
class TileSet {
|
||
|
constructor() {
|
||
|
this.firstgid = 0;
|
||
|
this.image = "";
|
||
|
this.imageheight = 0;
|
||
|
this.imagewidth = 0;
|
||
|
this.margin = 0;
|
||
|
this.name = 0;
|
||
|
this.spacing = 0;
|
||
|
this.tileheight = 0;
|
||
|
this.tilewidth = 0;
|
||
|
this.titleoffsetX = 0;
|
||
|
this.titleoffsetY = 0;
|
||
|
}
|
||
|
init(data) {
|
||
|
this.firstgid = data.firstgid;
|
||
|
this.image = data.image;
|
||
|
this.imageheight = data.imageheight;
|
||
|
this.imagewidth = data.imagewidth;
|
||
|
this.margin = data.margin;
|
||
|
this.name = data.name;
|
||
|
this.properties = data.properties;
|
||
|
this.spacing = data.spacing;
|
||
|
this.tileheight = data.tileheight;
|
||
|
this.tilewidth = data.tilewidth;
|
||
|
this.tileproperties = data.tileproperties;
|
||
|
var tTileoffset = data.tileoffset;
|
||
|
if (tTileoffset) {
|
||
|
this.titleoffsetX = tTileoffset.x;
|
||
|
this.titleoffsetY = tTileoffset.y;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
IMap.TiledMap = TiledMap;
|
||
|
|
||
|
exports.GridSprite = GridSprite;
|
||
|
exports.IMap = IMap;
|
||
|
exports.MapLayer = MapLayer;
|
||
|
exports.TileAniSprite = TileAniSprite;
|
||
|
exports.TileTexSet = TileTexSet;
|
||
|
exports.TiledMap = TiledMap;
|
||
|
|
||
|
}(window.Laya = window.Laya || {}, Laya));
|