Commit 6cb91510 authored by Senator John's avatar Senator John 💬

Merge branch 'patch' into 'master'

Patch

See merge request !29
parents 29f844aa 4fa42886
...@@ -235,26 +235,42 @@ namespace MDPro3.Servant ...@@ -235,26 +235,42 @@ namespace MDPro3.Servant
private IEnumerator RefreshMyCardAssets() private IEnumerator RefreshMyCardAssets()
{ {
var onlineUI = GetUI<OnlineServantUI>();
if (onlineUI == null || onlineUI.PageMyCard == null || onlineUI.PageMyCard.UserProfile == null)
yield break;
var userProfile = onlineUI.PageMyCard.UserProfile;
var task = MyCard.GetExp(); var task = MyCard.GetExp();
while (!task.IsCompleted) while (!task.IsCompleted)
yield return null; yield return null;
GetUI<OnlineServantUI>().PageMyCard.UserProfile.SetProfile(task.Result); MyCardUserExp expData = null;
if (!task.IsCanceled && task.Exception == null)
expData = task.Result;
userProfile.SetProfile(expData);
while (!Appearance.loaded) while (!Appearance.loaded)
yield return null; yield return null;
GetUI<OnlineServantUI>().PageMyCard.UserProfile.Avatar.material = Appearance.duelFrameMat0; if (userProfile.Avatar != null)
userProfile.Avatar.material = Appearance.duelFrameMat0;
if (MyCard.avatar == null) if (MyCard.avatar == null)
{ {
var avatarTask = Tools.DownloadImageAsync(MyCard.account.user.avatar); var avatarAddress = MyCard.account?.user?.avatar;
if (!string.IsNullOrEmpty(avatarAddress))
{
var avatarTask = Tools.DownloadImageAsync(avatarAddress);
while (!avatarTask.IsCompleted) while (!avatarTask.IsCompleted)
yield return null; yield return null;
MyCard.avatar = avatarTask.Result; MyCard.avatar = avatarTask.Result;
GetUI<OnlineServantUI>().PageMyCard.UserProfile.Avatar.texture = MyCard.avatar;
} }
}
if (userProfile.Avatar != null && MyCard.avatar != null)
userProfile.Avatar.texture = MyCard.avatar;
GetUI<OnlineServantUI>().PageMyCard.ActivePageFunction(); onlineUI.PageMyCard.ActivePageFunction();
} }
private void RefreshDeckSelector() private void RefreshDeckSelector()
......
...@@ -111,22 +111,58 @@ namespace MDPro3.UI ...@@ -111,22 +111,58 @@ namespace MDPro3.UI
public void SetProfile(MyCardUserExp data) public void SetProfile(MyCardUserExp data)
{ {
TextUserName.text = MyCard.account.user.name; if (data == null)
return;
TextExpValue.text = data.exp.ToString();
TextDPValue.text = data.pt.ToString(); var userInfo = MyCard.account?.user;
TextAthleticWinValue.text = data.athletic_win.ToString(); var userName = userInfo?.name;
TextAthleticWinRatioValue.text = data.athletic_wl_ratio + "%"; if (string.IsNullOrEmpty(userName))
TextAthleticRankValue.text = data.arena_rank.ToString(); userName = userInfo?.username ?? string.Empty;
TextEntertainCountValue.text = data.entertain_all.ToString();
TextEntertainRankValue.text = data.exp_rank.ToString(); var textUserName = TextUserName;
if (textUserName != null)
var rankSprites = TextureManager.container.GetRankSprites(data.pt); textUserName.text = userName;
IconBG.sprite = rankSprites[0]; var textExpValue = TextExpValue;
IconRank.sprite = rankSprites[1]; if (textExpValue != null)
IconTier1.sprite = rankSprites[2]; textExpValue.text = data.exp.ToString();
IconTier2.sprite = rankSprites[3]; var textDPValue = TextDPValue;
IconTier3.sprite = rankSprites[4]; if (textDPValue != null)
textDPValue.text = data.pt.ToString();
var textAthleticWinValue = TextAthleticWinValue;
if (textAthleticWinValue != null)
textAthleticWinValue.text = data.athletic_win.ToString();
var textAthleticWinRatioValue = TextAthleticWinRatioValue;
if (textAthleticWinRatioValue != null)
textAthleticWinRatioValue.text = data.athletic_wl_ratio + "%";
var textAthleticRankValue = TextAthleticRankValue;
if (textAthleticRankValue != null)
textAthleticRankValue.text = data.arena_rank.ToString();
var textEntertainCountValue = TextEntertainCountValue;
if (textEntertainCountValue != null)
textEntertainCountValue.text = data.entertain_all.ToString();
var textEntertainRankValue = TextEntertainRankValue;
if (textEntertainRankValue != null)
textEntertainRankValue.text = data.exp_rank.ToString();
var rankSprites = TextureManager.container?.GetRankSprites(data.pt);
if (rankSprites == null || rankSprites.Count < 5)
return;
var iconBG = IconBG;
if (iconBG != null)
iconBG.sprite = rankSprites[0];
var iconRank = IconRank;
if (iconRank != null)
iconRank.sprite = rankSprites[1];
var iconTier1 = IconTier1;
if (iconTier1 != null)
iconTier1.sprite = rankSprites[2];
var iconTier2 = IconTier2;
if (iconTier2 != null)
iconTier2.sprite = rankSprites[3];
var iconTier3 = IconTier3;
if (iconTier3 != null)
iconTier3.sprite = rankSprites[4];
} }
} }
} }
...@@ -2,6 +2,7 @@ using Cysharp.Threading.Tasks; ...@@ -2,6 +2,7 @@ using Cysharp.Threading.Tasks;
using DG.Tweening; using DG.Tweening;
using MDPro3.Duel.YGOSharp; using MDPro3.Duel.YGOSharp;
using MDPro3.Utility; using MDPro3.Utility;
using System;
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
...@@ -101,8 +102,7 @@ namespace MDPro3.UI ...@@ -101,8 +102,7 @@ namespace MDPro3.UI
protected override void OnDisable() protected override void OnDisable()
{ {
base.OnDisable(); base.OnDisable();
cts?.Cancel(); DisposeRefreshCts();
cts?.Dispose();
} }
public void SetConfigDeck(string hint) public void SetConfigDeck(string hint)
...@@ -147,9 +147,15 @@ namespace MDPro3.UI ...@@ -147,9 +147,15 @@ namespace MDPro3.UI
{ {
refreshed = false; refreshed = false;
cts = new(); DisposeRefreshCts();
await UniTask.WaitUntil(() => Items.initialized, cancellationToken : cts.Token); var refreshCts = new CancellationTokenSource();
await UniTask.WaitWhile(() => TextureManager.container == null, cancellationToken: cts.Token); cts = refreshCts;
var token = refreshCts.Token;
try
{
await UniTask.WaitUntil(() => Items.initialized, cancellationToken: token);
await UniTask.WaitWhile(() => TextureManager.container == null, cancellationToken: token);
ImageDeck.color = Color.clear; ImageDeck.color = Color.clear;
ImageCard0.color =Color.clear; ImageCard0.color =Color.clear;
...@@ -162,7 +168,7 @@ namespace MDPro3.UI ...@@ -162,7 +168,7 @@ namespace MDPro3.UI
if (card0 == 0) if (card0 == 0)
{ {
ImageCard0.texture = null; ImageCard0.texture = null;
ImageCard0.material = await ABLoader.LoadProtectorMaterial(protector.ToString(), cts.Token); ImageCard0.material = await ABLoader.LoadProtectorMaterial(protector.ToString(), token);
} }
else else
{ {
...@@ -174,7 +180,7 @@ namespace MDPro3.UI ...@@ -174,7 +180,7 @@ namespace MDPro3.UI
if (card1 == 0) if (card1 == 0)
{ {
ImageCard1.texture = null; ImageCard1.texture = null;
ImageCard1.material = await ABLoader.LoadProtectorMaterial(protector.ToString(), cts.Token); ImageCard1.material = await ABLoader.LoadProtectorMaterial(protector.ToString(), token);
} }
else else
{ {
...@@ -186,7 +192,7 @@ namespace MDPro3.UI ...@@ -186,7 +192,7 @@ namespace MDPro3.UI
if (card2 == 0) if (card2 == 0)
{ {
ImageCard2.texture = null; ImageCard2.texture = null;
ImageCard2.material = await ABLoader.LoadProtectorMaterial(protector.ToString(), cts.Token); ImageCard2.material = await ABLoader.LoadProtectorMaterial(protector.ToString(), token);
} }
else else
{ {
...@@ -197,6 +203,49 @@ namespace MDPro3.UI ...@@ -197,6 +203,49 @@ namespace MDPro3.UI
refreshed = true; refreshed = true;
} }
catch (OperationCanceledException)
{
}
finally
{
if (ReferenceEquals(cts, refreshCts))
{
cts = null;
try
{
refreshCts.Dispose();
}
catch (ObjectDisposedException)
{
}
}
}
}
private void DisposeRefreshCts()
{
var refreshCts = cts;
if (refreshCts == null)
return;
cts = null;
try
{
refreshCts.Cancel();
}
catch (ObjectDisposedException)
{
}
try
{
refreshCts.Dispose();
}
catch (ObjectDisposedException)
{
}
}
protected override void CallHoverOnEvent() protected override void CallHoverOnEvent()
{ {
......
...@@ -65,10 +65,7 @@ namespace MDPro3.UI ...@@ -65,10 +65,7 @@ namespace MDPro3.UI
{ {
if(InputField.isFocused) if(InputField.isFocused)
{ {
if (int.TryParse(InputField.text, out int num)) TryAdjustFocusedIntegerValue(upNum);
{
InputField.text = (num + upNum).ToString();
}
return; return;
} }
else if (navigationEvent.onUpNavigation.GetPersistentEventCount() > 0) else if (navigationEvent.onUpNavigation.GetPersistentEventCount() > 0)
...@@ -81,10 +78,7 @@ namespace MDPro3.UI ...@@ -81,10 +78,7 @@ namespace MDPro3.UI
{ {
if (InputField.isFocused) if (InputField.isFocused)
{ {
if (int.TryParse(InputField.text, out int num)) TryAdjustFocusedIntegerValue(-upNum);
{
InputField.text = (num - upNum).ToString();
}
return; return;
} }
else if (navigationEvent.onDownNavigation.GetPersistentEventCount() > 0) else if (navigationEvent.onDownNavigation.GetPersistentEventCount() > 0)
...@@ -97,10 +91,7 @@ namespace MDPro3.UI ...@@ -97,10 +91,7 @@ namespace MDPro3.UI
{ {
if (InputField.isFocused) if (InputField.isFocused)
{ {
if (int.TryParse(InputField.text, out int num)) TryAdjustFocusedIntegerValue(-rightNum);
{
InputField.text = (num - rightNum).ToString();
}
return; return;
} }
else if (navigationEvent.onLeftNavigation.GetPersistentEventCount() > 0) else if (navigationEvent.onLeftNavigation.GetPersistentEventCount() > 0)
...@@ -113,10 +104,7 @@ namespace MDPro3.UI ...@@ -113,10 +104,7 @@ namespace MDPro3.UI
{ {
if (InputField.isFocused) if (InputField.isFocused)
{ {
if (int.TryParse(InputField.text, out int num)) TryAdjustFocusedIntegerValue(rightNum);
{
InputField.text = (num + rightNum).ToString();
}
return; return;
} }
else if (navigationEvent.onRightNavigation.GetPersistentEventCount() > 0) else if (navigationEvent.onRightNavigation.GetPersistentEventCount() > 0)
...@@ -128,5 +116,19 @@ namespace MDPro3.UI ...@@ -128,5 +116,19 @@ namespace MDPro3.UI
base.OnNavigation(eventData); base.OnNavigation(eventData);
} }
private void TryAdjustFocusedIntegerValue(int delta)
{
if (!AllowArrowAdjustForFocusedInput())
return;
if (int.TryParse(InputField.text, out int num))
InputField.text = (num + delta).ToString();
}
private bool AllowArrowAdjustForFocusedInput()
{
return InputField.contentType == TMP_InputField.ContentType.IntegerNumber
|| InputField.characterValidation == TMP_InputField.CharacterValidation.Integer;
}
} }
} }
...@@ -3,6 +3,8 @@ using TMPro; ...@@ -3,6 +3,8 @@ using TMPro;
using UnityEngine; using UnityEngine;
using UnityEngine.UI; using UnityEngine.UI;
using System.Collections; using System.Collections;
using System.Collections.Generic;
using System.Text;
using UnityEngine.EventSystems; using UnityEngine.EventSystems;
using MDPro3.Servant; using MDPro3.Servant;
using MDPro3.UI.ServantUI; using MDPro3.UI.ServantUI;
...@@ -25,8 +27,36 @@ namespace MDPro3.UI ...@@ -25,8 +27,36 @@ namespace MDPro3.UI
{ {
base.Refresh(); base.Refresh();
Manager.GetElement<TextMeshProUGUI>("Player0Name").text = player0Name; var player0Label = Manager.GetElement<TextMeshProUGUI>("Player0Name");
Manager.GetElement<TextMeshProUGUI>("Player1Name").text = player1Name; var player1Label = Manager.GetElement<TextMeshProUGUI>("Player1Name");
if (player0Label != null)
player0Label.text = GetSafeDisplayName(player0Name, player0Label);
if (player1Label != null)
player1Label.text = GetSafeDisplayName(player1Name, player1Label);
}
private static string GetSafeDisplayName(string name, TextMeshProUGUI label)
{
if (string.IsNullOrEmpty(name))
return string.Empty;
if (label == null || label.font == null)
return name;
if (label.font.HasCharacters(name, out uint[] missingCharacters, true, true))
return name;
if (missingCharacters == null || missingCharacters.Length == 0)
return name;
var missingSet = new HashSet<uint>(missingCharacters);
var builder = new StringBuilder(name.Length);
for (int i = 0; i < name.Length; i++)
{
var code = name[i];
builder.Append(missingSet.Contains(code) ? '?' : name[i]);
}
return builder.ToString();
} }
protected override async UniTask RefreshAsync() protected override async UniTask RefreshAsync()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment