wangguan
2020-12-26 e371272a7885723c7b0ef31a20ae5d0fbead1d30
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>