185 lines
6.3 KiB
C#
185 lines
6.3 KiB
C#
using System;
|
|
using UnityEngine;
|
|
using UnityEngine.EventSystems;
|
|
using UnityEngine.InputSystem;
|
|
using UnityEngine.UI;
|
|
|
|
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> _menuCategoryTabs;
|
|
[SerializeField] private TabGroupUi<InventoryCategoryType> _cookwareCategoryTabs;
|
|
[SerializeField] private Image _completeBatchFilledImage;
|
|
|
|
[SerializeField] private float _holdCompleteTime = 1f;
|
|
private float _elapsedTime;
|
|
private bool _isHolding;
|
|
|
|
protected override void Update()
|
|
{
|
|
base.Update();
|
|
|
|
if (_isHolding)
|
|
{
|
|
_completeBatchFilledImage.fillAmount = _elapsedTime;
|
|
|
|
var multiply = _holdCompleteTime / 1f;
|
|
if (_elapsedTime >= 1f)
|
|
{
|
|
HandleInteract2Canceled(); // TODO : 추후에 팝업 연결
|
|
var evt = GameEvents.ShowConfirmPopupUiEvent;
|
|
evt.IsCancelButtonVisible = true;
|
|
evt.NewMessageKey = "Global_Message_001";
|
|
evt.OnConfirm = Close;
|
|
EventBus.Broadcast(evt);
|
|
//HandleCancelPerformed();
|
|
return;
|
|
}
|
|
|
|
_elapsedTime += Time.deltaTime * multiply;
|
|
}
|
|
}
|
|
|
|
protected override GameObject GetInitialSelected()
|
|
{
|
|
var inventoryViewInitialSelectedObject = _inventoryView.GetInitialSelected();
|
|
if (inventoryViewInitialSelectedObject) return inventoryViewInitialSelectedObject;
|
|
|
|
if (_menuCategoryTabs.GetFirstInteractableButton.activeInHierarchy)
|
|
{
|
|
return _menuCategoryTabs.GetFirstInteractableButton;
|
|
}
|
|
|
|
return _cookwareCategoryTabs.GetFirstInteractableButton;
|
|
}
|
|
|
|
public async override void Open()
|
|
{
|
|
base.Open();
|
|
|
|
await _inventoryView.Initialize();
|
|
_sectionTabs.Initialize(OnSectionTabSelected);
|
|
_menuCategoryTabs.Initialize(OnCategoryTabSelected);
|
|
_cookwareCategoryTabs.Initialize(OnCategoryTabSelected);
|
|
|
|
_sectionTabs.SelectFirstTab();
|
|
_menuCategoryTabs.SelectFirstTab();
|
|
EventBus.Register<TodayMenuRemovedEvent>(this);
|
|
}
|
|
|
|
public override void Close()
|
|
{
|
|
base.Close();
|
|
|
|
EventBus.Unregister<TodayMenuRemovedEvent>(this);
|
|
}
|
|
|
|
protected override void OnInputPerformed(RestaurantUiActions actionEnum, InputAction.CallbackContext context)
|
|
{
|
|
base.OnInputPerformed(actionEnum, context);
|
|
|
|
switch (actionEnum)
|
|
{
|
|
case RestaurantUiActions.Cancel:
|
|
HandleCancelPerformed();
|
|
break;
|
|
case RestaurantUiActions.PreviousTab:
|
|
HandleMoveTabPerformed(-1);
|
|
break;
|
|
case RestaurantUiActions.NextTab:
|
|
HandleMoveTabPerformed(1);
|
|
break;
|
|
case RestaurantUiActions.Interact1:
|
|
HandleInteract1Performed();
|
|
break;
|
|
case RestaurantUiActions.Interact2:
|
|
HandleInteract2Performed();
|
|
break;
|
|
}
|
|
}
|
|
|
|
protected override void OnInputCanceled(RestaurantUiActions actionEnum, InputAction.CallbackContext context)
|
|
{
|
|
base.OnInputCanceled(actionEnum, context);
|
|
|
|
switch (actionEnum)
|
|
{
|
|
case RestaurantUiActions.Interact2:
|
|
HandleInteract2Canceled();
|
|
break;
|
|
}
|
|
}
|
|
|
|
private void HandleCancelPerformed()
|
|
{
|
|
var evt = GameEvents.ClosePopupUiEvent;
|
|
evt.UiType = GetType();
|
|
EventBus.Broadcast(evt);
|
|
}
|
|
|
|
private void HandleMoveTabPerformed(int direction)
|
|
{
|
|
_sectionTabs.Move(direction);
|
|
}
|
|
|
|
private void HandleInteract1Performed()
|
|
{
|
|
var selected = EventSystem.current.currentSelectedGameObject;
|
|
var interactable = selected?.GetComponent<IInteractableUi>();
|
|
interactable?.OnInteract();
|
|
}
|
|
|
|
// TODO : 버튼과 연동
|
|
private void HandleInteract2Performed()
|
|
{
|
|
_isHolding = true;
|
|
}
|
|
|
|
private void HandleInteract2Canceled()
|
|
{
|
|
_isHolding = false;
|
|
_elapsedTime = 0f;
|
|
_completeBatchFilledImage.fillAmount = 0f;
|
|
}
|
|
|
|
private void OnSectionTabSelected(RestaurantManagementSectionType section)
|
|
{
|
|
switch (section)
|
|
{
|
|
case RestaurantManagementSectionType.Menu:
|
|
_menuCategoryTabs.SelectFirstTab();
|
|
break;
|
|
case RestaurantManagementSectionType.Cookware:
|
|
_cookwareCategoryTabs.SelectFirstTab();
|
|
break;
|
|
default:
|
|
throw new ArgumentOutOfRangeException(nameof(section), section, null);
|
|
}
|
|
// 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;
|
|
|
|
_menuCategoryTabs.SelectTab(newInventoryCategoryType);
|
|
}
|
|
}
|
|
} |