using System; using System.Collections.Generic; using BlueWater.Audios; using BlueWater.Uis; using Sirenix.OdinInspector; using UnityEngine; namespace BlueWater.Tycoons { public class TycoonCardController: MonoBehaviour { [SerializeField] private TycoonCard _tycoonCardPrefab; [Title("So")] [field: SerializeField, Required] public CardDataSo CardDataSo { get; private set; } [field: SerializeField, Required] public CardShopDataSo CardShopDataSo { get; private set; } [field: SerializeField, Required] public CardNormalDataSo CardNormalDataSo { get; private set; } [field: SerializeField, Required] public CardRareDataSo CardRareDataSo { get; private set; } [Title("사운드")] [SerializeField] private string _selectCardSfxName = "SelectCard"; private TycoonManager _tycoonManager; private TycoonStatus _tycoonStatus; [ShowInInspector] public Dictionary SelectedCard { get; private set; } private void Awake() { SelectedCard = new Dictionary(CardDataSo.GetDataCount()); } private void Start() { _tycoonManager = TycoonManager.Instance; _tycoonStatus = _tycoonManager.TycoonStatus; } public TycoonCard CreateTycoonCard(Transform instantiateLocation = null) { return Instantiate(_tycoonCardPrefab, instantiateLocation); } public void DestroyCardList(List tycoonCards) { foreach (var element in tycoonCards) { if (!element || !element.gameObject) continue; Destroy(element.gameObject); } tycoonCards.Clear(); } public void SelectCard(TycoonCard currentTycoonCard) { AudioManager.Instance.PlaySfx(_selectCardSfxName, ignoreTimeScale:true); currentTycoonCard.CardCountUp(); switch (currentTycoonCard.CardDataForIdx.Idx) //탐색 후 행동... { case "HeartSlotPlus": _tycoonStatus.MaxPlayerHealth += 2; break; case "HeartRecovery": _tycoonStatus.CurrentPlayerHealth += 2; break; case "FullHeartRecovery": _tycoonStatus.CurrentPlayerHealth = _tycoonStatus.MaxPlayerHealth; break; case "AddLiquidB": _tycoonStatus.CurrentLiquidAmountB += 4000; break; case "AddLiquidC": _tycoonStatus.CurrentLiquidAmountC += 4000; break; case "AddLiquidD": _tycoonStatus.CurrentLiquidAmountD += 4000; break; case "AddLiquidE": _tycoonStatus.CurrentLiquidAmountE += 4000; break; case "AddGarnish1": _tycoonStatus.CurrentGarnishAmount1 += 4000; break; case "AddGarnish2": _tycoonStatus.CurrentGarnishAmount2 += 4000; break; case "AllLiquidAdd": EventManager.InvokeAddBarrels(1000); break; case "ServerNpcAdd": EventManager.InvokeCreateServerCrew(); break; case "CleanerNpcAdd": EventManager.InvokeCreateCleanerCrew(); break; case "BartenderNpcAdd": EventManager.InvokeCreateBartenderCrew(); break; case "SpeedBoost": _tycoonStatus.PlayerMoveSpeedMultiplier += 0.1f; break; case "ExpBoost": _tycoonStatus.ExpMultiplier += 0.1f; break; case "GoldBoost": _tycoonStatus.GoldMultiplier += 0.1f; break; case "AllCleanUp": EventManager.InvokeCleaningAll(); break; case "GaugeReset": EventManager.InvokeGaugeResetCustomers(); break; case "DashCooldownReduction": _tycoonStatus.PlayerDashCooldownReduction += 1; break; case "TipBoost": _tycoonStatus.TipMultiplier += 0.1f; break; case "EndGoldBoost": _tycoonStatus.EndGoldMultiplier += 0.1f; break; case "AllCustomerPurification": EventManager.InvokePurifiedCustomerAll(); break; case "GaugeTimeUp": _tycoonStatus.CustomerHurryTimeIncrease += 3; break; case "BarrelAutoSupply": if (CardFirstCheck("BarrelAutoSupply")) { EventManager.InvokeAutoSupplyBarrels(); } _tycoonStatus.BarrelAutoIncrease += 1; break; case "ServerNpcUpgrade": _tycoonStatus.ServerTipMultiplier += 0.1f; break; case "CleanerNpcUpgrade": _tycoonStatus.CleanerCleaningReduction += 1; break; case "BartenderNpcUpgrade": _tycoonStatus.BartenderMakingReduction += 1; break; case "PassiveDoubleServing": _tycoonStatus.AddPassiveCard(PassiveCard.DoubleServing); break; case "PassiveRandomChange": _tycoonStatus.AddPassiveCard(PassiveCard.RandomChange); EventManager.InvokeChangedRandomBox(); break; case "PassiveGoldAutoGain": _tycoonStatus.AddPassiveCard(PassiveCard.GoldAutoGain); EventManager.InvokeGainAutoMoneyCounter(_tycoonManager.TycoonStageController.StageDataSo.AutoGainWaitTime); break; case "PassiveMakingBonus": _tycoonStatus.AddPassiveCard(PassiveCard.MakingBonus); break; case "PassiveServingBonus": _tycoonStatus.AddPassiveCard(PassiveCard.ServingBonus); break; case "PassiveCleaningBonus": _tycoonStatus.AddPassiveCard(PassiveCard.CleaningBonus); break; default: Debug.Log("Not Found Card : IDX" + currentTycoonCard.CardDataForIdx.Idx); return; } AddToSelectedCard(currentTycoonCard.CardDataForIdx); } public void AddToSelectedCard(CardData cardData) { if (!SelectedCard.TryAdd(cardData.Idx, 1)) { SelectedCard[cardData.Idx] += 1; } } // 카드가 MAX값인지 확인할 때 - MAX값이면 true를 리턴 public bool CardMaxCheck(CardData cardData) { return SelectedCard.TryGetValue(cardData.Idx, out var value) && cardData.Max != 0 && value >= cardData.Max; } public int GetSelectedCardCount(string idx) { return SelectedCard.GetValueOrDefault(idx, 0); } // 카드가 처음 선택되었는지 확인할 때 - 0값이면 true를 리턴 public bool CardFirstCheck(string idx) { return CardDataSo.GetData().ContainsKey(idx) && !SelectedCard.ContainsKey(idx); } } }