public void UpdateCharacter(Combatant character) { Children.Clear(); var abilities = character.GetAbilities(); for (var i = 0; i < abilities.Count(); i++) { var ability = abilities.ElementAt(i); var exp = character.AbilityExperienceLevels.ContainsKey(ability) ? character.AbilityExperienceLevels[ability] : 0; var display = new AbilityDisplay(ability, exp); display.Bounds.Location.Y.Offset = 10 + 30 * i; Children.Add(display); } }
/// <summary> /// Show a list of special abilities that a character may use /// </summary> /// <param name="character">The character being selected for special abilities</param> /// <returns>An event handler to execute to show the abilities.</returns> private void SelectSpecialAbility(Combatant character) { // delete the current radial menu options, which should be move/attack/special/item for the character. // should. _radialMenuControl.ClearOptions(); // go through each ability the character can currently use foreach (var ability in character.GetAbilities().Where(character.CanUseAbility).Where(a => a.AbilityType == AbilityType.Active)) { var tempAbility = ability; var button = new RadialButtonControl {ImageFrame = ability.ImageName, Bounds = new UniRectangle(0, 0, 64, 64), Enabled = false}; // only bind event handlers onto abilities that are cheap enough to use if (ability.ManaCost <= character.CurrentMana) { button.Enabled = true; button.MouseOver = () => PreviewAbility(tempAbility); button.MouseOut = () => { if (_aimAbility != null) return; HideGui(_abilityStatLayer); _battleBoardLayer.ResetGrid(); }; button.MouseClick = () => { }; button.MouseRelease += () => { SelectAbilityTarget(character, tempAbility); _aimTime = DateTime.Now; }; } else { button.MouseRelease = () => { }; } _radialMenuControl.AddOption(ability.Name, button); } }