using UnityEngine; using YachtDice.Economy; using YachtDice.Modifiers; namespace YachtDice.Shop { public class ShopController : MonoBehaviour { [SerializeField] private ShopCatalog catalog; [SerializeField] private ShopView shopView; [SerializeField] private CurrencyBank currencyBank; private ShopModel model; public ShopCatalog Catalog => catalog; public void Initialize(ShopModel shopModel) { model = shopModel; shopView.OnBuyClicked += HandleBuyClicked; if (currencyBank != null) currencyBank.OnBalanceChanged += HandleCurrencyChanged; model.OnItemPurchased += HandleItemPurchased; shopView.Populate(catalog.AvailableModifiers, model); shopView.UpdateCurrencyDisplay(currencyBank != null ? currencyBank.Balance : 0); } private void OnDestroy() { if (shopView != null) shopView.OnBuyClicked -= HandleBuyClicked; if (currencyBank != null) currencyBank.OnBalanceChanged -= HandleCurrencyChanged; if (model != null) model.OnItemPurchased -= HandleItemPurchased; } private void HandleBuyClicked(ModifierData data) { model.TryPurchase(data); } private void HandleCurrencyChanged(int newBalance) { shopView.UpdateCurrencyDisplay(newBalance); shopView.RefreshStates(catalog.AvailableModifiers, model); } private void HandleItemPurchased(ModifierData data) { shopView.RefreshStates(catalog.AvailableModifiers, model); } } }