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();
}
}