/// <inheritdoc /> protected override void HandleEvent(CharacterSelectionEntryDataChangeEventArgs args) { //TODO: This should run on main thread now, no need to interlocked //At this point, we have a new character. BUT we don't know the name of it yet //We must query the name service for it. int slot = Interlocked.Increment(ref ButtonIndex); IUICharacterSlot button = null; try { //Once we have the result, we can assign the name. button = CharacterButtons.ElementAt(slot); InitializeCharacterName(args.CharacterEntityGuid, button); InitializeCharacterLevel(args.CharacterEntityGuid, button); InitializeCharacterLocation(args.CharacterEntityGuid, button); button.IsInteractable = true; button.SetElementActive(true); } catch (Exception e) { throw new InvalidOperationException($"Failed to initialize CharacterSlot for Index: {slot} Guid: {args.CharacterEntityGuid}. Message: {e.Message}"); } //When clicked just broadcast a named event to everything that it has been clicked, and who it was. button.AddOnToggleChangedListener(toggleState => { if (toggleState) { OnCharacterButtonClicked?.Invoke(this, new CharacterButtonClickedEventArgs(args.CharacterEntityGuid, slot)); } }); }
/// <inheritdoc /> protected override void OnEventFired(object source, CharacterSelectionEntryDataChangeEventArgs args) { //At this point, we have a new character. BUT we don't know the name of it yet //We must query the name service for it. int slot = Interlocked.Increment(ref ButtonIndex); UnityExtended.UnityMainThreadContext.PostAsync(async() => { //TODO: Handle errors //TODO: We should expose NetworkEntityGuid endpoint string name = await NameQueryService.RetrieveAsync(args.CharacterEntityGuid.EntityId) .ConfigureAwait(true); //Once we have the result, we can assign the name. IUILabeledButton button = CharacterButtons.ElementAt(slot); button.Text = name; button.IsInteractable = true; //When clicked just broadcast a named event to everything that it has been clicked, and who it was. button.AddOnClickListener(() => OnCharacterButtonClicked?.Invoke(this, new CharacterButtonClickedEventArgs(args.CharacterEntityGuid, slot))); }); }