CapersProject/Assets/02.Scripts/Ui/Tycoon/TycoonEpicBoxUi.cs
2024-11-15 22:12:39 +09:00

414 lines
17 KiB
C#

using BlueWater.Tycoons;
using UnityEngine;
using Sirenix.OdinInspector;
namespace BlueWater.Uis
{
public class TycoonEpicBoxUi : PopupUi
{
[field: SerializeField, CLabel("카드 프리펫")]
private GameObject cardPerfab;
private GameObject _panel;
private GameObject _currentCard01;
private GameObject _currentCard02;
private GameObject _currentCard03;
private GameObject _currentCard04;
private GameObject _currentCard05;
private TycoonCard _tycoonCard01Componet;
private TycoonCard _tycoonCard02Componet;
private TycoonCard _tycoonCard03Componet;
private TycoonCard _tycoonCard04Componet;
private TycoonCard _tycoonCard05Componet;
private LevelData _lvData;
private TycoonManager _tycoonManager;
private TycoonStatus _tycoonStatus;
private void Awake()
{
EventManager.OnOpenedNormalRewardBox += CreateCard;
_panel = transform.Find("Panel").gameObject;
HideUi();
}
void Start()
{
_tycoonManager = TycoonManager.Instance;
_tycoonStatus = _tycoonManager.TycoonStatus;
}
private void OnDestroy()
{
EventManager.OnOpenedNormalRewardBox -= CreateCard;
}
public override void Open()
{
VisualFeedbackManager.Instance.SetBaseTimeScale(0.0f);
PlayerInputKeyManager.Instance.DisableAction("Manual");
PopupUiController.RegisterPopup(this);
ShowUi();
IsOpened = true;
}
public override void Close()
{
HideUi();
PlayerInputKeyManager.Instance.EnableAction("Manual");
PopupUiController.UnregisterPopup(this);
IsOpened = false;
if (!PopupUiController.IsPopupListEmpty()) return;
VisualFeedbackManager.Instance.ResetTimeScale();
}
[Button("에픽상자 열기")]
private void CreateCard()
{
/*
* 해당 기능에 대해서는 TycoonSelectCard와 유사한 기능이 많기에... 따로 분리시켜서 효율적으로 관리하도록하자...
* SelectedCard(...) 에 대해서도 이하동문
*/
_lvData = TycoonManager.Instance.GetCurrentLevelData();
if (!Application.isPlaying) return;
// 기존 카드가 있으면 삭제
if (_currentCard01 != null) { Destroy(_currentCard01); }
if (_currentCard02 != null) { Destroy(_currentCard02); }
if (_currentCard03 != null) { Destroy(_currentCard03); }
if (_currentCard04 != null) { Destroy(_currentCard04); }
if (_currentCard05 != null) { Destroy(_currentCard05); }
int rand = Random.Range(2, 6);
_currentCard01 = Instantiate(cardPerfab, _panel.transform);
_currentCard01.name = "Card01";
_currentCard02 = Instantiate(cardPerfab, _panel.transform);
_currentCard02.name = "Card02";
if (rand >= 3)
{
_currentCard03 = Instantiate(cardPerfab, _panel.transform);
_currentCard03.name = "Card03";
}
if (rand >= 4)
{
_currentCard04 = Instantiate(cardPerfab, _panel.transform);
_currentCard04.name = "Card04";
}
if (rand >= 5)
{
_currentCard05 = Instantiate(cardPerfab, _panel.transform);
_currentCard05.name = "Card05";
}
var scale = new Vector3(0.65f, 0.65f, 1f);
if (rand >= 5)
{
_currentCard01.transform.localPosition = new Vector3(-700, 30, 0);
_currentCard01.transform.localScale = scale;
_currentCard02.transform.localPosition = new Vector3(-350, 30, 0);
_currentCard02.transform.localScale = scale;
_currentCard03.transform.localPosition = new Vector3(0, 30, 0);
_currentCard03.transform.localScale = scale;
_currentCard04.transform.localPosition = new Vector3(350, 30, 0);
_currentCard04.transform.localScale = scale;
_currentCard05.transform.localPosition = new Vector3(700, 30, 0);
_currentCard05.transform.localScale = scale;
}
else if (rand >= 4)
{
_currentCard01.transform.localPosition = new Vector3(-525, 30, 0);
_currentCard01.transform.localScale = scale;
_currentCard02.transform.localPosition = new Vector3(-175, 30, 0);
_currentCard02.transform.localScale = scale;
_currentCard03.transform.localPosition = new Vector3(175, 30, 0);
_currentCard03.transform.localScale = scale;
_currentCard04.transform.localPosition = new Vector3(525, 30, 0);
_currentCard04.transform.localScale = scale;
}
else if (rand >= 3)
{
_currentCard01.transform.localPosition = new Vector3(-350, 30, 0);
_currentCard01.transform.localScale = scale;
_currentCard02.transform.localPosition = new Vector3(0, 30, 0);
_currentCard02.transform.localScale = scale;
_currentCard03.transform.localPosition = new Vector3(350, 30, 0);
_currentCard03.transform.localScale = scale;
}
else if (rand >= 2)
{
_currentCard01.transform.localPosition = new Vector3(-175, 30, 0);
_currentCard01.transform.localScale = scale;
_currentCard02.transform.localPosition = new Vector3(175, 30, 0);
_currentCard02.transform.localScale = scale;
}
_tycoonCard01Componet = _currentCard01.GetComponent<TycoonCard>();
_tycoonCard02Componet = _currentCard02.GetComponent<TycoonCard>();
if (rand >= 3) _tycoonCard03Componet = _currentCard03.GetComponent<TycoonCard>();
if (rand >= 4) _tycoonCard04Componet = _currentCard04.GetComponent<TycoonCard>();
if (rand >= 5) _tycoonCard05Componet = _currentCard05.GetComponent<TycoonCard>();
Open();
//----카드 값 지정 및 초기화----
CardData card;
var card01Key = "NULL VAL";
do
{
card = _tycoonManager.CardDataSo.GetRandCardData();
card = _tycoonManager.CardDataSo.SubstitutionLiquid(card, _lvData);
if (card != null)
{
card01Key = card.Idx;
}
} while (card == null || _tycoonManager.CardDataSo.CardMaxCheck(card) //Max 검사
|| card.Type == CardType.Passive);//패시브 검사
_tycoonCard01Componet.SetCard(card01Key);
var card02Key = "NULL VAL";
do
{
card = _tycoonManager.CardDataSo.GetRandCardData();
card = _tycoonManager.CardDataSo.SubstitutionLiquid(card, _lvData);
if (card != null)
{
card02Key = card.Idx;
}
} while (card == null || _tycoonManager.CardDataSo.CardMaxCheck(card) //Max 검사
|| card02Key.Equals(card01Key) //중복검사
|| card.Shop != ShopType.Active //숍 등장 검사
|| card.Type == CardType.Passive);//패시브 검사
_tycoonCard02Componet.SetCard(card02Key);
var card03Key = "NULL VAL";
if (rand >= 3)
{
do
{
card = _tycoonManager.CardDataSo.GetRandCardData();
card = _tycoonManager.CardDataSo.SubstitutionLiquid(card, _lvData);
if (card != null)
{
card03Key = card.Idx;
}
} while (card == null || _tycoonManager.CardDataSo.CardMaxCheck(card) //Max 검사
|| card03Key.Equals(card01Key) || card03Key.Equals(card02Key) //중복검사
|| card.Shop != ShopType.Active //숍 등장 검사
|| card.Type == CardType.Passive); //패시브 검사
_tycoonCard03Componet.SetCard(card03Key);
}
var card04Key = "NULL VAL";
if (rand >= 4)
{
do
{
card = _tycoonManager.CardDataSo.GetRandCardData();
card = _tycoonManager.CardDataSo.SubstitutionLiquid(card, _lvData);
if (card != null)
{
card04Key = card.Idx;
}
} while (card == null || _tycoonManager.CardDataSo.CardMaxCheck(card) //Max 검사
|| card04Key.Equals(card01Key) || card04Key.Equals(card02Key) //중복검사
|| card04Key.Equals(card03Key) //중복검사
|| card.Shop != ShopType.Active //숍 등장 검사
|| card.Type == CardType.Passive); //패시브 검사
_tycoonCard04Componet.SetCard(card04Key);
}
if (rand >= 5)
{
var card05Key = "NULL VAL";
do
{
card = _tycoonManager.CardDataSo.GetRandCardData();
card = _tycoonManager.CardDataSo.SubstitutionLiquid(card, _lvData);
if (card != null)
{
card05Key = card.Idx;
}
} while (card == null || _tycoonManager.CardDataSo.CardMaxCheck(card) //Max 검사
|| card05Key.Equals(card01Key) || card05Key.Equals(card02Key) //중복검사
|| card05Key.Equals(card03Key) || card05Key.Equals(card04Key) //중복검사
|| card.Shop != ShopType.Active //숍 등장 검사
|| card.Type == CardType.Passive); //패시브 검사
_tycoonCard05Componet.SetCard(card05Key);
}
//-------------
//여기에 선택했을때 호출할 함수를 등록하자!
_tycoonCard01Componet.Rotation_Start();
_tycoonCard02Componet.Rotation_Start();
if (rand >= 3) _tycoonCard03Componet.Rotation_Start();
if (rand >= 4) _tycoonCard04Componet.Rotation_Start();
if (rand >= 5) _tycoonCard05Componet.Rotation_Start();
GetCard(_tycoonCard01Componet);
GetCard(_tycoonCard02Componet);
if (rand >= 3) GetCard(_tycoonCard03Componet);
if (rand >= 4) GetCard(_tycoonCard04Componet);
if (rand >= 5) GetCard(_tycoonCard05Componet);
}
public void GetCard(TycoonCard currTycoonCard)
{
switch (currTycoonCard.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.2f;
break;
case "GoldBoost":
_tycoonStatus.GoldMultiplier += 0.2f;
break;
case "AllCleanUp":
EventManager.InvokeCleaningAll();
break;
case "GaugeReset":
EventManager.InvokeGaugeResetCustomers();
break;
case "DashCooldownReduction":
_tycoonStatus.PlayerDashCooldownReduction += 1;
break;
case "TipBoost":
_tycoonStatus.TipMultiplier += 0.2f;
break;
case "EndGoldBoost":
_tycoonStatus.EndGoldMultiplier += 0.1f;
break;
case "AllCustomerPurification":
EventManager.InvokePurifiedCustomerAll();
break;
case "GaugeTimeUp":
_tycoonStatus.CustomerHurryTimeIncrease += 3;
break;
case "BarrelAutoSupply":
if (_tycoonManager.CardDataSo.CardFirstCheck("BarrelAutoSupply"))
{
EventManager.InvokeAutoSupplyBarrels();
}
_tycoonStatus.BarrelAutoIncrease += 2;
break;
case "ServerNpcUpgrade":
_tycoonStatus.ServerTipMultiplier += 0.1f;
break;
case "CleanerNpcUpgrade":
_tycoonStatus.CleanerCleaningReduction += 1;
break;
case "BartenderNpcUpgrade":
_tycoonStatus.BartenderMakingReduction += 1;
break;
case "PassiveDoubleServing":
_tycoonStatus.CurrentPassiveCard = PassiveCard.DoubleServing;
break;
case "PassiveRandomChange":
_tycoonStatus.CurrentPassiveCard = PassiveCard.RandomChange;
EventManager.InvokeChangedRandomBox();
break;
case "PassiveGoldAutoGain":
_tycoonStatus.CurrentPassiveCard = PassiveCard.GoldAutoGain;
EventManager.InvokeGainAutoMoneyCounter(_tycoonManager.TycoonStageController.StageDataSo.AutoGainWaitTime);
break;
case "PassiveMakingBonus":
_tycoonStatus.CurrentPassiveCard = PassiveCard.MakingBonus;
break;
case "PassiveServingBonus":
_tycoonStatus.CurrentPassiveCard = PassiveCard.ServingBonus;
break;
case "PassiveCleaningBonus":
_tycoonStatus.CurrentPassiveCard = PassiveCard.CleaningBonus;
break;
default: Debug.Log("Not Found Card : IDX" + currTycoonCard.CardDataForIdx.Idx); return;
}
TycoonManager.Instance.CardDataSo.AddToSelectedCard(currTycoonCard.CardDataForIdx);
}
public void ShowUi() => _panel.SetActive(true);
public void HideUi() => _panel.SetActive(false);
}
}