ManageClearNode.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349
  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 if (_targetBuildingsInfo.buildInfo.buildType == reGameStates.BuildType.DressUp) {
  126. self.labelTip.string = '装饰品不可移除!';
  127. } else {
  128. self.labelTip.string = '是否移除' + _targetBuildingsInfo.buildInfo.buildingName;
  129. }
  130. self.targetBuildingsInfo = _targetBuildingsInfo;
  131. }
  132. else {
  133. self.labelTip.string = self.labelTipString;
  134. self.targetBuildingsInfo = null;
  135. }
  136. }, self.node);
  137. self.node.on(cc.Node.EventType.TOUCH_CANCEL, function (event) {
  138. //起始触摸位置
  139. GlobalD.GameControl._isBuildingMove = false;
  140. }, self.node);
  141. },
  142. //拆除建筑时候调用
  143. onRemoveThisItem() {
  144. if (!this.targetBuildingsInfo) return;
  145. //todo 如果是农田,不可移除
  146. if (this.targetBuildingsInfo.buildInfo.buildType == reGameStates.BuildType.HolyFarmland) {
  147. this.labelTip.string = '神农农田不可移除!';
  148. console.log("神农农田不可移除!");
  149. return;
  150. } else if (this.targetBuildingsInfo.buildInfo.buildType == reGameStates.BuildType.DressUp) {
  151. this.labelTip.string = '装饰品不可移除!';
  152. console.log("装饰品不可移除!");
  153. return;
  154. }
  155. this.targetBuildingsInfo.onClearSelfResetFromType();
  156. //清除时候,消除建筑物的影响力
  157. GlobalD.game.onClearBuildingsEffect(this.targetBuildingsInfo);
  158. //清除底部提示区域
  159. GlobalD.game.onClearSpawnEditorBuildingTip();
  160. this.targetBuildingsInfo.node.destroy();
  161. GlobalD.game.removeBuilding(this.targetBuildingsInfo);
  162. this.labelTip.string = this.labelTipString;
  163. this.targetBuildingsInfo = null;
  164. // cc.log('removeEnd', GlobalD.game.buildingsTiledMapUnit);
  165. }
  166. ,
  167. onCancleSelf() {
  168. this.node.active = false;
  169. GlobalD.game._ManageUIScript.onBottomMenuView(true);
  170. this._CancelClearHighway();
  171. },
  172. //取消清除
  173. _CancelClearHighway() {
  174. if (this.isMoveState) {
  175. return;
  176. }
  177. //删除对应层的子节点
  178. let tempNode = this.buildLayer.node.children;
  179. let length = tempNode.length;
  180. for (let i = length - 1; i >= 0; i--) {
  181. if (tempNode[i].getComponent('TiledTile')) {
  182. tempNode[i].removeComponent('TiledTile');
  183. }
  184. tempNode[i].destroy();
  185. }
  186. this.selectedTargetIndex = [];
  187. //清空选中的节点的数组
  188. this.selectedTarget = [];
  189. },
  190. _isShowMoveSelectFrame() {
  191. this.isMoveState = false;
  192. this.MoveStartNode.active = false;
  193. this.MoveEndNode.active = true;
  194. this._SelectHighwayTiled(this._EndPosition);
  195. },
  196. _SelectHighwayTiled(tiledPos) {
  197. let endPos = GlobalD.TiledMap._getTheMiddleLocationFromtilePos(tiledPos);
  198. this.node.setPosition(endPos);
  199. if (this.isMoveState) return;
  200. if (ClearType.Shovel === this.clearType) {
  201. let buildIndex = GlobalD.TiledMap.getIndex(tiledPos);
  202. //铲子类型
  203. if (GlobalD.game.onGetHighwayFromIndex(buildIndex)) {
  204. let tempNode = this.HighwayLayer.node.children;
  205. let length = tempNode.length;
  206. for (let i = length - 1; i >= 0; i--) {
  207. let tiledTile = tempNode[i].getComponent('TiledTile');
  208. let tiledVector2 = new cc.Vec2(tiledTile.x, tiledTile.y);
  209. let tiledIndex = GlobalD.TiledMap.getIndex(tiledVector2);
  210. if (tiledIndex === buildIndex) {
  211. // cc.log(this.selectedTargetIndex,tiledIndex)
  212. if (GlobalD.TiledMap.getIndexArrayAt(tiledVector2, this.selectedTargetIndex)) {
  213. // cc.log('存在目标数组了!');
  214. return;
  215. }
  216. let highwayTemp = cc.instantiate(this.removeTipPrefab);
  217. highwayTemp.parent = this.buildLayer.node;
  218. let tiledTile = highwayTemp.addComponent('TiledTile');
  219. tiledTile.x = tiledVector2.x;
  220. tiledTile.y = tiledVector2.y;
  221. //记录选中的index
  222. this.selectedTargetIndex.push(tiledIndex);
  223. //记录要删除的节点
  224. this.selectedTarget.push(tempNode[i]);
  225. return;
  226. }
  227. }
  228. }
  229. }
  230. },
  231. onConfirmClearHighway() {
  232. if (this.isMoveState) {
  233. this._isShowMoveSelectFrame();
  234. return;
  235. }
  236. // cc.log('选中的节点1:',this.selectedTarget);
  237. let _length = this.selectedTarget.length;
  238. for (let i = _length - 1; i >= 0; i--) {
  239. let tiledTile = this.selectedTarget[i].getComponent('TiledTile');
  240. let tiledVector2 = new cc.Vec2(tiledTile.x, tiledTile.y);
  241. let tiledIndex = GlobalD.TiledMap.getIndex(tiledVector2);
  242. //删除节点
  243. this.selectedTarget[i].destroy();
  244. //地图设置可行走区域公路设置
  245. AStar.setMapSolid(tiledTile.x, tiledTile.y, 1);
  246. //清除公路占位信息
  247. let occupyArray = GlobalD.game.OccupyArray;
  248. let occupyLength = occupyArray.length;
  249. for (let i = occupyLength - 1; i >= 0; i--) {
  250. if (tiledIndex === occupyArray[i].y) {
  251. occupyArray.splice(i, 1);
  252. break;
  253. }
  254. }
  255. //ManageGame里面的index
  256. let allHighway = GlobalD.game.AllHighwayStylesAndIndex;
  257. let allHighwayLength = GlobalD.game.AllHighwayStylesAndIndex.length;
  258. for (let i = allHighwayLength - 1; i >= 0; i--) {
  259. if (tiledIndex === allHighway[i].highwayInfoIndex) {
  260. allHighway.splice(i, 1);
  261. break;
  262. }
  263. }
  264. }
  265. // cc.log('选中的节点:',this.selectedTarget);
  266. this._CancelClearHighway();
  267. }
  268. // update (dt) {},
  269. });