/// <summary> /// Render out the GammaWorldCharacter's powers. /// </summary> /// <param name="GammaWorldCharacter"> /// The <see cref="Character"/> to render. /// </param> /// <param name="predicate"> /// Only render the power if the given predicate matches. /// </param> /// <param name="resourceDictionary"> /// A <see cref="ResourceDictionary"/> containing styles. /// </param> /// <exception cref="ArgumentNullException"> /// No argument can be null. /// </exception> private IEnumerable<PowerEntry> ConstructPowers(Character GammaWorldCharacter, Predicate<Power> predicate, ResourceDictionary resourceDictionary) { if (GammaWorldCharacter == null) { throw new ArgumentNullException("GammaWorldCharacter"); } if (predicate == null) { throw new ArgumentNullException("predicate"); } if (resourceDictionary == null) { throw new ArgumentNullException("resourceDictionary"); } List<Power> powers; List<Power> displayedPowers; powers = new List<Power>(); powers.AddRange(GammaWorldCharacter.GetUsablePowers()); displayedPowers = new List<Power>(); foreach (Power power in powers) { if (!displayedPowers.Contains(power)) { if (predicate(power)) { if (power is AttackPower) { yield return ConstructAttackPowerEntry(GammaWorldCharacter, (AttackPower)power, resourceDictionary); } else if (power is UtilityPower) { yield return ConstructUtilityPowerEntry(GammaWorldCharacter, (UtilityPower)power, resourceDictionary); } displayedPowers.Add(power); } } } }