From 554eda43e00d5817cd3e06a60e39d4bd882ee584 Mon Sep 17 00:00:00 2001
From: chenxin <chenxin6991@163.com>
Date: Wed, 25 Nov 2020 10:33:33 +0800
Subject: [PATCH] Merge branch 'master' of http://172.16.1.52:8090/r/GemBattle into master

---
 Assets/Scripts/TowerDefense/UI/HUD/EndlessGameUI.cs |  141 +++++++++++++++++++++++++++++++++--------------
 1 files changed, 99 insertions(+), 42 deletions(-)

diff --git a/Assets/Scripts/TowerDefense/UI/HUD/EndlessGameUI.cs b/Assets/Scripts/TowerDefense/UI/HUD/EndlessGameUI.cs
index 75750c6..7876f7f 100644
--- a/Assets/Scripts/TowerDefense/UI/HUD/EndlessGameUI.cs
+++ b/Assets/Scripts/TowerDefense/UI/HUD/EndlessGameUI.cs
@@ -714,6 +714,29 @@
         }
 
         /// <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>
@@ -1125,6 +1148,28 @@
             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))
             {
@@ -1151,49 +1196,7 @@
             }
             else if (EndlessLevelManager.instanceExists && IsSubstitute(pointerInfo))
             {
-                // 可以发生置换
-                UIPointer pointer = WrapPointer(pointerInfo);
-                // 格子上的塔
-                Tower sTower = PickTowerInGrid(pointer);
 
-                if (sTower.bInAttackMode == towerToMove.bInAttackMode)
-                {
-                    IntVector2 v1 = new IntVector2(towerToMove.gridPosition.x, towerToMove.gridPosition.y);
-                    IntVector2 v2 = new IntVector2(sTower.gridPosition.x, sTower.gridPosition.y);
-
-                    if (m_CurrentArea == null)
-                    {
-                        CancelGhostPlacement();
-                        towerToMove.showTower(true);
-                    }
-                    else
-                    {
-                        Tower newTower1 = PlaceTowerForce(EndlessRandomTower.instance.getTowerByName(sTower.towerName), v1, sTower.currentLevel + 1, false);
-                        Tower newTower2 = PlaceTowerForce(m_CurrentTower.controller, v2, towerToMove.currentLevel + 1, false);
-
-                        if (towerToMove != null)
-                        {
-                            delTower(towerToMove);
-                            towerToMove.showTower(true);
-                            towerToMove.Sell();
-                            towerToMove = null;
-                        }
-
-                        delTower(sTower);
-                        sTower.showTower(true);
-                        sTower.Sell();
-                        sTower = null;
-
-                        CancelGhostPlacement();
-
-                        newTower1.placementArea.Occupy(newTower1.gridPosition, newTower1.dimensions);
-                        newTower2.placementArea.Occupy(newTower2.gridPosition, newTower2.dimensions);
-
-                        //强制交换塔的时候检查自身充能条
-                        newTower1.CheckCtrl();
-                        newTower2.CheckCtrl();
-                    }
-                }
             }
             // 当前是Skill塔位的状态.
             else if (bSkill)
@@ -1219,6 +1222,60 @@
                 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)
+            {
+                IntVector2 v1 = new IntVector2(towerToMove.gridPosition.x, towerToMove.gridPosition.y);
+                IntVector2 v2 = new IntVector2(sTower.gridPosition.x, sTower.gridPosition.y);
+
+                if (m_CurrentArea == null)
+                {
+                    CancelGhostPlacement();
+                    towerToMove.showTower(true);
+                    return false;
+                }
+                else
+                {
+                    Tower newTower1 = PlaceTowerForce(EndlessRandomTower.instance.getTowerByName(sTower.towerName), v1, sTower.currentLevel + 1, false);
+                    Tower newTower2 = PlaceTowerForce(m_CurrentTower.controller, v2, towerToMove.currentLevel + 1, false);
+
+                    if (towerToMove != null)
+                    {
+                        delTower(towerToMove);
+                        towerToMove.showTower(true);
+                        towerToMove.Sell();
+                        towerToMove = null;
+                    }
+
+                    delTower(sTower);
+                    sTower.showTower(true);
+                    sTower.Sell();
+                    sTower = null;
+
+                    CancelGhostPlacement();
+
+                    newTower1.placementArea.Occupy(newTower1.gridPosition, newTower1.dimensions);
+                    newTower2.placementArea.Occupy(newTower2.gridPosition, newTower2.dimensions);
+
+                    //强制交换塔的时候检查自身充能条
+                    newTower1.CheckCtrl();
+                    newTower2.CheckCtrl();
+                    return true;
+                }
+            }
+            return false;
+
+        }
+
+
         /// <summary>
         /// 强制放置塔,主要是用于新手
         /// </summary>

--
Gitblit v1.9.1