Exemple #1
0
        /// <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));
                }
            });
        }
Exemple #2
0
        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";
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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()}";
        }