diff --git a/Assets/PerfectWorld/Scene/Bootstrap.unity b/Assets/PerfectWorld/Scene/Bootstrap.unity index 73241b4ef4..dbef5efbea 100644 --- a/Assets/PerfectWorld/Scene/Bootstrap.unity +++ b/Assets/PerfectWorld/Scene/Bootstrap.unity @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f809da92f7a74929fe4911b38ecddcf5bfe0fa9f667ad04f6c927511246975ae -size 308267 +oid sha256:fdca6f6915cfc055b350581a53fbc4d2e19ab522da9eb954295d71d45d8aed58 +size 303299 diff --git a/Assets/PerfectWorld/Scripts/Players/PlayerModelPreview.cs b/Assets/PerfectWorld/Scripts/Players/PlayerModelPreview.cs index d5dfdfc43b..62eb2ea44e 100644 --- a/Assets/PerfectWorld/Scripts/Players/PlayerModelPreview.cs +++ b/Assets/PerfectWorld/Scripts/Players/PlayerModelPreview.cs @@ -108,29 +108,56 @@ namespace BrewMonster.Scripts } } - public void ClearModels() + public void HideAllPlayerModels() { + _hasRequestedPlayerModelId = false; for (int i = 0; i < playerModels.Count; i++) { if (playerModels[i] != null) - Destroy(playerModels[i]); + { + playerModels[i].SetActive(false); + } } + } + + public void ClearModels() + { + //for (int i = 0; i < playerModels.Count; i++) + //{ + // if (playerModels[i] != null) + // { + // Destroy(playerModels[i]); + // } + //} + playerModels.Clear(); playerModelIds.Clear(); + + if(modelRoot != null) + { + foreach (Transform child in modelRoot) + { + Destroy(child.gameObject); + } + } } private void ClearModelsImmediate() { for (int i = 0; i < playerModels.Count; i++) { - if (playerModels[i] != null) + if (modelRoot != null) { - if (Application.isPlaying) - Destroy(playerModels[i]); - else - DestroyImmediate(playerModels[i]); + if(playerModels[i] != null) + { + if(Application.isPlaying) + Destroy(playerModels[i]); + else + DestroyImmediate(playerModels[i]); + } } } + playerModels.Clear(); playerModelIds.Clear(); } @@ -139,13 +166,17 @@ namespace BrewMonster.Scripts { BMLogger.Log($"LoadPlayerModel: {role.roleid}"); var elemendataman = BrewMonster.ElementDataManProvider.GetElementDataMan(); - GameObject prefab = await NPCManager.Instance.GetModelPlayer(role.occupation, role.gender); - if (prefab == null) - { + GameObject model = await NPCManager.Instance.GetModelPlayer(role.occupation, role.gender); + if(model == null) return null; - } + + model.SetActive(false); BMLogger.Log($"LoadPlayerModel: {role.roleid} - prefab loaded"); - GameObject model = Instantiate(prefab); + if (modelRoot != null) + { + model.transform.SetParent(modelRoot, false); + } + var playerDefaultEquipments = model.GetComponentInChildren(); if (playerDefaultEquipments == null) { diff --git a/Assets/PerfectWorld/Scripts/UI/Login/LoginScreenUI.cs b/Assets/PerfectWorld/Scripts/UI/Login/LoginScreenUI.cs index 5e2cbc3791..afa7df7bd8 100644 --- a/Assets/PerfectWorld/Scripts/UI/Login/LoginScreenUI.cs +++ b/Assets/PerfectWorld/Scripts/UI/Login/LoginScreenUI.cs @@ -56,6 +56,11 @@ namespace BrewMonster.UI { Tech3CSDKWrapper.Instance.SetLoginCallback(OnLoginCallback); Tech3CSDKWrapper.Instance.SetLogoutCallback(OnLogoutCallback); + + if(PlayerModelPreview.Instance != null) + { + PlayerModelPreview.Instance.HideAllPlayerModels(); + } } private void OnDisable() @@ -102,7 +107,7 @@ namespace BrewMonster.UI { if (_roleInfos != null) { - _selectCharacterScreen.InitScreen(_roleInfos, OnClickSelectCharacter, OnCreateCharacterComplete); + _selectCharacterScreen.InitScreen(_roleInfos, OnClickSelectCharacter, OnCreateCharacterComplete, OnExitCharacterSelect); _roleInfos = null; } @@ -422,6 +427,21 @@ namespace BrewMonster.UI { BMLogger.LogError($"Logout failed -- errorCode: {errorCode}: {errorMessage}"); } + + _loginInProgress = false; + if (_loginButton != null) + _loginButton.interactable = true; + } + + private void OnExitCharacterSelect() + { + BMLogger.Log("Exiting character select, returning to login screen."); + if(_selectCharacterScreen != null) + _selectCharacterScreen.gameObject.SetActive(false); + + _loginInProgress = false; + if(_loginButton != null) + _loginButton.interactable = true; } } } diff --git a/Assets/Prefabs/UI/SelectCharacterUI.prefab b/Assets/Prefabs/UI/SelectCharacterUI.prefab index 6cf572cc64..b237cd413f 100644 --- a/Assets/Prefabs/UI/SelectCharacterUI.prefab +++ b/Assets/Prefabs/UI/SelectCharacterUI.prefab @@ -989,8 +989,8 @@ MonoBehaviour: parentItems: {fileID: 2643174602035272289} createCharacterButton: {fileID: 2685968509838782728} _btnEnterGame: {fileID: 5173447691193350084} + _btnExit: {fileID: 1166159884785039946} createCharacterScreen: {fileID: 0} - playerModelPreview: {fileID: 0} --- !u!1 &7510180475820570348 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Scripts/SelecScreenCharacter.cs b/Assets/Scripts/SelecScreenCharacter.cs index 249bb89897..682ff14f5c 100644 --- a/Assets/Scripts/SelecScreenCharacter.cs +++ b/Assets/Scripts/SelecScreenCharacter.cs @@ -18,11 +18,13 @@ namespace BrewMonster.UI [SerializeField] private RectTransform parentItems; [SerializeField] private Button createCharacterButton; [SerializeField] private Button _btnEnterGame; + [SerializeField] private Button _btnExit; [SerializeField] private CreateCharacterScreen createCharacterScreen; private CharacterItemUI _selectingCharacterItemUI; private Action _onClickItemChar; private Action _onCreateCharacterComplete; + private Action _onExit; private List _roleInfos; private Coroutine _showModelReadyCoroutine; @@ -33,6 +35,11 @@ namespace BrewMonster.UI _btnEnterGame.onClick.AddListener(OnClickedEnterGame); _btnEnterGame.gameObject.SetActive(false); + if(_btnExit != null) + { + _btnExit.onClick.AddListener(OnClickedExit); + } + if (_roleInfos != null && _roleInfos.Count > 0) { PlayerModelPreview.Instance?.ShowAllPlayerModels(_roleInfos); @@ -57,10 +64,11 @@ namespace BrewMonster.UI } } - public void InitScreen(List roleInfos, Action OnClickItemChar, Action onCreateCharacterComplete = null) + public void InitScreen(List roleInfos, Action OnClickItemChar, Action onCreateCharacterComplete = null, Action onExit = null) { _onClickItemChar = OnClickItemChar; _onCreateCharacterComplete = onCreateCharacterComplete; + _onExit = onExit; // Clear existing items if (parentItems != null) @@ -110,7 +118,7 @@ namespace BrewMonster.UI addButton.onClick.AddListener(OnCreateCharacterClicked); } } - + } else { @@ -120,13 +128,13 @@ namespace BrewMonster.UI createCharacterButton.gameObject.SetActive(true); } } - + // Load player preview 3D models PlayerModelPreview.Instance?.ShowAllPlayerModels(roleInfos); } else { - if (PlayerModelPreview.Instance != null) + if (PlayerModelPreview.Instance != null) PlayerModelPreview.Instance.ShowAllPlayerModels(null); // If roleInfos is null, show createCharacterButton if (createCharacterButton != null) @@ -143,7 +151,7 @@ namespace BrewMonster.UI return; } - if(_selectingCharacterItemUI!=null) + if (_selectingCharacterItemUI != null) { _selectingCharacterItemUI.SetFocus(false); } @@ -230,5 +238,16 @@ namespace BrewMonster.UI BMLogger.LogError("No role selected"); } } + + private void OnClickedExit() + { + _onExit?.Invoke(); + gameObject.SetActive(false); + + if(PlayerModelPreview.Instance != null) + { + PlayerModelPreview.Instance.HideAllPlayerModels(); + } + } } }