chenxin
2020-11-06 fe4457c2ff07dcea1cccd6886188a334ef9c196b
Assets/Scripts/TowerDefense/UI/HUD/EndlessGameUI.cs
@@ -642,6 +642,29 @@
        }
        /// <summary>
        /// 判断是否有不同类型的Tower,可以发生置换,仅限于火木水之间发生
        /// </summary>
        /// <param name="pinfo"></param>
        /// <returns></returns>
        protected bool IsSubstitute(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 && sTower.bInAttackMode == towerToMove.bInAttackMode)
                        return true;
                }
            }
            return false;
        }
        /// <summary>
        /// 获取目标格子上的塔防的名字数据
        /// </summary>
        /// <param name="pinfo"></param>
@@ -829,6 +852,40 @@
                    towerToMove = null;
                }
            }
            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);
                    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);
                }
            }
            // 当前是Skill塔位的状态.
            else if (bSkill)
            {
@@ -859,19 +916,23 @@
        /// <param name="newTower"></param>
        /// <param name="pos"></param>
        /// <param name="level">塔的等级</param>
        public void PlaceTowerForce(Tower newTower, IntVector2 pos, int level)
        public Tower PlaceTowerForce(Tower newTower, IntVector2 pos, int level, bool playEffect = true)
        {
            TowerPlacementGhost currentTower = Instantiate(newTower.towerGhostPrefab);
            currentTower.Initialize(newTower);
            Tower controller = currentTower.controller;
            Tower createdTower = Instantiate(controller);
            createdTower.PlayWaveLineFlash = playEffect;
            createdTower.Initialize(m_CurrentArea, pos);
            createdTower.SetLevel(level - 1);
            PlayUpgradeEffect(createdTower);
            if (playEffect)
                PlayUpgradeEffect(createdTower);
            addTower(createdTower);
            Destroy(currentTower.gameObject);
            return createdTower;
        }
        protected bool SkillPlayEndDrag(PointerInfo pointer)
@@ -1542,7 +1603,7 @@
                if (crit)
                    bloodStr += "Crt!";
                bloodStr += "-";
                bloodStr += val.ToString();
                bloodStr += ((Int64)val).ToString();
                tm.moveBloodText(spos.x, spos.y, bloodStr, crit);
            }