CapersProject/Assets/02.Scripts/Ui/Tycoon/TycoonSelectCard.cs

403 lines
16 KiB
C#
Raw Normal View History

2024-09-24 10:09:17 +00:00
using System.Collections;
using BlueWater.Tycoons;
2024-09-12 04:17:34 +00:00
using Sirenix.OdinInspector;
2024-09-09 09:50:37 +00:00
using UnityEngine;
2024-10-08 06:45:46 +00:00
using Random = UnityEngine.Random;
2024-09-09 09:50:37 +00:00
namespace BlueWater.Uis
{
2024-10-29 10:43:07 +00:00
public class TycoonSelectCard : PopupUi
2024-09-09 09:50:37 +00:00
{
2024-10-24 08:05:32 +00:00
private GameObject _panel;
2024-10-03 07:55:56 +00:00
private Camera uiCamera;
2024-09-24 10:09:17 +00:00
2024-09-12 04:17:34 +00:00
[field: SerializeField, CLabel("카드 1")]
2024-09-12 07:38:16 +00:00
private GameObject card01;
2024-09-12 04:17:34 +00:00
[field: SerializeField, CLabel("카드 2")]
2024-09-12 07:38:16 +00:00
private GameObject card02;
2024-09-12 04:17:34 +00:00
[field: SerializeField, CLabel("카드 3")]
2024-09-12 07:38:16 +00:00
private GameObject card03;
2024-09-12 04:17:34 +00:00
2024-09-12 07:38:16 +00:00
private GameObject _currentCard01;
private GameObject _currentCard02;
private GameObject _currentCard03;
2024-09-12 04:17:34 +00:00
2024-09-12 07:38:16 +00:00
private TycoonCard _tycoonCard01Componet;
private TycoonCard _tycoonCard02Componet;
private TycoonCard _tycoonCard03Componet;
2024-09-12 04:17:34 +00:00
2024-10-10 05:41:47 +00:00
private LevelData _lvData;
2024-11-05 12:27:46 +00:00
private TycoonManager _tycoonManager;
private TycoonStatus _tycoonStatus;
2024-10-28 09:09:18 +00:00
[field: SerializeField, CLabel("업그레이드_스크립트")]
private GameObject _upgradePopup;
2024-10-08 06:45:46 +00:00
private void Awake()
{
2024-10-28 09:27:48 +00:00
EventManager.OnLevelUp += CreateCardEvent;
2024-10-24 08:05:32 +00:00
_panel = transform.Find("Panel").gameObject;
HideUi();
2024-10-08 06:45:46 +00:00
}
2024-10-03 07:55:56 +00:00
2024-09-24 10:09:17 +00:00
void Start()
{
2024-10-03 07:55:56 +00:00
uiCamera = TycoonCameraManager.Instance.UiCamera;
2024-11-05 12:27:46 +00:00
_tycoonManager = TycoonManager.Instance;
_tycoonStatus = _tycoonManager.TycoonStatus;
2024-09-24 10:09:17 +00:00
}
2024-10-08 06:45:46 +00:00
private void OnDestroy()
{
2024-10-28 09:27:48 +00:00
EventManager.OnLevelUp -= CreateCardEvent;
2024-10-08 06:45:46 +00:00
}
2024-10-29 10:43:07 +00:00
public override void Open()
{
2024-10-31 05:41:13 +00:00
VisualFeedbackManager.Instance.SetBaseTimeScale(0.0f);
PlayerInputKeyManager.Instance.DisableAction("Manual");
2024-10-29 10:43:07 +00:00
PopupUiController.RegisterPopup(this);
2024-10-31 05:41:13 +00:00
ShowUi();
2024-10-29 10:43:07 +00:00
IsOpened = true;
}
2024-10-08 06:45:46 +00:00
2024-10-29 10:43:07 +00:00
public override void Close()
2024-09-12 04:17:34 +00:00
{
2024-10-29 10:43:07 +00:00
HideUi();
2024-10-31 05:41:13 +00:00
PlayerInputKeyManager.Instance.EnableAction("Manual");
2024-10-29 10:43:07 +00:00
PopupUiController.UnregisterPopup(this);
IsOpened = false;
2024-09-12 04:17:34 +00:00
2024-10-29 10:43:07 +00:00
if (!PopupUiController.IsPopupListEmpty()) return;
2024-10-08 06:45:46 +00:00
2024-10-29 10:43:07 +00:00
VisualFeedbackManager.Instance.ResetTimeScale();
}
[Button("카드 생성하기(레벨업)")]
private void CreateCard()
{
if (!Application.isPlaying) return;
2024-10-03 07:55:56 +00:00
2024-09-12 04:17:34 +00:00
// 기존 카드가 있으면 삭제
2024-09-12 07:38:16 +00:00
if (_currentCard01 != null)
2024-09-12 04:17:34 +00:00
{
2024-09-12 07:38:16 +00:00
Destroy(_currentCard01);
2024-09-12 04:17:34 +00:00
}
2024-09-12 07:38:16 +00:00
if (_currentCard02 != null)
2024-09-12 04:17:34 +00:00
{
2024-09-12 07:38:16 +00:00
Destroy(_currentCard02);
2024-09-12 04:17:34 +00:00
}
2024-09-12 07:38:16 +00:00
if (_currentCard03 != null)
2024-09-12 04:17:34 +00:00
{
2024-09-12 07:38:16 +00:00
Destroy(_currentCard03);
2024-09-12 04:17:34 +00:00
}
2024-10-24 08:05:32 +00:00
_currentCard01 = Instantiate(card01, _panel.transform);
2024-10-03 07:55:56 +00:00
_currentCard01.name = "Card01";
2024-09-12 04:17:34 +00:00
2024-10-24 08:05:32 +00:00
_currentCard02 = Instantiate(card02, _panel.transform);
2024-09-12 07:38:16 +00:00
_currentCard02.name = "Card02";
2024-09-12 04:17:34 +00:00
2024-10-24 08:05:32 +00:00
_currentCard03 = Instantiate(card03, _panel.transform);
2024-09-12 07:38:16 +00:00
_currentCard03.name = "Card03";
2024-09-12 04:17:34 +00:00
2024-09-12 07:38:16 +00:00
_currentCard01.transform.localPosition = new Vector3(-550, 0, 0);
_currentCard02.transform.localPosition = new Vector3(0, 0, 0);
_currentCard03.transform.localPosition = new Vector3(550, 0, 0);
2024-09-12 04:17:34 +00:00
2024-09-12 07:38:16 +00:00
_tycoonCard01Componet = _currentCard01.GetComponent<TycoonCard>();
_tycoonCard02Componet = _currentCard02.GetComponent<TycoonCard>();
_tycoonCard03Componet = _currentCard03.GetComponent<TycoonCard>();
2024-10-24 08:05:32 +00:00
2024-10-29 10:43:07 +00:00
Open();
2024-09-24 10:09:17 +00:00
//----카드 값 지정 및 초기화----
CardData card;
var card01Key = "NULL VAL";
do
{
2024-11-05 12:27:46 +00:00
card = _tycoonManager.CardDataSo.GetRandCardData();
card = _tycoonManager.CardDataSo.SubstitutionLiquid(card, _lvData);
2024-10-10 05:41:47 +00:00
if (card != null)
{
card01Key = card.Idx;
}
2024-11-05 12:27:46 +00:00
} while (card == null || _tycoonManager.CardDataSo.CardMaxCheck(card));
2024-09-24 10:09:17 +00:00
_tycoonCard01Componet.SetCard(card01Key);
2024-10-10 05:41:47 +00:00
2024-09-24 10:09:17 +00:00
var card02Key = "NULL VAL";
do
{
2024-11-05 12:27:46 +00:00
card = _tycoonManager.CardDataSo.GetRandCardData();
card = _tycoonManager.CardDataSo.SubstitutionLiquid(card, _lvData);
2024-10-10 05:41:47 +00:00
if (card != null)
{
card02Key = card.Idx;
}
2024-09-24 10:09:17 +00:00
2024-11-05 12:27:46 +00:00
} while (card == null || _tycoonManager.CardDataSo.CardMaxCheck(card) || card02Key.Equals(card01Key));
2024-09-24 10:09:17 +00:00
_tycoonCard02Componet.SetCard(card02Key);
var card03Key = "NULL VAL";
do
{
2024-11-05 12:27:46 +00:00
card = _tycoonManager.CardDataSo.GetRandCardData();
card = _tycoonManager.CardDataSo.SubstitutionLiquid(card, _lvData);
2024-10-10 05:41:47 +00:00
if (card != null)
{
card03Key = card.Idx;
}
2024-09-24 10:09:17 +00:00
2024-11-05 12:27:46 +00:00
} while (card == null || _tycoonManager.CardDataSo.CardMaxCheck(card) || card03Key.Equals(card01Key) || card03Key.Equals(card02Key));
2024-09-24 10:09:17 +00:00
_tycoonCard03Componet.SetCard(card03Key);
//-------------
2024-09-12 04:17:34 +00:00
2024-09-12 07:38:16 +00:00
_tycoonCard01Componet.Rotation_Start();
_tycoonCard02Componet.Rotation_Start();
_tycoonCard03Componet.Rotation_Start();
2024-09-24 10:09:17 +00:00
}
2024-10-28 09:27:48 +00:00
private void CreateCardEvent(LevelData levelData)
2024-09-09 09:50:37 +00:00
{
2024-10-10 05:41:47 +00:00
_lvData = levelData;
if (_lvData.Idx == "1") return;
2024-10-03 07:55:56 +00:00
2024-10-08 06:45:46 +00:00
CreateCard();
}
public void SelectedCard(TycoonCard currTycoonCard)
{
2024-10-03 07:55:56 +00:00
switch (currTycoonCard.CardDataForIdx.Idx) //탐색 후 행동...
{
2024-11-05 12:27:46 +00:00
case "HeartSlotPlus":
_tycoonStatus.MaxPlayerHealth += 2;
break;
case "HeartRecovery":
_tycoonStatus.CurrentPlayerHealth += 2;
break;
case "FullHeartRecovery":
_tycoonStatus.CurrentPlayerHealth = _tycoonStatus.MaxPlayerHealth;
break;
2024-10-03 07:55:56 +00:00
case "AddLiquidB":
2024-11-05 12:27:46 +00:00
_tycoonStatus.CurrentLiquidAmountB += 4000;
break;
2024-10-03 07:55:56 +00:00
case "AddLiquidC":
2024-11-05 12:27:46 +00:00
_tycoonStatus.CurrentLiquidAmountC += 4000;
break;
2024-10-03 07:55:56 +00:00
case "AddLiquidD":
2024-11-05 12:27:46 +00:00
_tycoonStatus.CurrentLiquidAmountD += 4000;
break;
2024-10-03 07:55:56 +00:00
case "AddLiquidE":
2024-11-05 12:27:46 +00:00
_tycoonStatus.CurrentLiquidAmountE += 4000;
break;
2024-10-03 07:55:56 +00:00
case "AddGarnish1":
2024-11-05 12:27:46 +00:00
_tycoonStatus.CurrentGarnishAmount1 += 4000;
break;
2024-10-03 07:55:56 +00:00
case "AddGarnish2":
2024-11-05 12:27:46 +00:00
_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;
2024-10-28 04:52:11 +00:00
case "GaugeReset":
2024-11-05 12:27:46 +00:00
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":
2024-11-07 09:13:54 +00:00
EventManager.InvokePurifiedCustomerAll();
2024-11-05 12:27:46 +00:00
break;
case "GaugeTimeUp":
_tycoonStatus.CustomerHurryTimeIncrease += 3;
break;
case "BarrelAutoSupply":
if (_tycoonManager.CardDataSo.CardFirstCheck("BarrelAutoSupply"))
{
EventManager.InvokeAutoSupplyBarrels();
}
2024-11-11 02:02:24 +00:00
_tycoonStatus.BarrelAutoIncrease += 2;
2024-11-05 12:27:46 +00:00
break;
case "ServerNpcUpgrade":
_tycoonStatus.ServerTipMultiplier += 0.1f;
break;
case "CleanerNpcUpgrade":
_tycoonStatus.CleanerCleaningReduction += 1;
break;
case "BartenderNpcUpgrade":
_tycoonStatus.BartenderMakingReduction += 1;
break;
2024-11-11 02:02:24 +00:00
case "PassiveDoubleServing":
2024-11-07 09:13:54 +00:00
_tycoonStatus.CurrentPassiveCard = PassiveCard.DoubleServing;
2024-11-05 12:27:46 +00:00
break;
2024-11-11 02:02:24 +00:00
case "PassiveRandomChange":
2024-11-07 09:13:54 +00:00
_tycoonStatus.CurrentPassiveCard = PassiveCard.RandomChange;
2024-11-11 02:02:24 +00:00
EventManager.InvokeChangeRandomCard();
2024-11-05 12:27:46 +00:00
break;
2024-11-11 02:02:24 +00:00
case "PassiveGoldAutoGain":
2024-11-07 09:13:54 +00:00
_tycoonStatus.CurrentPassiveCard = PassiveCard.GoldAutoGain;
2024-11-11 02:02:24 +00:00
EventManager.InvokeGainAutoMoneyCounter(_tycoonManager.TycoonStageController.StageDataSo.AutoGainWaitTime);
2024-11-05 12:27:46 +00:00
break;
case "PassiveMakingBonus":
2024-11-11 02:02:24 +00:00
_tycoonStatus.CurrentPassiveCard = PassiveCard.MakingBonus;
2024-11-05 12:27:46 +00:00
break;
case "PassiveServingBonus":
2024-11-11 02:02:24 +00:00
_tycoonStatus.CurrentPassiveCard = PassiveCard.ServingBonus;
2024-11-05 12:27:46 +00:00
break;
case "PassiveCleaningBonus":
2024-11-11 02:02:24 +00:00
_tycoonStatus.CurrentPassiveCard = PassiveCard.CleaningBonus;
2024-11-05 12:27:46 +00:00
break;
2024-10-28 04:52:11 +00:00
default: Debug.Log("Not Found Card : IDX" + currTycoonCard.CardDataForIdx.Idx); return;
2024-10-03 07:55:56 +00:00
}
TycoonManager.Instance.CardDataSo.AddToSelectedCard(currTycoonCard.CardDataForIdx);
StartCoroutine(SelectedAnimation(currTycoonCard));
2024-09-09 09:50:37 +00:00
}
2024-10-03 07:55:56 +00:00
// ReSharper disable Unity.PerformanceAnalysis
2024-09-24 10:09:17 +00:00
private IEnumerator SelectedAnimation(TycoonCard currTycoonCard)
2024-09-09 09:50:37 +00:00
{
2024-10-03 07:55:56 +00:00
Vector2 startPosition01; //시작 위치
Vector2 endPosition01; // 목표 위치
2024-09-24 10:09:17 +00:00
2024-10-03 07:55:56 +00:00
Vector2 startPosition02; //시작 위치
Vector2 endPosition02; // 목표 위치
2024-09-24 10:09:17 +00:00
2024-10-03 07:55:56 +00:00
Vector2 startPosition03; //시작 위치
Vector2 endPosition03; //목표 위치
RectTransform rect01;
RectTransform rect02;
RectTransform rect03;
2024-09-24 10:09:17 +00:00
2024-10-03 07:55:56 +00:00
rect03 = currTycoonCard.GetComponent<RectTransform>();
startPosition03 = rect03.anchoredPosition;
endPosition03 = new Vector2(0.0f, 0.0f);
// 화면의 해상도를 가져옴
if (currTycoonCard == _tycoonCard01Componet) //우우
2024-09-24 10:09:17 +00:00
{
2024-10-03 07:55:56 +00:00
rect01 = _tycoonCard02Componet.GetComponent<RectTransform>();
startPosition01 = rect01.anchoredPosition; // 시작 위치
endPosition01 = new Vector2(Screen.width + 1500, startPosition01.y); // 목표 위치(좌측)
rect02 = _tycoonCard03Componet.GetComponent<RectTransform>();
startPosition02 = rect02.anchoredPosition; // 시작 위치
endPosition02 = new Vector2(Screen.width + 1500, startPosition02.y); // 목표 위치(좌측)
}
else if (currTycoonCard == _tycoonCard02Componet) //좌우
{
rect01 = _tycoonCard01Componet.GetComponent<RectTransform>();
startPosition01 = rect01.anchoredPosition; // 시작 위치
endPosition01 = new Vector2(-1500, startPosition01.y); // 목표 위치(좌측)
rect02 = _tycoonCard03Componet.GetComponent<RectTransform>();
startPosition02 = rect02.anchoredPosition; // 시작 위치
endPosition02 = new Vector2(Screen.width + 1500, startPosition02.y); // 목표 위치(좌측)
}
else //좌좌
{
rect01 = _tycoonCard01Componet.GetComponent<RectTransform>();
startPosition01 = rect01.anchoredPosition; // 시작 위치
endPosition01 = new Vector2(-1500, startPosition01.y); // 목표 위치(좌측)
rect02 = _tycoonCard02Componet.GetComponent<RectTransform>();
startPosition02 = rect02.anchoredPosition; // 시작 위치
endPosition02 = new Vector2(-1500, startPosition02.y); // 목표 위치(좌측)
}
float time = 0.0f; // 타이머 초기화
int rotationDirection = Random.Range(0, 2) * 2 - 1; // 결과는 -1 또는 1
while (time < 1.0f)
{
time += Time.unscaledDeltaTime; // 시간 업데이트
float t = EaseEffect.ExpoOut((time / 1.0f)); // 정규화된 시간
//캐릭터의 위치 반환 (실시간으로 움직이기 때문에... 계속 업데이트하면서 가져오기.)
2024-09-09 09:50:37 +00:00
2024-10-03 07:55:56 +00:00
// 위치 업데이트
rect01.anchoredPosition = Vector2.Lerp(startPosition01, endPosition01, t);
rect02.anchoredPosition = Vector2.Lerp(startPosition02, endPosition02, t);
// 선형 보간을 사용하여 위치와 크기 조정
rect03.anchoredPosition = Vector2.Lerp(startPosition03, endPosition03, EaseEffect.ExpoOut((time / 1.0f) + 1.0f)); // 정규화된 시간
rect03.localScale = Vector3.Lerp(Vector3.one, Vector3.zero, t);
2024-09-24 10:09:17 +00:00
2024-10-03 07:55:56 +00:00
// 포물선 효과 추가
float height = Mathf.Sin(Mathf.PI * t) * 500f; // 높이
float width = Mathf.Sin(Mathf.PI * t) * 200f * rotationDirection; // 폭
rect03.anchoredPosition += new Vector2(width, height);
2024-09-24 10:09:17 +00:00
2024-10-03 07:55:56 +00:00
// Z축 회전 추가
float rotationAngle = 15f * rotationDirection * t; // 최대 15도 회전
rect03.rotation = Quaternion.Euler(new Vector3(0, 0, rotationAngle));
yield return null;
2024-09-24 10:09:17 +00:00
}
2024-10-03 07:55:56 +00:00
if (_currentCard01 != null)
{
Destroy(_currentCard01);
}
if (_currentCard02 != null)
{
Destroy(_currentCard02);
}
if (_currentCard03 != null)
{
Destroy(_currentCard03);
}
2024-10-28 09:09:18 +00:00
2024-10-28 09:27:48 +00:00
if (int.Parse(_lvData.Idx) % 5 == 0)
2024-10-28 09:09:18 +00:00
{
2024-10-28 09:27:48 +00:00
EventManager.InvokeUpgradeUi(_lvData);
2024-10-28 09:09:18 +00:00
}
2024-10-24 08:05:32 +00:00
2024-10-29 10:43:07 +00:00
Close();
2024-09-09 09:50:37 +00:00
}
2024-10-24 08:05:32 +00:00
public void ShowUi() => _panel.SetActive(true);
public void HideUi() => _panel.SetActive(false);
2024-09-09 09:50:37 +00:00
}
}