using System; using System.Collections.Generic; using System.Linq; using BlueWater.Items; using Sirenix.OdinInspector; using UnityEngine; namespace BlueWater.Uis { public class DailyFoodMenuUi : MonoBehaviour { [Title("프리팹 생성 위치")] [SerializeField, Required] private Transform _fryingPanFoodSlotLocation; [SerializeField, Required] private Transform _soupFoodSlotLocation; [SerializeField, Required] private Transform _skewerFoodSlotLocation; [SerializeField, Required] private Transform _dessertFoodSlotLocation; [Title("프리팹")] [SerializeField, Required] private TycoonItemSlotUi _dailyFoodSlotUi; private List _fryingPanFoodSlotUis = new(3); private List _soupFoodSlotUis = new(3); private List _skewerFoodSlotUis = new(3); private List _dessertPanFoodSlotUis = new(3); private CookUi _cookUi; private void Start() { Initialize(); } private void Initialize() { _cookUi = TycoonUiManager.Instance.TycoonManagementUi.CookMenuUi.CookUi; _fryingPanFoodSlotUis = _fryingPanFoodSlotLocation.GetComponentsInChildren().ToList(); foreach (var element in _fryingPanFoodSlotUis) { element.SetFoodData(null); element.AddButtonClickListener(() => RemoveDailyFood(element)); } _soupFoodSlotUis = _soupFoodSlotLocation.GetComponentsInChildren().ToList(); foreach (var element in _soupFoodSlotUis) { element.SetFoodData(null); element.AddButtonClickListener(() => RemoveDailyFood(element)); } _skewerFoodSlotUis = _skewerFoodSlotLocation.GetComponentsInChildren().ToList(); foreach (var element in _skewerFoodSlotUis) { element.SetFoodData(null); element.AddButtonClickListener(() => RemoveDailyFood(element)); } _dessertPanFoodSlotUis = _dessertFoodSlotLocation.GetComponentsInChildren().ToList(); foreach (var element in _dessertPanFoodSlotUis) { element.SetFoodData(null); element.AddButtonClickListener(() => RemoveDailyFood(element)); } } private void RemoveDailyFood(TycoonItemSlotUi tycoonItemSlotUi) { tycoonItemSlotUi.SetFoodData(null); _cookUi.CheckCookable(); } public bool IsEmptyDailyFoodMenu(FoodData selectedFoodData) { var selectedTypeItemSlotUis = GetDailyFoodType(selectedFoodData.Type); foreach (var element in selectedTypeItemSlotUis) { if (element.GetIsLocked() || element.FoodData != null) continue; return true; } return false; } public void AddDailyFoodMenu(FoodData selectedFoodData) { var selectedTypeItemSlotUis = GetDailyFoodType(selectedFoodData.Type); foreach (var element in selectedTypeItemSlotUis) { if (element.GetIsLocked() || element.FoodData != null) continue; element.SetFoodData(selectedFoodData); return; } } private List GetDailyFoodType(FoodType foodType) { switch (foodType) { case FoodType.None: Debug.LogError($"FoodType이 None입니다."); return null; case FoodType.Skewer: return _skewerFoodSlotUis; case FoodType.Soup: return _soupFoodSlotUis; case FoodType.FryingPan: return _fryingPanFoodSlotUis; case FoodType.Dessert: return _dessertPanFoodSlotUis; default: throw new ArgumentOutOfRangeException(nameof(foodType), foodType, null); } } public bool CanOpen() { return _fryingPanFoodSlotUis.Any(slot => slot.FoodData != null) || _soupFoodSlotUis.Any(slot => slot.FoodData != null) || _skewerFoodSlotUis.Any(slot => slot.FoodData != null) || _dessertPanFoodSlotUis.Any(slot => slot.FoodData != null); } } }