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);
        }
Пример #2
0
        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);
        }