chenxin
2020-12-12 8b627d3742f14314736ac865e3f71b92877424ca
Assets/Scripts/TowerDefense/UI/HUD/EndlessRandomTower.cs
@@ -8,18 +8,20 @@
using UnityEngine.UI;
using TMPro;
using KTGMGemClient;
using DG.Tweening;
public class EndlessRandomTower : Singleton<EndlessRandomTower>
{
    // 当前类所在的Btn.
    public Button randomBtn;
    public Button skillBtn;
    /// <summary>
    /// 购买二级宝石的按钮贴图.
    /// </summary>
    public Sprite buyBtnLevelUp;
    [SerializeField]
    private TextMeshProUGUI cashText;
    protected bool bSetBuyLvlUp;
@@ -39,9 +41,6 @@
    // 开始出现技能塔的时间:
    public static float SKILL_TOWER_TIME = 30.0f;
    // 购买之后直接出现2级宝石的时间.
    public static float LEVELUP_TOWER_TIME = 10.0f;
    protected System.Random mRandom;
    protected int rTowerIdx = 2;
@@ -52,12 +51,17 @@
    // 所有宝石位置权重列表
    private List<int> weightList;
    // 是否初始化过出战数据
    private bool isInitFightData = false;
    public Text NormalDesc;
    public Text SkillDesc;
    public ParticleSystem btnPS;
    // Start is called before the first frame update
    void Start()
    {
        countDownLimit = JsonDataCenter.GetById<battle>(23).value;
        //Debug.Log("设置了倒计时:" + countDownLimit);
        if (!EndlessLevelManager.instanceExists)
            Debug.LogError("[UI] No level manager for tower list");
@@ -79,25 +83,26 @@
        bSetBuyLvlUp = false;
        bCdTimeStart = false;
        randomBtn.onClick.AddListener(delegate () { onClick(EFeatureTower.NULL); });
        skillBtn.onClick.AddListener(delegate () { onClick(EFeatureTower.Skill_Bomb); });
        UpdateDescDisplay();
    }
    public void UpdateDescDisplay()
    {
        int minLevel = GameConfig.IsUpgradeTowerLevel ? 1 : 0;
        NormalDesc.text = $"购买{minLevel + 1}级宝石";
    }
    public void ChangeBtnClickNormal()
    {
        randomBtn.onClick.RemoveAllListeners();
        skillBtn.onClick.RemoveAllListeners();
        randomBtn.onClick.AddListener(delegate () { onClick(EFeatureTower.NULL); });
        skillBtn.onClick.AddListener(delegate () { onClick(EFeatureTower.Skill_Bomb); });
    }
    public void ChangeBtnClick()
    {
        randomBtn.onClick.RemoveAllListeners();
        skillBtn.onClick.RemoveAllListeners();
        randomBtn.onClick.AddListener(delegate () { onClick(EFeatureTower.NULL); });
        randomBtn.onClick.AddListener(() =>
        {
            AudioSourceManager.Ins.Play(AudioEnum.UIDisable);
        });
        skillBtn.onClick.AddListener(() =>
        {
            AudioSourceManager.Ins.Play(AudioEnum.UIDisable);
        });
@@ -109,33 +114,6 @@
    public List<Tower> towerList
    {
        get { return this.towerArray; }
    }
    /// <summary>
    /// 处理按钮升级相关.
    /// </summary>
    private void Update()
    {
        float gstime = EndlessUIStart.instance.GameStartTime;
        if (gstime <= 0) return;
        if ((!bCdTimeStart) && (LEVELUP_TOWER_TIME - gstime) <= JsonDataCenter.TOWERLVLUP_CDTIME)
        {
            bCdTimeStart = true;
            btnLvlUpCdTime = LEVELUP_TOWER_TIME - gstime;
        }
        if ((!bSetBuyLvlUp) && (gstime > LEVELUP_TOWER_TIME))
        {
            bSetBuyLvlUp = true;
            this.randomBtn.GetComponent<Image>().sprite = buyBtnLevelUp;
        }
        // 更新倒计时:
        if ((!bSetBuyLvlUp) && bCdTimeStart)
        {
            btnLvlUpCdTime -= Time.deltaTime;
            string distr = ((int)Math.Ceiling(btnLvlUpCdTime)).ToString() + "s";
        }
    }
    public void actionTest()
@@ -184,7 +162,7 @@
            if (name == this.towerArray[ti].towerName)
                return towerArray[ti];
        return GetRandomTower(EFeatureTower.NULL, true);
        return GetRandomTower(EFeatureTower.NULL);
    }
    /// <summary>
@@ -213,7 +191,7 @@
    /// 根据规则生成一个随机的塔
    /// </summary>
    /// <returns></returns>
    public Tower GetRandomTower(EFeatureTower towerType, bool isRandom)
    public Tower GetRandomTower(EFeatureTower towerType, bool isRandom = false)
    {
        int[] indexArr = { 0, 1, 2, 3, 4 };
@@ -241,10 +219,18 @@
    /// </summary>
    public void onClick(EFeatureTower towerType)
    {
        if (GameConfig.IsNewbie && !GameConfig.CanBuyNewTower)
        if (GameConfig.IsNewbie)
        {
            AudioSourceManager.Ins.Play(AudioEnum.UIDisable);
            AudioSourceManager.Ins.Play(AudioEnum.UI);
            btnPS?.Play();
            return;
        }
        if (EndlessGameUI.instance.tdBuyDisable)
        {
            cashText.color = new Color(218f / 255f, 32f / 255f, 32f / 255f);
            DOTween.To(() => cashText.color, (Color v) => cashText.color = v, cashText.color, 0.2f)
                .OnComplete(CheckCurrencyEnough);
            return;
        }
@@ -255,41 +241,105 @@
        if (!newTower)
            throw new Exception("未能成功产生Tower");
        if (newTower.towerFeature == EFeatureTower.NULL)
        RandomPlaceTower(newTower, -1, -1, -1, -1, true);
        btnPS?.Play();
        //重置倒计时
        if (!isCountStartDown)
        {
            string tmpTowerName = newTower.towerName;
            towerNameLis.Add(tmpTowerName);
            int count = 0;
            bool isFirstBuy = true;
            for (int i = 0; i < towerNameLis.Count; i++)
            {
                if (towerNameLis[i] == tmpTowerName)
                {
                    count++;
                    if (count == 2)
                    {
                        isFirstBuy = false;
                        break;
                    }
                }
            }
            if (isFirstBuy)
            {
                //Debug.Log("首次购买:" + tmpTowerName);
            }
            else
            {
                //Debug.Log("购买了多次了:" + tmpTowerName);
            }
            RandomPlaceTower(newTower, -1, -1, -1, -1, isFirstBuy);
            needClickPS.Stop();
            isCountStartDown = true;
        }
        countDownTime = 0f;
    }
    private bool isCountStartDown = false;//是否开始倒计时
    public void SetCountDown(bool isOn, bool isReset = false)
    {
        isCountStartDown = isOn;
        if (isReset)
        {
            countDownTime = 0;
            if (needClickPS.isPlaying)
                needClickPS.Stop();
        }
    }
    public void SetPS(bool isOn)
    {
        if (needClickPS.gameObject.activeSelf != isOn)
        {
            needClickPS.gameObject.SetActive(isOn);
        }
    }
    float countDownTime = 0f;
    float countDownLimit = 5f;
    public ParticleSystem needClickPS;//提示点击按钮
    /// <summary>
    /// This function is called every fixed framerate frame, if the MonoBehaviour is enabled.
    /// </summary>
    void FixedUpdate()
    {
        if (isCountStartDown)
        {
            countDownTime += Time.deltaTime;
            if (countDownTime > countDownLimit)
            {
                CheckTower();
                countDownTime = 0;
            }
        }
    }
    /// <summary>
    /// 查看是否满足播放按钮提示
    /// </summary>
    private void CheckTower()
    {
        Debug.Log("判断是否提示");
        //条件 金币是否满足,合成区是否有位置
        int result;
        int.TryParse(cashText.text.ToString(), out result);
        int current = EndlessLevelManager.instance.Currency.currentCurrency;
        int num = EndlessGameUI.instance.GetTowerNum();
        if (current >= result && num < 10)//自己的钱多
        {
            //Debug.Log($"当前金币 :{current}  下一次购买需要金币:{result}  塔的数量:{num}");
            isCountStartDown = false;
            needClickPS.Play();
        }
    }
    public void CheckMoney()
    {
        int result;
        int.TryParse(cashText.text.ToString(), out result);
        int current = EndlessLevelManager.instance.Currency.currentCurrency;
        if (current < result && needClickPS.isPlaying)//自己的钱多
        {
            needClickPS.Stop();
            isCountStartDown = true;
            countDownTime = 0;
        }
    }
    private void CheckCurrencyEnough()
    {
        int result;
        int.TryParse(cashText.text.ToString(), out result);
        int current = EndlessLevelManager.instance.Currency.currentCurrency;
        if (current >= result)
            EndlessGameUI.instance.enableRandomTowerBtn();
        else
        {
            RandomPlaceTower(newTower, -1, -1, -1, -1, false);
        }
            EndlessGameUI.instance.disableRandomTowerBtn();
    }
    private List<string> towerNameLis = new List<string>();//用来判断是否是首次购买宝石
@@ -305,15 +355,9 @@
        if (gameUI.isBuilding)
            gameUI.CancelGhostPlacement();
        if (EndlessUIStart.instance.GameStartTime >= LEVELUP_TOWER_TIME)
        if (level == -1)
        {
            if (level == -1)
                level = Mathf.Min(EndlessGameUI.instance.MinLevel, 1);
        }
        else
        {
            if (level == -1)
                level = 0;
            level = GameConfig.IsUpgradeTowerLevel ? 1 : 0;
        }
        return gameUI.RandomPlaceTower(tower, posx, posy, level, cost, false, isFirstAppear);