235 lines
7.3 KiB
C#
235 lines
7.3 KiB
C#
using TMPro;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
namespace Watermelon.SquadShooter
|
|
{
|
|
public class WeaponPanelUI : UIUpgradeAbstractPanel
|
|
{
|
|
[SerializeField] TextMeshProUGUI weaponName;
|
|
[SerializeField] Image weaponImage;
|
|
[SerializeField] Image weaponBackImage;
|
|
[SerializeField] TextMeshProUGUI rarityText;
|
|
|
|
[Header("Locked State")]
|
|
[SerializeField] GameObject lockedStateObject;
|
|
[SerializeField] SlicedFilledImage cardsFillImage;
|
|
[SerializeField] TextMeshProUGUI cardsAmountText;
|
|
|
|
[Header("Upgrade State")]
|
|
[SerializeField] TextMeshProUGUI levelText;
|
|
[SerializeField] GameObject upgradeStateObject;
|
|
[SerializeField] TextMeshProUGUI upgradePriceText;
|
|
[SerializeField] Image upgradeCurrencyImage;
|
|
|
|
[Space]
|
|
[SerializeField] Color upgradeStateActiveColor = Color.white;
|
|
[SerializeField] Color upgradeStateUnactiveColor = Color.white;
|
|
[SerializeField] Image[] upgradesStatesImages;
|
|
|
|
public WeaponData Data { get; private set; }
|
|
|
|
[Space]
|
|
[SerializeField] Button upgradesBuyButton;
|
|
[SerializeField] Image upgradesBuyButtonImage;
|
|
[SerializeField] TextMeshProUGUI upgradesBuyButtonText;
|
|
[SerializeField] Sprite upgradesBuyButtonActiveSprite;
|
|
[SerializeField] Sprite upgradesBuyButtonDisableSprite;
|
|
|
|
[Space]
|
|
[SerializeField] GameObject upgradesMaxObject;
|
|
|
|
public override bool IsUnlocked => Data.UpgradeLevel > 0;
|
|
private int weaponIndex;
|
|
public int WeaponIndex => weaponIndex;
|
|
|
|
private UIGamepadButton gamepadButton;
|
|
public UIGamepadButton GamepadButton => gamepadButton;
|
|
|
|
public Transform UpgradeButtonTransform => upgradesBuyButton.transform;
|
|
|
|
public void Init(WeaponData data, int weaponIndex)
|
|
{
|
|
Data = data;
|
|
panelRectTransform = (RectTransform)transform;
|
|
gamepadButton = upgradesBuyButton.GetComponent<UIGamepadButton>();
|
|
|
|
this.weaponIndex = weaponIndex;
|
|
|
|
weaponName.text = data.WeaponName;
|
|
weaponImage.sprite = data.Icon;
|
|
weaponBackImage.color = data.RarityData.MainColor;
|
|
rarityText.text = data.RarityData.Name;
|
|
rarityText.color = data.RarityData.TextColor;
|
|
|
|
UpdateUI();
|
|
UpdateSelectionState();
|
|
|
|
WeaponsController.NewWeaponSelected += UpdateSelectionState;
|
|
}
|
|
|
|
public bool IsNextUpgradeCanBePurchased()
|
|
{
|
|
if (IsUnlocked)
|
|
{
|
|
if (!Data.IsMaxUpgrade())
|
|
{
|
|
if (CurrencyController.HasAmount(CurrencyType.Coins, Data.GetNextUpgrade().Price))
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public void UpdateUI()
|
|
{
|
|
if (IsUnlocked)
|
|
{
|
|
UpdateUpgradeState();
|
|
}
|
|
else
|
|
{
|
|
UpdateLockedState();
|
|
}
|
|
}
|
|
|
|
private void UpdateSelectionState()
|
|
{
|
|
if (weaponIndex == WeaponsController.SelectedWeaponIndex)
|
|
{
|
|
selectionImage.gameObject.SetActive(true);
|
|
backgroundTransform.localScale = Vector3.one;
|
|
}
|
|
else
|
|
{
|
|
selectionImage.gameObject.SetActive(false);
|
|
backgroundTransform.localScale = Vector3.one;
|
|
}
|
|
|
|
UpdateUI();
|
|
}
|
|
|
|
private void UpdateLockedState()
|
|
{
|
|
lockedStateObject.SetActive(true);
|
|
upgradeStateObject.SetActive(false);
|
|
|
|
int currentAmount = Data.CardsAmount;
|
|
int target = Data.GetNextUpgrade().Price;
|
|
|
|
cardsFillImage.fillAmount = (float)currentAmount / target;
|
|
cardsAmountText.text = currentAmount + "/" + target;
|
|
|
|
powerObject.SetActive(false);
|
|
powerText.gameObject.SetActive(false);
|
|
}
|
|
|
|
private void UpdateUpgradeState()
|
|
{
|
|
lockedStateObject.SetActive(false);
|
|
upgradeStateObject.SetActive(true);
|
|
|
|
WeaponUpgrade nextUpgrade = Data.GetNextUpgrade();
|
|
if (nextUpgrade != null)
|
|
{
|
|
upgradePriceText.text = nextUpgrade.Price.ToString();
|
|
upgradeCurrencyImage.sprite = CurrencyController.GetCurrency(nextUpgrade.CurrencyType).Icon;
|
|
}
|
|
else
|
|
{
|
|
upgradePriceText.text = "MAXED OUT";
|
|
upgradeCurrencyImage.gameObject.SetActive(false);
|
|
}
|
|
|
|
powerObject.SetActive(true);
|
|
powerText.gameObject.SetActive(true);
|
|
powerText.text = Data.GetCurrentUpgrade().Power.ToString();
|
|
|
|
RedrawUpgradeElements();
|
|
}
|
|
|
|
private void RedrawUpgradeElements()
|
|
{
|
|
levelText.text = "LEVEL " + Data.UpgradeLevel;
|
|
|
|
if (!Data.IsMaxUpgrade())
|
|
{
|
|
upgradesMaxObject.SetActive(false);
|
|
upgradesBuyButton.gameObject.SetActive(true);
|
|
|
|
RedrawUpgradeButton();
|
|
}
|
|
else
|
|
{
|
|
upgradesMaxObject.SetActive(true);
|
|
upgradesBuyButton.gameObject.SetActive(false);
|
|
|
|
if (gamepadButton != null)
|
|
gamepadButton.SetFocus(false);
|
|
}
|
|
}
|
|
|
|
protected override void RedrawUpgradeButton()
|
|
{
|
|
if (!Data.IsMaxUpgrade())
|
|
{
|
|
WeaponUpgrade nextUpgrade = Data.GetNextUpgrade();
|
|
|
|
int price = nextUpgrade.Price;
|
|
CurrencyType currencyType = nextUpgrade.CurrencyType;
|
|
|
|
if (CurrencyController.HasAmount(currencyType, price))
|
|
{
|
|
upgradesBuyButtonImage.sprite = upgradesBuyButtonActiveSprite;
|
|
|
|
if (gamepadButton != null)
|
|
gamepadButton.SetFocus(weaponIndex == WeaponsController.SelectedWeaponIndex);
|
|
}
|
|
else
|
|
{
|
|
upgradesBuyButtonImage.sprite = upgradesBuyButtonDisableSprite;
|
|
|
|
if (gamepadButton != null)
|
|
gamepadButton.SetFocus(false);
|
|
}
|
|
|
|
upgradesBuyButtonText.text = CurrencyHelper.Format(price);
|
|
|
|
}
|
|
}
|
|
|
|
public override void Select()
|
|
{
|
|
if (IsUnlocked)
|
|
{
|
|
if (weaponIndex != WeaponsController.SelectedWeaponIndex)
|
|
{
|
|
AudioController.PlaySound(AudioController.GetClip("button_sound"));
|
|
|
|
WeaponsController.SelectWeapon(weaponIndex);
|
|
}
|
|
}
|
|
}
|
|
|
|
public void UpgradeButton()
|
|
{
|
|
WeaponUpgrade nextUpgrade = Data.GetNextUpgrade();
|
|
if (nextUpgrade.Price <= CurrencyController.GetCurrency(nextUpgrade.CurrencyType).Amount)
|
|
{
|
|
Select();
|
|
|
|
CurrencyController.Substract(nextUpgrade.CurrencyType, nextUpgrade.Price);
|
|
|
|
Data.Upgrade();
|
|
|
|
AudioController.PlaySound(AudioController.GetClip("button_sound"));
|
|
}
|
|
}
|
|
|
|
private void OnDisable()
|
|
{
|
|
WeaponsController.NewWeaponSelected -= UpdateSelectionState;
|
|
}
|
|
}
|
|
} |