/// <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)); } }); }
private void InitializeCharacterLocation([NotNull] NetworkEntityGuid guid, [NotNull] IUICharacterSlot button) { if (guid == null) { throw new ArgumentNullException(nameof(guid)); } if (button == null) { throw new ArgumentNullException(nameof(button)); } button.LocationText.Text = "Unknown"; }
private void InitializeCharacterName([NotNull] NetworkEntityGuid guid, [NotNull] IUICharacterSlot button) { if (guid == null) { throw new ArgumentNullException(nameof(guid)); } if (button == null) { throw new ArgumentNullException(nameof(button)); } NameQueryable.EnsureExists(guid); button.Text = NameQueryable.Retrieve(guid); }
private void InitializeCharacterLevel([NotNull] NetworkEntityGuid guid, [NotNull] IUICharacterSlot button) { if (guid == null) { throw new ArgumentNullException(nameof(guid)); } if (button == null) { throw new ArgumentNullException(nameof(button)); } CharacterDataInstance dataInstance = InitialCharacterDataMappable.RetrieveEntity(guid); button.LevelText.Text = $"Level {LevelStrategy.ComputeLevelFromExperience(dataInstance.Experience).ToString()}"; }