From 4101e5d0813177886f830a33c063ef80ab438c24 Mon Sep 17 00:00:00 2001 From: chenxin <chenxin6991@163.com> Date: Wed, 18 Nov 2020 16:48:40 +0800 Subject: [PATCH] 购买宝石按钮文字,buff选择文字 --- Assets/Scripts/TowerDefense/UI/HUD/EndlessRandomTower.cs | 138 +++++++++++++-------------------------------- 1 files changed, 40 insertions(+), 98 deletions(-) diff --git a/Assets/Scripts/TowerDefense/UI/HUD/EndlessRandomTower.cs b/Assets/Scripts/TowerDefense/UI/HUD/EndlessRandomTower.cs index 31b449e..95a6cf4 100644 --- a/Assets/Scripts/TowerDefense/UI/HUD/EndlessRandomTower.cs +++ b/Assets/Scripts/TowerDefense/UI/HUD/EndlessRandomTower.cs @@ -14,15 +14,7 @@ // 当前类所在的Btn. public Button randomBtn; - /// <summary> - /// 倒计时对应的背景图片. - /// </summary> - public Image cdTimeBg; - - /// <summary> - /// 倒计划对应的文字. - /// </summary> - public TextMeshProUGUI cdTimeText; + public Button skillBtn; /// <summary> /// 购买二级宝石的按钮贴图. @@ -60,8 +52,9 @@ // 所有宝石位置权重列表 private List<int> weightList; - // 是否初始化过出战数据 - private bool isInitFightData = false; + public Text NormalDesc; + + public Text SkillDesc; // Start is called before the first frame update void Start() @@ -86,24 +79,35 @@ bSetBuyLvlUp = false; bCdTimeStart = false; + randomBtn.onClick.AddListener(delegate () { onClick(EFeatureTower.NULL); }); + skillBtn.onClick.AddListener(delegate () { onClick(EFeatureTower.Skill_Bomb); }); + UpdateDescDisplay(); + } - cdTimeBg.gameObject.SetActive(false); + public void UpdateDescDisplay() + { + int minLevel = EndlessGameUI.instance.MinLevel; - cdTimeText.text = ""; - - randomBtn.onClick.AddListener(onClick); - + NormalDesc.text = $"购买{minLevel + 1}级宝石"; + SkillDesc.text = $"购买{minLevel + 1}级技能宝石"; } public void ChangeBtnClickNormal() { randomBtn.onClick.RemoveAllListeners(); - randomBtn.onClick.AddListener(onClick); + 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(() => + { + AudioSourceManager.Ins.Play(AudioEnum.UIDisable); + }); + skillBtn.onClick.AddListener(() => { AudioSourceManager.Ins.Play(AudioEnum.UIDisable); }); @@ -129,14 +133,11 @@ { bCdTimeStart = true; btnLvlUpCdTime = LEVELUP_TOWER_TIME - gstime; - cdTimeBg.gameObject.SetActive(true); } if ((!bSetBuyLvlUp) && (gstime > LEVELUP_TOWER_TIME)) { bSetBuyLvlUp = true; this.randomBtn.GetComponent<Image>().sprite = buyBtnLevelUp; - cdTimeBg.gameObject.SetActive(false); - cdTimeText.text = ""; } // 更新倒计时: @@ -144,7 +145,6 @@ { btnLvlUpCdTime -= Time.deltaTime; string distr = ((int)Math.Ceiling(btnLvlUpCdTime)).ToString() + "s"; - cdTimeText.text = distr; } } @@ -194,7 +194,7 @@ if (name == this.towerArray[ti].towerName) return towerArray[ti]; - return GetRandomTower(false); + return GetRandomTower(EFeatureTower.NULL, true); } /// <summary> @@ -222,81 +222,34 @@ /// <summary> /// 根据规则生成一个随机的塔 /// </summary> - /// <param name="onlySpawnElf">是否仅产生精灵宝石,而不产生技能宝石</param> /// <returns></returns> - public Tower GetRandomTower(bool onlySpawnElf = true) + public Tower GetRandomTower(EFeatureTower towerType, bool isRandom) { - if (!isInitFightData) + int[] indexArr = { 0, 1, 2, 3, 4 }; + + if (!isRandom) { - isInitFightData = true; - weightList = new List<int>(); - List<posWeight> posWeight = JsonDataCenter.GetList<posWeight>(); - randomTotalWeight = 0; - - for (int i = 0; i < posWeight.Count; ++i) + if (towerType == EFeatureTower.NULL) { - weightList.Add(posWeight[i].weight); - randomTotalWeight += posWeight[i].weight; + // 只获得普通宝石 + indexArr = new int[] { 0, 1, 2 }; } - - // 游戏开始之前先把出站组乱序 - GameUtils.Shuffle(towerArray); + else + { + // 只获得技能宝石 + indexArr = new int[] { 3, 4 }; + } } - Tower ret = null; + int random = UnityEngine.Random.Range(0, indexArr.Length); - // 还没到技能时间,忽略掉技能宝石 - if (onlySpawnElf) - { - // 精灵宝石位置索引列表 - List<int> elfIndexList = new List<int>(); - - for (int i = 0; i < towerArray.Count; ++i) - { - if (towerArray[i].towerFeature == EFeatureTower.NULL) - elfIndexList.Add(i); - } - - // 没有上阵精灵宝石 - if (elfIndexList.Count == 0) - { - Debug.LogError("--------------------- 没有上阵精灵宝石 ---------------------"); - return null; - } - - // 计算所有精灵宝石位置的总权重 - int elfTotalWeight = 0; - // 精灵宝石位置权重列表 - List<int> elfWeightList = new List<int>(); - - for (int i = 0; i < elfIndexList.Count; ++i) - { - elfTotalWeight += weightList[elfIndexList[i]]; - elfWeightList.Add(weightList[elfIndexList[i]]); - } - - // 所有精灵宝石位置的权重都为0,直接等概率出一个精灵宝石 - int index = elfTotalWeight == 0 ? mRandom.Next(0, elfIndexList.Count) : GetRandomIndex(elfWeightList, elfTotalWeight); - ret = towerArray[elfIndexList[index]]; - } - // 可以自由产生 - else - { - int index = randomTotalWeight == 0 ? mRandom.Next(0, towerArray.Count) : GetRandomIndex(weightList, randomTotalWeight); - ret = towerArray[index]; - } - - // 生成宝石成功,需要调整宝石位置,把宝石放到队尾 - towerArray.Remove(ret); - towerArray.Add(ret); - - return ret; + return towerArray[indexArr[random]]; } /// <summary> /// 随机购买Tower的入口,如果购买成功,则需要实时更新价格 /// </summary> - public void onClick() + public void onClick(EFeatureTower towerType) { if (GameConfig.IsNewbie && !GameConfig.CanBuyNewTower) { @@ -307,13 +260,10 @@ AudioSourceManager.Ins.Play(AudioEnum.UI); - // 还没到技能时间,忽略掉技能宝石 - Tower newTower = GetRandomTower(EndlessUIStart.instance.GameStartTime <= SKILL_TOWER_TIME); + Tower newTower = GetRandomTower(towerType, false); if (!newTower) throw new Exception("未能成功产生Tower"); - - if (newTower.towerFeature == EFeatureTower.NULL) { @@ -365,16 +315,8 @@ if (gameUI.isBuilding) gameUI.CancelGhostPlacement(); - if (EndlessUIStart.instance.GameStartTime >= LEVELUP_TOWER_TIME) - { - if (level == -1) - level = Mathf.Min(EndlessGameUI.instance.MinLevel, 1); - } - else - { - if (level == -1) - level = 0; - } + if (level == -1) + level = Mathf.Min(EndlessGameUI.instance.MinLevel, 1); return gameUI.RandomPlaceTower(tower, posx, posy, level, cost, false, isFirstAppear); } -- Gitblit v1.9.1