diff --git a/Assets/PerfectWorld/Scripts/Players/PlayerModelPreview.cs b/Assets/PerfectWorld/Scripts/Players/PlayerModelPreview.cs
index bafcb42139..e2eac59141 100644
--- a/Assets/PerfectWorld/Scripts/Players/PlayerModelPreview.cs
+++ b/Assets/PerfectWorld/Scripts/Players/PlayerModelPreview.cs
@@ -111,7 +111,7 @@ namespace BrewMonster.Scripts
/// Loads one preview instance per role (via ).
/// All instances stay hidden until is called.
///
- public async void ShowAllPlayerModels(List roleInfos)
+ public async UniTask ShowAllPlayerModels(List roleInfos)
{
BMLogger.Log($"ShowAllPlayerModels: {roleInfos.Count}");
_loadVersion++;
@@ -121,7 +121,7 @@ namespace BrewMonster.Scripts
{
ClearModels();
_suppressHierarchyWatch = false;
- return;
+ return false;
}
List oldModels = new List(playerModels);
@@ -139,7 +139,7 @@ namespace BrewMonster.Scripts
if (version != _loadVersion)
{
Destroy(model);
- return;
+ return false;
}
model.transform.SetParent(modelRoot, false);
@@ -164,6 +164,7 @@ namespace BrewMonster.Scripts
_suppressHierarchyWatch = false;
if (_inventoryPreviewActive)
SyncHierarchyBaseline();
+ return true;
}
///
@@ -431,7 +432,7 @@ namespace BrewMonster.Scripts
_lastPreviewRoleInfo = roleInfo;
_suppressHierarchyWatch = true;
- ShowAllPlayerModels(new List { roleInfo });
+ ShowAllPlayerModels(new List { roleInfo }).Forget();
ShowPlayerModel(roleInfo.roleid);
}
diff --git a/Assets/PerfectWorld/Scripts/UI/Login/CreateCharacterScreen.cs b/Assets/PerfectWorld/Scripts/UI/Login/CreateCharacterScreen.cs
index 0a65e7d4a3..bc13fa5212 100644
--- a/Assets/PerfectWorld/Scripts/UI/Login/CreateCharacterScreen.cs
+++ b/Assets/PerfectWorld/Scripts/UI/Login/CreateCharacterScreen.cs
@@ -11,6 +11,7 @@ using UnityEngine.UI;
using BrewMonster.Scripts;
using BrewMonster.PerfectWorld.Scripts.Utility.ChatFilter;
using System.Collections.Generic;
+using Cysharp.Threading.Tasks;
namespace BrewMonster.UI
{
@@ -106,7 +107,7 @@ namespace BrewMonster.UI
ClearValidationError();
UpdateConfirmButtonState();
-
+
SetupRoleInfos();
}
@@ -402,7 +403,7 @@ namespace BrewMonster.UI
}
}
- PlayerModelPreview.Instance.ShowAllPlayerModels(_roleInfos);
+ PlayerModelPreview.Instance.ShowAllPlayerModels(_roleInfos).Forget();
}
private void LoadShowModel(int prof, int gender)
diff --git a/Assets/Scripts/CharacterItemUI.cs b/Assets/Scripts/CharacterItemUI.cs
index 736401f416..e504a09648 100644
--- a/Assets/Scripts/CharacterItemUI.cs
+++ b/Assets/Scripts/CharacterItemUI.cs
@@ -19,7 +19,8 @@ public class CharacterItemUI : MonoBehaviour
private void OnEnable()
{
- _goFocusImage.SetActive(false);
+ if(_goFocusImage!=null)
+ _goFocusImage.SetActive(false);
}
// Start is called once before the first execution of Update after the MonoBehaviour is created
@@ -53,7 +54,11 @@ public class CharacterItemUI : MonoBehaviour
}
}
- public void OnClickBtn()
+ private void OnClickBtn()
+ {
+ onClick?.Invoke(this);
+ }
+ public void ForceClickBtn()
{
onClick?.Invoke(this);
}
diff --git a/Assets/Scripts/SelecScreenCharacter.cs b/Assets/Scripts/SelecScreenCharacter.cs
index c2d5f588ac..7aa3d07e2e 100644
--- a/Assets/Scripts/SelecScreenCharacter.cs
+++ b/Assets/Scripts/SelecScreenCharacter.cs
@@ -6,6 +6,7 @@ using UnityEngine;
using UnityEngine.UI;
using BrewMonster;
using System.Collections;
+using Cysharp.Threading.Tasks;
namespace BrewMonster.UI
{
@@ -26,6 +27,7 @@ namespace BrewMonster.UI
private Action _onCreateCharacterComplete;
private Action _onExit;
private List _roleInfos;
+ private List _characterItems = new List();
private Coroutine _showModelReadyCoroutine;
private int _pendingShowModelRoleId = -1;
@@ -42,7 +44,7 @@ namespace BrewMonster.UI
if (_roleInfos != null && _roleInfos.Count > 0)
{
- PlayerModelPreview.Instance?.ShowAllPlayerModels(_roleInfos);
+ PlayerModelPreview.Instance?.ShowAllPlayerModels(_roleInfos).Forget();
}
else
{
@@ -71,11 +73,12 @@ namespace BrewMonster.UI
}
}
- public void InitScreen(List roleInfos, Action OnClickItemChar, Action onCreateCharacterComplete = null, Action onExit = null)
+ public async UniTask InitScreen(List roleInfos, Action OnClickItemChar, Action onCreateCharacterComplete = null, Action onExit = null)
{
_onClickItemChar = OnClickItemChar;
_onCreateCharacterComplete = onCreateCharacterComplete;
_onExit = onExit;
+ _characterItems.Clear();
// Clear existing items
if (parentItems != null)
@@ -91,14 +94,24 @@ namespace BrewMonster.UI
// Create character items
if (roleInfos != null)
{
+ RoleInfo lastRoleInfo = null;
+ int lastTimeLogin = int.MinValue;
foreach (RoleInfo info in roleInfos)
{
if (characterItemPrefab != null && parentItems != null)
{
CharacterItemUI item = Instantiate(characterItemPrefab, parentItems).GetComponent();
item.InitItem(info, OnSelectCharacter);
+ _characterItems.Add(item);
+ if (info.lastlogin_time > lastTimeLogin)
+ {
+ lastTimeLogin = info.lastlogin_time;
+ _selectingCharacterItemUI = item;
+ }
}
}
+ _selectingCharacterItemUI.ForceClickBtn();
+ _selectingCharacterItemUI.SetFocus(true);
// If number of roles < 8, spawn addCharacterItemPrefab and hide createCharacterButton
if (roleInfos.Count < 8)
@@ -137,18 +150,27 @@ namespace BrewMonster.UI
}
// Load player preview 3D models
- PlayerModelPreview.Instance?.ShowAllPlayerModels(roleInfos);
+ if (PlayerModelPreview.Instance != null)
+ {
+ var success = await PlayerModelPreview.Instance.ShowAllPlayerModels(roleInfos);
+ if (success)
+ {
+ _selectingCharacterItemUI.ForceClickBtn();
+ _selectingCharacterItemUI.SetFocus(true);
+ }
+ }
}
else
{
if (PlayerModelPreview.Instance != null)
- PlayerModelPreview.Instance.ShowAllPlayerModels(null);
+ _ = await PlayerModelPreview.Instance.ShowAllPlayerModels(null);
// If roleInfos is null, show createCharacterButton
if (createCharacterButton != null)
{
createCharacterButton.gameObject.SetActive(true);
}
}
+ return true;
}
private void OnSelectCharacter(CharacterItemUI characterItemUI)