using System.Collections.Generic; using System.Linq; using BlueWater.Items; using UnityEngine; namespace BlueWater.Tycoons { public class TycoonIngredientController: MonoBehaviour { [field: SerializeField] public Barrel LiquidBarrelA { get; private set; } [field: SerializeField] public Barrel LiquidBarrelB { get; private set; } [field: SerializeField] public Barrel LiquidBarrelC { get; private set; } [field: SerializeField] public Barrel LiquidBarrelD { get; private set; } [field: SerializeField] public Barrel LiquidBarrelE { get; private set; } [field: SerializeField] public Barrel GarnishBarrel1 { get; private set; } [field: SerializeField] public Barrel GarnishBarrel2 { get; private set; } private List _barrels; private void Awake() { _barrels = new List { LiquidBarrelA, LiquidBarrelB, LiquidBarrelC, LiquidBarrelD, LiquidBarrelE, GarnishBarrel1, GarnishBarrel2 }; } /// /// 주문 가능한 칵테일데이터 반환 /// 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 GetValidCocktails(List activeIngredientsIdx) { var allCocktails = ItemManager.Instance.CocktailDataSo.GetData(); var validCocktails = new List(); foreach (var element in allCocktails.Values) { var requiredIngredients = element.GetValidIngredients().Select(ingredient => ingredient.Idx).ToList(); // 필요한 재료들이 모두 활성화된 재료 목록에 포함되어 있는지 확인 if (requiredIngredients.All(activeIngredientsIdx.Contains)) { if (element.Idx != "Cocktail000") { validCocktails.Add(element); } } } return validCocktails; } public List GetActivatedBarrels() { return _barrels.Where(barrel => barrel.IsActivated).ToList(); } public void AllAddBarrels(int addVal) { var activeBarrels = GetActivatedBarrels(); foreach (var VARIABLE in activeBarrels) { VARIABLE.SetCurrentAmount(VARIABLE.CurrentAmount + addVal, true); } } } }