From e371272a7885723c7b0ef31a20ae5d0fbead1d30 Mon Sep 17 00:00:00 2001
From: wangguan <wangguan@kt007.com>
Date: Sat, 26 Dec 2020 16:58:41 +0800
Subject: [PATCH] 12.26第二次

---
 Assets/Scripts/TowerDefense/UI/HUD/EndlessGameUI.cs |  142 ++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 139 insertions(+), 3 deletions(-)

diff --git a/Assets/Scripts/TowerDefense/UI/HUD/EndlessGameUI.cs b/Assets/Scripts/TowerDefense/UI/HUD/EndlessGameUI.cs
index ae6183a..a79a3aa 100644
--- a/Assets/Scripts/TowerDefense/UI/HUD/EndlessGameUI.cs
+++ b/Assets/Scripts/TowerDefense/UI/HUD/EndlessGameUI.cs
@@ -1193,6 +1193,8 @@
                         //Debug.Log("未上阵区域,不管有没有塔,都强行吸附");
                         (m_CurrentArea as TowerPlacementGridEndless).CheckCanPlaceUpdate(m_GridPosition.x, m_GridPosition.y, true, "");
 
+                        m_CurrentTower.SetGridPosition(m_GridPosition.x, m_GridPosition.y);
+
                         //m_CurrentTower.transform.position = (m_CurrentArea as TowerPlacementGridEndless).GridToWorld(m_GridPosition, m_CurrentTower.controller.dimensions);
 
                     }
@@ -1234,6 +1236,10 @@
                                         }
                                     }
                                 }
+                                m_CurrentTower.SetGridPosition(checkTowerPlaceTower.gridPosition.x, checkTowerPlaceTower.gridPosition.y);
+
+                                //Debug.Log("未上阵区域,不管有没有塔,都强行吸附" + checkTowerPlaceTower.gridPosition);
+
                                 //m_CurrentTower.transform.position = (m_CurrentArea as TowerPlacementGridEndless).GridToWorld(checkTowerPlaceTower.gridPosition, m_CurrentTower.controller.dimensions);
                             }
                         }
@@ -1242,6 +1248,8 @@
                             //Debug.Log("空格子");
 
                             (m_CurrentArea as TowerPlacementGridEndless).CheckCanPlaceUpdate(m_GridPosition.x, m_GridPosition.y, true, towerToMove.towerName);
+
+                            m_CurrentTower.SetGridPosition(m_GridPosition.x, m_GridPosition.y);
 
                             //m_CurrentTower.transform.position = (m_CurrentArea as TowerPlacementGridEndless).GridToWorld(m_GridPosition, m_CurrentTower.controller.dimensions);
 
@@ -1258,6 +1266,8 @@
                                 (m_CurrentArea as TowerPlacementGridEndless).CheckCanPlaceUpdate(m_GridPosition.x, m_GridPosition.y, true, towerToMove.towerName);
 
                                 //m_CurrentTower.transform.position = towerToMove.position;
+                                m_CurrentTower.SetGridPosition(m_GridPosition.x, m_GridPosition.y);
+
                             }
                             else
                             {
@@ -1266,6 +1276,8 @@
                                 //Debug.Log("上阵区域,没有开放的塔位");
 
                                 (m_CurrentArea as TowerPlacementGridEndless).CheckCanPlaceUpdate(m_GridPosition.x, m_GridPosition.y, true, "");
+
+                                m_CurrentTower.SetGridPosition(m_GridPosition.x, m_GridPosition.y);
 
                                 //m_CurrentTower.transform.position = (m_CurrentArea as TowerPlacementGridEndless).GridToWorld(m_GridPosition, m_CurrentTower.controller.dimensions);
                             }
@@ -1277,7 +1289,8 @@
             else
             {
                 dragTowerPlacement.CloseCanPlace();
-
+                m_CurrentTower.SetGridPosition(-1, -1);
+                //Debug.Log("没有检测到");
             }
         }
 
@@ -1375,10 +1388,58 @@
                 return;
             }
 
+            if (m_CurrentTower.gridPositionX != -1)
+            {
+                IntVector2 moveV2 = new IntVector2(m_CurrentTower.gridPositionX, m_CurrentTower.gridPositionY);
+                //判断是否未开塔
+                if (!dragTowerPlacement.IsGridOpen(moveV2.x, moveV2.y))
+                {
+                    //Debug.Log("未开塔");
+                    CancelPlaceTower(pointerInfo);
+
+                }
+                else if (moveV2 == towerToMove.gridPosition)
+                {
+                    //Debug.Log($"在原位 moveV2:{moveV2}   towerToMove.gridPosition:{towerToMove.gridPosition}");
+                    CancelPlaceTower(pointerInfo);
+                }
+                else
+                {
+                    //判断是否有塔
+                    Tower tmpT = null;
+                    for (int i = 0; i < m_listTower.Count; i++)
+                    {
+                        if (m_listTower[i].gridPosition == moveV2)
+                        {
+                            tmpT = m_listTower[i];
+                            break;
+                        }
+                    }
+
+                    if (tmpT != null)
+                    {
+                        //Debug.Log("释放的时候有塔");
+                        DragBuyTower(tmpT);
+                    }
+                    else
+                    {
+                        //Debug.Log("释放的时候是空格子");
+                        DragBuyTower(moveV2);
+                    }
+                }
+            }
+            else
+            {
+                //Debug.Log("不在区域内");
+                CancelPlaceTower(pointerInfo);
+            }
+
+            return;
+
             // 判断目标位置是否有Tower且类型和等级一致,如果没有,则GhostTower删除,原Tower显示。
             if (isValidateCombineTarget(pointerInfo))
             {
-                //Debug.Log("isValidateCombineTarget");
+                //Debug.Log("目标位置是否有同等级同类型的Tower.");
                 TryPlaceTower(pointerInfo);
                 EndlessRandomTower.instance.UpdateDescDisplay();
             }
@@ -1406,7 +1467,7 @@
             }
             else if (EndlessLevelManager.instanceExists && IsSubstitute(pointerInfo))
             {
-                //Debug.Log("IsSubstitute");
+                //Debug.Log("交换");
 
                 CheckCanChangePos(pointerInfo);
             }
@@ -1884,6 +1945,81 @@
             return true;
         }
 
+        private void DragBuyTower(Tower sTower)
+        {
+            Tower curTower = m_CurrentTower.controller;
+            int testLvl = dragTowerLevel;
+            if ((sTower.currentLevel == testLvl) &&
+                (sTower.towerName == curTower.towerName))
+            {
+                // 先释放掉当前的Ghost塔防.
+                CancelGhostPlacement();
+
+                // 升级目标位置的塔防.
+                currentSelectedTower = sTower;
+                SetState(State.Normal);
+                // 新的代码,合并升级为随机塔防类型.
+                randomUpgradeTower();
+            }
+            else
+            {
+                IntVector2 v1 = new IntVector2(towerToMove.gridPosition.x, towerToMove.gridPosition.y);
+                IntVector2 v2 = new IntVector2(sTower.gridPosition.x, sTower.gridPosition.y);
+
+                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();
+                //Debug.Log($"newTower1:{newTower1.towerName}  newTower2:{newTower2.towerName}");
+
+                TowerPlacementGridEndless.instance.PlayPutPs(newTower2.gridPosition.x, newTower2.gridPosition.y);
+            }
+        }
+
+        private void DragBuyTower(IntVector2 dragGridPosition)
+        {
+            Tower controller = m_CurrentTower.controller;
+            Tower createdTower = Instantiate(controller);
+            createdTower.Initialize(m_CurrentArea, dragGridPosition, dragTowerLevel);
+
+            // ATTENTION TO FIX:是否应该加入List:
+            addTower(createdTower);
+            PlayToAttackEffect(createdTower.ElfId, createdTower.transform.position);
+            dragTowerLevel = 0;
+            CancelGhostPlacement();
+
+            // 删除towerToMove,确保塔防数据不再出现多个
+            if (towerToMove != null)
+            {
+                delTower(towerToMove);
+                towerToMove.showTower(true);
+                towerToMove.Sell();
+                towerToMove = null;
+            }
+            if (m_CurrentTower != null && m_CurrentTower.controller != null)
+                Destroy(m_CurrentTower.controller.gameObject);
+        }
+
         /// <summary>
         /// 播放升级特效
         /// </summary>

--
Gitblit v1.9.1