271 lines
5.9 KiB
C#
271 lines
5.9 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using Cysharp.Threading.Tasks;
|
|
using DG.Tweening;
|
|
using TMPro;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
using UnityEngine.UIElements;
|
|
using Button = UnityEngine.UI.Button;
|
|
using Image = UnityEngine.UI.Image;
|
|
using Toggle = UnityEngine.UI.Toggle;
|
|
using ScrollView = PhxhSDK.PhxhScrollView;
|
|
using Framework;
|
|
using Gameplay;
|
|
using Gameplay.Common;
|
|
using Gameplay.Level;
|
|
using Gameplay.Net;
|
|
using NLDPB;
|
|
using PhxhSDK;
|
|
|
|
public class UI_PVPSettlementController : UIWindow
|
|
{
|
|
//UI GameObj
|
|
///Auto Gen Start///
|
|
public Image Image_BottomDark;
|
|
public RawImage RawImage_Characters;
|
|
public Image Image_BG;
|
|
public TMP_Text Text_Settlement;
|
|
public Image Image_BlueBar;
|
|
public TMP_Text Text_Score;
|
|
public TMP_Text Text_ScoreCurrent;
|
|
public TMP_Text Text_ScoreChange;
|
|
public TMP_Text Text_Rank;
|
|
public TMP_Text Text_RankCurrent;
|
|
public TMP_Text Text_RankChange;
|
|
public TMP_Text Text_Rewards;
|
|
public Image Image_DownShadow;
|
|
public Button Button_Close;
|
|
|
|
///Auto Gen End///
|
|
|
|
private RecycleView _scrollReward;
|
|
|
|
private RecycleView _scrollHead;
|
|
|
|
private bool _isSuccess;
|
|
private bool _isPlaying;
|
|
private PVPSettleData _settleData;
|
|
private PVPSettleData _newPVPData;
|
|
private Sequence _seq;
|
|
|
|
private List<RewardItem> _rewardItems = new();
|
|
private Team _team;
|
|
private List<uint> _characterIDs;
|
|
|
|
public static async UniTask<UIWindow> Open(bool isSuccess = false)
|
|
{
|
|
return await UIManager.Instance.CreateAndOpenWindow(UINameConst.UI_PVPSettlement, isSuccess);
|
|
}
|
|
// deal with input data
|
|
public override void PreLoad(object data = null)
|
|
{
|
|
_isSuccess = (bool)data;
|
|
}
|
|
|
|
public override async UniTask<bool> OnBack(object data = null)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
// Use this for initialization
|
|
public override void OnInit()
|
|
{
|
|
//bind UI GameObj
|
|
UI_PVPSettlementBinder.GetComponents(this);
|
|
_scrollReward = GetComponent<RecycleView>("Image_BG/Text_Rewards/RewardScroll");
|
|
_scrollHead = GetComponent<RecycleView>("Image_BG/HeroLevelUp/Image_DownShadow/CharacterView");
|
|
|
|
_settleData = LevelManager.Instance.PvpSettleData;
|
|
_newPVPData = new PVPSettleData();
|
|
|
|
_scrollReward.Init(_RefreshRewardItem);
|
|
_scrollHead.Init(_RefreshCharacterItem);
|
|
|
|
BindButton(Button_Close, OnClickClose);
|
|
}
|
|
|
|
//invoke when open window
|
|
protected override void OnShowWindow(object data = null)
|
|
{
|
|
_Refresh();
|
|
}
|
|
|
|
//invoke when reload window
|
|
protected override void OnReloadWindow(object data = null)
|
|
{
|
|
|
|
}
|
|
|
|
//invoke when close window
|
|
protected override void OnHideWindow()
|
|
{
|
|
|
|
}
|
|
|
|
//invoke when destroy
|
|
public override void OnRelease()
|
|
{
|
|
base.OnRelease();
|
|
_seq.Kill();
|
|
_seq = null;
|
|
}
|
|
|
|
private async void OnClickClose()
|
|
{
|
|
if (_isPlaying)
|
|
{
|
|
return;
|
|
}
|
|
// var itemList = Actor.Instance.RewardItems;
|
|
// Action cb = () =>
|
|
// {
|
|
// LevelManager.Instance.ExitLevelDirectly();
|
|
// };
|
|
// if (itemList.Lists[(int)ItemSource.PvpBattle].Ids.Count > 0)
|
|
// {
|
|
// await UI_GetItemWindowController.Open(itemList, UI_GetItemWindowController.EShowType.Normal, cb);
|
|
// }
|
|
// else
|
|
// {
|
|
// LevelManager.Instance.ExitLevelDirectly();
|
|
// }
|
|
LevelManager.Instance.ExitLevelDirectly();
|
|
CloseWindow();
|
|
}
|
|
|
|
#region Refresh
|
|
|
|
private void _Refresh()
|
|
{
|
|
_RefreshTitle();
|
|
_RefreshAnim();
|
|
_RefreshRewards();
|
|
_RefreshCharacters();
|
|
}
|
|
|
|
private void _RefreshTitle()
|
|
{
|
|
var strKey = _isSuccess ? "pvp_settle_title_suc" : "pvp_settle_title_defeat";
|
|
Text_Settlement.text = CommonUtils.GetLocalizeText(strKey);
|
|
}
|
|
|
|
private void _RefreshAnim()
|
|
{
|
|
if (_seq == null)
|
|
{
|
|
_seq = DOTween.Sequence();
|
|
}
|
|
_RefreshScore();
|
|
_RefreshRank();
|
|
}
|
|
|
|
private void _RefreshScore()
|
|
{
|
|
var old = _settleData.Score;
|
|
var now = _newPVPData.Score;
|
|
var add = now - old;
|
|
if (add == 0)
|
|
Text_ScoreChange.text = "";
|
|
else
|
|
Text_ScoreChange.text = _isSuccess? $"<color=#00ff33>+{add}</color>" : $"<color=#FE4B62>{add}</color>";
|
|
_PlayScoreAnim(old, now);
|
|
}
|
|
|
|
private void _RefreshRank()
|
|
{
|
|
var old = _settleData.Rank;
|
|
var now = _newPVPData.Rank;
|
|
var add = old - now;
|
|
if (add == 0)
|
|
Text_RankChange.text = "";
|
|
else
|
|
{
|
|
if (old <= 0 && add < 0)
|
|
{
|
|
add = -add;
|
|
}
|
|
Text_RankChange.text = _isSuccess? $"<color=#00ff33>+{add}</color>" : $"<color=#FE4B62>{add}</color>";
|
|
}
|
|
_PlayRankAnim(old, now);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Anim
|
|
|
|
private void _PlayScoreAnim(int old, int now)
|
|
{
|
|
var tw = DOTween.To(() => old, value =>
|
|
{
|
|
_isPlaying = true;
|
|
Text_ScoreCurrent.text = value.ToString();
|
|
}, now, 1.5f);
|
|
_seq.Append(tw);
|
|
}
|
|
|
|
private void _PlayRankAnim(int old, int now)
|
|
{
|
|
var tw = DOTween.To(() => old, value =>
|
|
{
|
|
Text_RankCurrent.text = value.ToString();
|
|
}, now, 1.5f);
|
|
_seq.Join(tw);
|
|
_seq.AppendCallback(() =>
|
|
{
|
|
_isPlaying = false;
|
|
});
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region ScrollView
|
|
|
|
private void _RefreshRewards()
|
|
{
|
|
var rewardID = _isSuccess? GLConfig.Inst.data.PvpBattleWinRewards : GLConfig.Inst.data.PvpBattleLoseRewards;
|
|
_rewardItems = RewardManager.Instance.Get(rewardID).ItemList.Get();
|
|
_scrollReward.ShowList(_rewardItems.Count);
|
|
}
|
|
|
|
private void _RefreshRewardItem(GameObject cell, int index)
|
|
{
|
|
var genericItem = new GenericItem(cell);
|
|
var item = _rewardItems[index];
|
|
genericItem.SetInfo(item.ID, item.Count);
|
|
}
|
|
|
|
private void _RefreshCharacters()
|
|
{
|
|
_team = TeamEditManager.Instance.GetSelectTeam();
|
|
var characterIDs = _team.GetCharacterIDs();
|
|
_characterIDs = new List<uint>();
|
|
for (int i = 0; i < characterIDs.Length; i++)
|
|
{
|
|
if (characterIDs[i] > 0)
|
|
{
|
|
_characterIDs.Add(characterIDs[i]);
|
|
}
|
|
}
|
|
_scrollHead.ShowList(_characterIDs.Count);
|
|
}
|
|
|
|
private void _RefreshCharacterItem(GameObject cell, int index)
|
|
{
|
|
var headNode = CommonUtils.GetComponent<UIHeadItemNode>(cell);
|
|
if (headNode)
|
|
{
|
|
var characterID = _characterIDs[index];
|
|
var headInfo = new UIHeadInfo(characterID, false)
|
|
{
|
|
IsShowPro = true,
|
|
IsShowRarity = true
|
|
};
|
|
headNode.SetData(headInfo);
|
|
headNode.Refresh();
|
|
}
|
|
}
|
|
#endregion
|
|
} |