private void OnRequestedCharacters(AckResponseCode responseCode, BaseAckMessage message) { ResponseCharactersMessage castedMessage = (ResponseCharactersMessage)message; CacheCharacterSelectionManager.Clear(); // Unenabled buttons buttonStart.gameObject.SetActive(false); buttonDelete.gameObject.SetActive(false); // Remove all models characterModelContainer.RemoveChildren(); CharacterModelById.Clear(); // Remove all cached data PlayerCharacterDataById.Clear(); List <PlayerCharacterData> selectableCharacters = new List <PlayerCharacterData>(); switch (responseCode) { case AckResponseCode.Error: string errorMessage = string.Empty; switch (castedMessage.error) { case ResponseCharactersMessage.Error.NotLoggedin: errorMessage = LanguageManager.GetText(UILocaleKeys.UI_ERROR_NOT_LOGGED_IN.ToString()); break; } UISceneGlobal.Singleton.ShowMessageDialog(LanguageManager.GetText(UILocaleKeys.UI_LABEL_ERROR.ToString()), errorMessage); break; case AckResponseCode.Timeout: UISceneGlobal.Singleton.ShowMessageDialog(LanguageManager.GetText(UILocaleKeys.UI_LABEL_ERROR.ToString()), LanguageManager.GetText(UILocaleKeys.UI_ERROR_CONNECTION_TIMEOUT.ToString())); break; default: selectableCharacters = castedMessage.characters; break; } // Show list of created characters for (int i = selectableCharacters.Count - 1; i >= 0; --i) { PlayerCharacterData selectableCharacter = selectableCharacters[i]; if (selectableCharacter == null || !GameInstance.PlayerCharacters.ContainsKey(selectableCharacter.DataId)) { selectableCharacters.RemoveAt(i); } } selectableCharacters.Sort(new PlayerCharacterDataLastUpdateComparer().Desc()); CacheCharacterList.Generate(selectableCharacters, (index, characterData, ui) => { // Cache player character to dictionary, we will use it later PlayerCharacterDataById[characterData.Id] = characterData; UICharacter uiCharacter = ui.GetComponent <UICharacter>(); uiCharacter.Data = characterData; // Select trigger when add first entry so deactivate all models is okay beacause first model will active BaseCharacterModel characterModel = characterData.InstantiateModel(characterModelContainer); if (characterModel != null) { CharacterModelById[characterData.Id] = characterModel; characterModel.gameObject.SetActive(false); characterModel.SetEquipWeapons(characterData.EquipWeapons); characterModel.SetEquipItems(characterData.EquipItems); CacheCharacterSelectionManager.Add(uiCharacter); } }); }
private void OnRequestedCharacters(ResponseHandlerData responseHandler, AckResponseCode responseCode, ResponseCharactersMessage response) { // Clear character list CacheCharacterSelectionManager.Clear(); CacheCharacterList.HideAll(); // Unable buttons buttonStart.gameObject.SetActive(false); buttonDelete.gameObject.SetActive(false); // Remove all models characterModelContainer.RemoveChildren(); CharacterModelById.Clear(); // Remove all cached data PlayerCharacterDataById.Clear(); // Proceed response List <PlayerCharacterData> selectableCharacters = new List <PlayerCharacterData>(); if (!responseCode.ShowUnhandledResponseMessageDialog(response.message)) { // Success, so set selectable characters by response's data selectableCharacters = response.characters; } // Show list of created characters for (int i = selectableCharacters.Count - 1; i >= 0; --i) { PlayerCharacterData selectableCharacter = selectableCharacters[i]; if (selectableCharacter == null || !GameInstance.PlayerCharacterEntities.ContainsKey(selectableCharacter.EntityId) || !GameInstance.PlayerCharacters.ContainsKey(selectableCharacter.DataId)) { // If invalid entity id or data id, remove from selectable character list selectableCharacters.RemoveAt(i); } } if (GameInstance.Singleton.maxCharacterSaves > 0 && selectableCharacters.Count >= GameInstance.Singleton.maxCharacterSaves) { eventOnNotAbleToCreateCharacter.Invoke(); } else { eventOnAbleToCreateCharacter.Invoke(); } // Clear selected character data, will select first in list if available selectedPlayerCharacterData = null; // Generate list entry by saved characters if (selectableCharacters.Count > 0) { selectableCharacters.Sort(new PlayerCharacterDataLastUpdateComparer().Desc()); CacheCharacterList.Generate(selectableCharacters, (index, characterData, ui) => { // Cache player character to dictionary, we will use it later PlayerCharacterDataById[characterData.Id] = characterData; // Setup UIs UICharacter uiCharacter = ui.GetComponent <UICharacter>(); uiCharacter.Data = characterData; // Select trigger when add first entry so deactivate all models is okay beacause first model will active BaseCharacterModel characterModel = characterData.InstantiateModel(characterModelContainer); if (characterModel != null) { CharacterModelById[characterData.Id] = characterModel; characterModel.SetEquipWeapons(characterData.EquipWeapons); characterModel.SetEquipItems(characterData.EquipItems); characterModel.gameObject.SetActive(false); CacheCharacterSelectionManager.Add(uiCharacter); } }); } else { eventOnNoCharacter.Invoke(); } }
private void OnRequestedCharacters(ResponseHandlerData responseHandler, AckResponseCode responseCode, INetSerializable response) { // Clear character list CacheCharacterSelectionManager.Clear(); CacheCharacterList.HideAll(); // Unable buttons buttonStart.gameObject.SetActive(false); buttonDelete.gameObject.SetActive(false); // Remove all models characterModelContainer.RemoveChildren(); CharacterModelById.Clear(); // Remove all cached data PlayerCharacterDataById.Clear(); // Don't make character list if timeout if (responseCode == AckResponseCode.Timeout) { UISceneGlobal.Singleton.ShowMessageDialog(LanguageManager.GetText(UITextKeys.UI_LABEL_ERROR.ToString()), LanguageManager.GetText(UITextKeys.UI_ERROR_CONNECTION_TIMEOUT.ToString())); return; } // Proceed response ResponseCharactersMessage castedResponse = response as ResponseCharactersMessage; List <PlayerCharacterData> selectableCharacters = new List <PlayerCharacterData>(); switch (responseCode) { case AckResponseCode.Error: string errorMessage = string.Empty; switch (castedResponse.error) { case ResponseCharactersMessage.Error.NotLoggedin: errorMessage = LanguageManager.GetText(UITextKeys.UI_ERROR_NOT_LOGGED_IN.ToString()); break; } UISceneGlobal.Singleton.ShowMessageDialog(LanguageManager.GetText(UITextKeys.UI_LABEL_ERROR.ToString()), errorMessage); break; default: selectableCharacters = castedResponse.characters; break; } // Show list of created characters for (int i = selectableCharacters.Count - 1; i >= 0; --i) { PlayerCharacterData selectableCharacter = selectableCharacters[i]; if (selectableCharacter == null || !GameInstance.PlayerCharacterEntities.ContainsKey(selectableCharacter.EntityId) || !GameInstance.PlayerCharacters.ContainsKey(selectableCharacter.DataId)) { // If invalid entity id or data id, remove from selectable character list selectableCharacters.RemoveAt(i); } } if (GameInstance.Singleton.maxCharacterSaves > 0 && selectableCharacters.Count >= GameInstance.Singleton.maxCharacterSaves) { eventOnNotAbleToCreateCharacter.Invoke(); } else { eventOnAbleToCreateCharacter.Invoke(); } // Clear selected character data, will select first in list if available selectedPlayerCharacterData = null; // Generate list entry by saved characters if (selectableCharacters.Count > 0) { selectableCharacters.Sort(new PlayerCharacterDataLastUpdateComparer().Desc()); CacheCharacterList.Generate(selectableCharacters, (index, characterData, ui) => { // Cache player character to dictionary, we will use it later PlayerCharacterDataById[characterData.Id] = characterData; // Setup UIs UICharacter uiCharacter = ui.GetComponent <UICharacter>(); uiCharacter.Data = characterData; // Select trigger when add first entry so deactivate all models is okay beacause first model will active BaseCharacterModel characterModel = characterData.InstantiateModel(characterModelContainer); if (characterModel != null) { CharacterModelById[characterData.Id] = characterModel; characterModel.SetEquipWeapons(characterData.EquipWeapons); characterModel.SetEquipItems(characterData.EquipItems); characterModel.gameObject.SetActive(false); CacheCharacterSelectionManager.Add(uiCharacter); } }); } else { eventOnNoCharacter.Invoke(); } }