public bool Cast(ICharacterFinder characterFinder, IAbility ability, Vector2 targetPosition) { if (ActionPoints < ability.ActionPoints) { return(false); } bool didCast = ability.Cast(characterFinder, this, targetPosition); if (didCast) { ActionPoints -= ability.ActionPoints; AbilityCast?.Invoke(this, ability, targetPosition); } return(didCast); }
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); }
public void Initialize(ICharacterFinder characterFinder, INavigation navigation) { this.CharacterFinder = characterFinder; this.Navigation = navigation; }