CapersProject/Assets/02.Scripts/Tycoon/TycoonIngredientController.cs

127 lines
4.2 KiB
C#
Raw Normal View History

2024-11-11 06:09:32 +00:00
using System;
2024-09-30 12:05:19 +00:00
using System.Collections.Generic;
using System.Linq;
using BlueWater.Items;
2024-09-23 02:00:21 +00:00
using UnityEngine;
2024-11-11 06:09:32 +00:00
using Random = UnityEngine.Random;
2024-09-23 02:00:21 +00:00
namespace BlueWater.Tycoons
{
public class TycoonIngredientController: MonoBehaviour
{
[field: SerializeField]
2024-11-17 14:21:16 +00:00
public LiquidBarrel LiquidBarrelA { get; private set; }
2024-09-23 02:00:21 +00:00
[field: SerializeField]
2024-11-17 14:21:16 +00:00
public LiquidBarrel LiquidBarrelB { get; private set; }
2024-09-23 02:00:21 +00:00
[field: SerializeField]
2024-11-17 14:21:16 +00:00
public LiquidBarrel LiquidBarrelC { get; private set; }
2024-09-23 02:00:21 +00:00
[field: SerializeField]
2024-11-17 14:21:16 +00:00
public LiquidBarrel LiquidBarrelD { get; private set; }
2024-09-23 02:00:21 +00:00
[field: SerializeField]
2024-11-17 14:21:16 +00:00
public LiquidBarrel LiquidBarrelE { get; private set; }
2024-09-23 02:00:21 +00:00
[field: SerializeField]
2024-11-17 14:21:16 +00:00
public GarnishBarrel GarnishBarrel1 { get; private set; }
2024-09-23 02:00:21 +00:00
[field: SerializeField]
2024-11-17 14:21:16 +00:00
public GarnishBarrel GarnishBarrel2 { get; private set; }
2024-09-30 12:05:19 +00:00
private List<Barrel> _barrels;
private void Awake()
{
_barrels = new List<Barrel>
{
LiquidBarrelA, LiquidBarrelB, LiquidBarrelC, LiquidBarrelD, LiquidBarrelE, GarnishBarrel1, GarnishBarrel2
};
2024-11-11 06:09:32 +00:00
EventManager.OnCreateMold += SetMold;
}
private void OnDestroy()
{
EventManager.OnCreateMold -= SetMold;
2024-09-30 12:05:19 +00:00
}
/// <summary>
/// 주문 가능한 칵테일데이터 반환
/// </summary>
public CocktailData GetRandomCocktailData()
{
var activeBarrels = _barrels.Where(barrel => barrel.IsActivated).ToList();
var activeIngredientsIdx = activeBarrels.Select(barrel => barrel.GetLiquidData().Idx).ToList();
var validCocktails = GetValidCocktails(activeIngredientsIdx);
if (validCocktails == null || validCocktails.Count == 0)
{
Debug.LogWarning("유효한 칵테일 조합이 없습니다.");
return null;
}
// 유효한 칵테일 중 랜덤으로 하나 선택
var randomCocktail = validCocktails[Random.Range(0, validCocktails.Count)];
return randomCocktail;
}
private List<CocktailData> GetValidCocktails(List<string> activeIngredientsIdx)
{
var allCocktails = ItemManager.Instance.CocktailDataSo.GetData();
var validCocktails = new List<CocktailData>();
foreach (var element in allCocktails.Values)
{
2024-10-22 12:41:31 +00:00
var requiredIngredients = element.ValidIngredients.Select(ingredient => ingredient.Idx).ToList();
2024-09-30 12:05:19 +00:00
// 필요한 재료들이 모두 활성화된 재료 목록에 포함되어 있는지 확인
if (requiredIngredients.All(activeIngredientsIdx.Contains))
{
if (element.Idx != "Cocktail000")
{
validCocktails.Add(element);
}
}
}
return validCocktails;
}
2024-10-10 05:41:47 +00:00
2024-10-20 17:21:39 +00:00
public bool IsMakingCocktail(List<CocktailIngredient> cocktailIngredients)
{
var activatedBarrels = GetActivatedBarrels();
return cocktailIngredients.All(element =>
2024-11-17 14:21:16 +00:00
activatedBarrels.Find(barrel => barrel.GetLiquidData().Idx == element.Idx && barrel.CanMakingCocktailCrew(element.Amount)));
2024-10-20 17:21:39 +00:00
}
public void ConsumeMakingCocktailIngredient(List<CocktailIngredient> cocktailIngredients)
{
var activatedBarrels = GetActivatedBarrels();
foreach (var element in cocktailIngredients)
{
var barrel = activatedBarrels.Find(barrel => barrel.GetLiquidData().Idx == element.Idx);
barrel.Consume(element.Amount);
}
}
2024-10-10 05:41:47 +00:00
public List<Barrel> GetActivatedBarrels()
{
return _barrels.Where(barrel => barrel.IsActivated).ToList();
}
2024-11-11 06:09:32 +00:00
public void SetMold()
{
foreach (var element in GetActivatedBarrels())
{
if (!element.CanMold()) continue;
element.Mold();
return;
}
}
2024-09-23 02:00:21 +00:00
}
}