Add Shop system with ShopManager, ShopUI, and ShopSlotUI; implement item purchasing and shop UI functionality

This commit is contained in:
2025-07-12 02:07:43 +02:00
parent 8f3a913b7e
commit ad02e07a87
15 changed files with 753 additions and 3 deletions

View File

@@ -0,0 +1,56 @@
using Inventory;
using Systems;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
namespace Shop
{
public class ShopSlotUI : MonoBehaviour
{
private ScriptableObject item;
private ShopManager shopManager;
private int price;
[SerializeField] private Image icon;
[SerializeField] private TextMeshProUGUI nameText;
[SerializeField] private TextMeshProUGUI descriptionText;
[SerializeField] private TextMeshProUGUI priceText;
[SerializeField] private Button purchaseButton;
public void Setup(StatModifierItem item, ShopManager manager)
{
this.item = item;
shopManager = manager;
price = item.price;
icon.sprite = item.icon;
nameText.text = item.name;
descriptionText.text = item.description;
priceText.text = $"Price: {price}";
purchaseButton.interactable = GameManager.Instance.Coins >= price;
purchaseButton.onClick.AddListener(() => shopManager.BuyItem(item, price));
}
public void Setup(WeaponItem weapon, ShopManager manager)
{
item = weapon;
shopManager = manager;
price = weapon.price;
icon.sprite = weapon.icon;
nameText.text = weapon.weaponName;
descriptionText.text = weapon.description;
priceText.text = $"Price: {price}";
purchaseButton.interactable = GameManager.Instance.Coins >= price;
purchaseButton.onClick.AddListener(() => shopManager.BuyWeapon(weapon, price));
}
public bool MatchesItem(ScriptableObject item) => this.item == item;
public void MarkAsPurchased()
{
purchaseButton.interactable = false;
}
}
}