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 _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 hashSet = new HashSet(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); } } } }