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

137 lines
4.6 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;
2025-02-10 02:13:46 +00:00
using DDD.Audios;
using DDD.Items;
2024-11-28 23:07:50 +00:00
using Sirenix.OdinInspector;
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
2025-02-10 02:13:46 +00:00
namespace DDD.Tycoons
2024-09-23 02:00:21 +00:00
{
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;
2024-12-17 11:25:53 +00:00
[SerializeField]
private string _createMoldySfxName = "CreateMoldy";
2024-09-30 12:05:19 +00:00
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)
{
2025-02-10 02:13:46 +00:00
//var allCocktails = ItemManager.Instance.CocktailDataSo.GetData();
2024-09-30 12:05:19 +00:00
var validCocktails = new List<CocktailData>();
2025-02-10 02:13:46 +00:00
// foreach (var element in allCocktails.Values)
// {
// var requiredIngredients = element.ValidIngredients.Select(ingredient => ingredient.Idx).ToList();
//
// // 필요한 재료들이 모두 활성화된 재료 목록에 포함되어 있는지 확인
// if (requiredIngredients.All(activeIngredientsIdx.Contains))
// {
// if (element.Idx != "Cocktail000")
// {
// validCocktails.Add(element);
// }
// }
// }
2024-09-30 12:05:19 +00:00
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
2024-11-28 23:07:50 +00:00
[Button("곰팡이 테스트")]
2024-11-11 06:09:32 +00:00
public void SetMold()
{
2024-11-28 23:07:50 +00:00
List<Barrel> moldableElements = GetActivatedBarrels()
.Where(element => element.CanMold())
.ToList();
if (moldableElements.Count == 0)
2024-11-11 06:09:32 +00:00
return;
2024-11-28 23:07:50 +00:00
int randomIndex = Random.Range(0, moldableElements.Count);
moldableElements[randomIndex].Mold();
2024-12-17 11:25:53 +00:00
AudioManager.Instance.PlaySfx(_createMoldySfxName);
2024-11-11 06:09:32 +00:00
}
2024-09-23 02:00:21 +00:00
}
}