NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/UI/UI_PVPSettlementController.cs

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.GetAllCharacters();
_characterIDs = new List<uint>();
for (int i = 0; i < characterIDs.Count; 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
}