ProjectDDD/Assets/_DDD/_Scripts/GameUi/New/ItemViewModelFactory.cs
2025-07-28 20:33:04 +09:00

75 lines
2.7 KiB
C#

using System.Collections.Generic;
using System.Linq;
namespace DDD
{
public static class ItemViewModelFactory
{
public static List<ItemViewModel> CreateRestaurantManagementInventoryItem()
{
var result = new List<ItemViewModel>();
var recipeDataMap = DataManager.Instance.RecipeDataSo.GetDataList().ToDictionary(r => r.Id, r => r);
var foodDataMap = DataManager.Instance.FoodDataSo.GetDataList().ToDictionary(f => f.Id, f => f);
var drinkDataMap = DataManager.Instance.DrinkDataSo.GetDataList().ToDictionary(d => d.Id, d => d);
var ingredientDataMap = DataManager.Instance.IngredientDataSo.GetDataList().ToDictionary(i => i.Id, i => i);
foreach (var kvp in InventoryManager.Instance.InventoryItems)
{
var id = kvp.Key;
var item = InventoryManager.Instance.GetItemDataByIdOrNull(id);
if (item == null) continue;
var model = new ItemViewModel
{
Id = item.Id,
ItemType = item.ItemType,
Count = item.ItemType switch
{
ItemType.Recipe => CalculateCraftableCount(item.Id),
ItemType.Ingredient => InventoryManager.Instance.GetItemCount(id),
_ => 0
}
};
result.Add(model);
}
return result;
}
private static int CalculateCraftableCount(string recipeId)
{
if (!DataManager.Instance.RecipeDataSo.TryGetDataById(recipeId, out var recipe)) return 0;
string recipeResult = recipe.RecipeResult;
return recipe.RecipeType switch
{
RecipeType.FoodRecipe => DataManager.Instance.FoodDataSo.TryGetDataById(recipeResult, out var food)
? food.GetCraftableCount()
: 0,
RecipeType.DrinkRecipe => DataManager.Instance.DrinkDataSo.TryGetDataById(recipeResult, out var drink)
? drink.GetCraftableCount()
: 0,
_ => 0
};
}
public static ItemViewModel CreateByRecipeId(string recipeId)
{
var recipeSo = DataManager.Instance.RecipeDataSo;
if (!recipeSo.TryGetDataById(recipeId, out var recipe)) return null;
var item = InventoryManager.Instance.GetItemDataByIdOrNull(recipeId);
if (item == null) return null;
var model = new ItemViewModel
{
Id = recipeId,
ItemType = item.ItemType,
};
return model;
}
}
}