Exemplo n.º 1
0
        /// <summary>
        /// Gets the target to render in the target panel depending on which panel is active and where the target position is.
        /// </summary>
        /// <returns></returns>
        private IDisplayCharacter GetTarget()
        {
            if (_defaultsHandler.IsInFormationPanel || !_combatStateHandler.IsPlayerTurn())
            {
                IDisplayCharacter renderTarget = null;
                // If there is a character in the player's default target position, render that target's details
                if (_uiCharacterManager.Characters.Any(chr => chr.Position == _defaultsHandler.CurrentTargetPosition))
                {
                    renderTarget = _uiCharacterManager.GetCharacterFromPosition(_defaultsHandler.CurrentTargetPosition);
                }
                // Finds any character that is in the player's target list and render that target's details
                else
                {
                    var targets = _defaultsHandler.CurrentTargetPositions;

                    renderTarget = _uiCharacterManager.Characters.FirstOrDefault(chr => targets.Contains(chr.Position));
                }
                // If there are no characters that occupy the positions the player is targeting, render the active character's details
                if (renderTarget == null)
                {
                    renderTarget = _uiCharacterManager.GetCharacterFromId(_defaultsHandler.ActiveCharacterId);
                }

                return(renderTarget);
            }
            else
            {
                return(_uiCharacterManager.GetCharacterFromId(_defaultsHandler.ActiveCharacterId));
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Renders a character's name and all it's stats wrapped in a panel.
        /// </summary>
        /// <param name="character">The character to render in the panel.</param>
        /// <returns>A list of strings containing the panel render.</returns>
        private List <string> RenderCharacter(IDisplayCharacter character)
        {
            var characterDetails = new List <string>();

            characterDetails.Add("╔" + new string('═', MaxWidth - 2) + "╗");

            characterDetails.AddRange(RenderCharacterHeader(character));

            characterDetails.Add(RenderResource("Health", character.CurrentHealth, character.MaxHealth));
            characterDetails.Add(RenderResource("Mana", character.CurrentMana, character.MaxMana));
            characterDetails.Add(RenderEmptyLine());

            characterDetails.AddRange(RenderSubPanels(character));

            int emptyLines = MaxHeight - 1 - characterDetails.Count();

            // Fill empty spaces
            for (int i = 0; i < emptyLines; i++)
            {
                characterDetails.Add(RenderEmptyLine());
            }
            characterDetails.Add("╚" + new string('═', MaxWidth - 2) + "╝");

            return(characterDetails);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Constructs and returns the sub panels given a character to pull data from.
        /// </summary>
        /// <param name="character">The character whose data is used to construct the sub panels.</param>
        /// <returns>An enumerable of string that contains the rendered sub panels.</returns>
        private IEnumerable <string> RenderSubPanels(IDisplayCharacter character)
        {
            var subPanels = new List <string>();

            var offensiveRender     = _offensiveSubPanel.Render(character);
            var statsRender         = _statsSubPanel.Render(character);
            var armorRender         = _armorSubPanel.Render(character.Armor);
            var resistanceRender    = _resistanceSubPanel.Render(character.ArmorPercentage);
            var damageRender        = _damageSubPanel.Render(character.DamageModifier);
            var damagePercentRender = _damagePercentSubPanel.Render(character.DamagePercentageModifier);


            int index = 1;

            // Render stats and offensive panels
            for (int i = 0; i < statsRender.Count(); i++)
            {
                if (i == 0 && IsActive)
                {
                    subPanels.Add("║" + GetFocus(index) + statsRender[i] + GetFocus(++index) + offensiveRender[i] + " ║");
                }
                else
                {
                    subPanels.Add("║ " + statsRender[i] + " " + offensiveRender[i] + " ║");
                }
            }

            subPanels.Add(RenderEmptyLine());

            // Render damage and armor panels
            for (int i = 0; i < statsRender.Count(); i++)
            {
                if (i == 0 && IsActive)
                {
                    subPanels.Add("║" + GetFocus(++index) + damageRender[i] + GetFocus(++index) + armorRender[i] + " ║");
                }
                else
                {
                    subPanels.Add("║ " + damageRender[i] + " " + armorRender[i] + " ║");
                }
            }

            subPanels.Add(RenderEmptyLine());

            // Render damage percent and resistance panels
            for (int i = 0; i < offensiveRender.Count(); i++)
            {
                if (i == 0 && IsActive)
                {
                    subPanels.Add("║" + GetFocus(++index) + damagePercentRender[i] + GetFocus(++index) + resistanceRender[i] + " ║");
                }
                else
                {
                    subPanels.Add("║ " + damagePercentRender[i] + " " + resistanceRender[i] + " ║");
                }
            }

            return(subPanels);
        }
Exemplo n.º 4
0
        /// <summary>
        /// Renders the stats panel, containing the amount of stats a character has for each stat.
        /// </summary>
        /// <param name="character">The character to use to retrieve the stat amounts.</param>
        /// <returns>A list of string containing the stats panel.</returns>
        public IReadOnlyList <string> Render(IDisplayCharacter character)
        {
            var render = new List <string>();

            render.Add(" _Stats_" + new string(' ', MaxWidth - 8));
            render.Add(GetStatDisplay("Strength", character.CurrentStats.Strength.ToString(), 1));
            render.Add(GetStatDisplay("Stamina", character.CurrentStats.Stamina.ToString(), 2));
            render.Add(GetStatDisplay("Intellect", character.CurrentStats.Intellect.ToString(), 3));
            render.Add(GetStatDisplay("Agility", character.CurrentStats.Agility.ToString(), 4));
            render.Add(GetStatDisplay("Speed", character.CurrentStats.Speed.ToString(), 5));
            render.Add(new string(' ', MaxWidth));

            return(render);
        }
Exemplo n.º 5
0
        /// <summary>
        /// Renders a character's offensive stats.
        /// </summary>
        /// <param name="character">The character to render offensive stats for.</param>
        /// <returns>A list of string containing the rendered stats.</returns>
        public IReadOnlyList <string> Render(IDisplayCharacter character)
        {
            var render = new List <string>();

            render.Add(" _Offensive_" + new string(' ', MaxWidth - 12));
            render.Add(RenderStatPercentage("Crit Chance", character.CritChance, 1));
            render.Add(RenderStatPercentage("Crit Damage", character.CritMultiplier, 2));
            render.Add(RenderStat("Extra Threat", character.Threat, 3, true));
            render.Add(RenderStatPercentage("Threat %", character.ThreatMultiplier, 4, true));
            render.Add(RenderStat("Spell Damage", character.SpellDamageModifier, 5, true));
            render.Add(RenderStatPercentage("Spell %", character.SpellDamagePercentageModifier, 6, true));

            return(render);
        }
Exemplo n.º 6
0
        /// <summary>
        /// Given a character, constructs a header using the name of the character.
        /// </summary>
        /// <param name="character">The character to construct the header for.</param>
        /// <returns>A list of string containing the header.</returns>
        private IEnumerable <string> RenderCharacterHeader(IDisplayCharacter character)
        {
            var header = new List <string>();

            string characterLevel = $"Lv: {character.Level} ";
            int    headerLength   = character.Name.Count() + 7 + characterLevel.Length;

            header.Add("║ " + character.Name
                       + " (" + character.Symbol + ")"
                       + new string(' ', MaxWidth - headerLength)
                       + characterLevel + "║");
            header.Add("║" + new string('─', MaxWidth - 2) + "║");

            return(header);
        }
Exemplo n.º 7
0
        /// <summary>
        /// Returns whether or not the stats of the character being passed in is the same as the cached data.
        /// </summary>
        /// <param name="character">The character to check with the cached data.</param>
        /// <returns>Returns whether or not the stats of the character being passed in is the same as the cached data.</returns>
        private bool IsCachedData(IDisplayCharacter character)
        {
            if (character.Id != _cachedCharacter.Id)
            {
                return(false);
            }
            if (character.CurrentHealth != _cachedCharacter.CurrentHealth)
            {
                return(false);
            }
            if (character.MaxHealth != _cachedCharacter.MaxHealth)
            {
                return(false);
            }

            return(true);
        }
Exemplo n.º 8
0
        /// <summary>
        /// Renders a character panel with a group of characters and a focused character target that will show
        /// more stats.
        /// </summary>
        /// <param name="characters">The list of characters to render to the character panel.</param>
        /// <param name="focusedTarget">The character that is focused and will show more stats.</param>
        /// <returns>A list of string containing the rendered character panel.</returns>
        private IReadOnlyList <string> Render(IReadOnlyList <IDisplayCharacter> characters, IDisplayCharacter focusedTarget)
        {
            // Prevent target from being rendered twice
            var modifiedList = new List <IDisplayCharacter>(characters);

            modifiedList.Remove(focusedTarget);

            var render          = new List <string>();
            var otherCharacters = RenderMany(modifiedList);
            var targetDetails   = RenderCharacter(focusedTarget);

            // Remove extra details from the focusedTarget render depending on how much space there is left to fit the max height
            int removeIndex = MaxHeight - otherCharacters.Count();

            targetDetails.RemoveRange(removeIndex, targetDetails.Count() - removeIndex);

            render.AddRange(targetDetails);
            render.AddRange(otherCharacters);

            return(render);
        }