414 lines
17 KiB
C#
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);
|
|
}
|
|
} |