2024-10-08 06:45:46 +00:00
|
|
|
using System;
|
2024-09-24 10:09:17 +00:00
|
|
|
using System.Collections;
|
|
|
|
using System.Collections.Generic;
|
|
|
|
using System.Linq;
|
2024-10-03 07:55:56 +00:00
|
|
|
using BlueWater.Players.Tycoons;
|
2024-09-24 10:09:17 +00:00
|
|
|
using BlueWater.Tycoons;
|
|
|
|
using Mono.Cecil.Cil;
|
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
|
|
|
|
{
|
|
|
|
public class TycoonSelectCard : MonoBehaviour
|
|
|
|
{
|
2024-09-12 04:17:34 +00:00
|
|
|
|
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-10-28 04:24:04 +00:00
|
|
|
|
|
|
|
[field: SerializeField, CLabel("업그레이드 팝업")]
|
|
|
|
private GameObject upgradePopup;
|
|
|
|
|
2024-10-08 06:45:46 +00:00
|
|
|
private void Awake()
|
|
|
|
{
|
|
|
|
EventManager.OnLevelUp += Test;
|
|
|
|
}
|
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-09-24 10:09:17 +00:00
|
|
|
}
|
|
|
|
|
2024-10-08 06:45:46 +00:00
|
|
|
private void OnDestroy()
|
|
|
|
{
|
|
|
|
EventManager.OnLevelUp -= Test;
|
|
|
|
}
|
|
|
|
|
2024-09-12 04:17:34 +00:00
|
|
|
[Button("카드 생성하기(레벨업)")]
|
|
|
|
private void CreateCard()
|
|
|
|
{
|
|
|
|
if (!Application.isPlaying) return;
|
|
|
|
|
2024-10-08 06:45:46 +00:00
|
|
|
VisualFeedbackManager.Instance.SetBaseTimeScale(0f);
|
|
|
|
|
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-09-12 07:38:16 +00:00
|
|
|
_currentCard01 = Instantiate(card01, this.transform);
|
2024-10-03 07:55:56 +00:00
|
|
|
_currentCard01.name = "Card01";
|
2024-09-12 04:17:34 +00:00
|
|
|
|
2024-09-12 07:38:16 +00:00
|
|
|
_currentCard02 = Instantiate(card02, this.transform);
|
|
|
|
_currentCard02.name = "Card02";
|
2024-09-12 04:17:34 +00:00
|
|
|
|
2024-09-12 07:38:16 +00:00
|
|
|
_currentCard03 = Instantiate(card03, this.transform);
|
|
|
|
_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-09-24 10:09:17 +00:00
|
|
|
|
|
|
|
|
|
|
|
//----카드 값 지정 및 초기화----
|
|
|
|
|
|
|
|
CardData card;
|
|
|
|
|
|
|
|
var card01Key = "NULL VAL";
|
|
|
|
do
|
|
|
|
{
|
|
|
|
card = TycoonManager.Instance.CardDataSo.GetRandCardData();
|
2024-10-10 05:41:47 +00:00
|
|
|
card = TycoonManager.Instance.CardDataSo.SubstitutionLiquid(card, _lvData);
|
|
|
|
|
|
|
|
if (card != null)
|
|
|
|
{
|
|
|
|
card01Key = card.Idx;
|
|
|
|
}
|
|
|
|
|
|
|
|
} while (card == null || TycoonManager.Instance.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
|
|
|
|
{
|
|
|
|
card = TycoonManager.Instance.CardDataSo.GetRandCardData();
|
2024-10-10 05:41:47 +00:00
|
|
|
card = TycoonManager.Instance.CardDataSo.SubstitutionLiquid(card, _lvData);
|
|
|
|
if (card != null)
|
|
|
|
{
|
|
|
|
card02Key = card.Idx;
|
|
|
|
}
|
2024-09-24 10:09:17 +00:00
|
|
|
|
2024-10-10 05:41:47 +00:00
|
|
|
} while (card == null || TycoonManager.Instance.CardDataSo.CardMaxCheck(card) || card02Key.Equals(card01Key));
|
2024-09-24 10:09:17 +00:00
|
|
|
_tycoonCard02Componet.SetCard(card02Key);
|
|
|
|
|
|
|
|
|
|
|
|
var card03Key = "NULL VAL";
|
|
|
|
do
|
|
|
|
{
|
|
|
|
card = TycoonManager.Instance.CardDataSo.GetRandCardData();
|
2024-10-10 05:41:47 +00:00
|
|
|
card = TycoonManager.Instance.CardDataSo.SubstitutionLiquid(card, _lvData);
|
|
|
|
|
|
|
|
if (card != null)
|
|
|
|
{
|
|
|
|
card03Key = card.Idx;
|
|
|
|
}
|
2024-09-24 10:09:17 +00:00
|
|
|
|
2024-10-10 05:41:47 +00:00
|
|
|
} while (card == null || TycoonManager.Instance.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-08 06:45:46 +00:00
|
|
|
private void Test(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) //탐색 후 행동...
|
|
|
|
{
|
|
|
|
case "HeartPlus":
|
2024-10-10 05:41:47 +00:00
|
|
|
TycoonManager.Instance.TycoonStatus.MaxPlayerHealth += 2 ;break;
|
2024-10-03 07:55:56 +00:00
|
|
|
case "HeartHeal":
|
2024-10-10 05:41:47 +00:00
|
|
|
TycoonManager.Instance.TycoonStatus.CurrentPlayerHealth += 2 ;break;
|
2024-10-03 07:55:56 +00:00
|
|
|
case "HeartAllHeal":
|
|
|
|
TycoonManager.Instance.TycoonStatus.CurrentPlayerHealth = TycoonManager.Instance.TycoonStatus.MaxPlayerHealth ;break;
|
|
|
|
case "AddLiquidB":
|
|
|
|
TycoonManager.Instance.TycoonStatus.CurrentLiquidAmountB += 4000;break;
|
|
|
|
case "AddLiquidC":
|
|
|
|
TycoonManager.Instance.TycoonStatus.CurrentLiquidAmountC += 4000;break;
|
|
|
|
case "AddLiquidD":
|
|
|
|
TycoonManager.Instance.TycoonStatus.CurrentLiquidAmountD += 4000;break;
|
|
|
|
case "AddLiquidE":
|
|
|
|
TycoonManager.Instance.TycoonStatus.CurrentLiquidAmountE += 4000;break;
|
|
|
|
case "AddGarnish1":
|
|
|
|
TycoonManager.Instance.TycoonStatus.CurrentGarnishAmount1 += 4000;break;
|
|
|
|
case "AddGarnish2":
|
|
|
|
TycoonManager.Instance.TycoonStatus.CurrentGarnishAmount2 += 4000;break;
|
2024-10-10 05:41:47 +00:00
|
|
|
case "AddAllLiquid":
|
|
|
|
TycoonManager.Instance.TycoonIngredientController.AllAddBarrels(1000); break;
|
2024-10-15 18:01:16 +00:00
|
|
|
case "ServerNpc": EventManager.InvokeCreateServerCrew(); break;
|
2024-10-14 11:13:08 +00:00
|
|
|
case "CleanerNpc": EventManager.InvokeCreateCleanerCrew(); break;
|
|
|
|
case "ChefNpc": EventManager.InvokeCreateBartenderCrew(); break;
|
2024-10-03 07:55:56 +00:00
|
|
|
case "SpeedUp":
|
|
|
|
TycoonManager.Instance.TycoonStatus.PlayerMoveSpeedMultiplier += 0.05f; break;
|
2024-10-08 06:45:46 +00:00
|
|
|
case "ExpGetUp":
|
|
|
|
TycoonManager.Instance.TycoonStatus.ExpMultiplier += 0.05f; break;
|
|
|
|
case "GoldGetUp":
|
|
|
|
TycoonManager.Instance.TycoonStatus.GoldMultiplier += 0.05f; break;
|
2024-10-08 06:12:27 +00:00
|
|
|
// case "CleanUp": return; break;
|
|
|
|
// case "GaugeReset": return; break;
|
2024-10-03 07:55:56 +00:00
|
|
|
default: Debug.Log("Not Found Card : IDX" + currTycoonCard.CardDataForIdx.Idx); return; break;
|
|
|
|
}
|
|
|
|
|
|
|
|
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-10-28 04:24:04 +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; //목표 위치
|
2024-10-28 04:24:04 +00:00
|
|
|
|
2024-10-03 07:55:56 +00:00
|
|
|
RectTransform rect01;
|
|
|
|
RectTransform rect02;
|
|
|
|
RectTransform rect03;
|
2024-09-24 10:09:17 +00:00
|
|
|
|
2024-10-28 04:24:04 +00:00
|
|
|
rect03 = currTycoonCard.GetComponent<RectTransform>();
|
2024-10-03 07:55:56 +00:00
|
|
|
startPosition03 = rect03.anchoredPosition;
|
|
|
|
endPosition03 = new Vector2(0.0f, 0.0f);
|
2024-10-28 04:24:04 +00:00
|
|
|
|
|
|
|
|
2024-10-03 07:55:56 +00:00
|
|
|
// 화면의 해상도를 가져옴
|
|
|
|
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); // 목표 위치(좌측)
|
2024-10-28 04:24:04 +00:00
|
|
|
|
2024-10-03 07:55:56 +00:00
|
|
|
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); // 목표 위치(좌측)
|
2024-10-28 04:24:04 +00:00
|
|
|
|
2024-10-03 07:55:56 +00:00
|
|
|
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); // 목표 위치(좌측)
|
2024-10-28 04:24:04 +00:00
|
|
|
|
2024-10-03 07:55:56 +00:00
|
|
|
rect02 = _tycoonCard02Componet.GetComponent<RectTransform>();
|
|
|
|
startPosition02 = rect02.anchoredPosition; // 시작 위치
|
|
|
|
endPosition02 = new Vector2(-1500, startPosition02.y); // 목표 위치(좌측)
|
|
|
|
}
|
2024-10-28 04:24:04 +00:00
|
|
|
|
2024-10-03 07:55:56 +00:00
|
|
|
float time = 0.0f; // 타이머 초기화
|
|
|
|
int rotationDirection = Random.Range(0, 2) * 2 - 1; // 결과는 -1 또는 1
|
2024-10-28 04:24:04 +00:00
|
|
|
|
2024-10-03 07:55:56 +00:00
|
|
|
while (time < 1.0f)
|
|
|
|
{
|
|
|
|
time += Time.unscaledDeltaTime; // 시간 업데이트
|
|
|
|
float t = EaseEffect.ExpoOut((time / 1.0f)); // 정규화된 시간
|
2024-10-28 04:24:04 +00:00
|
|
|
|
2024-10-03 07:55:56 +00:00
|
|
|
//캐릭터의 위치 반환 (실시간으로 움직이기 때문에... 계속 업데이트하면서 가져오기.)
|
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);
|
2024-10-28 04:24:04 +00:00
|
|
|
|
2024-10-03 07:55:56 +00:00
|
|
|
// 선형 보간을 사용하여 위치와 크기 조정
|
2024-10-28 04:24:04 +00:00
|
|
|
rect03.anchoredPosition =
|
|
|
|
Vector2.Lerp(startPosition03, endPosition03, EaseEffect.ExpoOut((time / 1.0f) + 1.0f)); // 정규화된 시간
|
2024-10-03 07:55:56 +00:00
|
|
|
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));
|
2024-10-28 04:24:04 +00:00
|
|
|
|
2024-10-03 07:55:56 +00:00
|
|
|
yield return null;
|
2024-09-24 10:09:17 +00:00
|
|
|
}
|
|
|
|
|
2024-10-03 07:55:56 +00:00
|
|
|
if (_currentCard01 != null)
|
|
|
|
{
|
|
|
|
Destroy(_currentCard01);
|
|
|
|
}
|
2024-10-28 04:24:04 +00:00
|
|
|
|
2024-10-03 07:55:56 +00:00
|
|
|
if (_currentCard02 != null)
|
|
|
|
{
|
|
|
|
Destroy(_currentCard02);
|
|
|
|
}
|
2024-10-28 04:24:04 +00:00
|
|
|
|
2024-10-03 07:55:56 +00:00
|
|
|
if (_currentCard03 != null)
|
|
|
|
{
|
|
|
|
Destroy(_currentCard03);
|
|
|
|
}
|
2024-10-28 04:24:04 +00:00
|
|
|
|
|
|
|
var currentLevelData = TycoonManager.Instance.GetCurrentLevelData();
|
|
|
|
|
|
|
|
if (int.Parse(currentLevelData.Idx) % 5 == 0)
|
|
|
|
{
|
|
|
|
upgradePopup.SetActive(true);
|
|
|
|
EventManager.InvokeUpgradeUi(currentLevelData);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
VisualFeedbackManager.Instance.ResetTimeScale();
|
|
|
|
}
|
|
|
|
|
2024-09-09 09:50:37 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|