You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1687 lines
60 KiB
1687 lines
60 KiB
using DG.Tweening;
|
|
using IVDataFormat;
|
|
using IVServerFormat;
|
|
using Spine;
|
|
using Spine.Unity;
|
|
using System.Collections;
|
|
using System.Numerics;
|
|
using TMPro;
|
|
using UnityEngine;
|
|
using UnityEngine.AddressableAssets;
|
|
using UnityEngine.ResourceManagement.AsyncOperations;
|
|
using UnityEngine.U2D;
|
|
using UnityEngine.UI;
|
|
using Vector2 = UnityEngine.Vector2;
|
|
using Vector3 = UnityEngine.Vector3;
|
|
|
|
public class PvpMgr : MonoBehaviour
|
|
{
|
|
#region Const
|
|
private static PvpMgr curMgr = null;
|
|
#endregion Const
|
|
|
|
#region UI
|
|
[Header("UI")]
|
|
[SerializeField]
|
|
private TextMeshProUGUI txtMainT;
|
|
|
|
[SerializeField]
|
|
private Canvas canvasUI;
|
|
//private ButtonIV[] btnTabs;
|
|
private GameObject groupLobby, groupRanking;
|
|
|
|
private Image imgLobbyBg, imgLobbyTier, imgLobbyTierNum, imgLobbyChar;
|
|
private TextMeshProUGUI txtLv, txtName, txtRank, txtTier, txtRp;
|
|
private Toggle tglAuto;
|
|
private ButtonIV btnMatch;
|
|
private TextMeshProUGUI[] txtEffectTs;
|
|
private TextMeshProUGUI[] txtEffectValues;
|
|
private GameObject[] goEffects;
|
|
private GameObject goBadgeRew, goBadgeTier;
|
|
|
|
private EScrPvpRank myRankItem;
|
|
//private EScrPvpRank[] RankItems;
|
|
private GameObject[] goEfcRankTops;
|
|
private IVCharSimple[] charRankTops;
|
|
private Image[] imgRankTierTops, imgRankTierNumTops;
|
|
private TextMeshProUGUI[] txtRankPointTops, txtRankNameTops;
|
|
|
|
[SerializeField]
|
|
private EScrController escrRank, escrTierRew, escrTier;
|
|
|
|
GameObject dust;
|
|
#endregion UI
|
|
|
|
#region Popup
|
|
[Header("Popup")]
|
|
private Canvas canvasRew;
|
|
private ScrollRect svRew;
|
|
private TextMeshProUGUI txtRewCount;
|
|
private ButtonIV btnRewGet;
|
|
private PvpRewItem[] pvpRewItems;
|
|
|
|
private Canvas canvasTierRew;
|
|
private ButtonIV btnTierRewGet;
|
|
|
|
private Canvas canvasTier;
|
|
#endregion Popup
|
|
|
|
#region Join
|
|
[Header("Join")]
|
|
[SerializeField]
|
|
private GameObject goCanvasJoin;
|
|
private RectTransform rtrfJoinMy, rtrfJoinEnemy;
|
|
private Image imgJoinMyBg, imgJoinEnemyBg;
|
|
private Image imgJoinMyTier, imgJoinMyTierNum, imgJoinEnemyTier, imgJoinEnemyTierNum;
|
|
private TextMeshProUGUI txtJoinMyPoint, txtJoinEnemyPoint;
|
|
private TextMeshProUGUI txtJoinMyName, txtJoinEnemyName;
|
|
private IVCharSimple charJoinMy, charJoinEnemy;
|
|
private SkeletonAnimation skAnimJoin;
|
|
#endregion UI
|
|
|
|
#region Result
|
|
[Header("Result")]
|
|
[SerializeField]
|
|
private GameObject goCanvasResult;
|
|
private GameObject goResultRankUp;
|
|
private Image imgResultTop, imgResultBottom;
|
|
private Image imgResultTier, imgResultTierNum;
|
|
private Image imgResultWin, imgResultLose;
|
|
private TextMeshProUGUI txtResultTier, txtResultAdd, txtResultPoint;
|
|
private SkeletonAnimation skAnimResult, skAnimResultRankUp;
|
|
#endregion Result
|
|
|
|
#region Battle UI
|
|
[Header("Battle UI")]
|
|
[SerializeField]
|
|
private Transform trfBattle;
|
|
private Toggle tglBattleAuto;
|
|
private TextMeshProUGUI txtBattleMyName, txtBattleEnemyName;
|
|
#endregion Battle UI
|
|
|
|
#region Variables
|
|
private int iLoading = 1;
|
|
private bool bReLocalize = true;
|
|
private bool bInitNeed = true;
|
|
private bool bInitNeedBattleCos = true;
|
|
private bool bInitNeedRank = true;
|
|
private bool bInitNeedRankCos = true;
|
|
private bool bInitNeedRew = true;
|
|
private bool bInitNeedTierRew = true;
|
|
private bool bInitNeedTier = true;
|
|
|
|
private int iSelectedTab = -1;
|
|
private EnhancedUI.SmallList<int> tierList = null;
|
|
|
|
private AsyncOperationHandle<SpriteAtlas> handleAtlas;
|
|
public static SpriteAtlas pvpImgs = null;
|
|
|
|
private int iShineMode = -1;
|
|
|
|
private int iCosTopLoad = 0;
|
|
private int[] iWeaponRankTops, iIconRankTops;
|
|
private Texture2D[] tx2dClothRankTops;
|
|
|
|
private int iWeaponFriendly = -1;
|
|
private int iClothFriendly = -1;
|
|
private Texture2D tx2dClothFriendly;
|
|
private Texture2D tx2dClothEnemy;
|
|
|
|
private AsyncOperationHandle<SkeletonDataAsset> handleVs;
|
|
private AsyncOperationHandle<SkeletonDataAsset> handleWinLose;
|
|
private AsyncOperationHandle<SkeletonDataAsset> handleRankUp;
|
|
|
|
private bool bSpecUpdateJoin = false;
|
|
private int iEnemyUserId = -1;
|
|
private dPvpSpec specEnemy = null;
|
|
#endregion Variables
|
|
|
|
#region Base
|
|
public static void SLocalize(bool bmain)
|
|
{
|
|
if (curMgr != null)
|
|
curMgr.Localize(bmain);
|
|
}
|
|
|
|
private void Localize(bool bmain)
|
|
{
|
|
if (bmain)
|
|
{
|
|
txtMainT.text = LocalizationText.GetText("pvp_title");
|
|
}
|
|
else
|
|
{
|
|
bReLocalize = false;
|
|
Transform trfui = canvasUI.transform;
|
|
|
|
trfui.Find("txtT").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("pvp_title");
|
|
//btnTabs[0].transform.Find("txt").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("pvp_lobby");
|
|
//btnTabs[1].transform.Find("txt").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("all_ranking");
|
|
|
|
Transform trflobby = groupLobby.transform;
|
|
trflobby.Find("txtEfcT").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("pvp_effect");
|
|
goBadgeRew.transform.parent.GetChild(0).GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("pvp_reward");
|
|
goBadgeTier.transform.parent.GetChild(0).GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("pvp_tierreward");
|
|
btnMatch.transform.GetChild(0).GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("all_enter");
|
|
tglAuto.transform.parent.GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("auto_progress");
|
|
trflobby.Find("txtLobby").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("pvp_lobby");
|
|
|
|
Transform trfrank = groupRanking.transform;
|
|
trfrank.GetChild(0).Find("txtTip").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("pvp_rank_tip");
|
|
trfrank.GetChild(0).Find("txtRank").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("all_ranking");
|
|
|
|
Transform trfrew = canvasRew.transform;
|
|
trfrew.Find("txtT").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("pvp_reward");
|
|
trfrew.Find("txtDesc").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("pvp_reward_desc");
|
|
trfrew.Find("txtProgressT").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("pvp_reward_cond");
|
|
trfrew.Find("txtTip").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("reset_week_explain");
|
|
btnRewGet.transform.GetChild(0).GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("all_getall");
|
|
|
|
Transform trftierrew = canvasTierRew.transform;
|
|
trftierrew.Find("txtT").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("pvp_tierreward");
|
|
trftierrew.Find("txtDesc").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("pvp_tierreward_desc");
|
|
trftierrew.Find("txtHelp").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("pvp_tiereffect");
|
|
btnTierRewGet.transform.GetChild(0).GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("all_getall");
|
|
|
|
Transform trftier = canvasTier.transform;
|
|
trftier.Find("txtT").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("pvp_tiereffect");
|
|
trftier.Find("txtTip").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("pvp_tiereffect_tip");
|
|
|
|
Transform trfresult = goCanvasResult.transform;
|
|
trfresult.Find("txtaddt").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("all_pointadd");
|
|
trfresult.Find("txtpointt").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("all_pointcur");
|
|
imgResultWin = trfresult.Find("ImgWin").GetComponent<Image>();
|
|
imgResultLose = trfresult.Find("ImgLose").GetComponent<Image>();
|
|
|
|
tglBattleAuto.transform.parent.GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("auto_progress");
|
|
}
|
|
}
|
|
|
|
// 설정에서 언어 변경 시 처리.
|
|
public static void SReLocalize()
|
|
{
|
|
curMgr.Localize(true);
|
|
curMgr.bReLocalize = true;
|
|
curMgr.bInitNeedRew = true;
|
|
}
|
|
|
|
// 백버튼 처리.
|
|
public static bool SCloseMenu()
|
|
{
|
|
return curMgr.CloseMenu();
|
|
}
|
|
|
|
private bool CloseMenu()
|
|
{
|
|
// 게임 시작 후 열린적 없음.
|
|
if (bInitNeed)
|
|
return false;
|
|
|
|
// 매칭.
|
|
if (goCanvasJoin.activeSelf)
|
|
return true;
|
|
|
|
// 결과 팝업.
|
|
if (goCanvasResult.activeSelf)
|
|
{
|
|
CloseResult();
|
|
return true;
|
|
}
|
|
|
|
// 티어 정보 팝업.
|
|
if (canvasTier.enabled)
|
|
{
|
|
CloseTier();
|
|
return true;
|
|
}
|
|
|
|
// 티어 보상 팝업.
|
|
if (canvasTierRew.enabled)
|
|
{
|
|
CloseTierReward();
|
|
return true;
|
|
}
|
|
|
|
// 결투장 보상 팝업.
|
|
if (canvasRew.enabled)
|
|
{
|
|
CloseReward();
|
|
return true;
|
|
}
|
|
|
|
if (canvasUI.enabled)
|
|
{
|
|
ClosePvp();
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
private void Awake()
|
|
{
|
|
curMgr = this;
|
|
}
|
|
|
|
void Start()
|
|
{
|
|
iLoading--;
|
|
}
|
|
|
|
private void Init()
|
|
{
|
|
Transform trfui = canvasUI.transform;
|
|
//btnTabs = new ButtonIV[2];
|
|
//btnTabs[0] = trfui.Find("tabLobby").GetComponent<ButtonIV>();
|
|
//btnTabs[1] = trfui.Find("tabRanking").GetComponent<ButtonIV>();
|
|
|
|
Transform trflobby = trfui.Find("groupLobby");
|
|
groupLobby = trflobby.gameObject;
|
|
imgLobbyBg = trflobby.GetChild(0).GetComponent<Image>();
|
|
imgLobbyTier = trflobby.Find("imgTier").GetComponent<Image>();
|
|
imgLobbyTierNum = trflobby.Find("imgTierNum").GetComponent<Image>();
|
|
imgLobbyChar = trflobby.Find("imgChar").GetComponent<Image>();
|
|
|
|
txtLv = trflobby.Find("txtLv").GetComponent<TextMeshProUGUI>();
|
|
txtName = trflobby.Find("txtName").GetComponent<TextMeshProUGUI>();
|
|
txtRank = trflobby.Find("txtRank").GetComponent<TextMeshProUGUI>();
|
|
txtTier = trflobby.Find("txtTier").GetComponent<TextMeshProUGUI>();
|
|
txtRp = trflobby.Find("txtRp").GetComponent<TextMeshProUGUI>();
|
|
tglAuto = trflobby.Find("tglAutoTxt").GetChild(0).GetComponent<Toggle>();
|
|
tglAuto.SetIsOnWithoutNotify(false);
|
|
btnMatch = trflobby.Find("btnMatch").GetComponent<ButtonIV>();
|
|
goBadgeRew = trflobby.Find("btnRew").GetChild(1).gameObject;
|
|
goBadgeTier = trflobby.Find("btnTier").GetChild(1).gameObject;
|
|
|
|
Transform trfeffect = trflobby.Find("effects");
|
|
int ilen = trfeffect.childCount;
|
|
txtEffectTs = new TextMeshProUGUI[ilen];
|
|
txtEffectValues = new TextMeshProUGUI[ilen];
|
|
goEffects = new GameObject[ilen];
|
|
for (int i = 0; i < ilen; i++)
|
|
{
|
|
goEffects[i] = trfeffect.GetChild(i).gameObject;
|
|
txtEffectTs[i] = trfeffect.GetChild(i).GetChild(0).GetComponent<TextMeshProUGUI>();
|
|
txtEffectValues[i] = trfeffect.GetChild(i).GetChild(1).GetComponent<TextMeshProUGUI>();
|
|
}
|
|
|
|
Transform trfrank = trfui.Find("groupRanking");
|
|
groupRanking = trfrank.gameObject;
|
|
trfrank = trfrank.GetChild(0);
|
|
//myRankItem = trfrank.Find("PvpRankItem").GetComponent<EScrPvpRank>();
|
|
//myRankItem.InitCell();
|
|
//RankItems = new EScrPvpRank[3];
|
|
//for(int i = 0; i< RankItems.Length; i++)
|
|
//{
|
|
// RankItems[i] = new EScrPvpRank();
|
|
// RankItems[i] = trfrank.Find(FormatString.CombineAll("PvpRankItem",i+1)).GetComponent<EScrPvpRank>();
|
|
// RankItems[i].InitCell();
|
|
//}
|
|
|
|
goEfcRankTops = new GameObject[3];
|
|
charRankTops = new IVCharSimple[3];
|
|
imgRankTierTops = new Image[3];
|
|
imgRankTierNumTops = new Image[3];
|
|
txtRankPointTops = new TextMeshProUGUI[3];
|
|
txtRankNameTops = new TextMeshProUGUI[3];
|
|
|
|
for (int i = 0; i < 3; i++)
|
|
{
|
|
Transform trftop = trfrank.Find(FormatString.CombineAllString("RankChar", (i + 1).ToString()));
|
|
goEfcRankTops[i] = trftop.GetChild(0).gameObject;
|
|
charRankTops[i] = trftop.GetChild(1).GetComponent<IVCharSimple>();
|
|
charRankTops[i].transform.GetChild(0).localPosition = new Vector3(0f, 0f, -10000f);
|
|
imgRankTierTops[i] = trftop.Find("iconTier").GetComponent<Image>();
|
|
imgRankTierNumTops[i] = trftop.Find("iconTierNum").GetComponent<Image>();
|
|
imgRankTierTops[i].enabled = false;
|
|
imgRankTierNumTops[i].enabled = false;
|
|
txtRankPointTops[i] = trftop.Find("txtPoint").GetComponent<TextMeshProUGUI>();
|
|
txtRankNameTops[i] = trftop.Find("txtName").GetComponent<TextMeshProUGUI>();
|
|
}
|
|
|
|
Transform trfrew = trfui.Find("popupReward");
|
|
canvasRew = trfrew.GetComponent<Canvas>();
|
|
txtRewCount = trfrew.Find("txtProgressT").GetChild(0).GetComponent<TextMeshProUGUI>();
|
|
btnRewGet = trfrew.Find("btnGet").GetComponent<ButtonIV>();
|
|
svRew = trfrew.Find("SvRew").GetComponent<ScrollRect>();
|
|
pvpRewItems = svRew.transform.GetChild(0).GetComponentsInChildren<PvpRewItem>(true);
|
|
|
|
Transform trftierrew = trfui.Find("popupTierReward");
|
|
canvasTierRew = trftierrew.GetComponent<Canvas>();
|
|
btnTierRewGet = trftierrew.Find("btnGet").GetComponent<ButtonIV>();
|
|
|
|
Transform trftier = trfui.Find("popupTier");
|
|
canvasTier = trftier.GetComponent<Canvas>();
|
|
|
|
Transform trfjoin = goCanvasJoin.transform;
|
|
skAnimJoin = trfjoin.Find("skanimjoin").GetComponent<SkeletonAnimation>();
|
|
skAnimJoin.transform.localScale = new Vector3(0.01f, 0.01f, 0.01f);
|
|
|
|
rtrfJoinMy = trfjoin.Find("bgleft").GetComponent<RectTransform>();
|
|
imgJoinMyBg = rtrfJoinMy.GetComponent<Image>();
|
|
imgJoinMyTier = rtrfJoinMy.Find("imgMyPvp").GetComponent<Image>();
|
|
imgJoinMyTierNum = rtrfJoinMy.Find("imgMyPvpNum").GetComponent<Image>();
|
|
txtJoinMyPoint = rtrfJoinMy.Find("txtMyPoint").GetComponent<TextMeshProUGUI>();
|
|
txtJoinMyName = rtrfJoinMy.Find("txtMyName").GetComponent<TextMeshProUGUI>();
|
|
charJoinMy = rtrfJoinMy.Find("charMy").GetComponent<IVCharSimple>();
|
|
charJoinMy.Init();
|
|
|
|
rtrfJoinEnemy = trfjoin.Find("bgright").GetComponent<RectTransform>();
|
|
imgJoinEnemyBg = rtrfJoinEnemy.GetComponent<Image>();
|
|
imgJoinEnemyTier = rtrfJoinEnemy.Find("imgEnemyPvp").GetComponent<Image>();
|
|
imgJoinEnemyTierNum = rtrfJoinEnemy.Find("imgEnemyPvpNum").GetComponent<Image>();
|
|
txtJoinEnemyPoint = rtrfJoinEnemy.Find("txtEnemyPoint").GetComponent<TextMeshProUGUI>();
|
|
txtJoinEnemyName = rtrfJoinEnemy.Find("txtEnemyName").GetComponent<TextMeshProUGUI>();
|
|
charJoinEnemy = rtrfJoinEnemy.Find("charEnemy").GetComponent<IVCharSimple>();
|
|
charJoinEnemy.Init();
|
|
|
|
Transform trfresult = goCanvasResult.transform;
|
|
goResultRankUp = trfresult.Find("rankup").gameObject;
|
|
imgResultTop = trfresult.Find("linetop").GetComponent<Image>();
|
|
imgResultBottom = trfresult.Find("linebottom").GetComponent<Image>();
|
|
imgResultTier = trfresult.Find("imgPvp").GetComponent<Image>();
|
|
imgResultTierNum = trfresult.Find("imgPvpNum").GetComponent<Image>();
|
|
txtResultTier = trfresult.Find("txtTier").GetComponent<TextMeshProUGUI>();
|
|
txtResultAdd = trfresult.Find("txtAdd").GetComponent<TextMeshProUGUI>();
|
|
txtResultPoint = trfresult.Find("txtPoint").GetComponent<TextMeshProUGUI>();
|
|
skAnimResult = trfresult.Find("skanimResult").GetComponent<SkeletonAnimation>();
|
|
skAnimResult.transform.localScale = new Vector3(0.01f, 0.01f, 0.01f);
|
|
skAnimResultRankUp = trfresult.Find("skanimRank").GetComponent<SkeletonAnimation>();
|
|
skAnimResultRankUp.transform.localScale = new Vector3(0.01f, 0.01f, 0.01f);
|
|
|
|
tglBattleAuto = trfBattle.Find("tglAuto").GetChild(0).GetComponent<Toggle>();
|
|
txtBattleMyName = trfBattle.Find("txtMyName").GetComponent<TextMeshProUGUI>();
|
|
txtBattleEnemyName = trfBattle.Find("txtEnemyName").GetComponent<TextMeshProUGUI>();
|
|
|
|
dust = canvasUI.transform.Find("all_dust").gameObject;
|
|
|
|
DataHandler.UpdatePvpRank(new dPvpRank[0]);
|
|
}
|
|
#endregion Base
|
|
|
|
#region UI
|
|
public void OpenPvp()
|
|
{
|
|
// 해금 조건 미충족.
|
|
if (!DataHandler.IsClearStage(DataHandler.Const.pvpOpenStage))
|
|
{
|
|
GameUIMgr.SOpenToast(FormatString.TextOpenStageClear(DataHandler.Const.pvpOpenStage));
|
|
SoundMgr.PlaySfx(SoundName.BtnPress);
|
|
return;
|
|
}
|
|
|
|
// 결투장 닫혀 있음.
|
|
if (!DataHandler.sysPvp.isOpen)
|
|
{
|
|
GameUIMgr.SOpenPopup1Button(LocalizationText.GetText(Global.STR_Prepare));
|
|
return;
|
|
}
|
|
|
|
if (iLoading > 0)
|
|
return;
|
|
iLoading++;
|
|
|
|
if (bInitNeed)
|
|
{
|
|
bInitNeed = false;
|
|
Init();
|
|
|
|
// 처음 열때 유저 스펙 서버에 저장.
|
|
bSpecUpdateJoin = false;
|
|
dPvpSpec data = dPvpSpec.GetMyBestSpec(DataHandler.playPvp.usePreset, DataHandler.playPvp.usePetPreset, DataHandler.playPvp.useExtraPreset);
|
|
SvConnectManager.Instance.RequestSvPost(true, 0, UrlApi.GetUrl(UrlApi.PvpSpec), typeof(nIdCnt), ASpecSucc, ASpecFail, data, false);
|
|
}
|
|
|
|
if (bReLocalize)
|
|
Localize(false);
|
|
|
|
// 결투장 창 열때 아틀라스 불러오기. 아틀라스를 불러온 후에 결투장 창 열림.
|
|
CoverCamera.Hold();
|
|
Addressables.LoadAssetAsync<SpriteAtlas>("atlasPvp").Completed += ALoadAtlasComp;
|
|
|
|
SoundMgr.PlaySfx(SoundName.BtnPress);
|
|
|
|
iLoading--;
|
|
}
|
|
|
|
// 결투장 열기 처리.
|
|
private void OpenPvpComp()
|
|
{
|
|
SetMyInfo();
|
|
if (iSelectedTab < 0)
|
|
{
|
|
TabPvp();
|
|
if (DataHandler.PvpRankRefreshTime <= TimeUtils.Now())
|
|
{
|
|
SvConnectManager.Instance.RequestSvPost(true, 0, UrlApi.GetUrl(UrlApi.PvpRank), typeof(nPvpRank), ARankSucc, ARankFail, new nIdLv(), false);
|
|
}
|
|
SetImages();
|
|
groupRanking.SetActive(true);
|
|
}
|
|
|
|
btnMatch.interactable = DataHandler.playPvp.ticket > 0;
|
|
|
|
canvasUI.enabled = true;
|
|
GameUIMgr.SSetPvpTicket(DataHandler.playPvp.ticket);
|
|
GameUIMgr.SRightWindowClose();
|
|
GameUIMgr.SOpenUpPanel(true,pvp: true,addy:6);
|
|
GameUIMgr.SSetMainUiOn(false);
|
|
GameUIMgr.SCloseMenu();
|
|
BattleMgr.SSetBattleUiOn(false);
|
|
BattleMgr.SSetClearFailUiOn(false);
|
|
BattleMgr.SSetCameraOn(false);
|
|
}
|
|
|
|
// 결투장 닫기.
|
|
public void ClosePvp()
|
|
{
|
|
if (!canvasUI.enabled)
|
|
return;
|
|
if (iLoading > 0)
|
|
return;
|
|
iLoading++;
|
|
CoverCamera.Hold();
|
|
|
|
canvasUI.enabled = false;
|
|
GameUIMgr.SCloseUpPanel();
|
|
GameUIMgr.SSetMainUiOn(true);
|
|
BattleMgr.SSetBattleUiOn(true);
|
|
BattleMgr.SSetClearFailUiOn(true);
|
|
BattleMgr.SSetCameraOn(true);
|
|
BattleMgr.SRefreshCharCloth();
|
|
|
|
// 결투장 창 닫을때 리소스 해제.
|
|
imgLobbyBg.sprite = null;
|
|
imgLobbyTier.sprite = null;
|
|
imgLobbyTierNum.sprite = null;
|
|
imgJoinMyBg.sprite = null;
|
|
imgJoinEnemyBg.sprite = null;
|
|
imgJoinMyTier.sprite = null;
|
|
imgJoinMyTierNum.sprite = null;
|
|
imgJoinEnemyTier.sprite = null;
|
|
imgJoinEnemyTierNum.sprite = null;
|
|
imgResultTier.sprite = null;
|
|
imgResultTierNum.sprite = null;
|
|
|
|
if (!bInitNeedRank)
|
|
{
|
|
//ResetRankTop3();
|
|
//myRankItem.ReleaseResources();
|
|
escrRank.ReleaseResources();
|
|
}
|
|
if (!bInitNeedTierRew)
|
|
escrTierRew.ReleaseResources();
|
|
if (!bInitNeedTier)
|
|
escrTier.ReleaseResources();
|
|
|
|
pvpImgs = null;
|
|
if (handleAtlas.IsValid())
|
|
{
|
|
Addressables.Release(handleAtlas);
|
|
}
|
|
|
|
if (iWeaponFriendly > 0)
|
|
{
|
|
AddressableMgr.ReleaseWeaponSpine(iWeaponFriendly);
|
|
iWeaponFriendly = -1;
|
|
}
|
|
if (iClothFriendly > 0)
|
|
{
|
|
tx2dClothFriendly = null;
|
|
AddressableMgr.ReleaseClothSpine(iClothFriendly);
|
|
iClothFriendly = -1;
|
|
}
|
|
|
|
if (handleVs.IsValid())
|
|
{
|
|
skAnimJoin.transform.localScale = new Vector3(0.01f, 0.01f, 0.01f);
|
|
skAnimJoin.skeletonDataAsset.Clear();
|
|
skAnimJoin.ClearState();
|
|
skAnimJoin.skeletonDataAsset = null;
|
|
Addressables.Release(handleVs);
|
|
}
|
|
|
|
if (handleWinLose.IsValid())
|
|
{
|
|
skAnimResult.transform.localScale = new Vector3(0.01f, 0.01f, 0.01f);
|
|
skAnimResult.skeletonDataAsset.Clear();
|
|
skAnimResult.ClearState();
|
|
skAnimResult.skeletonDataAsset = null;
|
|
Addressables.Release(handleWinLose);
|
|
}
|
|
|
|
if (handleRankUp.IsValid())
|
|
{
|
|
skAnimResultRankUp.transform.localScale = new Vector3(0.01f, 0.01f, 0.01f);
|
|
skAnimResultRankUp.skeletonDataAsset.Clear();
|
|
skAnimResultRankUp.ClearState();
|
|
skAnimResultRankUp.skeletonDataAsset = null;
|
|
Addressables.Release(handleRankUp);
|
|
}
|
|
AddressableMgr.SAddUnload();
|
|
|
|
groupRanking.SetActive(false);
|
|
CoverCamera.Release();
|
|
|
|
SoundMgr.PlaySfx(SoundName.BtnPress);
|
|
|
|
dust.SetActive(false);
|
|
iLoading--;
|
|
}
|
|
|
|
// 통신 실패 - 스펙.
|
|
private void ASpecFail(SvError error, object request)
|
|
{
|
|
if (bSpecUpdateJoin)
|
|
{
|
|
bSpecUpdateJoin = false;
|
|
JoinPvpStart();
|
|
}
|
|
}
|
|
|
|
// 통신 성공 - 스펙.
|
|
private void ASpecSucc(object result, object request)
|
|
{
|
|
if (bSpecUpdateJoin)
|
|
{
|
|
bSpecUpdateJoin = false;
|
|
JoinPvpStart();
|
|
}
|
|
}
|
|
|
|
// 결투장 랭킹 이미지 가져오기
|
|
public static Sprite SGetRankImg(int rank)
|
|
{
|
|
if (rank > 3)
|
|
return null;
|
|
|
|
return pvpImgs.GetSprite(FormatString.CombineAll("rank", rank));
|
|
}
|
|
|
|
// 결투장 티어 이미지 가져오기
|
|
public static Sprite SGetTierImg(int itier)
|
|
{
|
|
if (pvpImgs == null)
|
|
return null;
|
|
itier = (itier - 1) / 3 + 1;
|
|
return pvpImgs.GetSprite(itier.ToString());
|
|
}
|
|
|
|
// 결투장 티어 번호 이미지 가져오기
|
|
public static Sprite SGetTierNumImg(int itier)
|
|
{
|
|
if (pvpImgs == null)
|
|
return null;
|
|
itier = (itier - 1) % 3;
|
|
return pvpImgs.GetSprite(FormatString.CombineAllString("n", itier.ToString()));
|
|
}
|
|
|
|
// 결투장 이미지 가져오기
|
|
public static Sprite SGetPvpImg(string strpath)
|
|
{
|
|
if (pvpImgs == null)
|
|
return null;
|
|
return pvpImgs.GetSprite(strpath);
|
|
}
|
|
|
|
// 어드레서블 결투장 이미지 불러왔을때 처리.
|
|
private void ALoadAtlasComp(AsyncOperationHandle<SpriteAtlas> obj)
|
|
{
|
|
pvpImgs = obj.Result;
|
|
handleAtlas = obj;
|
|
|
|
OpenPvpComp();
|
|
CoverCamera.Release();
|
|
}
|
|
#endregion UI
|
|
|
|
#region Pvp Info
|
|
// 내 정보 세팅.
|
|
private void SetMyInfo()
|
|
{
|
|
int irp = DataHandler.playPvp.point;
|
|
int itier = DataHandler.pvpMyRank.tier;
|
|
int irank = DataHandler.pvpMyRank.rank;
|
|
|
|
imgLobbyChar.sprite = AddressableMgr.GetPlayerIcon(DataHandler.PlayData.playerIcon);
|
|
imgLobbyTier.sprite = SGetTierImg(itier);
|
|
imgLobbyTierNum.sprite = SGetTierNumImg(itier);
|
|
setTierMyInfo(itier);
|
|
|
|
txtLv.text = FormatString.TextLv(DataHandler.PlayData.playerLv);
|
|
txtName.text = DataHandler.PlayData.playerName;
|
|
txtRank.text = FormatString.TextRank(irank);
|
|
txtTier.text = LocalizationText.GetText(FormatString.CombineAllString("tier", itier.ToString()));
|
|
txtRp.text = FormatString.TextRp(irp);
|
|
|
|
int iavailrew = DataHandler.playPvp.availWeeklyIndex < 0 ? 0 : DataHandler.GetPvpReward(DataHandler.playPvp.availWeeklyIndex).id;
|
|
goBadgeRew.SetActive(iavailrew > DataHandler.playPvp.rewardWeekly);
|
|
goBadgeTier.SetActive(DataHandler.pvpMyRank.tier > DataHandler.playPvp.rewardTier);
|
|
|
|
#region Effects
|
|
dPvpTier tier = DataHandler.GetPvpTier(itier);
|
|
if (tier.abilityType1 == eEffectType.None)
|
|
{
|
|
goEffects[0].SetActive(false);
|
|
}
|
|
else
|
|
{
|
|
txtEffectTs[0].text = FormatString.TextEffectTitle(tier.abilityType1);
|
|
txtEffectValues[0].text = FormatString.TextEffectValue(tier.abilityType1, tier.abilityValue1);
|
|
goEffects[0].SetActive(true);
|
|
}
|
|
|
|
if (tier.abilityType2 == eEffectType.None)
|
|
{
|
|
goEffects[1].SetActive(false);
|
|
}
|
|
else
|
|
{
|
|
txtEffectTs[1].text = FormatString.TextEffectTitle(tier.abilityType2);
|
|
txtEffectValues[1].text = FormatString.TextEffectValue(tier.abilityType2, tier.abilityValue2);
|
|
goEffects[1].SetActive(true);
|
|
}
|
|
|
|
if (tier.abilityType3 == eEffectType.None)
|
|
{
|
|
goEffects[2].SetActive(false);
|
|
}
|
|
else
|
|
{
|
|
txtEffectTs[2].text = FormatString.TextEffectTitle(tier.abilityType3);
|
|
txtEffectValues[2].text = FormatString.TextEffectValue(tier.abilityType3, tier.abilityValue3);
|
|
goEffects[2].SetActive(true);
|
|
}
|
|
|
|
if (tier.abilityType4 == eEffectType.None)
|
|
{
|
|
goEffects[3].SetActive(false);
|
|
}
|
|
else
|
|
{
|
|
txtEffectTs[3].text = FormatString.TextEffectTitle(tier.abilityType4);
|
|
txtEffectValues[3].text = FormatString.TextEffectValue(tier.abilityType4, tier.abilityValue4);
|
|
goEffects[3].SetActive(true);
|
|
}
|
|
#endregion Effects
|
|
}
|
|
|
|
// 탭 전환 시 이미지 세팅.
|
|
private void SetImages()
|
|
{
|
|
if (iSelectedTab == 0)
|
|
{
|
|
imgLobbyBg.sprite = SGetPvpImg("bglobby");
|
|
escrRank.ReleaseResources();
|
|
}
|
|
else
|
|
{
|
|
imgLobbyBg.sprite = null;
|
|
}
|
|
}
|
|
|
|
// 팝업 여닫을때 반짝이는 연출 재생.
|
|
private void ReloadShineEffect()
|
|
{
|
|
if (canvasRew.enabled)
|
|
{
|
|
iShineMode = 0;
|
|
StartCoroutine(nameof(CoShineEffect));
|
|
}
|
|
else if (canvasTierRew.enabled)
|
|
{
|
|
iShineMode = 1;
|
|
StartCoroutine(nameof(CoShineEffect));
|
|
}
|
|
else
|
|
{
|
|
iShineMode = -1;
|
|
StopCoroutine(nameof(CoShineEffect));
|
|
}
|
|
|
|
}
|
|
|
|
// 반짝이는 연출.
|
|
private IEnumerator CoShineEffect()
|
|
{
|
|
float fvalue = 1f;
|
|
// 주간 보상.
|
|
if (iShineMode == 0)
|
|
{
|
|
while (true)
|
|
{
|
|
for (int i = 0; i < pvpRewItems.Length; i++)
|
|
pvpRewItems[i].SetFloat(fvalue);
|
|
yield return YieldInstructionCache.WaitForSeconds(0.05f);
|
|
fvalue -= 0.08f;
|
|
if (fvalue < 0f)
|
|
{
|
|
fvalue = 1f;
|
|
yield return YieldInstructionCache.WaitForSeconds(3f);
|
|
}
|
|
}
|
|
}
|
|
// 티어 보상.
|
|
else
|
|
{
|
|
while (true)
|
|
{
|
|
escrTierRew.SetFloat(fvalue);
|
|
yield return YieldInstructionCache.WaitForSeconds(0.05f);
|
|
fvalue -= 0.08f;
|
|
if (fvalue < 0f)
|
|
{
|
|
fvalue = 1f;
|
|
yield return YieldInstructionCache.WaitForSeconds(3f);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
#endregion Pvp Info
|
|
|
|
#region Tab
|
|
// 탭.
|
|
public void TabPvp()
|
|
{
|
|
SoundMgr.PlaySfx(SoundName.BtnPress);
|
|
groupLobby.SetActive(true);
|
|
groupRanking.SetActive(true);
|
|
|
|
if (bInitNeedRank)
|
|
{
|
|
for (int i = 0; i < 3; i++)
|
|
{
|
|
charRankTops[i].Init();
|
|
}
|
|
|
|
iWeaponRankTops = new int[3] { -1, -1, -1 };
|
|
iIconRankTops = new int[3] { -1, -1, -1 };
|
|
tx2dClothRankTops = new Texture2D[3];
|
|
|
|
EnhancedUI.SmallList<int> list = new EnhancedUI.SmallList<int>();
|
|
for (int i = 1; i <= 100; i++)
|
|
list.Add(i);
|
|
escrRank.LoadDatas(list);
|
|
|
|
SvConnectManager.Instance.RequestSvPost(true, 0, UrlApi.GetUrl(UrlApi.PvpRank), typeof(nPvpRank), ARankSucc, ARankFail, new nIdLv(), false);
|
|
}
|
|
else
|
|
{
|
|
// 랭킹 갱신 시간 체크해서 필요시 갱신.
|
|
if (DataHandler.PvpRankRefreshTime <= TimeUtils.Now())
|
|
{
|
|
SvConnectManager.Instance.RequestSvPost(true, 0, UrlApi.GetUrl(UrlApi.PvpRank), typeof(nPvpRank), ARankSucc, ARankFail, new nIdLv(), false);
|
|
}
|
|
}
|
|
|
|
SetImages();
|
|
}
|
|
#endregion Tab
|
|
|
|
#region Rank
|
|
// 탑3 캐릭터 코스튬 표시(코스튬 리소스 로드 완료시 호출).
|
|
private void UpdateRankTop3Costume()
|
|
{
|
|
if (iCosTopLoad > 0)
|
|
return;
|
|
CoverCamera.Hold();
|
|
StartCoroutine(nameof(CoUpdateRankTop3Costume));
|
|
}
|
|
|
|
private IEnumerator CoUpdateRankTop3Costume()
|
|
{
|
|
if (bInitNeedRankCos)
|
|
{
|
|
bInitNeedRankCos = false;
|
|
for (int i = 0; i < 3; i++)
|
|
{
|
|
if (!DataHandler.TryGetPvpRank(i + 1, out dPvpRank rank)) continue;
|
|
|
|
charRankTops[i].SetCostume(tx2dClothRankTops[i]);
|
|
}
|
|
}
|
|
yield return null;
|
|
|
|
for (int i = 0; i < 3; i++)
|
|
{
|
|
if (!DataHandler.TryGetPvpRank(i + 1, out dPvpRank rank))
|
|
{
|
|
charRankTops[i].gameObject.SetActive(false);
|
|
continue;
|
|
}
|
|
|
|
charRankTops[i].gameObject.SetActive(true);
|
|
charRankTops[i].SetCostume(tx2dClothRankTops[i]);
|
|
charRankTops[i].transform.GetChild(0).localPosition = Vector3.zero;
|
|
}
|
|
CoverCamera.Release();
|
|
}
|
|
|
|
private void ALoadClothComp1(Texture2D obj)
|
|
{
|
|
tx2dClothRankTops[0] = obj;
|
|
iCosTopLoad--;
|
|
UpdateRankTop3Costume();
|
|
CoverCamera.Release();
|
|
}
|
|
|
|
private void ALoadClothComp2(Texture2D obj)
|
|
{
|
|
tx2dClothRankTops[1] = obj;
|
|
iCosTopLoad--;
|
|
UpdateRankTop3Costume();
|
|
CoverCamera.Release();
|
|
}
|
|
|
|
private void ALoadClothComp3(Texture2D obj)
|
|
{
|
|
tx2dClothRankTops[2] = obj;
|
|
iCosTopLoad--;
|
|
UpdateRankTop3Costume();
|
|
CoverCamera.Release();
|
|
}
|
|
|
|
private void ALoadWeaponComp1(Skin obj)
|
|
{
|
|
charRankTops[0].SetWeapon(obj);
|
|
iCosTopLoad--;
|
|
UpdateRankTop3Costume();
|
|
CoverCamera.Release();
|
|
}
|
|
|
|
private void ALoadWeaponComp2(Skin obj)
|
|
{
|
|
charRankTops[1].SetWeapon(obj);
|
|
iCosTopLoad--;
|
|
UpdateRankTop3Costume();
|
|
CoverCamera.Release();
|
|
}
|
|
|
|
private void ALoadWeaponComp3(Skin obj)
|
|
{
|
|
charRankTops[2].SetWeapon(obj);
|
|
iCosTopLoad--;
|
|
UpdateRankTop3Costume();
|
|
CoverCamera.Release();
|
|
}
|
|
|
|
// 통신 실패 - 랭킹.
|
|
private void ARankFail(SvError error, object request)
|
|
{
|
|
}
|
|
|
|
// 통신 성공 - 랭킹.
|
|
private void ARankSucc(object result, object request)
|
|
{
|
|
nPvpRank data = result as nPvpRank;
|
|
if (data == null || data.myRank == null || data.topRank == null)
|
|
{
|
|
ARankFail(new SvError(eErrorCode.NULL_OR_EMPTY), request);
|
|
return;
|
|
}
|
|
|
|
DataHandler.UpdatePvpMyRank(data.myRank);
|
|
DataHandler.UpdatePvpRank(data.topRank);
|
|
bInitNeedRank = false;
|
|
|
|
SetMyInfo();
|
|
//SetRankTop3();
|
|
escrRank.scroller.RefreshActiveCellViews();
|
|
}
|
|
#endregion Rank
|
|
|
|
#region Popup Reward
|
|
// 주간 보상 팝업 열기.
|
|
public void OpenReward()
|
|
{
|
|
if (iLoading > 0)
|
|
return;
|
|
iLoading++;
|
|
canvasRew.enabled = true;
|
|
|
|
if (bInitNeedRew)
|
|
{
|
|
bInitNeedRew = false;
|
|
for (int i = 0; i < pvpRewItems.Length; i++)
|
|
{
|
|
pvpRewItems[i].InitCell();
|
|
pvpRewItems[i].SetData(i);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
for (int i = 0; i < pvpRewItems.Length; i++)
|
|
{
|
|
pvpRewItems[i].SetData(i);
|
|
}
|
|
}
|
|
|
|
if (DataHandler.playPvp.availWeeklyIndex < 3)
|
|
svRew.horizontalNormalizedPosition = 0f;
|
|
else
|
|
svRew.horizontalNormalizedPosition = 1f;
|
|
txtRewCount.text = FormatString.TextInt(DataHandler.playPvp.weeklyTry);
|
|
btnRewGet.interactable = goBadgeRew.activeSelf;
|
|
ReloadShineEffect();
|
|
SoundMgr.PlaySfx(SoundName.BtnPress);
|
|
iLoading--;
|
|
}
|
|
|
|
// 주간 보상 팝업 닫기.
|
|
public void CloseReward()
|
|
{
|
|
if (iLoading > 0)
|
|
return;
|
|
iLoading++;
|
|
canvasRew.enabled = false;
|
|
ReloadShineEffect();
|
|
iLoading--;
|
|
}
|
|
|
|
public static void SGetReward()
|
|
{
|
|
curMgr.BtnGetReward();
|
|
}
|
|
|
|
// 주간 보상 받기.
|
|
public void BtnGetReward()
|
|
{
|
|
if (iLoading > 0)
|
|
return;
|
|
int iavailrew = DataHandler.playPvp.availWeeklyIndex < 0 ? 0 : DataHandler.GetPvpReward(DataHandler.playPvp.availWeeklyIndex).id;
|
|
if (iavailrew <= DataHandler.playPvp.rewardWeekly)
|
|
return;
|
|
iLoading++;
|
|
nIdLv data = new nIdLv(iavailrew);
|
|
SvConnectManager.Instance.RequestSvPost(true, 0, UrlApi.GetUrl(UrlApi.PvpRew), typeof(nPvpRewReturn), ARewSucc, ARewFail, data, true);
|
|
}
|
|
|
|
// 통신 실패 - 주간 보상.
|
|
private void ARewFail(SvError error, object request)
|
|
{
|
|
iLoading--;
|
|
}
|
|
|
|
// 통신 성공 - 주간 보상.
|
|
private void ARewSucc(object result, object request)
|
|
{
|
|
nPvpRewReturn data = result as nPvpRewReturn;
|
|
if (data == null || data.playCurrency == null || data.playPvp == null)
|
|
{
|
|
ARewFail(new SvError(eErrorCode.NULL_OR_EMPTY), request);
|
|
return;
|
|
}
|
|
|
|
DataHandler.AddGoods(data.result, data.playCurrency, true);
|
|
DataHandler.UpdatePvpPlay(data.playPvp);
|
|
|
|
for (int i = 0; i < pvpRewItems.Length; i++)
|
|
{
|
|
pvpRewItems[i].SetData(i);
|
|
}
|
|
int iavailrew = DataHandler.playPvp.availWeeklyIndex < 0 ? 0 : DataHandler.GetPvpReward(DataHandler.playPvp.availWeeklyIndex).id;
|
|
goBadgeRew.SetActive(iavailrew > DataHandler.playPvp.rewardWeekly);
|
|
btnRewGet.interactable = goBadgeRew.activeSelf;
|
|
|
|
GameUIMgr.SOpenPopupGoods(data.result);
|
|
iLoading--;
|
|
}
|
|
#endregion Popup Reward
|
|
|
|
#region Popup Tier Reward
|
|
// 티어 보상 팝업 열기.
|
|
public void OpenTierReward()
|
|
{
|
|
if (iLoading > 0)
|
|
return;
|
|
iLoading++;
|
|
canvasTierRew.enabled = true;
|
|
|
|
if (bInitNeedTierRew)
|
|
{
|
|
bInitNeedTierRew = false;
|
|
tierList = new EnhancedUI.SmallList<int>();
|
|
int ilen = DataHandler.GetPvpTiers().Length;
|
|
for (int i = 0; i < ilen; i++)
|
|
tierList.Add(i);
|
|
escrTierRew.LoadDatas(tierList);
|
|
}
|
|
else
|
|
{
|
|
escrTierRew.scroller.RefreshActiveCellViews();
|
|
}
|
|
|
|
float fpos = escrTierRew.scroller.GetScrollPositionForDataIndex(DataHandler.pvpMyRank.tier - 1, EnhancedUI.EnhancedScroller.EnhancedScroller.CellViewPositionEnum.Before);
|
|
escrTierRew.scroller.SetScrollPositionImmediately(fpos);
|
|
btnTierRewGet.interactable = goBadgeTier.activeSelf;
|
|
SoundMgr.PlaySfx(SoundName.BtnPress);
|
|
ReloadShineEffect();
|
|
iLoading--;
|
|
}
|
|
|
|
// 티어 보상 팝업 닫기.
|
|
public void CloseTierReward()
|
|
{
|
|
if (iLoading > 0)
|
|
return;
|
|
iLoading++;
|
|
canvasTierRew.enabled = false;
|
|
ReloadShineEffect();
|
|
iLoading--;
|
|
}
|
|
|
|
public static void SGetTierReward()
|
|
{
|
|
curMgr.BtnGetTierReward();
|
|
}
|
|
|
|
// 티어 보상 받기.
|
|
public void BtnGetTierReward()
|
|
{
|
|
if (iLoading > 0)
|
|
return;
|
|
if (DataHandler.pvpMyRank.tier <= DataHandler.playPvp.rewardTier)
|
|
return;
|
|
iLoading++;
|
|
nIdLv data = new nIdLv(DataHandler.pvpMyRank.tier);
|
|
SvConnectManager.Instance.RequestSvPost(true, 0, UrlApi.GetUrl(UrlApi.PvpTierRew), typeof(nPvpRewReturn), ATierRewSucc, ATierRewFail, data, true);
|
|
}
|
|
|
|
// 통신 실패 - 티어 보상.
|
|
private void ATierRewFail(SvError error, object request)
|
|
{
|
|
iLoading--;
|
|
}
|
|
|
|
// 통신 성공 - 티어 보상.
|
|
private void ATierRewSucc(object result, object request)
|
|
{
|
|
nPvpRewReturn data = result as nPvpRewReturn;
|
|
if (data == null || data.playCurrency == null || data.playPvp == null)
|
|
{
|
|
ATierRewFail(new SvError(eErrorCode.NULL_OR_EMPTY), request);
|
|
return;
|
|
}
|
|
|
|
DataHandler.AddGoods(data.result, data.playCurrency, true);
|
|
DataHandler.UpdatePvpPlay(data.playPvp);
|
|
|
|
escrTierRew.scroller.RefreshActiveCellViews();
|
|
goBadgeTier.SetActive(DataHandler.pvpMyRank.tier > DataHandler.playPvp.rewardTier);
|
|
btnTierRewGet.interactable = goBadgeTier.activeSelf;
|
|
|
|
GameUIMgr.SOpenPopupGoods(data.result);
|
|
iLoading--;
|
|
}
|
|
#endregion Popup Tier Reward
|
|
|
|
#region Popup Tier
|
|
// 티어 팝업 열기.
|
|
public void OpenTier()
|
|
{
|
|
if (iLoading > 0)
|
|
return;
|
|
iLoading++;
|
|
canvasTier.enabled = true;
|
|
|
|
if (bInitNeedTier)
|
|
{
|
|
bInitNeedTier = false;
|
|
escrTier.LoadDatas(tierList);
|
|
}
|
|
else
|
|
{
|
|
escrTier.scroller.RefreshActiveCellViews();
|
|
}
|
|
|
|
float fpos = escrTier.scroller.GetScrollPositionForDataIndex(DataHandler.pvpMyRank.tier - 1, EnhancedUI.EnhancedScroller.EnhancedScroller.CellViewPositionEnum.Before);
|
|
escrTier.scroller.SetScrollPositionImmediately(fpos);
|
|
iLoading--;
|
|
}
|
|
|
|
// 티어 팝업 닫기.
|
|
public void CloseTier()
|
|
{
|
|
if (iLoading > 0)
|
|
return;
|
|
iLoading++;
|
|
canvasTier.enabled = false;
|
|
iLoading--;
|
|
}
|
|
#endregion Popup Tier
|
|
|
|
#region Join
|
|
// 결투장 매칭 입장.
|
|
public void JoinPvp()
|
|
{
|
|
if (iLoading > 0)
|
|
return;
|
|
|
|
SoundMgr.PlaySfx(SoundName.BtnPress);
|
|
// 기존 프리셋 보존.
|
|
GameUIMgr.SPreservePreset(DataHandler.PlayData.usePreset, DataHandler.PlayData.usePetPreset, DataHandler.PlayAwaken.usePreset);
|
|
// 프리셋 선택.
|
|
GameUIMgr.SOpenPopupPreset(DataHandler.playPvp.usePreset, DataHandler.playPvp.usePetPreset, DataHandler.playPvp.useExtraPreset, APresetSelected);
|
|
}
|
|
|
|
// 결투장 매칭 입장.
|
|
private void APresetSelected()
|
|
{
|
|
int iskillpreset = GameUIMgr.SGetSkillPreset();
|
|
int ipetpreset = GameUIMgr.SGetPetPreset();
|
|
int iawakenpreset = GameUIMgr.SGetAwakenPreset();
|
|
|
|
// 프리셋이 다를 경우 유저 스펙 서버에 저장.
|
|
if (iskillpreset != DataHandler.playPvp.usePreset || ipetpreset != DataHandler.playPvp.usePetPreset || iawakenpreset != DataHandler.playPvp.useExtraPreset)
|
|
{
|
|
DataHandler.UpdatePvpPreset(iskillpreset, ipetpreset, iawakenpreset);
|
|
bSpecUpdateJoin = true;
|
|
dPvpSpec data = dPvpSpec.GetMyBestSpec(iskillpreset, ipetpreset, iawakenpreset);
|
|
SvConnectManager.Instance.RequestSvPost(true, 0, UrlApi.GetUrl(UrlApi.PvpSpec), typeof(nIdCnt), ASpecSucc, ASpecFail, data, false);
|
|
}
|
|
else
|
|
{
|
|
JoinPvpStart();
|
|
}
|
|
}
|
|
|
|
// 결투장 입장 통신 시작.
|
|
private void JoinPvpStart()
|
|
{
|
|
iLoading++;
|
|
CoverCamera.Hold();
|
|
SvConnectManager.Instance.RequestSvPost(true, 0, UrlApi.GetUrl(UrlApi.PvpJoin), typeof(nPvpJoinReturn), AJoinSucc, AJoinFail, new nIdCnt(), false);
|
|
}
|
|
|
|
// 통신 성공 - 입장.
|
|
private void AJoinSucc(object result, object request)
|
|
{
|
|
nPvpJoinReturn data = result as nPvpJoinReturn;
|
|
|
|
if (data == null || data.playPvp == null || data.vsBattleInfo == null)
|
|
{
|
|
AJoinFail(new SvError(eErrorCode.NULL_OR_EMPTY), request);
|
|
return;
|
|
}
|
|
|
|
iEnemyUserId = data.vsUserId;
|
|
specEnemy = data.vsBattleInfo;
|
|
DataHandler.UpdatePvpPlay(data.playPvp);
|
|
GameUIMgr.SSetPvpTicket(data.playPvp.ticket);
|
|
btnMatch.interactable = data.playPvp.ticket > 0;
|
|
|
|
imgJoinMyBg.sprite = SGetPvpImg("vsblue");
|
|
imgJoinEnemyBg.sprite = SGetPvpImg("vsred");
|
|
|
|
imgJoinMyTier.sprite = imgLobbyTier.sprite;
|
|
imgJoinMyTierNum.sprite = imgLobbyTierNum.sprite;
|
|
txtJoinMyPoint.text = txtRp.text;
|
|
txtJoinMyName.text = txtName.text;
|
|
|
|
imgJoinEnemyTier.sprite = SGetTierImg(data.vsRank.tier);
|
|
imgJoinEnemyTierNum.sprite = SGetTierNumImg(data.vsRank.tier);
|
|
setTierNum(DataHandler.pvpMyRank.tier);
|
|
setTierNum(data.vsRank.tier, true);
|
|
|
|
txtJoinEnemyPoint.text = FormatString.TextRp(data.vsRank.point);
|
|
txtJoinEnemyName.text = data.vsRank.playerName;
|
|
|
|
tglBattleAuto.SetIsOnWithoutNotify(tglAuto.isOn);
|
|
txtBattleMyName.text = txtJoinMyName.text;
|
|
txtBattleEnemyName.text = txtJoinEnemyName.text;
|
|
|
|
rtrfJoinMy.anchoredPosition = new Vector2(-820f, 0f);
|
|
rtrfJoinEnemy.anchoredPosition = new Vector2(820f, 0f);
|
|
skAnimJoin.transform.localScale = new Vector3(0.01f, 0.01f, 0.01f);
|
|
goCanvasJoin.SetActive(true);
|
|
|
|
// 내 코스튬 로드.
|
|
if (iClothFriendly != DataHandler.PlayEquipCostume.outfitId)
|
|
{
|
|
iCosTopLoad++;
|
|
iClothFriendly = DataHandler.PlayEquipCostume.outfitId;
|
|
AddressableMgr.LoadClothSpine(iClothFriendly, ALoadClothFriendly);
|
|
}
|
|
|
|
if (iWeaponFriendly != DataHandler.PlayEquipCostume.weaponId)
|
|
{
|
|
iCosTopLoad++;
|
|
iWeaponFriendly = DataHandler.PlayEquipCostume.weaponId;
|
|
AddressableMgr.LoadWeaponSpine(iWeaponFriendly, ALoadWeaponFriendly);
|
|
}
|
|
|
|
// 상대 코스튬 로드.
|
|
iCosTopLoad += 2;
|
|
AddressableMgr.LoadClothSpine(specEnemy.costumeView, ALoadClothEnemy);
|
|
AddressableMgr.LoadWeaponSpine(specEnemy.weaponView, ALoadWeaponEnemy);
|
|
|
|
// 애니메이션 로드.
|
|
if (!handleVs.IsValid())
|
|
Addressables.LoadAssetAsync<SkeletonDataAsset>("spine/VS/VS_SkeletonData.asset").Completed += ALoadVsComp;
|
|
|
|
// 내 스킬 프리셋.
|
|
int iskillpreset = GameUIMgr.SGetSkillPreset();
|
|
if (iskillpreset != DataHandler.PlayData.usePreset)
|
|
{
|
|
DataHandler.PlayData.usePreset = iskillpreset;
|
|
}
|
|
|
|
// 내 펫 프리셋.
|
|
int ipetpreset = GameUIMgr.SGetPetPreset();
|
|
if (ipetpreset != DataHandler.PlayData.usePetPreset)
|
|
{
|
|
DataHandler.PlayData.usePetPreset = ipetpreset;
|
|
BattleMgr.SSetPet(ipetpreset);
|
|
}
|
|
|
|
// 내 각성 프리셋.
|
|
int iawakenpreset = GameUIMgr.SGetAwakenPreset();
|
|
if (iawakenpreset != DataHandler.PlayAwaken.usePreset)
|
|
{
|
|
DataHandler.PlayAwaken.usePreset = iawakenpreset;
|
|
}
|
|
|
|
StartCoroutine(nameof(CoBattleJoin));
|
|
|
|
dust.SetActive(false);
|
|
iLoading--;
|
|
}
|
|
|
|
// 통신 실패 - 입장.
|
|
private void AJoinFail(SvError error, object request)
|
|
{
|
|
CoverCamera.Release();
|
|
iLoading--;
|
|
}
|
|
|
|
private void setTierNum(int tier, bool isEnemy = false)
|
|
{
|
|
if (tier <= 9)
|
|
{
|
|
if (isEnemy)
|
|
imgJoinEnemyTierNum.rectTransform.anchoredPosition = new Vector3(imgJoinEnemyTier.rectTransform.anchoredPosition.x - 2, imgJoinEnemyTier.rectTransform.anchoredPosition.y + 3, 0);
|
|
else
|
|
imgJoinMyTierNum.rectTransform.anchoredPosition = new Vector3(imgJoinMyTier.rectTransform.anchoredPosition.x - 2, imgJoinMyTier.rectTransform.anchoredPosition.y + 3, 0);
|
|
}
|
|
else if (tier <= 12)
|
|
{
|
|
if (isEnemy)
|
|
imgJoinEnemyTierNum.rectTransform.anchoredPosition = new Vector3(imgJoinEnemyTier.rectTransform.anchoredPosition.x - 1, imgJoinEnemyTier.rectTransform.anchoredPosition.y + 7, 0);
|
|
else
|
|
imgJoinMyTierNum.rectTransform.anchoredPosition = new Vector3(imgJoinMyTier.rectTransform.anchoredPosition.x - 1, imgJoinMyTier.rectTransform.anchoredPosition.y + 7, 0);
|
|
}
|
|
else if (tier <= 30)
|
|
{
|
|
if (isEnemy)
|
|
imgJoinEnemyTierNum.rectTransform.anchoredPosition = new Vector3(imgJoinEnemyTier.rectTransform.anchoredPosition.x, imgJoinEnemyTier.rectTransform.anchoredPosition.y + 2, 0);
|
|
else
|
|
imgJoinMyTierNum.rectTransform.anchoredPosition = new Vector3(imgJoinMyTier.rectTransform.anchoredPosition.x, imgJoinMyTier.rectTransform.anchoredPosition.y + 2, 0);
|
|
}
|
|
else if (tier <= 48)
|
|
{
|
|
if (isEnemy)
|
|
imgJoinEnemyTierNum.rectTransform.anchoredPosition = new Vector3(imgJoinEnemyTier.rectTransform.anchoredPosition.x, imgJoinEnemyTier.rectTransform.anchoredPosition.y, 0);
|
|
else
|
|
imgJoinMyTierNum.rectTransform.anchoredPosition = new Vector3(imgJoinMyTier.rectTransform.anchoredPosition.x, imgJoinMyTier.rectTransform.anchoredPosition.y, 0);
|
|
}
|
|
else if (tier <= 51)
|
|
{
|
|
if (isEnemy)
|
|
imgJoinEnemyTierNum.rectTransform.anchoredPosition = new Vector3(imgJoinEnemyTier.rectTransform.anchoredPosition.x, imgJoinEnemyTier.rectTransform.anchoredPosition.y + 2, 0);
|
|
else
|
|
imgJoinMyTierNum.rectTransform.anchoredPosition = new Vector3(imgJoinMyTier.rectTransform.anchoredPosition.x, imgJoinMyTier.rectTransform.anchoredPosition.y + 2, 0);
|
|
}
|
|
else if (tier <= 57)
|
|
{
|
|
if (isEnemy)
|
|
imgJoinEnemyTierNum.rectTransform.anchoredPosition = new Vector3(imgJoinEnemyTier.rectTransform.anchoredPosition.x, imgJoinEnemyTier.rectTransform.anchoredPosition.y - 3, 0);
|
|
else
|
|
imgJoinMyTierNum.rectTransform.anchoredPosition = new Vector3(imgJoinMyTier.rectTransform.anchoredPosition.x, imgJoinMyTier.rectTransform.anchoredPosition.y - 3, 0);
|
|
}
|
|
}
|
|
|
|
private void setTierResultNum(int tier)
|
|
{
|
|
if (tier <= 9)
|
|
imgResultTierNum.rectTransform.anchoredPosition = new Vector3(imgResultTier.rectTransform.anchoredPosition.x - 2, imgResultTier.rectTransform.anchoredPosition.y + 3, 0);
|
|
else if (tier <= 12)
|
|
imgResultTierNum.rectTransform.anchoredPosition = new Vector3(imgResultTier.rectTransform.anchoredPosition.x - 1, imgResultTier.rectTransform.anchoredPosition.y + 7, 0);
|
|
else if (tier <= 30)
|
|
imgResultTierNum.rectTransform.anchoredPosition = new Vector3(imgResultTier.rectTransform.anchoredPosition.x, imgResultTier.rectTransform.anchoredPosition.y + 2, 0);
|
|
else if (tier <= 48)
|
|
imgResultTierNum.rectTransform.anchoredPosition = new Vector3(imgResultTier.rectTransform.anchoredPosition.x, imgResultTier.rectTransform.anchoredPosition.y, 0);
|
|
else if (tier <= 51)
|
|
imgResultTierNum.rectTransform.anchoredPosition = new Vector3(imgResultTier.rectTransform.anchoredPosition.x, imgResultTier.rectTransform.anchoredPosition.y + 2, 0);
|
|
else if (tier <= 57)
|
|
imgResultTierNum.rectTransform.anchoredPosition = new Vector3(imgResultTier.rectTransform.anchoredPosition.x, imgResultTier.rectTransform.anchoredPosition.y - 3, 0);
|
|
}
|
|
|
|
private void setTierMyInfo(int tier)
|
|
{
|
|
if (tier <= 9)
|
|
imgLobbyTierNum.rectTransform.anchoredPosition = new Vector3(imgLobbyTier.rectTransform.anchoredPosition.x - 4, imgLobbyTier.rectTransform.anchoredPosition.y + 3, 0);
|
|
else if (tier <= 12)
|
|
imgLobbyTierNum.rectTransform.anchoredPosition = new Vector3(imgLobbyTier.rectTransform.anchoredPosition.x - 1, imgLobbyTier.rectTransform.anchoredPosition.y + 7, 0);
|
|
else if (tier <= 30)
|
|
imgLobbyTierNum.rectTransform.anchoredPosition = new Vector3(imgLobbyTier.rectTransform.anchoredPosition.x, imgLobbyTier.rectTransform.anchoredPosition.y + 2, 0);
|
|
else if (tier <= 48)
|
|
imgLobbyTierNum.rectTransform.anchoredPosition = new Vector3(imgLobbyTier.rectTransform.anchoredPosition.x, imgLobbyTier.rectTransform.anchoredPosition.y, 0);
|
|
else if (tier <= 51)
|
|
imgLobbyTierNum.rectTransform.anchoredPosition = new Vector3(imgLobbyTier.rectTransform.anchoredPosition.x, imgLobbyTier.rectTransform.anchoredPosition.y + 2, 0);
|
|
else if (tier <= 57)
|
|
imgLobbyTierNum.rectTransform.anchoredPosition = new Vector3(imgLobbyTier.rectTransform.anchoredPosition.x, imgLobbyTier.rectTransform.anchoredPosition.y - 5, 0);
|
|
}
|
|
|
|
private IEnumerator CoBattleJoin()
|
|
{
|
|
// 리소스 로딩 대기.
|
|
while (iCosTopLoad > 0 || !handleVs.IsValid())
|
|
yield return YieldInstructionCache.WaitForSeconds(0.1f);
|
|
|
|
BattleMgr.SContetnUnlockCloseAll();
|
|
// 데이터 계산. 생명력 보정.
|
|
dPvpSpec specmy = dPvpSpec.GetMyBestSpec(DataHandler.playPvp.usePreset, DataHandler.playPvp.usePetPreset, DataHandler.playPvp.useExtraPreset);
|
|
specEnemy.CalcSkillCool();
|
|
//BigInteger bihpcalc = ((specmy.charAtk + specEnemy.charAtk) / 2L) * 20L / ((specmy.charHp + specEnemy.charHp) / 2L);
|
|
//specmy.charHp *= bihpcalc;
|
|
//specEnemy.charHp *= bihpcalc;
|
|
|
|
//BattleMgr 전투 중지, 데이터 세팅.
|
|
BattleMgr.SPreparePvp(specmy, specEnemy);
|
|
yield return null;
|
|
|
|
// 코스튬 세팅.
|
|
if (bInitNeedBattleCos)
|
|
{
|
|
charJoinMy.SetCostume(tx2dClothFriendly);
|
|
charJoinEnemy.SetCostume(tx2dClothEnemy);
|
|
}
|
|
yield return null;
|
|
|
|
charJoinMy.SetCostume(tx2dClothFriendly);
|
|
charJoinEnemy.SetCostume(tx2dClothEnemy);
|
|
|
|
// 전투 코스튬.
|
|
BattleMgr.SSetEnemyCostume(specEnemy.weaponView, specEnemy.costumeView, specEnemy.colorHair, specEnemy.colorTop, specEnemy.colorEye);
|
|
|
|
rtrfJoinMy.DOLocalMoveX(700f, 0.25f).SetRelative().SetEase(Ease.InQuad);
|
|
rtrfJoinEnemy.DOLocalMoveX(-700f, 0.25f).SetRelative().SetEase(Ease.InQuad);
|
|
yield return null;
|
|
|
|
// UI.
|
|
canvasUI.enabled = false;
|
|
GameUIMgr.SCloseUpPanel();
|
|
GameUIMgr.SSetMainUiOn(true);
|
|
BattleMgr.SSetBattleUiOn(true);
|
|
BattleMgr.SSetClearFailUiOn(false);
|
|
BattleMgr.SSetCameraOn(true);
|
|
GameUIMgr.SSetMainUiGroupRight(false, true, true, false);
|
|
GameUIMgr.SSetMainUiGroupLeft(false, false, false);
|
|
|
|
// VS 연출.
|
|
skAnimJoin.skeletonDataAsset = handleVs.Result;
|
|
skAnimJoin.Initialize(true);
|
|
skAnimJoin.UnscaledTime = true;
|
|
skAnimJoin.AnimationState.SetAnimation(0, "start", false);
|
|
skAnimJoin.transform.localScale = Vector3.one;
|
|
yield return YieldInstructionCache.WaitForSeconds(1.8f);
|
|
|
|
//전투 시작.
|
|
goCanvasJoin.SetActive(false);
|
|
yield return YieldInstructionCache.WaitForSeconds(0.7f);
|
|
BattleMgr.SStartPvp();
|
|
CoverCamera.Release();
|
|
|
|
// 입장시에 표시한 상대 코스튬 리소스 해제.
|
|
tx2dClothEnemy = null;
|
|
AddressableMgr.ReleaseClothSpine(specEnemy.costumeView);
|
|
AddressableMgr.ReleaseWeaponSpine(specEnemy.weaponView);
|
|
}
|
|
|
|
// 내 의상 리소스 로드.
|
|
private void ALoadClothFriendly(Texture2D obj)
|
|
{
|
|
tx2dClothFriendly = obj;
|
|
iCosTopLoad--;
|
|
}
|
|
|
|
// 내 무기 리소스 로드.
|
|
private void ALoadWeaponFriendly(Skin obj)
|
|
{
|
|
charJoinMy.SetWeapon(obj);
|
|
iCosTopLoad--;
|
|
}
|
|
|
|
// 적 의상 리소스 로드.
|
|
private void ALoadClothEnemy(Texture2D obj)
|
|
{
|
|
tx2dClothEnemy = obj;
|
|
iCosTopLoad--;
|
|
}
|
|
|
|
// 적 무기 리소스 로드.
|
|
private void ALoadWeaponEnemy(Skin obj)
|
|
{
|
|
charJoinEnemy.SetWeapon(obj);
|
|
iCosTopLoad--;
|
|
}
|
|
|
|
// VS 연출 로드.
|
|
private void ALoadVsComp(AsyncOperationHandle<SkeletonDataAsset> obj)
|
|
{
|
|
MeshRenderer renderer = skAnimJoin.GetComponent<MeshRenderer>();
|
|
renderer.sortingLayerID = canvasUI.sortingLayerID;
|
|
renderer.sortingOrder = 106;
|
|
|
|
handleVs = obj;
|
|
CoverCamera.Release();
|
|
}
|
|
#endregion Join
|
|
|
|
#region Result
|
|
// 결투장 나가기 버튼.
|
|
public void ExitPvp()
|
|
{
|
|
GameUIMgr.SOpenPopup2Button(LocalizationText.GetText("msg_exitnoreward"), AExitPvp, igroup: cGoods.TPvpTicket);
|
|
|
|
SoundMgr.PlaySfx(SoundName.BtnPress);
|
|
}
|
|
|
|
// 결투장 도중 종료.
|
|
private void AExitPvp()
|
|
{
|
|
iLoading++;
|
|
CoverCamera.Hold();
|
|
|
|
tglAuto.SetIsOnWithoutNotify(false);
|
|
canvasUI.enabled = true;
|
|
goCanvasResult.SetActive(false);
|
|
|
|
GameUIMgr.SSetPvpTicket(DataHandler.playPvp.ticket);
|
|
GameUIMgr.SOpenUpPanel(pvp: true);
|
|
GameUIMgr.SSetMainUiOn(false);
|
|
GameUIMgr.SCloseMenu();
|
|
BattleMgr.SSetBattleUiOn(false);
|
|
BattleMgr.SSetClearFailUiOn(false);
|
|
BattleMgr.SSetCameraOn(false);
|
|
|
|
GameUIMgr.SSetMainUiGroupRight(true, true, false, true);
|
|
GameUIMgr.SSetMainUiGroupLeft(true, true, true);
|
|
GameUIMgr.SReturnToPreservePreset();
|
|
BattleMgr.SExitPvp();
|
|
|
|
//dust.SetActive(true);
|
|
imgResultWin.gameObject.SetActive(false);
|
|
imgResultLose.gameObject.SetActive(false);
|
|
CoverCamera.Release();
|
|
iLoading--;
|
|
}
|
|
|
|
public static void SResultPvp(int iresult, int imyhprate, int ienemyhprate, BigInteger bimydmg, BigInteger bienemydmg)
|
|
{
|
|
curMgr.ResultPvp(iresult, imyhprate, ienemyhprate, bimydmg, bienemydmg);
|
|
}
|
|
|
|
// 결투장 결과 처리. iresult 1: 승리, 2: 패배.
|
|
private void ResultPvp(int iresult, int imyhprate, int ienemyhprate, BigInteger bimydmg, BigInteger bienemydmg)
|
|
{
|
|
iLoading++;
|
|
CoverCamera.Hold();
|
|
|
|
nPvpBattleRequest data = new nPvpBattleRequest();
|
|
data.vsUserId = iEnemyUserId;
|
|
data.battleResult = iresult;
|
|
data.damageRatio = 100 - ienemyhprate;
|
|
data.vsDamageRatio = 100 - imyhprate;
|
|
data.battleDmg = bimydmg;
|
|
data.vsBattleDmg = bienemydmg;
|
|
|
|
SvConnectManager.Instance.RequestSvPost(true, 0, UrlApi.GetUrl(UrlApi.PvpResult), typeof(nPvpBattleReturn), AResultSucc, AResultFail, data, false);
|
|
}
|
|
|
|
// 통신 실패 - 결과.
|
|
private void AResultFail(SvError error, object request)
|
|
{
|
|
canvasUI.enabled = true;
|
|
CoverCamera.Release();
|
|
iLoading--;
|
|
}
|
|
|
|
// 통신 성공 - 결과.
|
|
private void AResultSucc(object result, object request)
|
|
{
|
|
nPvpBattleReturn data = result as nPvpBattleReturn;
|
|
if (data == null || data.playPvp == null || data.rankPvp == null)
|
|
{
|
|
AResultFail(new SvError(eErrorCode.NULL_OR_EMPTY), request);
|
|
return;
|
|
}
|
|
|
|
nPvpBattleRequest reqdata = request as nPvpBattleRequest;
|
|
tglAuto.SetIsOnWithoutNotify(tglBattleAuto.isOn);
|
|
if (data.playPvp.ticket <= 0)
|
|
tglAuto.SetIsOnWithoutNotify(false);
|
|
|
|
// 결과 UI 표시.
|
|
goCanvasResult.SetActive(true);
|
|
if (data.rankPvp.tier != DataHandler.pvpMyRank.tier)
|
|
{
|
|
skAnimResultRankUp.gameObject.SetActive(true);
|
|
if (!handleRankUp.IsValid())
|
|
Addressables.LoadAssetAsync<SkeletonDataAsset>("spine/RankUp_top/RankUp_top_SkeletonData.asset").Completed += ALoadRankUpComp;
|
|
goResultRankUp.SetActive(true);
|
|
imgResultTier.sprite = SGetTierImg(data.rankPvp.tier);
|
|
imgResultTierNum.sprite = SGetTierNumImg(data.rankPvp.tier);
|
|
setTierResultNum(data.rankPvp.tier);
|
|
txtResultTier.text = LocalizationText.GetText(FormatString.CombineAllString("tier", data.rankPvp.tier.ToString()));
|
|
}
|
|
else
|
|
{
|
|
skAnimResultRankUp.gameObject.SetActive(false);
|
|
goResultRankUp.SetActive(false);
|
|
imgResultTier.sprite = imgLobbyTier.sprite;
|
|
imgResultTierNum.sprite = imgLobbyTierNum.sprite;
|
|
setTierResultNum(data.rankPvp.tier);
|
|
txtResultTier.text = txtTier.text;
|
|
}
|
|
|
|
if (!handleWinLose.IsValid())
|
|
Addressables.LoadAssetAsync<SkeletonDataAsset>("spine/win_lose/win_lose_SkeletonData.asset").Completed += ALoadWinLoseComp;
|
|
// 승리.
|
|
if (reqdata.battleResult == 1)
|
|
{
|
|
imgResultTop.color = new Color(241f / 255f, 174f / 255f, 42f / 255f, 1f);
|
|
txtResultAdd.text = DataHandler.sysPvp.pointClear.ToString();
|
|
imgResultWin.gameObject.SetActive(true);
|
|
imgResultLose.gameObject.SetActive(false);
|
|
}
|
|
// 패배.
|
|
else
|
|
{
|
|
imgResultTop.color = new Color(147f / 255f, 147f / 255f, 147f / 255f, 1f);
|
|
txtResultAdd.text = DataHandler.sysPvp.pointFail.ToString();
|
|
imgResultWin.gameObject.SetActive(false);
|
|
imgResultLose.gameObject.SetActive(true);
|
|
}
|
|
imgResultBottom.color = imgResultTop.color;
|
|
txtResultPoint.text = FormatString.TextInt(data.playPvp.point);
|
|
iEnemyUserId = -1;
|
|
specEnemy = null;
|
|
|
|
DataHandler.UpdatePvpPlay(data.playPvp);
|
|
DataHandler.UpdatePvpMyRank(data.rankPvp);
|
|
SetMyInfo();
|
|
|
|
//dust.SetActive(true);
|
|
StartCoroutine(CoOpenResult(reqdata.battleResult == 1));
|
|
}
|
|
|
|
private IEnumerator CoOpenResult(bool bwin)
|
|
{
|
|
while (!handleWinLose.IsValid())
|
|
yield return YieldInstructionCache.WaitForSeconds(0.1f);
|
|
if (bwin)
|
|
{
|
|
skAnimResult.AnimationState.SetAnimation(0, "win_start", false);
|
|
skAnimResult.transform.localScale = Vector3.one;
|
|
yield return YieldInstructionCache.WaitForSeconds(0.765f);
|
|
skAnimResult.AnimationState.SetAnimation(0, "win_loop", true);
|
|
yield return null;
|
|
}
|
|
else
|
|
{
|
|
skAnimResult.AnimationState.SetAnimation(0, "lose_start", false);
|
|
skAnimResult.transform.localScale = Vector3.one;
|
|
yield return YieldInstructionCache.WaitForSeconds(0.3f);
|
|
}
|
|
|
|
|
|
// 남은 티켓 수 확인하여 n초 후 다시 매칭. 대기 시간 도중에 결과 팝업 끌 수 없음.
|
|
if (tglAuto.isOn)
|
|
{
|
|
yield return YieldInstructionCache.WaitForSeconds(1.5f);
|
|
goCanvasResult.SetActive(false);
|
|
JoinPvpStart();
|
|
}
|
|
|
|
CoverCamera.Release();
|
|
iLoading--;
|
|
}
|
|
|
|
public void CloseResult()
|
|
{
|
|
if (iLoading > 0)
|
|
return;
|
|
AExitPvp();
|
|
}
|
|
|
|
// WinLose 연출 로드.
|
|
private void ALoadWinLoseComp(AsyncOperationHandle<SkeletonDataAsset> obj)
|
|
{
|
|
MeshRenderer renderer = skAnimResult.GetComponent<MeshRenderer>();
|
|
renderer.sortingLayerID = canvasUI.sortingLayerID;
|
|
renderer.sortingOrder = 106;
|
|
skAnimResult.skeletonDataAsset = obj.Result;
|
|
skAnimResult.Initialize(true);
|
|
skAnimResult.UnscaledTime = true;
|
|
|
|
handleWinLose = obj;
|
|
CoverCamera.Release();
|
|
}
|
|
|
|
// RankUp 연출 로드.
|
|
private void ALoadRankUpComp(AsyncOperationHandle<SkeletonDataAsset> obj)
|
|
{
|
|
MeshRenderer renderer = skAnimResultRankUp.GetComponent<MeshRenderer>();
|
|
renderer.sortingLayerID = canvasUI.sortingLayerID;
|
|
renderer.sortingOrder = 106;
|
|
skAnimResultRankUp.skeletonDataAsset = obj.Result;
|
|
skAnimResultRankUp.Initialize(true);
|
|
skAnimResultRankUp.UnscaledTime = true;
|
|
skAnimResultRankUp.AnimationState.SetAnimation(0, "animation", false);
|
|
skAnimResultRankUp.transform.localScale = Vector3.one;
|
|
|
|
handleRankUp = obj;
|
|
CoverCamera.Release();
|
|
}
|
|
#endregion Result
|
|
}
|