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

730 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 BansheeGz.BGDatabase;
using CodeJay.Enum;
using DG.Tweening;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
public class ResultPopup : PopupBase
{
public ResultxList m_ResultxList;
public GameObject[] gos_bankrupt; // 0 상대 파산, 1 내가 파산
public GameObject[] gos_result; // 0 승리, 1 패배
public TextMeshProUGUI t_Cal;
[SerializeField] private TextMeshProUGUI GoldTMP;
public TextMeshProUGUI t_enemygold, t_mygold;
[SerializeField] private TextMeshProUGUI ButtonlabelTMP;
[SerializeField] private TextMeshProUGUI DetailTMP;
[SerializeField] private GameObject[] NormalGameObjects;
[SerializeField] private GameObject[] ClearChallengeObjects;
[SerializeField] private GameObject GetHeartPanel;
[SerializeField] private GameObject ForcedMoveButtonGO;
[SerializeField] private TextMeshProUGUI NextGameButtonTMP;
private CanvasGroup canvasGroup;
private bool _appliedButtonEffect = false;
private bool _gameResult = false;
private long _resultTotalGold = 0;
private bool _isDetail = false;
List<ResultxInfoData> list_xinfo = new List<ResultxInfoData>
{
new ResultxInfoData{ type = EScoreMutiplyType.Gobak, name = "고박" },
new ResultxInfoData{ type = EScoreMutiplyType.Meongbak, name = "멍박" },
new ResultxInfoData{ type = EScoreMutiplyType.Peebak, name = "피박" },
new ResultxInfoData{ type = EScoreMutiplyType.Gwhangbak, name = "광박" },
new ResultxInfoData{ type = EScoreMutiplyType.Shake, name = "흔듦" },
new ResultxInfoData{ type = EScoreMutiplyType.Nagari, name = "나가리" },
new ResultxInfoData{ type = EScoreMutiplyType.ClickedFromResultPopup, name = "기타" },
};
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;
}
private void OnReturnToGameFromStoreCallback()
{
canvasGroup.alpha = 1;
canvasGroup.blocksRaycasts = true;
canvasGroup.blocksRaycasts = true;
}
public void SetData(bool gameResult, int fixedScore = 0)
{
_gameResult = gameResult;
DSUtil.InActivateGameObjects(gos_bankrupt);
GoldTMP.enabled = true;
DetailTMP.enabled = false;
list_xinfo.ForEach(f => f.mul = 0); // 초기화
DetailTMP.text = GamePanel.Instance.GetDetailString(_gameResult);
if (GamePanel.Instance.IsChallengeMode)
{
NextGameButtonTMP.text = "데이트 하기";
}
else
{
NextGameButtonTMP.text = "다음 레벨 도전";
}
if (gameResult)
{ // win
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;
var val = CodeJay.CodeJayUtility.Utility.GetScoreMultiplyValue(multipleType[i]);
if (multipleType[i] == EScoreMutiplyType.Shake)
val *= GamePanel.Instance.Player_Bell;
multiply *= val;
list_xinfo.Find(f => f.type == multipleType[i]).mul = val;
}
}
if (multiply > 0)
{
if (goNumer >= 3)
{
if (multiply > goNumer - 1)
{
int withoutGoMultiply = multiply / (goNumer - 1);
t_Cal.text = str + $" x {withoutGoMultiply}배\n= 총 {score * multiply}점\n";
}
else
{
t_Cal.text = str + $" x {goNumer}고(x{goNumer - 1})\n= 총 {score * multiply}점\n";
}
}
else
{
t_Cal.text = str + $" x {multiply}배\n= 총 {score * multiply}점\n";
}
_resultTotalGold = score * multiply * GamePanel.Instance.Stake;
}
else
{
t_Cal.text = str + $" \n= 총 {score}점\n";
_resultTotalGold = score * GamePanel.Instance.Stake;
}
}
else
{
_resultTotalGold = GamePanel.Instance.Stake * fixedScore;
t_Cal.text = $"{fixedScore}점 \n= 총 {fixedScore}점\n";
}
t_Cal.text += $"x {GamePanel.Instance.Stake}냥";
if (GamePanel.Instance.IsChallengeMode)
{
long reamainingAIMoney = GameManager.DB.GetReaminingTargetCondition(true);
if (GameManager.DB.AddCurrentChallengeCondition(_resultTotalGold, true))
{
_resultTotalGold = reamainingAIMoney;
GameManager.Sound.PlaySFX(ESFXType.Win_2);
DSUtil.InActivateGameObjects(gos_bankrupt, 0);
gos_bankrupt[0].GetComponent<RectTransform>().DOScale(1f, 1f).From(3f).SetEase(Ease.InExpo);
gos_bankrupt[0].GetComponent<Image>().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(true);
GetHeartPanel.SetActive(false);
}
else
{
GameManager.Sound.PlaySFX(ESFXType.Win);
DSUtil.InActivateGameObjects(gos_result, 0);
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);
DSUtil.InActivateGameObjects(gos_bankrupt, 0);
gos_bankrupt[0].GetComponent<RectTransform>().DOScale(1f, 1f).From(3f).SetEase(Ease.InExpo);
gos_bankrupt[0].GetComponent<Image>().DOFade(1f, 1f).From(0f).SetEase(Ease.InExpo);
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);
DSUtil.InActivateGameObjects(gos_result, 0);
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);
GameManager.DB.AddGold(_resultTotalGold, this.name);
//ForcedMoveButtonGO.SetActive(false);
}
else
{ // lose
GetHeartPanel.SetActive(false);
GameManager.Sound.PlaySFX(ESFXType.Lose);
DSUtil.InActivateGameObjects(gos_result, 1);
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;
var val = CodeJay.CodeJayUtility.Utility.GetScoreMultiplyValue(multipleType[i]);
if (multipleType[i] == EScoreMutiplyType.Shake)
val *= GamePanel.Instance.AI_Bell;
multiply *= val;
list_xinfo.Find(f => f.type == multipleType[i]).mul = val;
}
}
if (multiply > 0)
{
if (goNumer >= 3)
{
if (multiply > goNumer - 1)
{
int withoutGoMultiply = multiply / (goNumer - 1);
t_Cal.text = str + $" x {withoutGoMultiply}배\n= 총 {score * multiply}점";
}
else
{
t_Cal.text = str + $" x {goNumer}고(x{goNumer - 1})\n= 총 {score * multiply}점";
}
}
else
t_Cal.text = str + $" x {multiply}배\n= 총 {score * multiply}점";
_resultTotalGold = score * multiply * GamePanel.Instance.Stake;
}
else
{
t_Cal.text = str + $"\n= 총 {score}점";
_resultTotalGold = score * GamePanel.Instance.Stake;
}
}
else
{
_resultTotalGold = GamePanel.Instance.Stake * fixedScore;
t_Cal.text = $"{fixedScore}점\n= 총 {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);
DSUtil.InActivateGameObjects(gos_bankrupt, 1);
gos_bankrupt[1].GetComponent<RectTransform>().DOScale(1f, 1f).From(3f).SetEase(Ease.InExpo);
gos_bankrupt[1].GetComponent<Image>().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);
for (int i = 0; i < NormalGameObjects.Length; i++)
NormalGameObjects[i].SetActive(true);
for (int i = 0; i < ClearChallengeObjects.Length; i++)
ClearChallengeObjects[i].SetActive(false);
}
}
m_ResultxList.Set(list_xinfo);
t_enemygold.text = gos_bankrupt[0].activeSelf ? "0냥" : CodeJay.CodeJayUtility.Converter.MoneyToString(GameManager.DB.GetRemainigNormalGameAIGold());
t_mygold.text = CodeJay.CodeJayUtility.Converter.MoneyToString(GameManager.DB.Gold);
GameManager.Event.InvokeEvent(EEventType.OnSynchronizeGold);
GameManager.Event.InvokeEvent(EEventType.OnGameEnd);
GameManager.DB.SaveDatas();
}
public void WinWithFirstBbug(long resultGold)
{
GoldTMP.enabled = true;
DetailTMP.enabled = false;
ForcedMoveButtonGO.SetActive(false);
GameManager.Sound.PlaySFX(ESFXType.Win);
DSUtil.InActivateGameObjects(gos_result, 0);
_resultTotalGold = resultGold;
t_Cal.text = $"7점\n= 총 7점\nx {GamePanel.Instance.Stake}냥";
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)
{
GoldTMP.enabled = false;
}
else
{
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();
}
}
}
public class ResultxInfoData
{
public EScoreMutiplyType type;
public string name;
public int mul = 0;
}