using System.Collections; using System.Collections.Generic; using TMPro; using UnityEngine; using UnityEngine.Serialization; using UnityEngine.UI; public class RatingPanelController : PanelController { [SerializeField] private TMP_Text getPointsText; [SerializeField] private GameObject threePointsIndicatorGameObject; [SerializeField] private GameObject fivePointsIndicatorGameObject; [SerializeField] private GameObject tenPointsIndicatorGameObject; private Enums.GameResult _gameResult; private int _oldScore; private int _newScore; private int _myRating; private RatingPointsController _ratingPointsController; public void Show(Enums.GameResult gameResult) { base.Show(InitRatingPanel(gameResult)); UpdateGameResult(gameResult); } private void UpdateGameResult(Enums.GameResult gameResult) { switch (gameResult) { case (Enums.GameResult.Win): NetworkManager.Instance.UpdateScore(1 , () => { //유저 인포 업데이트 //결과화면 띄우기 },() => { }); break; case (Enums.GameResult.Lose): NetworkManager.Instance.UpdateScore(-1, () => { }, () => { }); break; } } public void OnClickConfirmButton() { Hide(); } public void OnClickRetryButton() { Hide(() => { }); } /// /// 텍스트 초기화, 승급포인트 계산 /// /// public PanelControllerShowDelegate InitRatingPanel(Enums.GameResult gameResult) { _gameResult = gameResult; _myRating= UserManager.Instance.Rating; int requiredScore = 0; if (_myRating >= 10 && _myRating <= 18) // 10~18급은 3점 필요 { requiredScore = 3; threePointsIndicatorGameObject.SetActive(true); _ratingPointsController = threePointsIndicatorGameObject.GetComponent(); } else if (_myRating >= 5 && _myRating <= 9) // 5~9급은 5점 필요 { requiredScore = 5; fivePointsIndicatorGameObject.SetActive(true); _ratingPointsController = fivePointsIndicatorGameObject.GetComponent(); } else if (_myRating >= 1 && _myRating <= 4) // 1~4급은 10점 필요 { requiredScore = 10; tenPointsIndicatorGameObject.SetActive(true); _ratingPointsController = tenPointsIndicatorGameObject.GetComponent(); } string win = _gameResult == Enums.GameResult.Win ? "승리" : "패배"; string get = _gameResult == Enums.GameResult.Win ? "얻었습니다." : "잃었습니다."; // 게임 전 스코어로 초기화 NetworkManager.Instance.GetInfo((userInfo) => { _oldScore = userInfo.score; // 1급이고 이미 10승 이상인 경우 //TODO: IF문 줄일 수 있을 것 같은데 머리가 안돕니다. .. if (_myRating == 1 && userInfo.score >= 10 ) { // 10승에서 패배한 경우 점수 잃는 애니메이션 if (gameResult == Enums.GameResult.Lose && userInfo.score == 10) { _ratingPointsController.InitRatingPoints(_oldScore,_gameResult,requiredScore); } else { if(gameResult == Enums.GameResult.Lose) _ratingPointsController.SetRatingUpLimit(_oldScore-1); else _ratingPointsController.SetRatingUpLimit(_oldScore+1); } } // 18급이고 이미 3패 이상인 경우 else if (_myRating == 18 && userInfo.score <= -3) { //3승에서 승리한 경우 점수 얻는 애니메이션 if (gameResult == Enums.GameResult.Win && userInfo.score == -3) { _ratingPointsController.InitRatingPoints(_oldScore,_gameResult,requiredScore); } else { if(gameResult == Enums.GameResult.Lose) _ratingPointsController.SetRatingDownLimit(_oldScore-1); else _ratingPointsController.SetRatingDownLimit(_oldScore+1); } } else { _ratingPointsController.InitRatingPoints(_oldScore,_gameResult,requiredScore); } }, () => { }); if(_gameResult == Enums.GameResult.Draw) { getPointsText.text = "무승부입니다."; } else { getPointsText.text = $"게임에서 {win}했습니다.\n{Constants.RAING_POINTS} 승급 포인트를 {get}"; } return null; } }