RandomGFGoStop/Assets/Scripts/UI/Popup/ResultPopup.cs

731 lines
24 KiB
C#
Raw Normal View History

2025-08-27 21:08:17 +00:00
using UnityEngine;
using CodeJay.Enum;
using DG.Tweening;
using UnityEngine.Rendering;
using System.Collections;
using BansheeGz.BGDatabase;
using GoogleMobileAds.Api;
using Unity.Collections.LowLevel.Unsafe;
using Firebase.Analytics;
public class ResultPopup : PopupBase
{
[SerializeField] private TMPro.TextMeshProUGUI LabelTMP;
[SerializeField] private TMPro.TextMeshProUGUI StakeTMP;
[SerializeField] private TMPro.TextMeshProUGUI GoldTMP;
[SerializeField] private TMPro.TextMeshProUGUI ScoreTMP;
[SerializeField] private TMPro.TextMeshProUGUI ButtonlabelTMP;
[SerializeField] private TMPro.TextMeshProUGUI DetailTMP;
[SerializeField] private GameObject DetailButtonGO;
[SerializeField] private GameObject[] NormalGameObjects;
[SerializeField] private GameObject[] ClearChallengeObjects;
[SerializeField] private RectTransform GameOverImage;
[SerializeField] private CanvasGroup GameOverImageCG;
[Space(20)]
[SerializeField] private UnityEngine.UI.Image HaloImaage;
[SerializeField] private GameObject GetHeartPanel;
[SerializeField] private GameObject ForcedMoveButtonGO;
[SerializeField] private GameObject Effect;
[SerializeField] private TMPro.TextMeshProUGUI NextGameButtonTMP;
private CanvasGroup canvasGroup;
private bool _appliedButtonEffect = false;
private bool _gameResult = false;
private long _resultTotalGold = 0;
private bool _isDetail = false;
protected override void Awake()
{
base.Awake();
canvasGroup = this.GetComponent<CanvasGroup>();
if (GameManager.Instance != null)
{
GameManager.Event.RegistEvent(EEventType.MoveToStore_Heart_DuringGame, this.MoveToStore_Heart_DuringGameCallback);
GameManager.Event.RegistEvent(EEventType.OnReturnToGameFromStore, this.OnReturnToGameFromStoreCallback);
GameManager.ADS.OnCompletedInterstitialAd += OnCompletedInterstitialAd;
GameManager.ADS.OnCompletedRewardedAd += OnCompletedRewardedAd;
}
}
private void OnDestroy()
{
if (GameManager.Instance != null)
{
GameManager.Event.RemoveEvent(EEventType.MoveToStore_Heart_DuringGame, this.MoveToStore_Heart_DuringGameCallback);
GameManager.Event.RemoveEvent(EEventType.OnReturnToGameFromStore, this.OnReturnToGameFromStoreCallback);
GameManager.ADS.OnCompletedInterstitialAd -= OnCompletedInterstitialAd;
GameManager.ADS.OnCompletedRewardedAd -= OnCompletedRewardedAd;
}
}
private void MoveToStore_Heart_DuringGameCallback()
{
canvasGroup.alpha = 0;
canvasGroup.blocksRaycasts = false;
Effect.gameObject.SetActive(false);
}
private void OnReturnToGameFromStoreCallback()
{
canvasGroup.alpha = 1;
canvasGroup.blocksRaycasts = true;
canvasGroup.blocksRaycasts = true;
Effect.gameObject.SetActive(true);
}
public void SetData(bool gameResult, int fixedScore = 0)
{
_gameResult = gameResult;
StakeTMP.enabled = true;
GoldTMP.enabled = true;
DetailTMP.enabled = false;
DetailButtonGO.SetActive(true);
StakeTMP.text = $"점 {GamePanel.Instance.Stake}냥";
HaloImaage.enabled = gameResult;
DetailTMP.text = GamePanel.Instance.GetDetailString(_gameResult);
if (GamePanel.Instance.IsChallengeMode)
{
NextGameButtonTMP.text = "데이트 하기";
}
else
{
NextGameButtonTMP.text = "다음 레벨 도전";
}
// <20>¸<EFBFBD>
if (gameResult)
{
HaloImaage.rectTransform.DORotate(Vector3.forward * 360, 20f).SetEase(Ease.Linear).SetRecyclable(true).SetLoops(-1, LoopType.Restart);
ButtonlabelTMP.text = "다음판 <size=40><color=yellow>2배</color></size>";
if (fixedScore <= 0)
{
int score = GamePanel.Instance.GetTotalScore(true, false);
int goNumer = GamePanel.Instance.Player_Go;
string str = $"{score}점";
int multiply = 0;
if (goNumer == 1)
{
str += " + 1고(1점) ";
score += 1;
}
else if (goNumer == 2)
{
str += " + 2고(2점) ";
score += 2;
}
else if (goNumer >= 3)
{
multiply += goNumer - 1;
}
var multipleType = GamePanel.Instance.GetAndUpdateScoreMultiplyType(gameResult);
if (multipleType != null)
{
for (int i = 0; i < multipleType.Count; i++)
{
if (multiply <= 0)
multiply = 1;
if (multipleType[i] == EScoreMutiplyType.Shake)
multiply *= CodeJay.CodeJayUtility.Utility.GetScoreMultiplyValue(multipleType[i]) * GamePanel.Instance.Player_Bell;
else
multiply *= CodeJay.CodeJayUtility.Utility.GetScoreMultiplyValue(multipleType[i]);
}
}
if (multiply > 0)
{
if (goNumer >= 3)
{
if (multiply > goNumer - 1)
{
int withoutGoMultiply = multiply / (goNumer - 1);
ScoreTMP.text = str + $" x {withoutGoMultiply}배 = 총 {score * multiply}점";
}
else
{
ScoreTMP.text = str + $" x {goNumer}고(x{goNumer - 1}) = 총 {score * multiply}점";
}
}
else
{
ScoreTMP.text = str + $" x {multiply}배 = 총 {score * multiply}점";
}
_resultTotalGold = score * multiply * GamePanel.Instance.Stake;
}
else
{
ScoreTMP.text = str + $" = 총 {score}점";
_resultTotalGold = score * GamePanel.Instance.Stake;
}
}
else
{
_resultTotalGold = GamePanel.Instance.Stake * fixedScore;
ScoreTMP.text = $"{fixedScore}점 = 총 {fixedScore}점";
}
if (GamePanel.Instance.IsChallengeMode)
{
long reamainingAIMoney = GameManager.DB.GetReaminingTargetCondition();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD> <20>ߴٸ<DFB4>
if (GameManager.DB.AddCurrentChallengeCondition(_resultTotalGold))
{
_resultTotalGold = reamainingAIMoney;
GameManager.Sound.PlaySFX(ESFXType.Win_2);
LabelTMP.text = "상대를 파산시켰어요!";
LabelTMP.color = Color.white;
for (int i = 0; i < NormalGameObjects.Length; i++)
NormalGameObjects[i].SetActive(false);
for (int i = 0; i < ClearChallengeObjects.Length; i++)
ClearChallengeObjects[i].SetActive(true);
GetHeartPanel.SetActive(false);
}
else
{
GameManager.Sound.PlaySFX(ESFXType.Win);
LabelTMP.text = "승리!";
LabelTMP.color = Color.white;
for (int i = 0; i < NormalGameObjects.Length; i++)
NormalGameObjects[i].SetActive(true);
for (int i = 0; i < ClearChallengeObjects.Length; i++)
ClearChallengeObjects[i].SetActive(false);
}
ForcedMoveButtonGO.SetActive(false);
}
else
{
long reamainingAIMoney = GameManager.DB.GetRemainigNormalGameAIGold();
if (GameManager.DB.AddNormalGameProgress(_resultTotalGold))
{
_resultTotalGold = reamainingAIMoney;
GameManager.Sound.PlaySFX(ESFXType.Win_2);
LabelTMP.text = "상대를 파산시켰어요!";
LabelTMP.color = Color.white;
GetHeartPanel.SetActive(true);
for (int i = 0; i < NormalGameObjects.Length; i++)
NormalGameObjects[i].SetActive(false);
for (int i = 0; i < ClearChallengeObjects.Length; i++)
ClearChallengeObjects[i].SetActive(true);
GameManager.DB.AddHeart(1, this.name);
ForcedMoveButtonGO.SetActive(true);
}
else
{
GameManager.Sound.PlaySFX(ESFXType.Win);
LabelTMP.text = "승리!";
LabelTMP.color = Color.white;
GetHeartPanel.SetActive(false);
for (int i = 0; i < NormalGameObjects.Length; i++)
NormalGameObjects[i].SetActive(true);
for (int i = 0; i < ClearChallengeObjects.Length; i++)
ClearChallengeObjects[i].SetActive(false);
ForcedMoveButtonGO.SetActive(false);
}
}
GoldTMP.text = "+" + CodeJay.CodeJayUtility.Converter.MoneyToString(_resultTotalGold);
GameOverImageCG.alpha = 0f;
GameManager.DB.AddGold(_resultTotalGold, this.name);
//ForcedMoveButtonGO.SetActive(false);
}
// <20>й<EFBFBD>
else
{
GetHeartPanel.SetActive(false);
GameManager.Sound.PlaySFX(ESFXType.Lose);
LabelTMP.text = "패배!";
LabelTMP.color = Color.white;
ButtonlabelTMP.text = "이번판 무효";
/* <size=40><color=yellow><3E><>ȿ</color></size>*/
if (fixedScore <= 0)
{
int score = GamePanel.Instance.GetTotalScore(false, false);
int goNumer = GamePanel.Instance.AI_Go;
int multiply = 0;
string str = $"{score}점";
if (goNumer == 1)
{
str += " + 1고(1점) ";
score += 1;
}
else if (goNumer == 2)
{
str += " + 2고(2점) ";
score += 2;
}
else if (goNumer >= 3)
{
multiply += goNumer - 1;
}
var multipleType = GamePanel.Instance.GetAndUpdateScoreMultiplyType(gameResult);
if (multipleType != null)
{
for (int i = 0; i < multipleType.Count; i++)
{
if (multiply <= 0)
multiply = 1;
if (multipleType[i] == EScoreMutiplyType.Shake)
multiply *= CodeJay.CodeJayUtility.Utility.GetScoreMultiplyValue(multipleType[i]) * GamePanel.Instance.AI_Bell;
else
multiply *= CodeJay.CodeJayUtility.Utility.GetScoreMultiplyValue(multipleType[i]);
}
}
if (multiply > 0)
{
if (goNumer >= 3)
{
if (multiply > goNumer - 1)
{
int withoutGoMultiply = multiply / (goNumer - 1);
ScoreTMP.text = str + $" x {withoutGoMultiply}배 = 총 {score * multiply}점";
}
else
{
ScoreTMP.text = str + $" x {goNumer}고(x{goNumer - 1}) = 총 {score * multiply}점";
}
}
else
ScoreTMP.text = str + $" x {multiply}배 = 총 {score * multiply}점";
_resultTotalGold = score * multiply * GamePanel.Instance.Stake;
}
else
{
ScoreTMP.text = str + $" = 총 {score}점";
_resultTotalGold = score * GamePanel.Instance.Stake;
}
}
else
{
_resultTotalGold = GamePanel.Instance.Stake * fixedScore;
ScoreTMP.text = $"{fixedScore}점 = 총 {fixedScore}점";
}
GoldTMP.text = "-" + CodeJay.CodeJayUtility.Converter.MoneyToString(_resultTotalGold);
GameManager.DB.SubGold(_resultTotalGold, this.name);
GameManager.DB.AddGoldToAI(GamePanel.Instance.IsChallengeMode, _resultTotalGold);
if (GameManager.DB.Gold <= 0)
{
GameManager.Sound.ReserveSFX(ESFXType.Stamp, 0.6f);
GameOverImage.DOScale(1f, 1f).From(3f).SetEase(Ease.InExpo);
GameOverImageCG.DOFade(1f, 1f).From(0f).SetEase(Ease.InExpo);
for (int i = 0; i < NormalGameObjects.Length; i++)
NormalGameObjects[i].SetActive(false);
for (int i = 0; i < ClearChallengeObjects.Length; i++)
ClearChallengeObjects[i].SetActive(false);
ForcedMoveButtonGO.SetActive(true);
}
else
{
ForcedMoveButtonGO.SetActive(false);
GameOverImageCG.alpha = 0f;
for (int i = 0; i < NormalGameObjects.Length; i++)
NormalGameObjects[i].SetActive(true);
for (int i = 0; i < ClearChallengeObjects.Length; i++)
ClearChallengeObjects[i].SetActive(false);
}
}
GameManager.Event.InvokeEvent(EEventType.OnSynchronizeGold);
GameManager.Event.InvokeEvent(EEventType.OnGameEnd);
GameManager.DB.SaveDatas();
}
public void WinWithFirstBbug(long resultGold)
{
GameOverImageCG.alpha = 0f;
HaloImaage.enabled = true;
StakeTMP.enabled = true;
GoldTMP.enabled = true;
DetailTMP.enabled = false;
DetailButtonGO.SetActive(false);
ForcedMoveButtonGO.SetActive(false);
HaloImaage.rectTransform.DORotate(Vector3.forward * 360, 20f, RotateMode.FastBeyond360).SetEase(Ease.Linear).SetRecyclable(true).SetLoops(-1, LoopType.Restart);
GameManager.Sound.PlaySFX(ESFXType.Win);
LabelTMP.text = "승리!";
LabelTMP.color = Color.white;
_resultTotalGold = resultGold;
ScoreTMP.text = "7점 = 총 7점";
GoldTMP.text = "+" + CodeJay.CodeJayUtility.Converter.MoneyToString(_resultTotalGold);
if (GamePanel.Instance.IsChallengeMode)
{
GetHeartPanel.SetActive(false);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD> <20>ߴٸ<DFB4>
if (GameManager.DB.AddCurrentChallengeCondition(_resultTotalGold))
{
GameManager.Sound.PlaySFX(ESFXType.Win_2);
for (int i = 0; i < NormalGameObjects.Length; i++)
NormalGameObjects[i].SetActive(false);
for (int i = 0; i < ClearChallengeObjects.Length; i++)
ClearChallengeObjects[i].SetActive(true);
}
else
{
GameManager.Sound.PlaySFX(ESFXType.Win);
for (int i = 0; i < NormalGameObjects.Length; i++)
NormalGameObjects[i].SetActive(true);
for (int i = 0; i < ClearChallengeObjects.Length; i++)
ClearChallengeObjects[i].SetActive(false);
}
}
else
{
if (GameManager.DB.AddNormalGameProgress(_resultTotalGold))
{
GameManager.Sound.PlaySFX(ESFXType.Win_2);
GetHeartPanel.SetActive(true);
for (int i = 0; i < NormalGameObjects.Length; i++)
NormalGameObjects[i].SetActive(false);
for (int i = 0; i < ClearChallengeObjects.Length; i++)
ClearChallengeObjects[i].SetActive(true);
}
else
{
GameManager.Sound.PlaySFX(ESFXType.Win);
GetHeartPanel.SetActive(false);
for (int i = 0; i < NormalGameObjects.Length; i++)
NormalGameObjects[i].SetActive(true);
for (int i = 0; i < ClearChallengeObjects.Length; i++)
ClearChallengeObjects[i].SetActive(false);
}
}
GameManager.Event.InvokeEvent(EEventType.OnSynchronizeGold);
GameManager.Event.InvokeEvent(EEventType.OnGameEnd);
GameManager.DB.SaveDatas();
}
public void ClickHome()
{
GameManager.Sound.PlaySFX(ESFXType.Button_Hit);
if (GamePanel.Instance.IsChallengeMode)
{
GameManager.Event.InvokeEvent(EEventType.OnReturnToHunting);
}
else
{
GameManager.Event.InvokeEvent(EEventType.OnReturnToHome);
}
GameManager.UI.HideTopPopup();
}
public void ClickNext()
{
if (GamePanel.Instance.IsChallengeMode)
{
BGId huntingDataID = GameManager.BGDatabase.GetLastUnolockHuntingDataID();
BGId huntingListDataID = GameManager.BGDatabase.GetLastUnolockHuntingListDataID();
if (huntingDataID != BGId.Empty && huntingListDataID != BGId.Empty)
{
GameManager.Sound.PlaySFX(ESFXType.Button_Hit);
GameManager.Event.InvokeEvent(EEventType.OnReturnToHunting);
GameManager.Event.InvokeEvent(EEventType.OnClickFullView, huntingDataID, huntingListDataID);
GameManager.UI.HideTopPopup();
}
/*if (GameManager.DB.Heart > 0)
{
GameManager.DB.SubHeart(1);
GameManager.DB.SaveDatas();
GameManager.Sound.PlaySFX(ESFXType.Button_Hit);
GamePanel.Instance.StartNextGame();
GameManager.UI.HideTopPopup();
}
else
{
GameManager.UI.ShowNStackPopup(EPopupType.HeartChargePopup);
}*/
}
else
{
GameManager.Sound.PlaySFX(ESFXType.Button_Hit);
GamePanel.Instance.StartNextGame();
GameManager.UI.HideTopPopup();
}
}
public void ClickNextGame()
{
// Show Ad
if (CheckShowInterstitialAD())
{
return;
}
if (GamePanel.Instance.IsChallengeMode)
{
if (GameManager.DB.Heart > 0)
{
GameManager.DB.SubHeart(1, this.name);
GameManager.DB.SaveDatas();
GameManager.Sound.PlaySFX(ESFXType.Button_Hit);
GamePanel.Instance.StartNextGame();
GameManager.UI.HideTopPopup();
}
else
{
GameManager.UI.ShowNStackPopup(EPopupType.HeartChargePopup);
}
}
else
{
GameManager.Sound.PlaySFX(ESFXType.Button_Hit);
GamePanel.Instance.StartNextGame();
GameManager.UI.HideTopPopup();
}
}
public void ClickHeart()
{
GameManager.Sound.PlaySFX(ESFXType.Button_Hit);
if (_appliedButtonEffect)
return;
// 두배
if (_gameResult)
{
if (GamePanel.Instance.IsChallengeMode)
{
if (GameManager.DB.Heart > 1)
{
_appliedButtonEffect = true;
GameManager.DB.SubHeart(1, this.name);
GamePanel.Instance.AddMultiplyType(EScoreMutiplyType.ClickedFromResultPopup);
this.ClickNextGame();
}
else
{
GameManager.UI.ShowNStackPopup(EPopupType.DoubleHeartWarningPopup);
}
}
else
{
if (GameManager.DB.Heart > 0)
{
_appliedButtonEffect = true;
GameManager.DB.SubHeart(1, this.name);
GamePanel.Instance.AddMultiplyType(EScoreMutiplyType.ClickedFromResultPopup);
this.ClickNextGame();
}
else
{
GameManager.UI.ShowNStackPopup(EPopupType.HeartChargePopup);
}
}
}
else // 무효
{
if (GameManager.DB.Heart > 0)
{
GameManager.DB.AddGold(_resultTotalGold, this.name);
GameManager.DB.SubHeart(1, this.name);
_appliedButtonEffect = true;
}
else
{
GameManager.UI.ShowNStackPopup(EPopupType.HeartChargePopup);
}
}
}
public void ClickAdButton()
{
GameManager.Sound.PlaySFX(ESFXType.Button_Hit);
if (_appliedButtonEffect)
return;
if (GamePanel.Instance.IsChallengeMode)
{
if (GameManager.DB.Heart <= 0)
{
GameManager.UI.ShowNStackPopup(EPopupType.HeartChargePopup);
}
else
{
GameManager.ADS.ShowResultRewardedAd(this.name);
}
}
else
{
GameManager.ADS.ShowResultRewardedAd(this.name);
}
}
private void AdCallback(bool result)
{
if (result)
{
_appliedButtonEffect = true;
if (_gameResult)
{
if (GamePanel.Instance.IsChallengeMode)
{
GameManager.DB.SubHeart(1, this.name);
GameManager.DB.SaveDatas();
}
GamePanel.Instance.AddMultiplyType(EScoreMutiplyType.ClickedFromResultPopup);
GamePanel.Instance.StartNextGame();
GameManager.UI.HideTopPopup();
}
else
{
GameManager.DB.AddGold(_resultTotalGold, this.name);
}
}
}
public void DetailToggle()
{
_isDetail = !_isDetail;
DetailTMP.enabled = _isDetail;
if (_isDetail)
{
StakeTMP.enabled = false;
GoldTMP.enabled = false;
}
else
{
StakeTMP.enabled = true;
GoldTMP.enabled = true;
}
}
public void ClickNextLevel()
{
GameManager.Sound.PlaySFX(ESFXType.Button_Hit);
// Show Ad
if (CheckShowInterstitialAD())
{
return;
}
// <20>ӽ÷<D3BD> <20>ٷ<EFBFBD> <20><><EFBFBD><EFBFBD>
this.ClickNextLevelCallback(true);
}
private void ClickNextLevelCallback(bool result)
{
if (result)
{
this.ClickNext();
}
}
public void ClickForcedMoveToHome()
{
GameManager.Sound.PlaySFX(ESFXType.Button_Hit);
if (GamePanel.Instance.IsChallengeMode)
{
GameManager.Event.InvokeEvent(EEventType.OnReturnToHunting);
}
else
{
GameManager.Event.InvokeEvent(EEventType.OnReturnToHome);
}
GameManager.UI.HideTopPopup();
}
private bool CheckShowInterstitialAD()
{
if (GamePanel.Instance.IsChallengeMode == false && GameManager.DB.InterstitialADCount <= CodeJay.Defines.Constants.INTERSTITIAL_AD_CYCLE)
{
if (GameManager.DB.InterstitialADCount <= 0)
{
// 광고 실행하기
GameManager.ADS.ShowInterstitialAd();
return true;
}
}
return false;
}
private void OnCompletedRewardedAd(bool isCompleted, string name)
{
if (GamePanel.Instance.IsChallengeMode == false && GameManager.DB.InterstitialADCount <= CodeJay.Defines.Constants.INTERSTITIAL_AD_CYCLE)
{
if (GameManager.DB.InterstitialADCount <= 0)
{
GameManager.DB.ResetInterstitialADCount();
}
}
if (name == this.name)
{
AdCallback(isCompleted);
}
}
private void OnCompletedInterstitialAd(bool isCompleted)
{
if(isCompleted == true || GameManager.DB.IsRemoveADS == true)
{
GameManager.DB.ResetInterstitialADCount();
GameManager.Sound.PlaySFX(ESFXType.Button_Hit);
GamePanel.Instance.StartNextGame();
GameManager.UI.HideTopPopup();
}
}
}