ManageClearNode.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343
  1. var reGameStates = require('GameStates');
  2. var ClearType = cc.Enum({
  3. Hammer: -1,
  4. Shovel: -1,
  5. });
  6. cc.Class({
  7. extends: cc.Component,
  8. properties: {
  9. clearType: {
  10. default: ClearType.Hammer,
  11. type: cc.Enum(ClearType),
  12. },
  13. _EndPosition: {
  14. default: new cc.Vec2(),
  15. serializable: false,
  16. visible: false,
  17. },
  18. labelTip: {
  19. default: null,
  20. type: cc.Label,
  21. },
  22. labelTipString: {
  23. default: '移动可拆除对应建筑',
  24. },
  25. //记录节点
  26. targetBuildingsInfo: { default: null, visible: false },
  27. //移除的提示预制
  28. removeTipPrefab: { default: null, type: cc.Prefab },
  29. //记录要删除的节点
  30. selectedTarget: { default: [], type: cc.Node, visible: false },
  31. //记录选中的index
  32. selectedTargetIndex: { default: [], type: cc.Integer, visible: false },
  33. isMoveState: { default: true, visible: false },
  34. MoveStartNode: cc.Node,
  35. MoveEndNode: cc.Node,
  36. },
  37. // LIFE-CYCLE CALLBACKS:
  38. // onLoad () {},
  39. start() {
  40. //获取对应的地图层级
  41. this.buildLayer = GlobalD.TiledMap._tiledMap.getLayer('BuildsHighway');
  42. GlobalD.game._ManageUIScript.onBottomMenuView(false);
  43. var self = this;
  44. self._MainCamera = GlobalD.game.MainCamera;
  45. self._tiledMap = GlobalD.TiledMap._tiledMap;
  46. //获取最后建造公路的层级
  47. self.HighwayLayer = self._tiledMap.getLayer('Highway');
  48. self._game = GlobalD.game;
  49. //初始化时候设置一下位置
  50. //后面只要点击生成铺路就需要重置一下
  51. let startTiledPos = GlobalD.TiledMap._tilePosFromLocation(self.node.getPosition());
  52. let startEndPos = GlobalD.TiledMap._getTheMiddleLocationFromtilePos(startTiledPos);
  53. self.node.setPosition(startEndPos);
  54. self._EndPosition = startTiledPos;
  55. if (ClearType.Hammer === self.clearType) {
  56. //锤子类型
  57. let startIndex = GlobalD.TiledMap.getIndex(startTiledPos);
  58. let buildingsTiledMapStart = GlobalD.game.onGetBuildingsTiledMapUnitFromIndex(startIndex);
  59. if (buildingsTiledMapStart) {
  60. self.labelTip.string = '是否移除' + buildingsTiledMapStart.buildInfo.buildingName;
  61. self.targetBuildingsInfo = buildingsTiledMapStart;
  62. }
  63. else {
  64. self.labelTip.string = self.labelTipString;
  65. self.targetBuildingsInfo = null;
  66. }
  67. } else if (ClearType.Shovel === self.clearType) {
  68. //铲子类型
  69. }
  70. self.node.on(cc.Node.EventType.TOUCH_MOVE, function (event) {
  71. GlobalD.GameControl._isBuildingMove = true;
  72. var delta = event.touch.getDelta();
  73. self._touchPosition.x += delta.x / self._MainCamera.zoomRatio;
  74. self._touchPosition.y += delta.y / self._MainCamera.zoomRatio;
  75. let tiledPos = GlobalD.TiledMap._tilePosFromLocation(self._touchPosition);
  76. // //不相等的时候才绘制
  77. if (tiledPos.sub(self._EndPosition).mag() != 0) {
  78. // cc.log('tiledPos',tiledPos);
  79. self._EndPosition = tiledPos;
  80. self._SelectHighwayTiled(tiledPos);
  81. // let endPos = GlobalD.TiledMap._getTheMiddleLocationFromtilePos(tiledPos);
  82. // self.node.setPosition(endPos);
  83. // if (self.isMoveState) return;
  84. // if (ClearType.Shovel === self.clearType) {
  85. // let buildIndex = GlobalD.TiledMap.getIndex(tiledPos);
  86. // //铲子类型
  87. // if (GlobalD.game.onGetHighwayFromIndex(buildIndex)) {
  88. // let tempNode = self.HighwayLayer.node.children;
  89. // let length = tempNode.length;
  90. // for (let i = length - 1; i >= 0; i--) {
  91. // let tiledTile = tempNode[i].getComponent('TiledTile');
  92. // let tiledVector2 = new cc.Vec2(tiledTile.x, tiledTile.y);
  93. // let tiledIndex = GlobalD.TiledMap.getIndex(tiledVector2);
  94. // if (tiledIndex === buildIndex) {
  95. // let highwayTemp = cc.instantiate(self.removeTipPrefab);
  96. // highwayTemp.parent = self.buildLayer.node;
  97. // let tiledTile = highwayTemp.addComponent('TiledTile');
  98. // tiledTile.x = tiledVector2.x;
  99. // tiledTile.y = tiledVector2.y;
  100. // //记录要删除的节点
  101. // self.selectedTarget.push(tempNode[i]);
  102. // return true;
  103. // }
  104. // }
  105. // }
  106. // }
  107. }
  108. }, self.node);
  109. self.node.on(cc.Node.EventType.TOUCH_START, function (event) {
  110. self.isMoving = true;
  111. self._touchPosition = self.node.getPosition();
  112. }, self.node);
  113. self.node.on(cc.Node.EventType.TOUCH_END, function (event) {
  114. //起始触摸位置
  115. GlobalD.GameControl._isBuildingMove = false;
  116. //不是锤子类型,返回
  117. if (ClearType.Hammer !== self.clearType) return;
  118. // cc.log(GlobalD.game.buildingsTiledMapUnit);
  119. let buildIndex = GlobalD.TiledMap.getIndex(self._EndPosition);
  120. let _targetBuildingsInfo = GlobalD.game.onGetBuildingsTiledMapUnitFromIndex(buildIndex);
  121. // cc.log(buildIndex, _targetBuildingsInfo);
  122. if (_targetBuildingsInfo) {
  123. if(_targetBuildingsInfo.buildInfo.buildType == reGameStates.BuildType.HolyFarmland){
  124. self.labelTip.string = '神农农田不可移除!';
  125. }else{
  126. self.labelTip.string = '是否移除' + _targetBuildingsInfo.buildInfo.buildingName;
  127. }
  128. self.targetBuildingsInfo = _targetBuildingsInfo;
  129. }
  130. else {
  131. self.labelTip.string = self.labelTipString;
  132. self.targetBuildingsInfo = null;
  133. }
  134. }, self.node);
  135. self.node.on(cc.Node.EventType.TOUCH_CANCEL, function (event) {
  136. //起始触摸位置
  137. GlobalD.GameControl._isBuildingMove = false;
  138. }, self.node);
  139. },
  140. //拆除建筑时候调用
  141. onRemoveThisItem() {
  142. if (!this.targetBuildingsInfo) return;
  143. //todo 如果是农田,不可移除
  144. if(this.targetBuildingsInfo.buildInfo.buildType == reGameStates.BuildType.HolyFarmland){
  145. this.labelTip.string = '神农农田不可移除!';
  146. console.log("神农农田不可移除!");
  147. return;
  148. }
  149. this.targetBuildingsInfo.onClearSelfResetFromType();
  150. //清除时候,消除建筑物的影响力
  151. GlobalD.game.onClearBuildingsEffect(this.targetBuildingsInfo);
  152. //清除底部提示区域
  153. GlobalD.game.onClearSpawnEditorBuildingTip();
  154. this.targetBuildingsInfo.node.destroy();
  155. GlobalD.game.removeBuilding(this.targetBuildingsInfo);
  156. this.labelTip.string = this.labelTipString;
  157. this.targetBuildingsInfo = null;
  158. // cc.log('removeEnd', GlobalD.game.buildingsTiledMapUnit);
  159. }
  160. ,
  161. onCancleSelf() {
  162. this.node.active = false;
  163. GlobalD.game._ManageUIScript.onBottomMenuView(true);
  164. this._CancelClearHighway();
  165. },
  166. //取消清除
  167. _CancelClearHighway() {
  168. if (this.isMoveState) {
  169. return;
  170. }
  171. //删除对应层的子节点
  172. let tempNode = this.buildLayer.node.children;
  173. let length = tempNode.length;
  174. for (let i = length - 1; i >= 0; i--) {
  175. if (tempNode[i].getComponent('TiledTile')) {
  176. tempNode[i].removeComponent('TiledTile');
  177. }
  178. tempNode[i].destroy();
  179. }
  180. this.selectedTargetIndex = [];
  181. //清空选中的节点的数组
  182. this.selectedTarget = [];
  183. },
  184. _isShowMoveSelectFrame() {
  185. this.isMoveState = false;
  186. this.MoveStartNode.active = false;
  187. this.MoveEndNode.active = true;
  188. this._SelectHighwayTiled(this._EndPosition);
  189. },
  190. _SelectHighwayTiled(tiledPos) {
  191. let endPos = GlobalD.TiledMap._getTheMiddleLocationFromtilePos(tiledPos);
  192. this.node.setPosition(endPos);
  193. if (this.isMoveState) return;
  194. if (ClearType.Shovel === this.clearType) {
  195. let buildIndex = GlobalD.TiledMap.getIndex(tiledPos);
  196. //铲子类型
  197. if (GlobalD.game.onGetHighwayFromIndex(buildIndex)) {
  198. let tempNode = this.HighwayLayer.node.children;
  199. let length = tempNode.length;
  200. for (let i = length - 1; i >= 0; i--) {
  201. let tiledTile = tempNode[i].getComponent('TiledTile');
  202. let tiledVector2 = new cc.Vec2(tiledTile.x, tiledTile.y);
  203. let tiledIndex = GlobalD.TiledMap.getIndex(tiledVector2);
  204. if (tiledIndex === buildIndex) {
  205. // cc.log(this.selectedTargetIndex,tiledIndex)
  206. if (GlobalD.TiledMap.getIndexArrayAt(tiledVector2, this.selectedTargetIndex)) {
  207. // cc.log('存在目标数组了!');
  208. return;
  209. }
  210. let highwayTemp = cc.instantiate(this.removeTipPrefab);
  211. highwayTemp.parent = this.buildLayer.node;
  212. let tiledTile = highwayTemp.addComponent('TiledTile');
  213. tiledTile.x = tiledVector2.x;
  214. tiledTile.y = tiledVector2.y;
  215. //记录选中的index
  216. this.selectedTargetIndex.push(tiledIndex);
  217. //记录要删除的节点
  218. this.selectedTarget.push(tempNode[i]);
  219. return;
  220. }
  221. }
  222. }
  223. }
  224. },
  225. onConfirmClearHighway() {
  226. if (this.isMoveState) {
  227. this._isShowMoveSelectFrame();
  228. return;
  229. }
  230. // cc.log('选中的节点1:',this.selectedTarget);
  231. let _length = this.selectedTarget.length;
  232. for (let i = _length - 1; i >= 0; i--) {
  233. let tiledTile = this.selectedTarget[i].getComponent('TiledTile');
  234. let tiledVector2 = new cc.Vec2(tiledTile.x, tiledTile.y);
  235. let tiledIndex = GlobalD.TiledMap.getIndex(tiledVector2);
  236. //删除节点
  237. this.selectedTarget[i].destroy();
  238. //地图设置可行走区域公路设置
  239. AStar.setMapSolid(tiledTile.x, tiledTile.y, 1);
  240. //清除公路占位信息
  241. let occupyArray = GlobalD.game.OccupyArray;
  242. let occupyLength = occupyArray.length;
  243. for (let i = occupyLength - 1; i >= 0; i--) {
  244. if (tiledIndex === occupyArray[i].y) {
  245. occupyArray.splice(i, 1);
  246. break;
  247. }
  248. }
  249. //ManageGame里面的index
  250. let allHighway = GlobalD.game.AllHighwayStylesAndIndex;
  251. let allHighwayLength = GlobalD.game.AllHighwayStylesAndIndex.length;
  252. for (let i = allHighwayLength - 1; i >= 0; i--) {
  253. if (tiledIndex === allHighway[i].highwayInfoIndex) {
  254. allHighway.splice(i, 1);
  255. break;
  256. }
  257. }
  258. }
  259. // cc.log('选中的节点:',this.selectedTarget);
  260. this._CancelClearHighway();
  261. }
  262. // update (dt) {},
  263. });