CapersProject/Assets/02.Scripts/Ui/Tycoon/TycoonRareRewardBoxUi.cs
2024-11-17 13:29:57 +09:00

105 lines
3.5 KiB
C#

using System.Collections.Generic;
using BlueWater.Tycoons;
using UnityEngine;
using Sirenix.OdinInspector;
namespace BlueWater.Uis
{
public class TycoonRareRewardBoxUi : PopupUi
{
[SerializeField]
private GameObject _panel;
[SerializeField]
private Transform _contents;
[SerializeField]
private Vector3 _cardLocalScale = new(0.65f, 0.65f, 1f);
private List<TycoonCard> _tycoonCards = new(5);
private LevelData _currentLevelData;
private TycoonManager _tycoonManager;
private TycoonCardController _tycoonCardController;
private void Start()
{
_panel.SetActive(false);
_tycoonManager = TycoonManager.Instance;
_tycoonCardController = _tycoonManager.TycoonCardController;
EventManager.OnOpenedRareRewardBox += CreateCard;
}
private void OnDestroy()
{
EventManager.OnOpenedRareRewardBox -= CreateCard;
}
public override void Open()
{
PlayerInputKeyManager.Instance.DisableAction("OpenManualBook");
VisualFeedbackManager.Instance.SetBaseTimeScale(0.0f);
PlayerInputKeyManager.Instance.SwitchCurrentActionMap(InputActionMaps.TycoonUi);
PopupUiController.RegisterPopup(this);
_panel.SetActive(true);
IsOpened = true;
}
public override void Close()
{
_panel.SetActive(false);
PopupUiController.UnregisterPopup(this);
PlayerInputKeyManager.Instance.SwitchCurrentActionMap(InputActionMaps.Tycoon);
IsOpened = false;
VisualFeedbackManager.Instance.ResetTimeScale();
PlayerInputKeyManager.Instance.EnableAction("OpenManualBook");
}
[Button("레어 상자 열기")]
private void CreateCard()
{
if (!Application.isPlaying) return;
_currentLevelData = TycoonManager.Instance.GetCurrentLevelData();
_tycoonCardController.DestroyCardList(_tycoonCards);
var randomCount = Random.Range(2, 6);
for (int i = 0; i < randomCount; i++)
{
var newCard = _tycoonCardController.CreateTycoonCard(_contents);
newCard.SetName($"Card{i:00}");
newCard.SetLocalScale(_cardLocalScale);
_tycoonCards.Add(newCard);
}
Open();
//----카드 값 지정 및 초기화----
HashSet<string> hashSet = new HashSet<string>(randomCount - 1);
foreach (var element in _tycoonCards)
{
CardData cardData = null;
string cardIdx = null;
do
{
cardData = _tycoonManager.CardDataSo.GetRandCardData();
cardData = _tycoonManager.CardDataSo.SubstitutionLiquid(cardData, _currentLevelData);
if (cardData != null)
{
cardIdx = cardData.Idx;
}
} while (cardData == null || _tycoonManager.CardDataSo.CardMaxCheck(cardData) ||
hashSet.Contains(cardIdx) || cardData.Type == CardType.Passive);
hashSet.Add(cardIdx);
element.SetCard(cardData);
element.Rotation_Start();
_tycoonCardController.SelectedCard(element);
}
}
}
}