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;
}
}