wangguan
2020-10-27 3aaec4cb899faec0d6d3b70b81e9c2aad18346e8
Assets/Scripts/TowerDefense/UI/HUD/EndlessGameUI.cs
@@ -4,6 +4,7 @@
using DG.Tweening;
using JetBrains.Annotations;
using System;
using System.Collections;
using System.Collections.Generic;
using TMPro;
using TowerDefense.Level;
@@ -13,6 +14,8 @@
using UnityEngine.EventSystems;
using UnityEngine.UI;
using TowerDefense.Nodes;
using TowerDefense.Affectors;
using KTGMGemClient;
namespace TowerDefense.UI.HUD
{
@@ -201,6 +204,8 @@
        // 测试屏幕显示相关的倒计时.
        protected bool bLoaded = false;
        private Timer overTimer;
        /// <summary>
        /// 总兵线数
        /// </summary>
@@ -228,6 +233,8 @@
        /// 所有攻击塔位的摧毁信息,是否被摧毁,默认全部没有被摧毁
        /// </summary>
        private bool[,] TowerDestroyArr;
        public event Action GameOverEvent;
        public IPlacementArea selfTowerPlaceArea
        {
@@ -279,6 +286,18 @@
        public bool towerInList(Tower t)
        {
            return m_listTower.Contains(t);
        }
        /// <summary>
        /// 设置已经上阵的所有塔的攻击状态,是否可以攻击
        /// </summary>
        /// <param name="canAttack"></param>
        public void SetAttackingTowerState(bool canAttack)
        {
            foreach (Tower tower in m_listTower)
            {
                tower.bInAttackMode = canAttack;
            }
        }
        public void delTower(Tower t)
@@ -421,12 +440,9 @@
                    break;
                case State.Paused:
                case State.GameOver:
                    // if (oldState == State.Building)
                    // {
                    //     CancelGhostPlacement();
                    // }
                    // Time.timeScale = 0f;
                    Debug.Log("--------------------- game over !!! ---------------------");
                    if (oldState == State.Building)
                        CancelGhostPlacement();
                    Time.timeScale = 1f;
                    break;
                default:
                    throw new ArgumentOutOfRangeException("newState", newState, null);
@@ -681,7 +697,7 @@
                }
                TowerDestroyArr[xidx, i] = true;
                Tower tower = FindTowerWithGridIdx(xidx, i);
                Tower tower = FindTowerWithGridIdx(xidx, 3 - i);
                if (tower)
                {
@@ -694,6 +710,12 @@
                    m_CurrentArea.SetDestroyedGrid(xidx, 3 - i);
                break;
            }
            if (GameConfig.IsNewbie && EndlessUIStart.instance.beginSkillStep)
            {
                EndlessUIStart.instance.beginSkillStep = true;
                EndlessLevelManager.instance.StopSecondWave();
            }
            bool isAllDestroyed = true;
@@ -730,7 +752,15 @@
                // 红心减少逻辑
                // HealthHeartState.instance.killHeart(false);
                GameOver();
                overTimer = new Timer(1.2f, SafelyCallGameOverEvent);
            }
        }
        private void SafelyCallGameOverEvent()
        {
            if (GameOverEvent != null)
                GameOverEvent();
            overTimer = null;
        }
        /// <summary>
@@ -789,6 +819,25 @@
            }
            else
                CancelPlaceTower(pointerInfo);
        }
        /// <summary>
        /// 强制放置塔,主要是用于新手
        /// </summary>
        /// <param name="newTower"></param>
        /// <param name="pos"></param>
        /// <param name="level">塔的等级</param>
        public void PlaceTowerForce(Tower newTower, IntVector2 pos, int level)
        {
            TowerPlacementGhost currentTower = Instantiate(newTower.towerGhostPrefab);
            currentTower.Initialize(newTower);
            Tower controller = currentTower.controller;
            Tower createdTower = Instantiate(controller);
            createdTower.Initialize(m_CurrentArea, pos);
            createdTower.SetLevel(level - 1);
            addTower(createdTower);
            Destroy(currentTower.gameObject);
        }
        protected bool SkillPlayEndDrag(PointerInfo pointer)
@@ -1471,7 +1520,7 @@
            int cost = TowerPrice.instance.currentTowerPrice;
            if (zeroCost)
                cost = 0;
            if (forceCost != -1)
                cost = forceCost;
@@ -1499,7 +1548,7 @@
                PlaceTower(lvl);
            }
            return true;
        }
@@ -2001,6 +2050,9 @@
        /// </summary>
        private void Update()
        {
            if (overTimer != null)
                overTimer.Tick(Time.deltaTime);
            for (int ti = listTowerTimer.Count - 1; ti >= 0; ti--)
            {
                // 如果执行到,会在DelTower函数内删除对应的listTowerTimer.