113 lines
3.7 KiB
C#
113 lines
3.7 KiB
C#
using System;
|
|
using UnityEngine;
|
|
using UnityEngine.EventSystems;
|
|
using UnityEngine.InputSystem;
|
|
|
|
namespace DDD
|
|
{
|
|
public class RestaurantManagementUi : PopupUi<RestaurantUiActions>, IEventHandler<TodayMenuRemovedEvent>
|
|
{
|
|
[SerializeField] private InventoryView _inventoryView;
|
|
[SerializeField] private ItemDetailView _itemDetailView;
|
|
[SerializeField] private TabGroupUi<RestaurantManagementSectionType> _sectionTabs;
|
|
[SerializeField] private TabGroupUi<InventoryCategoryType> _categoryTabs;
|
|
|
|
protected override GameObject GetInitialSelected()
|
|
{
|
|
var inventoryViewInitialSelectedObject = _inventoryView.GetInitialSelected();
|
|
if (inventoryViewInitialSelectedObject) return inventoryViewInitialSelectedObject;
|
|
|
|
return _categoryTabs.GetFirstInteractableButton;
|
|
}
|
|
|
|
public async override void Open()
|
|
{
|
|
await _inventoryView.Initialize();
|
|
_sectionTabs.Initialize(OnSectionTabSelected);
|
|
_categoryTabs.Initialize(OnCategoryTabSelected);
|
|
EventBus.Register<TodayMenuRemovedEvent>(this);
|
|
|
|
base.Open();
|
|
}
|
|
|
|
public override void Close()
|
|
{
|
|
base.Close();
|
|
|
|
EventBus.Unregister<TodayMenuRemovedEvent>(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<IInteractableUi>();
|
|
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);
|
|
}
|
|
}
|
|
} |