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; /// /// 初始化升级数据和UI,首次启动时设置默认值 /// 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(); UpdateText(); } /// /// 购买新战士,消耗金币并增加数量 /// public void BuyWarrior() { if (_wallet.GetMoney >= GetPrice(0)) { _wallet.UseMoney(GetPrice(0)); _playerUpgradesLevel[0]++; ComponentsManager.PlayerArmyManager.AddNewWarrior(); SaveDatas(); UpdateText(); } } /// /// 购买新弓箭手,消耗金币并增加数量 /// 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(); } } } /// /// 升级所有战士等级,消耗金币并重置玩家单位 /// public void UpgradeWarriors() { if (_wallet.GetMoney >= GetPrice(2)) { _wallet.UseMoney(GetPrice(2)); _playerUpgradesLevel[2]++; ComponentsManager.PlayerArmyManager.ResetPlayerWarriors(); SaveDatas(); UpdateText(); } } /// /// 升级所有弓箭手等级,消耗金币并重置玩家单位 /// 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); } } } /// /// 获取当前战士升级等级 /// public int GetWarriorLevelUpgrade() { return _playerUpgradesLevel[2]; } /// /// 获取当前弓箭手升级等级 /// public int GetArcherLevelUpgrade() { return _playerUpgradesLevel[3]; } /// /// 计算升级价格 /// /// 升级类型索引 /// 升级所需金币 private int GetPrice(int id) { return (int) (GameBalance.UpgradeBase[id].BasePrice * Math.Pow(GameBalance.UpgradeBase[id].BasePriceCoefficient, _playerUpgradesLevel[id])); } /// /// 刷新升级价格和等级文本 /// 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()); } /// /// 保存升级数据到本地存档,并播放音效 /// 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(); } }