|
|
@@ -0,0 +1,712 @@
|
|
|
+
|
|
|
+const Constants = require('Constants');
|
|
|
+var reGameStates = require('GameStates');
|
|
|
+cc.Class({
|
|
|
+ extends: cc.Component,
|
|
|
+
|
|
|
+ properties: {
|
|
|
+ HighWay: {
|
|
|
+ // ATTRIBUTES:
|
|
|
+ default: [], // The default value will be used only when the component attaching
|
|
|
+ // to a node for the first time
|
|
|
+ type: cc.Prefab, // optional, default is typeof default
|
|
|
+ serializable: true, // optional, default is true
|
|
|
+ },
|
|
|
+
|
|
|
+ _tiledMap: {
|
|
|
+ default: null,
|
|
|
+ type: cc.TiledMap,
|
|
|
+ serializable: false,
|
|
|
+ visible: false,
|
|
|
+ },
|
|
|
+ _MainCamera: {
|
|
|
+ default: null,
|
|
|
+ type: cc.Camera,
|
|
|
+ serializable: false,
|
|
|
+ visible: false,
|
|
|
+ },
|
|
|
+
|
|
|
+ //触摸一开始的位置
|
|
|
+ _touchPosition: {
|
|
|
+ default: new cc.Vec2(),
|
|
|
+ visible: false,
|
|
|
+ serializable: false
|
|
|
+ },
|
|
|
+
|
|
|
+ _StartPosition: {
|
|
|
+ default: new cc.Vec2(),
|
|
|
+ serializable: false
|
|
|
+ },
|
|
|
+
|
|
|
+ _EndPosition: {
|
|
|
+ default: new cc.Vec2(),
|
|
|
+ serializable: false
|
|
|
+ },
|
|
|
+ //上一个位置
|
|
|
+ _LastPosition: {
|
|
|
+ default: new cc.Vec2(),
|
|
|
+ serializable: false
|
|
|
+ },
|
|
|
+
|
|
|
+ _highPath: {
|
|
|
+ default: [],
|
|
|
+ type: [cc.Node],
|
|
|
+ visible: false,
|
|
|
+ },
|
|
|
+
|
|
|
+ selectTouch: {
|
|
|
+ default: null,
|
|
|
+ type: cc.Node,
|
|
|
+ },
|
|
|
+ buildingTouch: {
|
|
|
+ default: null,
|
|
|
+ type: cc.Node,
|
|
|
+ },
|
|
|
+
|
|
|
+ //如果只初始化一次的话
|
|
|
+ // _isInitOnce: {
|
|
|
+ // default: false,
|
|
|
+ // visible: false,
|
|
|
+ // }
|
|
|
+
|
|
|
+ //如果自动移动
|
|
|
+ isAutoMove: { default: false, visible: false },
|
|
|
+
|
|
|
+ //是否创建斑马线
|
|
|
+ isCreateZebra: { default: true, visible: false },
|
|
|
+ // createStartTiledPos: null,
|
|
|
+ },
|
|
|
+
|
|
|
+ // LIFE-CYCLE CALLBACKS:
|
|
|
+
|
|
|
+ onLoad() {
|
|
|
+ this.highwayPool = new cc.NodePool();
|
|
|
+ let initCount = 50;
|
|
|
+ for (let i = 0; i < initCount; ++i) {
|
|
|
+ let highway = cc.instantiate(this.HighWay[0]); // 创建节点
|
|
|
+ this.highwayPool.put(highway); // 通过 putInPool 接口放入对象池
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ start() {
|
|
|
+ var self = this;
|
|
|
+ self._MainCamera = GlobalD.game.MainCamera;
|
|
|
+ self._tiledMap = GlobalD.TiledMap._tiledMap;
|
|
|
+
|
|
|
+ //获取对应的地图层级
|
|
|
+ this.buildLayer = this._tiledMap.getLayer('BuildsHighway');
|
|
|
+
|
|
|
+ self._game = GlobalD.game;
|
|
|
+
|
|
|
+ //初始化时候设置一下位置
|
|
|
+ //后面只要点击生成铺路就需要重置一下
|
|
|
+ let startTiledPos = GlobalD.TiledMap._tilePosFromLocation(self.node.getPosition());
|
|
|
+ let startEndPos = GlobalD.TiledMap._getTheMiddleLocationFromtilePos(startTiledPos);
|
|
|
+ self.node.setPosition(startEndPos);
|
|
|
+
|
|
|
+ //记录一下初始位置
|
|
|
+ // self.createStartTiledPos = startTiledPos;
|
|
|
+
|
|
|
+ self.node.on(cc.Node.EventType.TOUCH_MOVE, function (event) {
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ // cc.log(event.touch.getDelta());
|
|
|
+ GlobalD.GameControl._isBuildingMove = true;
|
|
|
+
|
|
|
+ var delta = event.touch.getDelta();
|
|
|
+
|
|
|
+
|
|
|
+ self._touchPosition.x += delta.x / self._MainCamera.zoomRatio;
|
|
|
+ self._touchPosition.y += delta.y / self._MainCamera.zoomRatio;
|
|
|
+ // self.node.setPosition(self._touchPosition);
|
|
|
+
|
|
|
+ let tiledPos = GlobalD.TiledMap._tilePosFromLocation(self._touchPosition);
|
|
|
+ //不相等的时候才绘制
|
|
|
+ if (tiledPos.sub(self._EndPosition).mag() != 0) {
|
|
|
+
|
|
|
+ // cc.log('tiledPostiledPostiledPos', tiledPos,self._EndPosition)
|
|
|
+ self._EndPosition = tiledPos;
|
|
|
+
|
|
|
+ if (self.buildingTouch.active) {
|
|
|
+ if (self._StartPosition.x == self._EndPosition.x
|
|
|
+ || self._StartPosition.y == self._EndPosition.y) {
|
|
|
+ self.onCancelCreateHighway();
|
|
|
+
|
|
|
+ self.onBuildingFromPath(self._StartPosition, self._EndPosition);
|
|
|
+
|
|
|
+ let endPos = GlobalD.TiledMap._getTheMiddleLocationFromtilePos(tiledPos);
|
|
|
+ self.node.setPosition(endPos);
|
|
|
+ }
|
|
|
+
|
|
|
+ } else {
|
|
|
+ let endPos = GlobalD.TiledMap._getTheMiddleLocationFromtilePos(tiledPos);
|
|
|
+
|
|
|
+ self.node.setPosition(endPos);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ //开启编辑UI
|
|
|
+ // self._game._ManageUIScript.onEditorialBuildings(self.node);
|
|
|
+
|
|
|
+ }, self.node);
|
|
|
+
|
|
|
+ self.node.on(cc.Node.EventType.TOUCH_START, function (event) {
|
|
|
+ // var touches = event.getTouches();
|
|
|
+ // var touchLoc = touches[0].getLocation();
|
|
|
+ self.isMoving = true;
|
|
|
+ // if(!self._isInitOnce){
|
|
|
+ // self._StartPosition = GlobalD.TiledMap._tilePosFromLocation(self.node.getPosition());
|
|
|
+ // }
|
|
|
+ //如果要选框就去掉这里
|
|
|
+ // self.onInitStartPosition();
|
|
|
+
|
|
|
+ self._touchPosition = self.node.getPosition();
|
|
|
+
|
|
|
+ // cc.log('self._StartPosition', self._StartPosition, self._touchPosition);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ }, self.node);
|
|
|
+
|
|
|
+ self.node.on(cc.Node.EventType.TOUCH_END, function (event) {
|
|
|
+
|
|
|
+ //起始触摸位置
|
|
|
+ GlobalD.GameControl._isBuildingMove = false;
|
|
|
+ }, self.node);
|
|
|
+ self.node.on(cc.Node.EventType.TOUCH_CANCEL, function (event) {
|
|
|
+
|
|
|
+ //起始触摸位置
|
|
|
+ GlobalD.GameControl._isBuildingMove = false;
|
|
|
+ }, self.node);
|
|
|
+
|
|
|
+ },
|
|
|
+
|
|
|
+ // 自动移动,在ManagerControl 里面调用
|
|
|
+ onAutoMove(delta) {
|
|
|
+
|
|
|
+ this.isAutoMove = true;
|
|
|
+
|
|
|
+ let self = this;
|
|
|
+ self._touchPosition.x += delta.x;
|
|
|
+ self._touchPosition.y += delta.y;
|
|
|
+ let tiledPos = GlobalD.TiledMap._tilePosFromLocation(self._touchPosition);
|
|
|
+ //不相等的时候才绘制
|
|
|
+ if (tiledPos.sub(self._EndPosition).mag() != 0) {
|
|
|
+ self._EndPosition = tiledPos;
|
|
|
+ if (self.buildingTouch.active) {
|
|
|
+ if (self._StartPosition.x == self._EndPosition.x
|
|
|
+ || self._StartPosition.y == self._EndPosition.y) {
|
|
|
+ self.onCancelCreateHighway();
|
|
|
+ self.onBuildingFromPath(self._StartPosition, self._EndPosition);
|
|
|
+ let endPos = GlobalD.TiledMap._getTheMiddleLocationFromtilePos(tiledPos);
|
|
|
+ self.node.setPosition(endPos);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ let endPos = GlobalD.TiledMap._getTheMiddleLocationFromtilePos(tiledPos);
|
|
|
+ self.node.setPosition(endPos);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ onCancleAutoMove() {
|
|
|
+ this.isAutoMove = false;
|
|
|
+
|
|
|
+ },
|
|
|
+
|
|
|
+ //隐藏时候铺路的状态
|
|
|
+ onHideSetTouchState() {
|
|
|
+ if (this.create1 || this.create2) {
|
|
|
+ let _cancel1 = this.selectTouch.getChildByName('Cancel').getComponent(cc.Button);
|
|
|
+ let _cancel2 = this.buildingTouch.getChildByName('Cancel').getComponent(cc.Button);
|
|
|
+ _cancel1.interactable = true;
|
|
|
+ _cancel1.enableAutoGrayEffect = false;
|
|
|
+ _cancel2.interactable = true;
|
|
|
+ _cancel2.enableAutoGrayEffect = false;
|
|
|
+ if (this.create1)
|
|
|
+ this.create1.stopAllActions();
|
|
|
+ if (this.create2)
|
|
|
+ this.create2.stopAllActions();
|
|
|
+ }
|
|
|
+
|
|
|
+ },
|
|
|
+ //新手教程时候设置铺路状态
|
|
|
+ onSetTouchState() {
|
|
|
+
|
|
|
+ if (!task.virtualShadowPos) return;
|
|
|
+
|
|
|
+ if (this.selectTouch.active) {
|
|
|
+ let _cancel = this.selectTouch.getChildByName('Cancel').getComponent(cc.Button);
|
|
|
+ _cancel.interactable = false;
|
|
|
+ _cancel.enableAutoGrayEffect = true;
|
|
|
+ this.create1 = this.selectTouch.getChildByName('Create');
|
|
|
+ this.create1.stopAllActions();
|
|
|
+ var s = cc.sequence(cc.scaleTo(0.6, 0.9), cc.scaleTo(0.9, 0.6));
|
|
|
+ var repeat = cc.repeatForever(s);
|
|
|
+ this.create1.runAction(repeat);
|
|
|
+
|
|
|
+ } else {
|
|
|
+ let _cancel = this.buildingTouch.getChildByName('Cancel').getComponent(cc.Button);
|
|
|
+ _cancel.interactable = false;
|
|
|
+ _cancel.enableAutoGrayEffect = true;
|
|
|
+ this.create2 = this.buildingTouch.getChildByName('Create');
|
|
|
+ this.create2.stopAllActions();
|
|
|
+ var s = cc.sequence(cc.scaleTo(0.6, 0.9), cc.scaleTo(0.9, 0.6));
|
|
|
+ var repeat = cc.repeatForever(s);
|
|
|
+ this.create2.runAction(repeat);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ },
|
|
|
+ //切换状态
|
|
|
+ onSwitchBuidingTouch() {
|
|
|
+
|
|
|
+ //如果是新手指引的情况下,需要显示对应的遮挡模板
|
|
|
+ if (task.virtualShadowPos) {
|
|
|
+ let _curentTiled = GlobalD.TiledMap._tilePosFromLocation(this.node.getPosition());;
|
|
|
+ if (_curentTiled.sub(task.virtualShadowPos).mag() !== 0) {
|
|
|
+
|
|
|
+ // console.error('没有移动到指定位置:', _curentTiled, task.virtualShadowPos);
|
|
|
+ cc.loader.loadRes('resUI/ShowNotEnoughMoney', function (err, texture) {
|
|
|
+ var prefab = cc.instantiate(texture);
|
|
|
+ prefab.getComponent('ShowNotEnoughMoney').Text('请移动到虚影的<起始>位置!');
|
|
|
+ cc.find('Canvas').getChildByName('UICamera').addChild(prefab);
|
|
|
+ }.bind(this));
|
|
|
+ return;
|
|
|
+ } else {
|
|
|
+ // console.log(task.virtualTarget);
|
|
|
+ let _taskHighway = task.getTaskNode('taskPrefabTiledTileHighway');
|
|
|
+
|
|
|
+ if (_taskHighway) {
|
|
|
+ _taskHighway.getChildByName('Arrow').active = false;
|
|
|
+ _taskHighway.getChildByName('Hand1').active = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ this.selectTouch.active = false;
|
|
|
+ this.buildingTouch.active = true;
|
|
|
+
|
|
|
+ //设置一下状态
|
|
|
+ this.onSetTouchState();
|
|
|
+ //设置斑马线
|
|
|
+ this.isCreateZebra = true;
|
|
|
+ // this._isInitOnce = true;
|
|
|
+ // 记录编辑状态时候的初始位置
|
|
|
+ this.onInitStartPosition();
|
|
|
+ },
|
|
|
+ // 重置下初始位置
|
|
|
+ onInitStartPosition() {
|
|
|
+ this._StartPosition = GlobalD.TiledMap._tilePosFromLocation(this.node.getPosition());
|
|
|
+
|
|
|
+ // //如果是新手指引的情况下,需要显示对应的遮挡模板
|
|
|
+ // if (task.isMushBuildState) {
|
|
|
+ // let _confirmButton = this.HighwayBuildingNode.getChildByName('SelectTouch').getChildByName('Create');
|
|
|
+ // let _taskNodes = [];
|
|
|
+ // _taskNodes.push(_confirmButton);
|
|
|
+ // task.onInitTaskMask(_taskNodes);
|
|
|
+ // }
|
|
|
+ },
|
|
|
+ //相同一个点的时候点的时候
|
|
|
+ onBuildingFromPathEqual(tiledPos) {
|
|
|
+ // cc.log('onBuildingFromPathEqual');
|
|
|
+ if (!GlobalD.TiledMap.getTiledTileAt(tiledPos.x, tiledPos.y)) {
|
|
|
+
|
|
|
+ let highwayTemp = null;
|
|
|
+
|
|
|
+ if (this.highwayPool.size() > 0) { // 通过 size 接口判断对象池中是否有空闲的对象
|
|
|
+ highwayTemp = this.highwayPool.get();
|
|
|
+ } else { // 如果没有空闲对象,也就是对象池中备用对象不够时,我们就用 cc.instantiate 重新创建
|
|
|
+ highwayTemp = cc.instantiate(this.HighWay[0]);
|
|
|
+ // cc.log('重新创建')
|
|
|
+ }
|
|
|
+ highwayTemp.parent = this.buildLayer.node;
|
|
|
+ let tiledTile = highwayTemp.addComponent('TiledTile');
|
|
|
+ tiledTile.x = tiledPos.x;
|
|
|
+ tiledTile.y = tiledPos.y;
|
|
|
+
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ //不同点的时候
|
|
|
+ //在路径上面创建公路预制
|
|
|
+ onBuildingFromPath(start_tiledPos, end_tiledPos) {
|
|
|
+
|
|
|
+ //移动了就不创建斑马线了
|
|
|
+ this.isCreateZebra = false;
|
|
|
+
|
|
|
+ let _highwayStart = null;
|
|
|
+ let isChangeHighwayStart = false;
|
|
|
+
|
|
|
+ let spawnPos = 0;
|
|
|
+
|
|
|
+ //最后一个点判断是否重合
|
|
|
+ let EndPos = [];
|
|
|
+ let tempMaxY = 0;
|
|
|
+ let tempMinY = 0;
|
|
|
+ if (start_tiledPos.y > end_tiledPos.y) {
|
|
|
+ tempMaxY = start_tiledPos.y;
|
|
|
+ tempMinY = end_tiledPos.y;
|
|
|
+ } else {
|
|
|
+ tempMaxY = end_tiledPos.y;
|
|
|
+ tempMinY = start_tiledPos.y;
|
|
|
+ }
|
|
|
+ let tempY = end_tiledPos.y - start_tiledPos.y;
|
|
|
+ for (let i = tempMinY; i <= tempMaxY; i++) {
|
|
|
+ spawnPos = cc.v2(start_tiledPos.x, i);
|
|
|
+ //写入index 数组
|
|
|
+ GlobalD.TiledMap.setIndexArray(spawnPos, EndPos);
|
|
|
+
|
|
|
+ // if (!GlobalD.TiledMap.getTiledTileAt(spawnPos.x, spawnPos.y))
|
|
|
+ {
|
|
|
+ // cc.log('绘制Y', spawnPos)
|
|
|
+ let highwayTemp = null;
|
|
|
+
|
|
|
+ if (this.highwayPool.size() > 0) { // 通过 size 接口判断对象池中是否有空闲的对象
|
|
|
+ highwayTemp = this.highwayPool.get();
|
|
|
+ } else { // 如果没有空闲对象,也就是对象池中备用对象不够时,我们就用 cc.instantiate 重新创建
|
|
|
+ highwayTemp = cc.instantiate(this.HighWay[0]);
|
|
|
+ // cc.log('重新创建')
|
|
|
+ }
|
|
|
+
|
|
|
+ highwayTemp.parent = this.buildLayer.node;
|
|
|
+ let tiledTile = highwayTemp.addComponent('TiledTile');
|
|
|
+ tiledTile.x = spawnPos.x;
|
|
|
+ tiledTile.y = spawnPos.y;
|
|
|
+
|
|
|
+ if (GlobalD.game.getManageGameIndexArrayAt(tiledTile)) {
|
|
|
+ highwayTemp.getComponent('TipSprite').onSetRedSpriteFrame();
|
|
|
+ }
|
|
|
+ //没有重复的时候
|
|
|
+
|
|
|
+ // cc.log('设置Y值:', reGameStates.HighwayType.moveY);
|
|
|
+ highwayTemp.getComponent('HighwayInfo').onChangeHighwayStyles(reGameStates.HighwayType.moveY);
|
|
|
+
|
|
|
+ //记录第一个临时节点
|
|
|
+ if (!_highwayStart) {
|
|
|
+ _highwayStart = highwayTemp;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ let tempMaxX = 0;
|
|
|
+ let tempMinX = 0;
|
|
|
+ if (start_tiledPos.x > end_tiledPos.x) {
|
|
|
+ tempMaxX = start_tiledPos.x;
|
|
|
+ tempMinX = end_tiledPos.x;
|
|
|
+ } else {
|
|
|
+ tempMaxX = end_tiledPos.x;
|
|
|
+ tempMinX = start_tiledPos.x;
|
|
|
+ }
|
|
|
+
|
|
|
+ for (let i = tempMinX; i <= tempMaxX; i++) {
|
|
|
+ spawnPos = cc.v2(i, start_tiledPos.y + tempY);
|
|
|
+ //这里判断最大最小点是否重合
|
|
|
+ if (!GlobalD.TiledMap.getIndexArrayAt(spawnPos, EndPos)) {
|
|
|
+ // cc.log('绘制x', spawnPos)
|
|
|
+ let highwayTemp = null;
|
|
|
+ if (this.highwayPool.size() > 0) { // 通过 size 接口判断对象池中是否有空闲的对象
|
|
|
+ highwayTemp = this.highwayPool.get();
|
|
|
+ } else { // 如果没有空闲对象,也就是对象池中备用对象不够时,我们就用 cc.instantiate 重新创建
|
|
|
+ highwayTemp = cc.instantiate(this.HighWay[0]);
|
|
|
+ // cc.log('重新创建')
|
|
|
+ }
|
|
|
+ // let highwayTemp = cc.instantiate(this.HighWay[0]);
|
|
|
+ highwayTemp.parent = this.buildLayer.node;
|
|
|
+ let tiledTile = highwayTemp.addComponent('TiledTile');
|
|
|
+ tiledTile.x = spawnPos.x;
|
|
|
+ tiledTile.y = spawnPos.y;
|
|
|
+ // this._highPath.push(highwayTemp);
|
|
|
+
|
|
|
+ if (GlobalD.game.getManageGameIndexArrayAt(tiledTile)) {
|
|
|
+ highwayTemp.getComponent('TipSprite').onSetRedSpriteFrame();
|
|
|
+ }
|
|
|
+
|
|
|
+ highwayTemp.getComponent('HighwayInfo').onChangeHighwayStyles(reGameStates.HighwayType.moveX);
|
|
|
+
|
|
|
+
|
|
|
+ if (_highwayStart && !isChangeHighwayStart) {
|
|
|
+ // cc.log('修正第一个起始点。');
|
|
|
+ isChangeHighwayStart = true;
|
|
|
+ _highwayStart.getComponent('HighwayInfo').onChangeHighwayStyles(reGameStates.HighwayType.moveX);
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ },
|
|
|
+
|
|
|
+ //取消创建
|
|
|
+ //对象池回收
|
|
|
+ onCancelCreateHighway() {
|
|
|
+
|
|
|
+ //删除对应层的子节点
|
|
|
+ let tempNode = this.buildLayer.node.children;
|
|
|
+ let length = tempNode.length;
|
|
|
+ for (let i = length - 1; i >= 0; i--) {
|
|
|
+
|
|
|
+ //设置回默认的提示图片
|
|
|
+ tempNode[i].getComponent('TipSprite').onReset();
|
|
|
+ tempNode[i].getComponent('HighwayInfo').onChangeHighwayStyles(reGameStates.HighwayType.none);
|
|
|
+
|
|
|
+ if (tempNode[i].getComponent('TiledTile')) {
|
|
|
+ tempNode[i].removeComponent('TiledTile');
|
|
|
+ }
|
|
|
+ // 和初始化时的方法一样,将节点放进对象池,这个方法会同时调用节点的 removeFromParent
|
|
|
+ this.highwayPool.put(tempNode[i]);
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ //创建道路
|
|
|
+ onCreateHighway() {
|
|
|
+
|
|
|
+ //获取最后建造公路的层级
|
|
|
+ this.HighwayLayer = this._tiledMap.getLayer('Highway');
|
|
|
+
|
|
|
+ if (this.isCreateZebra) {
|
|
|
+ // cc.log('创建斑马线,', this._StartPosition);
|
|
|
+ //检测新手引导时候道路,不设计一个点
|
|
|
+ if (task.isMushBuildState) {
|
|
|
+ console.error('新手教程下不创建单个公路');
|
|
|
+ cc.loader.loadRes('resUI/ShowNotEnoughMoney', function (err, texture) {
|
|
|
+ var prefab = cc.instantiate(texture);
|
|
|
+ prefab.getComponent('ShowNotEnoughMoney').Text('请移动到虚影的<终点>位置!');
|
|
|
+ cc.find('Canvas').getChildByName('UICamera').addChild(prefab);
|
|
|
+ }.bind(this));
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ let buildIndex = GlobalD.TiledMap.getIndex(this._StartPosition);
|
|
|
+ if (GlobalD.game.onGetHighwayFromIndex(buildIndex)) {
|
|
|
+
|
|
|
+ let tempNode = this.HighwayLayer.node.children;
|
|
|
+ let length = tempNode.length;
|
|
|
+ for (let i = length - 1; i >= 0; i--) {
|
|
|
+ let tiledTile = tempNode[i].getComponent('TiledTile');
|
|
|
+ let tiledVector2 = new cc.Vec2(tiledTile.x, tiledTile.y);
|
|
|
+ let tiledIndex = GlobalD.TiledMap.getIndex(tiledVector2);
|
|
|
+
|
|
|
+ if (tiledIndex === buildIndex) {
|
|
|
+ let _highwayInfo = tempNode[i].getComponent('HighwayInfo');
|
|
|
+ // cc.log(_highwayInfo);
|
|
|
+ let _switchHighwayType = reGameStates.HighwayType.none;
|
|
|
+ if (_highwayInfo.currenHighwayType == reGameStates.HighwayType.moveX) {
|
|
|
+ _switchHighwayType = reGameStates.HighwayType.ZebraCrossingX;
|
|
|
+ } else if (_highwayInfo.currenHighwayType == reGameStates.HighwayType.moveY) {
|
|
|
+ _switchHighwayType = reGameStates.HighwayType.ZebraCrossingY;
|
|
|
+ // cc.log('Y', _switchHighwayType)
|
|
|
+ }
|
|
|
+ //修改节点样式
|
|
|
+ _highwayInfo.onChangeHighwayStyles(_switchHighwayType);
|
|
|
+
|
|
|
+ //更新公路样式
|
|
|
+ GlobalD.game.onUpdateDifferentRoadStyles({
|
|
|
+ _highwayType: _switchHighwayType,
|
|
|
+ _roadIndex: buildIndex,
|
|
|
+ });
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ } else {//没有就创建
|
|
|
+
|
|
|
+ let tiledVector2 = this._StartPosition;
|
|
|
+ let highwayTemp = cc.instantiate(this.HighWay[1]);
|
|
|
+ highwayTemp.parent = this.HighwayLayer.node;
|
|
|
+
|
|
|
+ let tiledTile = highwayTemp.addComponent('TiledTile');
|
|
|
+ tiledTile.x = tiledVector2.x;
|
|
|
+ tiledTile.y = tiledVector2.y;
|
|
|
+
|
|
|
+ // cc.log('onCreateHighway');
|
|
|
+ AStar.setMapSolid(tiledVector2.x, tiledVector2.y, 0);
|
|
|
+
|
|
|
+ // _buildId ==0 是公路
|
|
|
+ let _buildId = 0;
|
|
|
+ let occupyTemp = cc.v2(_buildId, buildIndex);
|
|
|
+ GlobalD.game.OccupyArray.push(occupyTemp);
|
|
|
+
|
|
|
+ //添加公路样式
|
|
|
+ GlobalD.game.onCreateDifferentRoadStyles({
|
|
|
+ _buildId: _buildId,
|
|
|
+ _highwayType: reGameStates.HighwayType.ZebraCrossingX,
|
|
|
+ _roadIndex: buildIndex,
|
|
|
+ _hightwayNode: highwayTemp
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ } else {
|
|
|
+
|
|
|
+ let tempNode = this.buildLayer.node.children;
|
|
|
+ let length = tempNode.length;
|
|
|
+ //检测新手引导时候道路,检测最后一个点
|
|
|
+ //如果是新手指引的情况下,需要显示对应的遮挡模板
|
|
|
+ if (task.virtualShadowPosEnd) {
|
|
|
+ let _taskTiledTile = tempNode[length - 1].getComponent('TiledTile');
|
|
|
+
|
|
|
+
|
|
|
+ if (task.virtualShadowPosEnd.sub(cc.v2(_taskTiledTile.x, _taskTiledTile.y)).mag() !== 0) {
|
|
|
+
|
|
|
+ console.error('没有移动到终点位置:', cc.v2(_taskTiledTile.x, _taskTiledTile.y), task.virtualShadowPosEnd);
|
|
|
+ cc.loader.loadRes('resUI/ShowNotEnoughMoney', function (err, texture) {
|
|
|
+ var prefab = cc.instantiate(texture);
|
|
|
+ prefab.getComponent('ShowNotEnoughMoney').Text('请移动到虚影的<终点>位置!');
|
|
|
+ cc.find('Canvas').getChildByName('UICamera').addChild(prefab);
|
|
|
+ }.bind(this));
|
|
|
+ return;
|
|
|
+ } else {
|
|
|
+ //铺路教程成功
|
|
|
+ //移除虚影路径
|
|
|
+ task.removeTaskNode('taskPrefabTiledTileHighway');
|
|
|
+ //设置任务状态
|
|
|
+ task.onShadowArchitectureReset();
|
|
|
+ dialogmanager.init(task.Canvas, function () {
|
|
|
+ dialogmanager.paveEnd();
|
|
|
+ }.bind(this));
|
|
|
+ dialogmanager.setOnCloseDialog(function () {
|
|
|
+ task.showManagerhide();
|
|
|
+ // task.setListView(18);
|
|
|
+ task._setTaskIconCountClick(1);
|
|
|
+
|
|
|
+ setTimeout(() => {
|
|
|
+ task.taskCallBack();
|
|
|
+ }, 500);
|
|
|
+ }.bind(this));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ for (let i = length - 1; i >= 0; i--) {
|
|
|
+ let tiledTile = tempNode[i].getComponent('TiledTile');
|
|
|
+
|
|
|
+ //获取临时对象里面的公路脚本信息
|
|
|
+ let _highwayInfoTemp = tempNode[i].getComponent('HighwayInfo');
|
|
|
+
|
|
|
+ let tiledVector2 = new cc.Vec2(tiledTile.x, tiledTile.y);
|
|
|
+ //重复的道路模块不创建
|
|
|
+ if (!GlobalD.game.getManageGameIndexArrayAt(tiledVector2)) {
|
|
|
+ let highwayTemp = cc.instantiate(this.HighWay[1]);
|
|
|
+ highwayTemp.parent = this.HighwayLayer.node;
|
|
|
+
|
|
|
+ let tiledTile = highwayTemp.addComponent('TiledTile');
|
|
|
+ tiledTile.x = tiledVector2.x;
|
|
|
+ tiledTile.y = tiledVector2.y;
|
|
|
+
|
|
|
+ // cc.log('onCreateHighway');
|
|
|
+ AStar.setMapSolid(tiledVector2.x, tiledVector2.y, 0);
|
|
|
+
|
|
|
+ let index = GlobalD.TiledMap.getIndex(tiledVector2);
|
|
|
+ // _buildId ==0 是公路
|
|
|
+ let _buildId = 0;
|
|
|
+ let occupyTemp = cc.v2(_buildId, index);
|
|
|
+ GlobalD.game.OccupyArray.push(occupyTemp);
|
|
|
+
|
|
|
+ // cc.log('创建时候的值:', _highwayInfoTemp.currenHighwayType)
|
|
|
+ // highwayTemp.getComponent('HighwayInfo').onChangeHighwayStyles(_highwayInfoTemp.currenHighwayType);
|
|
|
+
|
|
|
+ //添加公路样式
|
|
|
+ GlobalD.game.onCreateDifferentRoadStyles({
|
|
|
+ _buildId: _buildId,
|
|
|
+ _highwayType: _highwayInfoTemp.currenHighwayType,
|
|
|
+ _roadIndex: index,
|
|
|
+ _hightwayNode: highwayTemp
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ else {
|
|
|
+ // cc.log('有道路重复!', tiledVector2);
|
|
|
+ let buildIndex = GlobalD.TiledMap.getIndex(tiledVector2);
|
|
|
+ let tempNode = this.HighwayLayer.node.children;
|
|
|
+ let length = tempNode.length;
|
|
|
+ for (let i = length - 1; i >= 0; i--) {
|
|
|
+ let tiledTile = tempNode[i].getComponent('TiledTile');
|
|
|
+ let tiledVector2 = new cc.Vec2(tiledTile.x, tiledTile.y);
|
|
|
+ let tiledIndex = GlobalD.TiledMap.getIndex(tiledVector2);
|
|
|
+
|
|
|
+ if (tiledIndex === buildIndex) {
|
|
|
+ let _highwayInfo = tempNode[i].getComponent('HighwayInfo');
|
|
|
+ //修改节点样式
|
|
|
+ _highwayInfo.onChangeHighwayStyles(_highwayInfoTemp.currenHighwayType);
|
|
|
+
|
|
|
+ //更新公路样式
|
|
|
+ GlobalD.game.onUpdateDifferentRoadStyles({
|
|
|
+ _highwayType: _highwayInfoTemp.currenHighwayType,
|
|
|
+ _roadIndex: buildIndex,
|
|
|
+ });
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ //清空回收临时对象
|
|
|
+ this.onCancelCreateHighway();
|
|
|
+
|
|
|
+ //统一取消
|
|
|
+ this.onHide();
|
|
|
+
|
|
|
+ // if (this.isCreateZebra) {
|
|
|
+ // this.onHide();
|
|
|
+ // } else {
|
|
|
+ // //成功创建后,重置下初始位置
|
|
|
+ // this.onInitStartPosition();
|
|
|
+ // }
|
|
|
+
|
|
|
+ },
|
|
|
+
|
|
|
+ //删除
|
|
|
+ onDelete() {
|
|
|
+ this.onCancelCreateHighway();
|
|
|
+ this.highwayPool.clear();// 调用这个方法就可以清空对象池
|
|
|
+ this.node.destroy();
|
|
|
+ },
|
|
|
+ //隐藏
|
|
|
+ onHide() {
|
|
|
+ this.onCancelCreateHighway();
|
|
|
+ this.node.active = false;
|
|
|
+ // this._isInitOnce = false;
|
|
|
+
|
|
|
+ //绿色选中框选中要下面两个代码切换
|
|
|
+ this.selectTouch.active = true;
|
|
|
+ this.buildingTouch.active = false;
|
|
|
+
|
|
|
+
|
|
|
+ GlobalD.game.onClearCurrentBuildingTarget();
|
|
|
+
|
|
|
+ //显示铺路引导
|
|
|
+ task.onTaskPaveRoadsMask();
|
|
|
+ },
|
|
|
+ onDisable() {
|
|
|
+ //隐藏时候重置下状态
|
|
|
+ this.onHideSetTouchState();
|
|
|
+ //收起底部菜单栏
|
|
|
+ GlobalD.game._ManageUIScript.onBottomMenuView(true);
|
|
|
+ },
|
|
|
+
|
|
|
+ onEnable() {
|
|
|
+
|
|
|
+ // console.log(111);
|
|
|
+ //修改按钮状态
|
|
|
+ this.onSetTouchState();
|
|
|
+ //收起底部菜单栏
|
|
|
+ GlobalD.game._ManageUIScript.onBottomMenuView(false);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ // update (dt) {},
|
|
|
+});
|