using System.Collections.Generic; using System.Linq; using DDD.ScriptableObjects; using Sirenix.OdinInspector; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.InputSystem; using UnityEngine.UI; namespace DDD.Uis.Tycoon { public class MealKitUi : PopupUi { [Title("프리팹")] [SerializeField] private MealKitButton _mealKitButtonPrefab; [Title("컴포넌트")] [SerializeField] private GameObject _panel; [SerializeField] private GameObject _mealKitsLocation; [Title("클래스")] [SerializeField] private UiEventsController _uiEventsController; [Title("데이터")] [SerializeField] private int _maxMealKitCount = 6; [Title("실시간 데이터")] [SerializeField] private List _mealKitButtons; private InputAction _interactionEAction; private InputAction _cancelAction; private InputAction _pressFAction; private void Awake() { // 더미 데이터 삭제 foreach (Transform element in _mealKitsLocation.transform) { if (element) { Destroy(element.gameObject); } } } private void Start() { EventManager.OnAddedMealKit += SetTodayMenus; _interactionEAction = PlayerInputKeyManager.Instance.GetAction(InputActionMaps.TycoonUi, TycoonUiActions.InteractionE); _cancelAction = PlayerInputKeyManager.Instance.GetAction(InputActionMaps.TycoonUi, TycoonUiActions.Cancel); _pressFAction = PlayerInputKeyManager.Instance.GetAction(InputActionMaps.TycoonUi, TycoonUiActions.PressF); _mealKitButtons = new List(_maxMealKitCount); for (int i = 0; i < _maxMealKitCount; i++) { MealKitButton mealKitButton = Instantiate(_mealKitButtonPrefab, _mealKitsLocation.transform); mealKitButton.RegisterButtonListener(() => OnClickedMealKit(mealKitButton)); _mealKitButtons.Add(mealKitButton); } _panel.SetActive(false); } private void OnDestroy() { EventManager.OnAddedMealKit -= SetTodayMenus; } private void OnClickedMealKit(MealKitButton mealKitButton) { if (mealKitButton.CanInteraction()) { CraftRecipeData newCraftRecipeData = new CraftRecipeData(mealKitButton.CraftRecipeData); EventManager.InvokePickupMealKit(newCraftRecipeData); mealKitButton.PickupMealKit(); Close(); } } public bool CanOpen() { return _mealKitButtons.Any(mealKitButton => mealKitButton.CanInteraction()); } public override void Open() { base.Open(); _panel.SetActive(true); PlayerInputKeyManager.Instance.SwitchCurrentActionMap(InputActionMaps.TycoonUi); SortMealKitButtons(); _uiEventsController.SetSelectObject(_mealKitButtons[0].gameObject); EventSystem.current.SetSelectedGameObject(_uiEventsController.SelectObject); } public void OnClose(InputAction.CallbackContext context) { Close(); } public override void Close() { _panel.SetActive(false); base.Close(); if (PopupUiController.IsPopupListEmpty() || !PopupUiController.IsPausedPopupList()) { PlayerInputKeyManager.Instance.SwitchCurrentActionMap(InputActionMaps.Tycoon); } } public override void EnableInput() { _interactionEAction.performed += OnInteractionE; _cancelAction.performed += OnClose; _pressFAction.performed += OnClose; _uiEventsController.EnableAutoNavigate(); } public override void DisableInput() { _interactionEAction.performed -= OnInteractionE; _cancelAction.performed -= OnClose; _pressFAction.performed -= OnClose; _uiEventsController.DisableAutoNavigate(); } private void OnInteractionE(InputAction.CallbackContext context) { if (!EventSystem.current) return; EventSystem.current.currentSelectedGameObject.GetComponent