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(); 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 = "다음 레벨 도전"; } // �¸� if (gameResult) { HaloImaage.rectTransform.DORotate(Vector3.forward * 360, 20f).SetEase(Ease.Linear).SetRecyclable(true).SetLoops(-1, LoopType.Restart); ButtonlabelTMP.text = "다음판 2배"; 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(); // ������ Ŭ���� �ߴٸ� 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); } // �й� else { GetHeartPanel.SetActive(false); GameManager.Sound.PlaySFX(ESFXType.Lose); LabelTMP.text = "패배!"; LabelTMP.color = Color.white; ButtonlabelTMP.text = "이번판 무효"; /* ��ȿ*/ 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); // ������ Ŭ���� �ߴٸ� 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; } // �ӽ÷� �ٷ� ���� 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(); } } }