ProjectDDD/Assets/_DDD/_Scripts/GameUi/New/TodayMenuInteractor.cs

73 lines
2.1 KiB
C#

using System;
using System.Threading.Tasks;
using UnityEngine;
namespace DDD
{
public enum TodayMenuEventType
{
None = 0,
Add,
Remove
}
public class TodayMenuInteractor : MonoBehaviour, IInteractableUi
{
private IInventorySlotUi _inventorySlotUi;
private TodayMenuDataSo _todayMenuDataSo;
private TaskCompletionSource<bool> _isInitialized = new();
private TodayMenuEventType _todayMenuEventType = TodayMenuEventType.None;
private void Awake()
{
_inventorySlotUi = GetComponent<IInventorySlotUi>();
}
public async void Initialize(TodayMenuEventType todayMenuEventType)
{
_todayMenuEventType = todayMenuEventType;
_todayMenuDataSo = await AssetManager.LoadAsset<TodayMenuDataSo>(DataConstants.TodayMenuDataSo);
_isInitialized.SetResult(true);
}
public async void OnInteract()
{
await _isInitialized.Task;
switch (_todayMenuEventType)
{
case TodayMenuEventType.Add:
OnAdded();
break;
case TodayMenuEventType.Remove:
OnRemoved();
break;
case TodayMenuEventType.None:
default:
throw new ArgumentOutOfRangeException();
}
}
private void OnAdded()
{
if (_inventorySlotUi.CanCraft() == false)
{
var evt = GameEvents.RequestShowGlobalMessageEvent;
// TODO : 테스트용 메세지 추후 삭제 및 변경
evt.NewMessageKey = "today_menu_added_error_message_001";
evt.FadeDuration = 0.5f;
evt.ShowDuration = 1f;
EventBus.Broadcast(evt);
return;
}
_todayMenuDataSo.TryAddTodayMenu(_inventorySlotUi);
}
private void OnRemoved()
{
_todayMenuDataSo.TryRemoveTodayMenu(_inventorySlotUi);
}
}
}