using System.Collections.Generic; using DDD.ScriptableObjects; using DDD.Utility; using Sirenix.OdinInspector; using TMPro; using UnityEngine; using UnityEngine.Events; using UnityEngine.UI; namespace DDD.Uis.Tycoon { public class TodayMenu : MonoBehaviour { [Title("프리팹")] [SerializeField] private MenuHashTag _menuHashTagPrefab; [Title("컴포넌트")] [SerializeField] private GameObject _emptyPanel; [SerializeField] private Image _menuButtonImage; [field: SerializeField] public Button MenuButton { get; private set; } [SerializeField] private GameObject _menuInformationPanel; [SerializeField] private GameObject _addedPanel; [SerializeField] private TMP_Text _priceText; [SerializeField] private TMP_Text _countText; [SerializeField] private TMP_Text _nameText; [SerializeField] private GameObject _menuHashTagsPanel; [Title("데이터")] [SerializeField] private Sprite _emptySprite; [SerializeField] private int _maxHashTagCount = 3; [Title("실시간 데이터")] [SerializeField, DisableIf("@true")] private bool _isAddedMenu; public bool IsAddedMenu { get => _isAddedMenu; private set { _isAddedMenu = value; if (_isAddedMenu) { _emptyPanel.SetActive(false); _menuInformationPanel.SetActive(true); _addedPanel.SetActive(true); } else { _menuButtonImage.sprite = _emptySprite; _emptyPanel.SetActive(true); _menuInformationPanel.SetActive(false); _addedPanel.SetActive(false); } } } public CraftRecipeData AddedCraftRecipeData { get; private set; } public int AddedCount { get; private set; } [SerializeField] private List _menuHashTags; private UnityAction _clickAction; private void Start() { // 더미 데이터 삭제 foreach (Transform element in _menuHashTagsPanel.transform) { if (element) { Destroy(element.gameObject); } } _menuHashTags = new List(_maxHashTagCount); for (int i = 0; i < _maxHashTagCount; i++) { MenuHashTag menuHashTag = Instantiate(_menuHashTagPrefab, _menuHashTagsPanel.transform); menuHashTag.HideUi(); _menuHashTags.Add(menuHashTag); } SetEmpty(); } private void OnDestroy() { UnregisterButtonListener(); } public void RegisterButtonListener(UnityAction clickAction) { _clickAction = clickAction; MenuButton.onClick.AddListener(_clickAction); } private void UnregisterButtonListener() { if (_clickAction == null) return; MenuButton.onClick.RemoveListener(_clickAction); _clickAction = null; } public void AddMenu(CraftRecipeData craftRecipeData, int count) { if (IsAddedMenu && AddedCraftRecipeData != null) { AddedCount += count; } else { AddedCraftRecipeData = craftRecipeData; AddedCount = count; _nameText.text = Utils.GetLocalizedString(AddedCraftRecipeData.Idx); _menuButtonImage.sprite = AddedCraftRecipeData.Sprite; IsAddedMenu = true; } _priceText.text = (craftRecipeData.Price * AddedCount).ToString(); _countText.text = AddedCount.ToString(); int validHashTagCount = AddedCraftRecipeData.ValidHashTags.Count; for (int i = 0; i < _maxHashTagCount; i++) { if (i >= validHashTagCount) { _menuHashTags[i].HideUi(); continue; } _menuHashTags[i].SetTag(AddedCraftRecipeData.ValidHashTags[i]); _menuHashTags[i].ShowUi(); } } public void SetEmpty() { _menuButtonImage.sprite = _emptySprite; AddedCraftRecipeData = null; _priceText.text = null; _countText.text = null; _nameText.text = null; for (int i = 0; i < _maxHashTagCount; i++) { _menuHashTags[i].HideUi(); } _isAddedMenu = false; _menuInformationPanel.SetActive(false); } public bool CanOrderMenu() { return AddedCraftRecipeData != null && AddedCount > 0; } public void OrderMenu() { AddedCount--; } } }