189 lines
5.3 KiB
C#
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--;
|
|
}
|
|
}
|
|
}
|