public override Point Perform(Point position) { var currentPosition = position; for (var step = 1; step <= distance; step++) { var newPosition = Point.GetPointInDirection(currentPosition, direction); var movementResult = MovementHelper.MoveProjectile(spell, currentPosition, newPosition); if (!movementResult.Success) { break; } currentPosition = newPosition; } return(currentPosition); }