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 _rewardItems = new(); private Team _team; private List _characterIDs; public static async UniTask 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; } // Use this for initialization public override void OnInit() { //bind UI GameObj UI_PVPSettlementBinder.GetComponents(this); _scrollReward = GetComponent("Image_BG/Text_Rewards/RewardScroll"); _scrollHead = GetComponent("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? $"+{add}" : $"{add}"; _PlayScoreAnim(now, old); } 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? $"+{add}" : $"{add}"; } _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(); 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(cell); if (headNode) { var characterID = _characterIDs[index]; var headInfo = new UIHeadInfo(characterID, false) { IsShowPro = true, IsShowRarity = true }; headNode.SetData(headInfo); headNode.Refresh(); } } #endregion }