using UnityEngine; public sealed class InventoryController : MonoBehaviour { [SerializeField] private InventoryView inventoryView; [SerializeField] private ScoringSystem scoringSystem; [SerializeField] private CurrencyBank currencyBank; private InventoryModel model; public InventoryModel Model => model; public void Initialize(InventoryModel inventoryModel) { model = inventoryModel; inventoryView.OnActivateClicked += HandleActivate; inventoryView.OnDeactivateClicked += HandleDeactivate; inventoryView.OnSellClicked += HandleSell; model.OnActiveModifiersChanged += HandleActiveModifiersChanged; model.OnInventoryChanged += HandleInventoryChanged; if (scoringSystem != null) scoringSystem.OnCategoryConfirmed += HandleCategoryConfirmed; RefreshView(); } private void OnDestroy() { if (inventoryView != null) { inventoryView.OnActivateClicked -= HandleActivate; inventoryView.OnDeactivateClicked -= HandleDeactivate; inventoryView.OnSellClicked -= HandleSell; } if (model != null) { model.OnActiveModifiersChanged -= HandleActiveModifiersChanged; model.OnInventoryChanged -= HandleInventoryChanged; } if (scoringSystem != null) scoringSystem.OnCategoryConfirmed -= HandleCategoryConfirmed; } private void HandleActivate(ModifierRuntime runtime) { model.TryActivate(runtime); } private void HandleDeactivate(ModifierRuntime runtime) { model.Deactivate(runtime); } private void HandleSell(ModifierRuntime runtime) { if (runtime.Data == null) return; int sellPrice = runtime.Data.SellPrice; model.RemoveModifier(runtime); if (currencyBank != null) currencyBank.Add(sellPrice); } private void HandleActiveModifiersChanged(System.Collections.Generic.List activeModifiers) { if (scoringSystem != null) scoringSystem.SetActiveModifiers(activeModifiers); } private void HandleInventoryChanged() { RefreshView(); } private void HandleCategoryConfirmed(YachtCategory category, ScoreResult result) { model.ConsumeUseOnActive(); } private void RefreshView() { if (inventoryView != null && model != null) inventoryView.Refresh(model.OwnedModifiers, model.MaxActiveSlots); } }