| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 判断是否有不同类型的Tower,可以发生置换,仅限于火木水之间发生 |
| | | /// </summary> |
| | | /// <param name="pinfo"></param> |
| | | /// <returns></returns> |
| | | protected bool IsSubstituteGuide(PointerInfo pinfo) |
| | | { |
| | | if (!m_CurrentTower || !IsGhostAtValidPosition()) |
| | | { |
| | | // 判断格子上的塔防: |
| | | UIPointer pointer = WrapPointer(pinfo); |
| | | Tower sTower = PickTowerInGrid(pointer); |
| | | |
| | | if (sTower && sTower != towerToMove) |
| | | { |
| | | if (towerToMove && sTower.towerFeature == EFeatureTower.NULL && towerToMove.towerFeature == EFeatureTower.NULL) |
| | | return true; |
| | | } |
| | | } |
| | | |
| | | return false; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取目标格子上的塔防的名字数据 |
| | | /// </summary> |
| | | /// <param name="pinfo"></param> |
| | |
| | | if (m_CurrentTower.controller.towerFeature != EFeatureTower.NULL) |
| | | bSkill = true; |
| | | |
| | | if (GameConfig.IsNewbie) |
| | | { |
| | | bool isCanChange = false; |
| | | if (EndlessLevelManager.instanceExists && IsSubstituteGuide(pointerInfo)) |
| | | { |
| | | isCanChange = CheckCanChangePos(pointerInfo); |
| | | } |
| | | if (isCanChange) |
| | | { |
| | | GuideCtrl.Ins.DragDone(); |
| | | Debug.Log("交换了位置"); |
| | | } |
| | | else |
| | | { |
| | | GuideCtrl.Ins.EndDrag11_1(); |
| | | CancelPlaceTower(pointerInfo); |
| | | Debug.Log("没有放置在火塔上"); |
| | | } |
| | | |
| | | return; |
| | | } |
| | | |
| | | // 判断目标位置是否有Tower且类型和等级一致,如果没有,则GhostTower删除,原Tower显示。 |
| | | if (isValidateCombineTarget(pointerInfo)) |
| | | { |
| | |
| | | } |
| | | else if (EndlessLevelManager.instanceExists && IsSubstitute(pointerInfo)) |
| | | { |
| | | |
| | | } |
| | | // 当前是Skill塔位的状态. |
| | | else if (bSkill) |
| | | { |
| | | if (SkillPlayEndDrag(pointerInfo)) |
| | | { |
| | | // 先释放掉当前的Ghost塔防. |
| | | CancelGhostPlacement(); |
| | | |
| | | // 删除towerToMove,确保塔防数据不再出现多个 |
| | | if (towerToMove != null) |
| | | { |
| | | delTower(towerToMove); |
| | | towerToMove.showTower(true); |
| | | towerToMove.Sell(); |
| | | towerToMove = null; |
| | | } |
| | | } |
| | | else |
| | | CancelPlaceTower(pointerInfo); |
| | | } |
| | | else |
| | | CancelPlaceTower(pointerInfo); |
| | | } |
| | | |
| | | private bool CheckCanChangePos(PointerInfo pointerInfo) |
| | | { |
| | | // 可以发生置换 |
| | | UIPointer pointer = WrapPointer(pointerInfo); |
| | | // 格子上的塔 |
| | | Tower sTower = PickTowerInGrid(pointer); |
| | | if (sTower == null) |
| | | return false; |
| | | |
| | | if (sTower.bInAttackMode == towerToMove.bInAttackMode) |
| | | { |
| | |
| | | { |
| | | CancelGhostPlacement(); |
| | | towerToMove.showTower(true); |
| | | return false; |
| | | } |
| | | else |
| | | { |
| | |
| | | //强制交换塔的时候检查自身充能条 |
| | | newTower1.CheckCtrl(); |
| | | newTower2.CheckCtrl(); |
| | | return true; |
| | | } |
| | | } |
| | | } |
| | | // 当前是Skill塔位的状态. |
| | | else if (bSkill) |
| | | { |
| | | if (SkillPlayEndDrag(pointerInfo)) |
| | | { |
| | | // 先释放掉当前的Ghost塔防. |
| | | CancelGhostPlacement(); |
| | | return false; |
| | | |
| | | // 删除towerToMove,确保塔防数据不再出现多个 |
| | | if (towerToMove != null) |
| | | { |
| | | delTower(towerToMove); |
| | | towerToMove.showTower(true); |
| | | towerToMove.Sell(); |
| | | towerToMove = null; |
| | | } |
| | | } |
| | | else |
| | | CancelPlaceTower(pointerInfo); |
| | | } |
| | | else |
| | | CancelPlaceTower(pointerInfo); |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// 强制放置塔,主要是用于新手 |