123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- using System;
- using Player.Wallet;
- using TMPro;
- using UnityEngine;
- public class UpgradeUI : MonoBehaviour
- {
- // 升级价格显示文本数组
- [SerializeField] private TextMeshProUGUI[] upgradePriceDisplayText;
- // 升级等级显示文本数组
- [SerializeField] private TextMeshProUGUI[] levelDisplayText;
- // 升级音效
- [SerializeField] private AudioSource upgradeAudioSource;
- // 玩家升级数据(0:战士数量 1:弓箭手数量 2:战士等级 3:弓箭手等级)
- private int[] _playerUpgradesLevel = new int[4];
- // 钱包引用
- private Wallet _wallet;
- /// <summary>
- /// 初始化升级数据和UI,首次启动时设置默认值
- /// </summary>
- private void Awake()
- {
- if (PlayerPrefs.GetInt("_playerWarriorLevel") == 0)
- {
- // 如果是新游戏,设置初始值
- PlayerPrefs.SetInt("_playerWarriorLevel", 3); // 增加初始战士数量
- PlayerPrefs.SetInt("_playerArcherLevel", 2); // 增加初始弓箭手数量
- PlayerPrefs.SetInt("_playerUpgradeWarriorLevel", 2); // 增加初始战士等级
- PlayerPrefs.SetInt("_playerUpgradeArcherLevel", 2); // 增加初始弓箭手等级
- }
- _playerUpgradesLevel[0] = PlayerPrefs.GetInt("_playerWarriorLevel");
- _playerUpgradesLevel[1] = PlayerPrefs.GetInt("_playerArcherLevel");
- _playerUpgradesLevel[2] = PlayerPrefs.GetInt("_playerUpgradeWarriorLevel");
- _playerUpgradesLevel[3] = PlayerPrefs.GetInt("_playerUpgradeArcherLevel");
- _wallet = FindObjectOfType<Wallet>();
- UpdateText();
- }
- /// <summary>
- /// 购买新战士,消耗金币并增加数量
- /// </summary>
- public void BuyWarrior()
- {
- if (_wallet.GetMoney >= GetPrice(0))
- {
- _wallet.UseMoney(GetPrice(0));
- _playerUpgradesLevel[0]++;
- ComponentsManager.PlayerArmyManager.AddNewWarrior();
- SaveDatas();
- UpdateText();
- }
- }
- /// <summary>
- /// 购买新弓箭手,消耗金币并增加数量
- /// </summary>
- public void BuyArcher()
- {
- if (_wallet.GetMoney >= GetPrice(1))
- {
- _wallet.UseMoney(GetPrice(1));
- _playerUpgradesLevel[1]++;
- ComponentsManager.PlayerArmyManager.AddNewArcher();
- SaveDatas();
- UpdateText();
- if (ComponentsManager.Tutorial)
- {
- if (ComponentsManager.Tutorial.GetStep == 1)
- ComponentsManager.Tutorial.NextStep(2, true);
- }
- }
- else
- {
- // 金币不足时,直接关闭引导动画
- if (ComponentsManager.Tutorial)
- {
- ComponentsManager.Tutorial.ForceHidePointerAndUnlock();
- }
- }
- }
- /// <summary>
- /// 升级所有战士等级,消耗金币并重置玩家单位
- /// </summary>
- public void UpgradeWarriors()
- {
- if (_wallet.GetMoney >= GetPrice(2))
- {
- _wallet.UseMoney(GetPrice(2));
- _playerUpgradesLevel[2]++;
- ComponentsManager.PlayerArmyManager.ResetPlayerWarriors();
- SaveDatas();
- UpdateText();
- }
- }
- /// <summary>
- /// 升级所有弓箭手等级,消耗金币并重置玩家单位
- /// </summary>
- public void UpgradeArchers()
- {
- if (_wallet.GetMoney >= GetPrice(3))
- {
- _wallet.UseMoney(GetPrice(3));
- _playerUpgradesLevel[3]++;
- ComponentsManager.PlayerArmyManager.ResetPlayerWarriors();
- SaveDatas();
- UpdateText();
- if (ComponentsManager.Tutorial)
- {
- if (ComponentsManager.Tutorial.GetStep == 3)
- ComponentsManager.Tutorial.NextStep(4, true);
- }
- }
- }
- /// <summary>
- /// 获取当前战士升级等级
- /// </summary>
- public int GetWarriorLevelUpgrade()
- {
- return _playerUpgradesLevel[2];
- }
- /// <summary>
- /// 获取当前弓箭手升级等级
- /// </summary>
- public int GetArcherLevelUpgrade()
- {
- return _playerUpgradesLevel[3];
- }
- /// <summary>
- /// 计算升级价格
- /// </summary>
- /// <param name="id">升级类型索引</param>
- /// <returns>升级所需金币</returns>
- private int GetPrice(int id)
- {
- return (int) (GameBalance.UpgradeBase[id].BasePrice *
- Math.Pow(GameBalance.UpgradeBase[id].BasePriceCoefficient, _playerUpgradesLevel[id]));
- }
- /// <summary>
- /// 刷新升级价格和等级文本
- /// </summary>
- private void UpdateText()
- {
- for (int i = 0; i < upgradePriceDisplayText.Length; i++)
- {
- upgradePriceDisplayText[i].SetText(GetPrice(i).ToString());
- levelDisplayText[i].SetText((_playerUpgradesLevel[i] + 1).ToString());
- }
- levelDisplayText[0].SetText((_playerUpgradesLevel[0] + 2).ToString());
- levelDisplayText[1].SetText((_playerUpgradesLevel[1]).ToString());
- }
- /// <summary>
- /// 保存升级数据到本地存档,并播放音效
- /// </summary>
- private void SaveDatas()
- {
- PlayerPrefs.SetInt("_playerWarriorLevel", _playerUpgradesLevel[0]);
- PlayerPrefs.SetInt("_playerArcherLevel", _playerUpgradesLevel[1]);
- PlayerPrefs.SetInt("_playerUpgradeWarriorLevel", _playerUpgradesLevel[2]);
- PlayerPrefs.SetInt("_playerUpgradeArcherLevel", _playerUpgradesLevel[3]);
- upgradeAudioSource.Play();
- }
- }
|