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

731 lines
25 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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(true);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD> <20>ߴٸ<DFB4>
if (GameManager.DB.AddCurrentChallengeCondition(_resultTotalGold, true))
{
_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, true))
{
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();
}
}
}