using System.Collections.Generic; using BlueWater.Audios; using BlueWater.Tycoons; using UnityEngine; using Sirenix.OdinInspector; using UnityEngine.UI; namespace BlueWater.Uis { public class TycoonRareRewardBoxUi : PopupUi { [SerializeField] private GameObject _panel; [SerializeField] private Transform _contents; [SerializeField] private Vector3 _cardLocalScale_2 = new(0.9f, 0.9f, 1f); private Vector3 _cardLocalScale_3 = new(0.8f, 0.8f, 1f); private Vector3 _cardLocalScale_4 = new(0.7f, 0.7f, 1f); private Vector3 _cardLocalScale_5 = new(0.65f, 0.65f, 1f); [SerializeField] private string _openSfxName = "RareRewardBox"; 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() { VisualFeedbackManager.Instance.SetBaseTimeScale(0.0f); AudioManager.Instance.PlaySfx(_openSfxName, ignoreTimeScale: true); 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(); } [Button("레어 상자 열기")] private void CreateCard() { if (!Application.isPlaying) return; _currentLevelData = TycoonManager.Instance.GetCurrentLevelData(); _tycoonCardController.DestroyCardList(_tycoonCards); var randomCount = Random.Range(2, 6); _contents.GetComponent().spacing = randomCount * 10; for (int i = 0; i < randomCount; i++) { var newCard = _tycoonCardController.CreateTycoonCard(_contents); newCard.SetName($"Card{i:00}"); switch (randomCount) { case 2: newCard.SetLocalScale(_cardLocalScale_2); break; case 3: newCard.SetLocalScale(_cardLocalScale_3); break; case 4: newCard.SetLocalScale(_cardLocalScale_4); break; case 5: newCard.SetLocalScale(_cardLocalScale_5); break; default: newCard.SetLocalScale(_cardLocalScale_5); break; } _tycoonCards.Add(newCard); } Open(); //----카드 값 지정 및 초기화---- HashSet hashSet = new HashSet(randomCount - 1); foreach (var element in _tycoonCards) { CardRareData cardRareData = null; CardData cardData = null; string cardIdx = null; do { cardRareData = _tycoonCardController.CardRareDataSo.GetRandomCardData(); cardIdx = cardRareData.Idx; cardRareData = _tycoonCardController.CardRareDataSo.SubstitutionLiquid(cardRareData, _currentLevelData); cardData = _tycoonCardController.CardDataSo.GetDataByIdx(cardIdx); } while (cardRareData == null || _tycoonCardController.CardMaxCheck(cardData) || hashSet.Contains(cardIdx)); hashSet.Add(cardIdx); element.SetCard(cardData); element.Rotation_Start(); _tycoonCardController.SelectCard(element); } } } }