wangguan
2020-12-23 1e192494412a34d17548834a6aff639202cdfdda
Assets/Scripts/TowerDefense/UI/HUD/EndlessRandomTower.cs
@@ -8,18 +8,21 @@
using UnityEngine.UI;
using TMPro;
using KTGMGemClient;
using DG.Tweening;
using System.Collections;
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 +42,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;
@@ -56,9 +56,34 @@
    public Text SkillDesc;
    public ParticleSystem btnPS;
    IEnumerator ReadJson()
    {
        while (!GameConfig.JsonReadDone)
        {
            yield return 10;
        }
        countDownLimit = JsonDataCenter.GetById<battle>(23).value;
        Debug.Log("设置了倒计时:" + countDownLimit);
        yield break;
    }
    // Start is called before the first frame update
    void Start()
    {
#if UNITY_ANDROID
#endif
#if UNITY_IPHONE
#endif
#if UNITY_EDITOR
#endif
        StartCoroutine(ReadJson());
        if (!EndlessLevelManager.instanceExists)
            Debug.LogError("[UI] No level manager for tower list");
@@ -80,34 +105,28 @@
        bSetBuyLvlUp = false;
        bCdTimeStart = false;
        randomBtn.onClick.AddListener(delegate () { onClick(EFeatureTower.NULL); });
        skillBtn.onClick.AddListener(delegate () { onClick(EFeatureTower.Skill_Bomb); });
        UpdateDescDisplay();
        NormalDesc.text = $"购买{0 + 1}级精灵";
        Invoke("UpdateDescDisplay", 1.0f);
        //UpdateDescDisplay();
    }
    public void UpdateDescDisplay()
    {
        int minLevel = EndlessGameUI.instance.MinLevel;
        int minLevel = GameConfig.IsUpgradeTowerLevel ? 1 : 0;
        NormalDesc.text = $"购买{minLevel + 1}级宝石";
        SkillDesc.text = $"购买{minLevel + 1}级技能宝石";
        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);
        });
@@ -167,7 +186,7 @@
            if (name == this.towerArray[ti].towerName)
                return towerArray[ti];
        return GetRandomTower(EFeatureTower.NULL, true);
        return GetRandomTower(EFeatureTower.NULL);
    }
    /// <summary>
@@ -196,7 +215,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 };
@@ -224,10 +243,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;
        }
@@ -238,41 +265,103 @@
        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()
    {
        //条件 金币是否满足,合成区是否有位置
        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>();//用来判断是否是首次购买宝石
@@ -289,7 +378,9 @@
            gameUI.CancelGhostPlacement();
        if (level == -1)
            level = Mathf.Min(EndlessGameUI.instance.MinLevel, 1);
        {
            level = GameConfig.IsUpgradeTowerLevel ? 1 : 0;
        }
        return gameUI.RandomPlaceTower(tower, posx, posy, level, cost, false, isFirstAppear);
    }