180 lines
5.1 KiB
JavaScript
180 lines
5.1 KiB
JavaScript
"use strict";
|
|
cc._RF.push(module, '0b9eetmSUdJRZCQS91TYCw/', 'TmoTiledMap');
|
|
// Script/TmoTiledMap.js
|
|
|
|
"use strict";
|
|
|
|
// Learn cc.Class:
|
|
// - https://docs.cocos.com/creator/manual/en/scripting/class.html
|
|
// Learn Attribute:
|
|
// - https://docs.cocos.com/creator/manual/en/scripting/reference/attributes.html
|
|
// Learn life-cycle callbacks:
|
|
// - https://docs.cocos.com/creator/manual/en/scripting/life-cycle-callbacks.html
|
|
var TmoTiledLayer = require("./TmoTiledLayer");
|
|
|
|
var TmoObjectGroup = require("./TmoObjectGroup");
|
|
|
|
cc.Class({
|
|
"extends": cc.TiledMap,
|
|
properties: {
|
|
objectMaterial: cc.Material,
|
|
noColor: true,
|
|
singleTexture: true,
|
|
_objectTextures: []
|
|
},
|
|
_applyFile: function _applyFile() {
|
|
if (!this.objectMaterial) {
|
|
cc.error("TiledmapOptimize: 未设置objectMaterial!");
|
|
return;
|
|
}
|
|
|
|
this._super();
|
|
},
|
|
_buildLayerAndGroup: function _buildLayerAndGroup() {
|
|
var tilesets = this._tilesets;
|
|
var texGrids = this._texGrids;
|
|
var animations = this._animations;
|
|
texGrids.length = 0;
|
|
|
|
for (var i = 0, l = tilesets.length; i < l; ++i) {
|
|
var tilesetInfo = tilesets[i];
|
|
if (!tilesetInfo) continue;
|
|
cc.TiledMap.fillTextureGrids(tilesetInfo, texGrids, i);
|
|
}
|
|
|
|
this._fillAniGrids(texGrids, animations);
|
|
|
|
var layers = this._layers;
|
|
var groups = this._groups;
|
|
var images = this._images;
|
|
var oldNodeNames = {};
|
|
|
|
for (var _i = 0, n = layers.length; _i < n; _i++) {
|
|
oldNodeNames[layers[_i].node._name] = true;
|
|
}
|
|
|
|
for (var _i2 = 0, _n = groups.length; _i2 < _n; _i2++) {
|
|
oldNodeNames[groups[_i2].node._name] = true;
|
|
}
|
|
|
|
for (var _i3 = 0, _n2 = images.length; _i3 < _n2; _i3++) {
|
|
oldNodeNames[images[_i3]._name] = true;
|
|
}
|
|
|
|
layers = this._layers = [];
|
|
groups = this._groups = [];
|
|
images = this._images = [];
|
|
var mapInfo = this._mapInfo;
|
|
var node = this.node;
|
|
var layerInfos = mapInfo.getAllChildren();
|
|
var textures = this._textures;
|
|
var maxWidth = 0;
|
|
var maxHeight = 0;
|
|
this._objectTextures = [];
|
|
var firstTmxLayer = null;
|
|
|
|
if (layerInfos && layerInfos.length > 0) {
|
|
for (var _i4 = 0, len = layerInfos.length; _i4 < len; _i4++) {
|
|
var layerInfo = layerInfos[_i4];
|
|
var name = layerInfo.name;
|
|
var child = this.node.getChildByName(name);
|
|
oldNodeNames[name] = false;
|
|
|
|
if (!child) {
|
|
child = new cc.Node();
|
|
child.name = name;
|
|
node.addChild(child);
|
|
}
|
|
|
|
child.setSiblingIndex(_i4);
|
|
child.active = layerInfo.visible;
|
|
|
|
if (layerInfo instanceof cc.TMXLayerInfo) {
|
|
// 此处修改 改为创建MyTiledLayer
|
|
var layer = child.getComponent(TmoTiledLayer);
|
|
|
|
if (!layer) {
|
|
layer = child.addComponent(TmoTiledLayer);
|
|
} // 修改结束
|
|
// 此处修改 传递firstTmxLayer 记录firstTmxLayer
|
|
|
|
|
|
layer._init(layerInfo, mapInfo, tilesets, textures, texGrids, this, firstTmxLayer);
|
|
|
|
firstTmxLayer = firstTmxLayer || layer; // 修改结束
|
|
// tell the layerinfo to release the ownership of the tiles map.
|
|
|
|
layerInfo.ownTiles = false;
|
|
layers.push(layer);
|
|
} else if (layerInfo instanceof cc.TMXObjectGroupInfo) {
|
|
var group = child.getComponent(TmoObjectGroup);
|
|
|
|
if (!group) {
|
|
group = child.addComponent(TmoObjectGroup);
|
|
}
|
|
|
|
group._init(layerInfo, mapInfo, texGrids, this);
|
|
|
|
groups.push(group);
|
|
} else if (layerInfo instanceof cc.TMXImageLayerInfo) {
|
|
var texture = layerInfo.sourceImage;
|
|
child.opacity = layerInfo.opacity;
|
|
child.layerInfo = layerInfo;
|
|
child._offset = cc.v2(layerInfo.offset.x, -layerInfo.offset.y);
|
|
var image = child.getComponent(cc.Sprite);
|
|
|
|
if (!image) {
|
|
image = child.addComponent(cc.Sprite);
|
|
}
|
|
|
|
var spf = image.spriteFrame || new cc.SpriteFrame();
|
|
spf.setTexture(texture);
|
|
image.spriteFrame = spf;
|
|
child.width = texture.width;
|
|
child.height = texture.height;
|
|
images.push(child);
|
|
}
|
|
|
|
maxWidth = Math.max(maxWidth, child.width);
|
|
maxHeight = Math.max(maxHeight, child.height);
|
|
}
|
|
} // 设置材质的texture属性
|
|
|
|
|
|
var objectTextures = this._objectTextures;
|
|
|
|
for (var _i5 = 0; _i5 < objectTextures.length; _i5++) {
|
|
var idx = _i5 === 0 ? '' : _i5;
|
|
this.objectMaterial.setProperty("texture" + idx, objectTextures[_i5], 0);
|
|
}
|
|
|
|
var children = node.children;
|
|
|
|
for (var _i6 = 0, _n3 = children.length; _i6 < _n3; _i6++) {
|
|
var c = children[_i6];
|
|
|
|
if (oldNodeNames[c._name]) {
|
|
c.destroy();
|
|
}
|
|
}
|
|
|
|
this.node.width = maxWidth;
|
|
this.node.height = maxHeight;
|
|
|
|
this._syncAnchorPoint();
|
|
},
|
|
getObjectMaterial: function getObjectMaterial() {
|
|
return this.objectMaterial;
|
|
},
|
|
isNoColor: function isNoColor() {
|
|
return this.noColor;
|
|
},
|
|
isSingleTexture: function isSingleTexture() {
|
|
return this.singleTexture;
|
|
},
|
|
getObjectTextures: function getObjectTextures() {
|
|
return this._objectTextures;
|
|
}
|
|
});
|
|
|
|
cc._RF.pop(); |