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

128 lines
4.8 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,
Icon = DataManager.Instance.GetSprite(id),
Count = item.ItemType switch
{
ItemType.Recipe => CalculateCraftableCount(item.Id),
ItemType.Ingredient => InventoryManager.Instance.GetItemCount(id),
_ => 0
}
};
if (recipeDataMap.TryGetValue(item.Id, out var recipe))
{
var itemKey = recipe.ItemKey;
switch (recipe.RecipeType)
{
case RecipeType.FoodRecipe:
if (foodDataMap.TryGetValue(itemKey, out var food))
{
model.NameKey = food.NameKey;
model.DescriptionKey = food.DescriptionKey;
}
break;
case RecipeType.DrinkRecipe:
if (drinkDataMap.TryGetValue(itemKey, out var drink))
{
model.NameKey = drink.NameKey;
model.DescriptionKey = drink.DescriptionKey;
}
break;
}
}
else if (ingredientDataMap.TryGetValue(item.Id, out var ingredient))
{
model.NameKey = ingredient.NameKey;
model.DescriptionKey = ingredient.DescriptionKey;
}
result.Add(model);
}
return result;
}
private static int CalculateCraftableCount(string recipeId)
{
if (!DataManager.Instance.RecipeDataSo.TryGetDataById(recipeId, out var recipe)) return 0;
string itemKey = recipe.ItemKey;
return recipe.RecipeType switch
{
RecipeType.FoodRecipe => DataManager.Instance.FoodDataSo.TryGetDataById(itemKey, out var food)
? food.GetCraftableCount()
: 0,
RecipeType.DrinkRecipe => DataManager.Instance.DrinkDataSo.TryGetDataById(itemKey, 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,
Icon = DataManager.Instance.GetSprite(recipeId)
};
switch (recipe.RecipeType)
{
case RecipeType.FoodRecipe:
if (DataManager.Instance.FoodDataSo.TryGetDataById(recipe.ItemKey, out var food))
{
model.NameKey = food.NameKey;
model.DescriptionKey = food.DescriptionKey;
}
break;
case RecipeType.DrinkRecipe:
if (DataManager.Instance.DrinkDataSo.TryGetDataById(recipe.ItemKey, out var drink))
{
model.NameKey = drink.NameKey;
model.DescriptionKey = drink.DescriptionKey;
}
break;
}
return model;
}
}
}