ProjectDDD/Assets/_DDD/_Scripts/GameState/RestaurantManagementSo.cs
2025-07-28 04:51:11 +09:00

77 lines
2.6 KiB
C#

using System.Collections.Generic;
using System.Threading.Tasks;
using Sirenix.OdinInspector;
using UnityEngine;
namespace DDD
{
[CreateAssetMenu(fileName = "RestaurantManagementSo", menuName = "GameState/RestaurantManagementSo")]
public class RestaurantManagementSo : GameFlowTask
{
[ReadOnly, SerializeField] private List<string> _foodRecipeIds = new();
[ReadOnly, SerializeField] private List<string> _drinkRecipeIds = new();
public IReadOnlyList<string> FoodRecipeIds => _foodRecipeIds;
public IReadOnlyList<string> DrinkRecipeIds => _drinkRecipeIds;
public int MaxFoodCount = 8;
public int MaxDrinkCount = 6;
public override Task OnReadyNewFlow(GameFlowState newFlowState)
{
_foodRecipeIds.Clear();
_drinkRecipeIds.Clear();
return Task.CompletedTask;
}
public bool TryAddTodayMenu(IInventorySlotUi itemSlotUi)
{
string recipeId = itemSlotUi.Model.Id;
if (_foodRecipeIds.Count >= MaxFoodCount || _foodRecipeIds.Contains(recipeId)) return false;
if (itemSlotUi.Model.ItemType == ItemType.Recipe)
{
if (DataManager.Instance.RecipeDataSo.TryGetDataById(recipeId, out RecipeData recipeData))
{
if (recipeData.RecipeType == RecipeType.FoodRecipe)
{
_foodRecipeIds.Add(recipeId);
}
else if (recipeData.RecipeType == RecipeType.DrinkRecipe)
{
_drinkRecipeIds.Add(recipeId);
}
}
}
EventBus.Broadcast(RestaurantEvents.TodayMenuAddedEvent);
return true;
}
public bool TryRemoveTodayMenu(IInventorySlotUi itemSlotUi)
{
string recipeId = itemSlotUi.Model.Id;
var evt = RestaurantEvents.TodayMenuRemovedEvent;
if (_foodRecipeIds.Remove(recipeId))
{
evt.RecipeType = RecipeType.FoodRecipe;
}
else if (_drinkRecipeIds.Remove(recipeId))
{
evt.RecipeType = RecipeType.DrinkRecipe;
}
else
{
return false;
}
EventBus.Broadcast(evt);
return true;
}
public bool IsContainTodayMenu(string recipeId) => _foodRecipeIds.Contains(recipeId) || _drinkRecipeIds.Contains(recipeId);
}
}