"use strict"; cc._RF.push(module, 'd60cfrGbXBLBbplLoT7TBn7', 'TmoTiledLayer'); // Script/TmoTiledLayer.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 _mat4_temp = cc.mat4(); var _vec2_temp = cc.v2(); var _vec2_temp2 = cc.v2(); var _default = cc.Class({ "extends": cc.TiledLayer, // 此处修改 增加firstTmxLayer参数 _init: function _init(layerInfo, mapInfo, tilesets, textures, texGrids, tiledMap, firstTmxLayer) { // 修改结束 this._cullingDirty = true; this._layerInfo = layerInfo; this._mapInfo = mapInfo; // 此处修改 保存firstTmxLayer参数 this._firstTmxLayer = firstTmxLayer; this._tiledMap = tiledMap; // 修改结束 var size = layerInfo._layerSize; // layerInfo this._layerName = layerInfo.name; this._tiles = layerInfo._tiles; this._properties = layerInfo.properties; this._layerSize = size; this._minGID = layerInfo._minGID; this._maxGID = layerInfo._maxGID; this._opacity = layerInfo._opacity; this._renderOrder = mapInfo.renderOrder; this._staggerAxis = mapInfo.getStaggerAxis(); this._staggerIndex = mapInfo.getStaggerIndex(); this._hexSideLength = mapInfo.getHexSideLength(); this._animations = mapInfo.getTileAnimations(); // tilesets this._tilesets = tilesets; // textures this._textures = textures; // grid texture this._texGrids = texGrids; // mapInfo this._layerOrientation = mapInfo.orientation; this._mapTileSize = mapInfo.getTileSize(); var maptw = this._mapTileSize.width; var mapth = this._mapTileSize.height; var layerW = this._layerSize.width; var layerH = this._layerSize.height; if (this._layerOrientation === cc.TiledMap.Orientation.HEX) { // handle hex map var TiledMap = cc.TiledMap; var StaggerAxis = TiledMap.StaggerAxis; var StaggerIndex = TiledMap.StaggerIndex; var width = 0, height = 0; this._odd_even = this._staggerIndex === StaggerIndex.STAGGERINDEX_ODD ? 1 : -1; if (this._staggerAxis === StaggerAxis.STAGGERAXIS_X) { this._diffX1 = (maptw - this._hexSideLength) / 2; this._diffY1 = 0; height = mapth * (layerH + 0.5); width = (maptw + this._hexSideLength) * Math.floor(layerW / 2) + maptw * (layerW % 2); } else { this._diffX1 = 0; this._diffY1 = (mapth - this._hexSideLength) / 2; width = maptw * (layerW + 0.5); height = (mapth + this._hexSideLength) * Math.floor(layerH / 2) + mapth * (layerH % 2); } this.node.setContentSize(width, height); } else if (this._layerOrientation === cc.TiledMap.Orientation.ISO) { var wh = layerW + layerH; this.node.setContentSize(maptw * 0.5 * wh, mapth * 0.5 * wh); } else { this.node.setContentSize(layerW * maptw, layerH * mapth); } // offset (after layer orientation is set); this._offset = cc.v2(layerInfo.offset.x, -layerInfo.offset.y); this._useAutomaticVertexZ = false; this._vertexZvalue = 0; this._syncAnchorPoint(); this._prepareToRender(); }, _updateCulling: function _updateCulling() { if (CC_EDITOR) { this.enableCulling(false); } else if (this._enableCulling) { // 此处修改 若不为首个layer 直接复用firstLayer的结果 // this._firstTmxLayer不为空时 表示当前layer不是首个layer var firstTmxLayer = this._firstTmxLayer; if (!!firstTmxLayer) { this._cullingRect = firstTmxLayer._cullingRect; this._cullingDirty = firstTmxLayer._cacheCullingDirty; return; } // 修改结束 this.node._updateWorldMatrix(); cc.Mat4.invert(_mat4_temp, this.node._worldMatrix); var rect = cc.visibleRect; var camera = cc.Camera.findCamera(this.node); if (camera) { _vec2_temp.x = 0; _vec2_temp.y = 0; _vec2_temp2.x = _vec2_temp.x + rect.width; _vec2_temp2.y = _vec2_temp.y + rect.height; camera.getScreenToWorldPoint(_vec2_temp, _vec2_temp); camera.getScreenToWorldPoint(_vec2_temp2, _vec2_temp2); cc.Vec2.transformMat4(_vec2_temp, _vec2_temp, _mat4_temp); cc.Vec2.transformMat4(_vec2_temp2, _vec2_temp2, _mat4_temp); this._updateViewPort(_vec2_temp.x, _vec2_temp.y, _vec2_temp2.x - _vec2_temp.x, _vec2_temp2.y - _vec2_temp.y); // 此处修改 若为首个layer 缓存_cullingDirty。 // _cullingDirty会在填充渲染数据后被改为false 所以需要缓存这里的结果 if (!firstTmxLayer) { this._cacheCullingDirty = this._cullingDirty; } // 修改结束 } } }, _traverseAllGrid: function _traverseAllGrid() { var tiles = this._tiles; var texGrids = this._texGrids; var tilesetIndexArr = this._tilesetIndexArr; var tilesetIndexToArrIndex = this._tilesetIndexToArrIndex = {}; var TiledMap = cc.TiledMap; var TileFlag = TiledMap.TileFlag; var FLIPPED_MASK = TileFlag.FLIPPED_MASK; var singleTexture = this._tiledMap.isSingleTexture(); tilesetIndexArr.length = 0; for (var i = 0; i < tiles.length; i++) { var gid = tiles[i]; if (gid === 0) continue; gid = (gid & FLIPPED_MASK) >>> 0; var grid = texGrids[gid]; if (!grid) { cc.error("CCTiledLayer:_traverseAllGrid grid is null, gid is:", gid); continue; } var tilesetIdx = grid.texId; if (tilesetIndexToArrIndex[tilesetIdx] !== undefined) continue; tilesetIndexToArrIndex[tilesetIdx] = tilesetIndexArr.length; tilesetIndexArr.push(tilesetIdx); // 此处修改 当只有一个图集时 可以直接停止遍历 if (singleTexture) { break; } // 修改结束 } } }); exports["default"] = _default; module.exports = exports["default"]; cc._RF.pop();