protected override void OnEventFired(object source, CharacterButtonClickedEventArgs args) { CharacterAppearanceResponse data = CharacterAppearanceMappable.RetrieveEntity(args.CharacterGuid); CustomModelLoaderCancelable loader = AvatarLoaderFactory.Create(new CustomModelLoaderCreationContext(data.AvatarModelId, args.CharacterGuid)); loader.StartLoading(); }
/// <inheritdoc /> public async Task OnGameInitialized() { try { CharacterListResponse listResponse = await CharacterServiceQueryable.GetCharacters() .ConfigureAwaitFalse(); //TODO: Handle errors foreach (var character in listResponse.CharacterIds) { var entityGuid = new NetworkEntityGuidBuilder() .WithId(character) .WithType(EntityType.Player) .Build(); //TODO: Optimize below awaits. //Do a namequery so it's in the cache for when anything tries to get entities name. await EntityNameQueryable.RetrieveAsync(entityGuid) .ConfigureAwaitFalse(); var appearanceResponse = await CharacterServiceQueryable.GetCharacterAppearance(entityGuid.EntityId) .ConfigureAwaitFalse(); var characterData = await CharacterServiceQueryable.GetCharacterData(entityGuid.EntityId) .ConfigureAwaitFalse(); //Don't throw, because we actually don't want to stop the //character screen from working just because we can't visually display some stuff. if (!appearanceResponse.isSuccessful) { Logger.Error($"Failed to query for Character: {entityGuid.EntityId} appearance. Reason: {appearanceResponse.ResultCode}"); } //TODO: Handle errors. CharacterAppearanceMappable.AddObject(entityGuid, appearanceResponse.Result); InitialCharacterDataInstance.AddObject(entityGuid, characterData.Result); OnCharacterSelectionEntryChanged?.Invoke(this, new CharacterSelectionEntryDataChangeEventArgs(entityGuid)); } } catch (Exception e) { Logger.Error($"Encountered Error: {e.Message}"); throw; } }