118 lines
4.9 KiB
C#
Raw Permalink Normal View History

2025-09-19 14:56:58 +05:00
using UnityEngine;
using UnityEngine.UI;
using TMPro;
2025-09-19 19:43:49 +05:00
using BulletHellTemplate.Core.Events;
2025-09-19 14:56:58 +05:00
namespace BulletHellTemplate
{
public class UpgradeEntry : MonoBehaviour
{
public TextMeshProUGUI upgradeNameText;
public TextMeshProUGUI upgradeCostText;
public TextMeshProUGUI upgradeLevelText;
2025-09-19 19:43:49 +05:00
public Image upgradeIconImage;
2025-09-19 14:56:58 +05:00
public Button upgradeButton;
private StatUpgrade statUpgrade;
2025-09-19 19:43:49 +05:00
private CharacterStatsRuntime characterStats;
2025-09-19 14:56:58 +05:00
private int currentLevel;
private int characterId;
public string Level = "Level:";
public NameTranslatedByLanguage[] LevelTranslated;
public string MaxLevel = "Max Level";
public NameTranslatedByLanguage[] MaxLevelTranslated;
private string currentLang;
/// <summary>
2025-09-19 19:43:49 +05:00
/// Initializes the upgrade entry with the given stat upgrade and character characterStatsComponent.
2025-09-19 14:56:58 +05:00
/// </summary>
/// <param name="upgrade">The stat upgrade data.</param>
2025-09-19 19:43:49 +05:00
/// <param name="stats">The character characterStatsComponent to apply the upgrade to.</param>
2025-09-19 14:56:58 +05:00
/// <param name="level">The current level of the upgrade.</param>
/// <param name="characterId">The ID of the character.</param>
public void Initialize(StatUpgrade upgrade, Sprite upgradeIcon, CharacterStatsRuntime stats, int level, int characterId)
{
currentLang = LanguageManager.LanguageManager.Instance.GetCurrentLanguage();
statUpgrade = upgrade;
characterStats = stats;
currentLevel = level;
this.characterId = characterId;
string _upgradeName = UICharacterMenu.Singleton.GetTranslatedString(upgrade.upgradeNameTranslated, upgrade.upgradeName, currentLang);
string _level = UICharacterMenu.Singleton.GetTranslatedString(LevelTranslated, Level, currentLang);
string _maxLevel = UICharacterMenu.Singleton.GetTranslatedString(MaxLevelTranslated, MaxLevel, currentLang);
upgradeNameText.text = _upgradeName;
upgradeLevelText.text = $"{_level} {currentLevel}/{statUpgrade.upgradeMaxLevel}";
upgradeIconImage.sprite = upgradeIcon; // Set the upgrade icon
UpdateCostText(currentLevel + 1);
upgradeButton.onClick.AddListener(OnUpgradeButtonClick);
if (currentLevel >= statUpgrade.upgradeMaxLevel)
{
upgradeButton.interactable = false;
upgradeCostText.text = _maxLevel;
}
}
/// <summary>
/// Updates the cost text based on the current level.
/// </summary>
/// <param name="nextLevel">The next level to which the upgrade will be applied.</param>
private void UpdateCostText(int nextLevel)
{
string _maxLevel = UICharacterMenu.Singleton.GetTranslatedString(MaxLevelTranslated, MaxLevel, currentLang);
if (nextLevel > statUpgrade.upgradeMaxLevel)
{
upgradeCostText.text = _maxLevel;
}
else
{
int cost = statUpgrade.GetUpgradeCost(nextLevel);
upgradeCostText.text = $"{cost}";
}
}
/// <summary>
/// Handles the upgrade button click event.
/// </summary>
2025-09-19 19:43:49 +05:00
private async void OnUpgradeButtonClick()
2025-09-19 14:56:58 +05:00
{
string _level = UICharacterMenu.Singleton.GetTranslatedString(LevelTranslated, Level, currentLang);
string _maxLevel = UICharacterMenu.Singleton.GetTranslatedString(MaxLevelTranslated, MaxLevel, currentLang);
2025-09-19 19:43:49 +05:00
RequestResult result = await BackendManager.Service.UpdateCharacterStatUpgradeAsync(
statUpgrade,
characterStats,
characterId
);
if (result.Success)
2025-09-19 14:56:58 +05:00
{
currentLevel++;
upgradeLevelText.text = $"{_level} {currentLevel}/{statUpgrade.upgradeMaxLevel}";
UpdateCostText(currentLevel + 1);
if (currentLevel >= statUpgrade.upgradeMaxLevel)
{
upgradeButton.interactable = false;
upgradeCostText.text = _maxLevel;
}
2025-09-19 19:43:49 +05:00
2025-09-19 14:56:58 +05:00
UICharacterMenu.Singleton.OnCharacterUpgrade.Invoke();
2025-09-19 19:43:49 +05:00
EventBus.Publish(new MenuCharacterUpgradedEvent(UICharacterMenu.Singleton.tempCharacterModel));
2025-09-19 14:56:58 +05:00
UICharacterMenu.Singleton.UpdateDetailedStats();
UICharacterMenu.Singleton.DisplayUpgradeSucess();
}
else
{
2025-09-19 19:43:49 +05:00
if (result.Reason == "0")
2025-09-19 14:56:58 +05:00
UICharacterMenu.Singleton.DisplayAlreadyMaxLevel();
else
UICharacterMenu.Singleton.DisplayNotEnoughCurrency();
}
2025-09-19 19:43:49 +05:00
2025-09-19 14:56:58 +05:00
UICharacterMenu.Singleton.LoadCharacterSkills(characterId);
}
}
}