WaterControl/library/imports/30/30e2e490-5833-4a23-af45-6da61f37ada3.js
2024-07-10 18:35:07 +08:00

227 lines
7.5 KiB
JavaScript

"use strict";
cc._RF.push(module, '30e2eSQWDNKI69FbaYfN62j', 'TmoObjectGroup');
// Script/TmoObjectGroup.js
"use strict";
exports.__esModule = true;
exports["default"] = void 0;
// 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 TmoSprite = require("./TmoSprite");
var _default = cc.Class({
"extends": cc.TiledObjectGroup,
_init: function _init(groupInfo, mapInfo, texGrids, tiledMap) {
var TiledMap = cc.TiledMap;
var TMXObjectType = TiledMap.TMXObjectType;
var Orientation = TiledMap.Orientation;
var StaggerAxis = TiledMap.StaggerAxis;
var TileFlag = TiledMap.TileFlag;
var FLIPPED_MASK = TileFlag.FLIPPED_MASK;
var FLAG_HORIZONTAL = TileFlag.HORIZONTAL;
var FLAG_VERTICAL = TileFlag.VERTICAL;
this._groupName = groupInfo.name;
this._positionOffset = groupInfo.offset;
this._mapInfo = mapInfo;
this._properties = groupInfo.getProperties();
this._offset = cc.v2(groupInfo.offset.x, -groupInfo.offset.y);
this._opacity = groupInfo._opacity;
var mapSize = mapInfo._mapSize;
var tileSize = mapInfo._tileSize;
var width = 0,
height = 0;
if (mapInfo.orientation === Orientation.HEX) {
if (mapInfo.getStaggerAxis() === StaggerAxis.STAGGERAXIS_X) {
height = tileSize.height * (mapSize.height + 0.5);
width = (tileSize.width + mapInfo.getHexSideLength()) * Math.floor(mapSize.width / 2) + tileSize.width * (mapSize.width % 2);
} else {
width = tileSize.width * (mapSize.width + 0.5);
height = (tileSize.height + mapInfo.getHexSideLength()) * Math.floor(mapSize.height / 2) + tileSize.height * (mapSize.height % 2);
}
} else if (mapInfo.orientation === Orientation.ISO) {
var wh = mapSize.width + mapSize.height;
width = tileSize.width * 0.5 * wh;
height = tileSize.height * 0.5 * wh;
} else {
width = mapSize.width * tileSize.width;
height = mapSize.height * tileSize.height;
}
this.node.setContentSize(width, height);
var leftTopX = width * this.node.anchorX;
var leftTopY = height * (1 - this.node.anchorY);
var objects = groupInfo._objects;
var aliveNodes = {}; // 生成映射Map { Texture2D: textureIndex }
var textureIndexMap = new Map();
var objectTextures = tiledMap.getObjectTextures();
objectTextures.forEach(function (texture, idx) {
return textureIndexMap.set(texture, idx);
});
for (var i = 0, l = objects.length; i < l; i++) {
var object = objects[i];
var objType = object.type;
object.offset = cc.v2(object.x, object.y);
var points = object.points || object.polylinePoints;
if (points) {
for (var pi = 0; pi < points.length; pi++) {
points[pi].y *= -1;
}
}
if (Orientation.ISO !== mapInfo.orientation) {
object.y = height - object.y;
} else {
var posIdxX = object.x / tileSize.height;
var posIdxY = object.y / tileSize.height;
object.x = tileSize.width * 0.5 * (mapSize.height + posIdxX - posIdxY);
object.y = tileSize.height * 0.5 * (mapSize.width + mapSize.height - posIdxX - posIdxY);
}
if (objType === TMXObjectType.TEXT) {
var textName = "text" + object.id;
aliveNodes[textName] = true;
var textNode = this.node.getChildByName(textName);
if (!textNode) {
textNode = new cc.Node();
}
textNode.active = object.visible;
textNode.anchorX = 0;
textNode.anchorY = 1;
textNode.angle = -object.rotation;
textNode.x = object.x - leftTopX;
textNode.y = object.y - leftTopY;
textNode.name = textName;
textNode.parent = this.node;
textNode.color = object.color;
textNode.opacity = this._opacity;
textNode.setSiblingIndex(i);
var label = textNode.getComponent(cc.Label);
if (!label) {
label = textNode.addComponent(cc.Label);
}
label.overflow = cc.Label.Overflow.SHRINK;
label.lineHeight = object.height;
label.string = object.text;
label.horizontalAlign = object.halign;
label.verticalAlign = object.valign;
label.fontSize = object.pixelsize;
textNode.width = object.width;
textNode.height = object.height;
}
if (objType === TMXObjectType.IMAGE) {
var gid = object.gid;
var grid = texGrids[(gid & FLIPPED_MASK) >>> 0];
if (!grid) continue;
var tileset = grid.tileset;
var imgName = "img" + object.id;
aliveNodes[imgName] = true;
var imgNode = this.node.getChildByName(imgName);
var imgWidth = object.width || grid.width;
var imgHeight = object.height || grid.height;
var tileOffsetX = tileset.tileOffset.x;
var tileOffsetY = tileset.tileOffset.y; // Delete image nodes implemented as private nodes
// Use cc.Node to implement node-level requirements
if (imgNode instanceof cc.PrivateNode) {
imgNode.removeFromParent();
imgNode.destroy();
imgNode = null;
}
if (!imgNode) {
imgNode = new cc.Node();
}
if (Orientation.ISO == mapInfo.orientation) {
imgNode.anchorX = 0.5 + tileOffsetX / imgWidth;
imgNode.anchorY = tileOffsetY / imgHeight;
} else {
imgNode.anchorX = tileOffsetX / imgWidth;
imgNode.anchorY = tileOffsetY / imgHeight;
}
imgNode.active = object.visible;
imgNode.angle = -object.rotation;
imgNode.x = object.x - leftTopX;
imgNode.y = object.y - leftTopY;
imgNode.name = imgName;
imgNode.parent = this.node;
imgNode.opacity = this._opacity;
imgNode.setSiblingIndex(i);
imgNode._tiledMap = tiledMap;
var sp = imgNode.getComponent(TmoSprite);
if (!sp) {
sp = imgNode.addComponent(TmoSprite);
}
var spf = sp.spriteFrame;
if (!spf) {
spf = new cc.SpriteFrame();
}
if ((gid & FLAG_HORIZONTAL) >>> 0) {
spf.setFlipX(true);
} else {
spf.setFlipX(false);
}
if ((gid & FLAG_VERTICAL) >>> 0) {
spf.setFlipY(true);
} else {
spf.setFlipY(false);
}
var sourceImage = grid.tileset.sourceImage;
spf.setTexture(sourceImage, cc.rect(grid));
sp.spriteFrame = spf;
sp.setVertsDirty(); // object group may has no width or height info
imgNode.width = imgWidth;
imgNode.height = imgHeight; // 收集图集 更新textureIndexMap
if (!textureIndexMap.has(sourceImage)) {
textureIndexMap.set(sourceImage, objectTextures.length);
objectTextures.push(sourceImage);
} // 设置textureIndex
var textureIndex = textureIndexMap.get(sourceImage);
sp.setTextureIdx(textureIndex + 1);
}
}
this._objects = objects; // destroy useless node
var children = this.node.children;
var uselessExp = /^(?:img|text)\d+$/;
for (var _i = 0, n = children.length; _i < n; _i++) {
var c = children[_i];
var cName = c._name;
var isUseless = uselessExp.test(cName);
if (isUseless && !aliveNodes[cName]) c.destroy();
}
}
});
exports["default"] = _default;
module.exports = exports["default"];
cc._RF.pop();