CapersProject/Assets/02.Scripts/DDD/Ui/Tycoon/TodayMenu.cs
2025-02-18 18:35:13 +09:00

189 lines
5.3 KiB
C#

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<MenuHashTag> _menuHashTags;
private UnityAction _clickAction;
private void Start()
{
// 더미 데이터 삭제
foreach (Transform element in _menuHashTagsPanel.transform)
{
if (element)
{
Destroy(element.gameObject);
}
}
_menuHashTags = new List<MenuHashTag>(_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--;
}
}
}