public bool Cast(ICharacterFinder characterFinder, CharacterModel caster, Vector2 targetCenter) { if ((targetCenter - caster.Position).Norm > Range) { return(false); } IEnumerable <CharacterModel> targetCollection = characterFinder.GetCharactersOnLine(caster.Position, targetCenter) .Where(target => TargetTypeExtensions.IsTargetAllowed(TargetTypes, caster, target)) .OrderBy(target => (caster.Position - target.Position).Norm) .Take(TargetLimit); foreach (CharacterModel currentTarget in targetCollection) { Apply(currentTarget); } return(true); }
public bool Cast(ICharacterFinder characterFinder, CharacterModel caster, Vector2 targetCenter) { if ((targetCenter - caster.Position).Norm > Range) { return(false); } List <CharacterModel> targetCollection = characterFinder .GetCharactersAround(targetCenter, TargetWidth, TargetHeight, GetRotation(caster.Position, targetCenter)) .Where(target => TargetTypeExtensions.IsTargetAllowed(TargetTypes, caster, target)).ToList(); if (TargetRequired && (targetCollection.Any() == false)) { return(false); } foreach (CharacterModel currentTarget in targetCollection) { Apply(currentTarget); } return(true); }