using System; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.InputSystem; namespace DDD { public class RestaurantManagementUi : PopupUi, IEventHandler { [SerializeField] private InventoryView _inventoryView; [SerializeField] private ItemDetailView _itemDetailView; [SerializeField] private TabGroupUi _sectionTabs; [SerializeField] private TabGroupUi _categoryTabs; protected override GameObject GetInitialSelected() { var inventoryViewInitialSelectedObject = _inventoryView.GetInitialSelected(); if (inventoryViewInitialSelectedObject) return inventoryViewInitialSelectedObject; return _categoryTabs.GetFirstInteractableButton; } public async override void Open() { base.Open(); await _inventoryView.Initialize(); _sectionTabs.Initialize(OnSectionTabSelected); _categoryTabs.Initialize(OnCategoryTabSelected); EventBus.Register(this); } public override void Close() { base.Close(); EventBus.Unregister(this); } protected override void OnInputPerformed(RestaurantUiActions actionEnum, InputAction.CallbackContext context) { switch (actionEnum) { case RestaurantUiActions.Cancel: HandleCancel(); break; case RestaurantUiActions.PreviousTab: HandleMoveTab(-1); break; case RestaurantUiActions.NextTab: HandleMoveTab(1); break; case RestaurantUiActions.Interact1: HandleInteract1(); break; case RestaurantUiActions.Interact2: HandleInteract2(); break; default: throw new ArgumentOutOfRangeException(nameof(actionEnum), actionEnum, null); } } private void HandleCancel() { var evt = GameEvents.ClosePopupUiEvent; evt.UiType = GetType(); EventBus.Broadcast(evt); } private void HandleMoveTab(int direction) { _sectionTabs.Move(direction); } private void HandleInteract1() { var selected = EventSystem.current.currentSelectedGameObject; var interactable = selected?.GetComponent(); interactable?.OnInteract(); } private void HandleInteract2() { HandleCancel(); } private void OnSectionTabSelected(RestaurantManagementSectionType section) { // TODO : 추후 Menu, Cookware, Worker에 맞춰 다른 콘텐츠 노출 처리 } private void OnCategoryTabSelected(InventoryCategoryType category) { _inventoryView.UpdateCategoryView(category); _itemDetailView.UpdateCategory(category); } public void Invoke(TodayMenuRemovedEvent evt) { InventoryCategoryType newInventoryCategoryType = evt.RecipeType switch { RecipeType.FoodRecipe => InventoryCategoryType.Food, RecipeType.DrinkRecipe => InventoryCategoryType.Drink, _ => InventoryCategoryType.None }; if (newInventoryCategoryType == InventoryCategoryType.None) return; _categoryTabs.SelectTab(newInventoryCategoryType); } } }