private static Vector3 CastDash()
{
int DashMode = Manager.MenuManager.QNMode;
Vector3 bestpoint = Vector3.Zero;
if (DashMode == 0)
{
var orbT = TargetSelector.GetTarget((int)Variables._Player.GetAutoAttackRange(),
DamageType.Physical);
if (orbT != null)
{
Vector2 start = Variables._Player.Position.To2D();
Vector2 end = orbT.Position.To2D();
var dir = (end - start).Normalized();
var pDir = dir.Perpendicular();
var rightEndPos = end + pDir * Variables._Player.Distance(orbT);
var leftEndPos = end - pDir * Variables._Player.Distance(orbT);
var rEndPos = new Vector3(rightEndPos.X, rightEndPos.Y, Variables._Player.Position.Z);
var lEndPos = new Vector3(leftEndPos.X, leftEndPos.Y, Variables._Player.Position.Z);
if (Game.CursorPos.Distance(rEndPos) < Game.CursorPos.Distance(lEndPos))
{
bestpoint = (Vector3)Variables._Player.Position.Extend(rEndPos, Manager.SpellManager.Q.Range);
if (IsGoodPosition(bestpoint))
CastQ(bestpoint);
}
else
{
bestpoint = (Vector3)Variables._Player.Position.Extend(lEndPos, Manager.SpellManager.Q.Range);
if (IsGoodPosition(bestpoint))
CastQ(bestpoint);
}
}
}
else if (DashMode == 1)
{
var points = CirclePoints(12, Manager.SpellManager.Q.Range, Variables._Player.Position);
bestpoint = (Vector3)Variables._Player.Position.Extend(Game.CursorPos, Manager.SpellManager.Q.Range);
int enemies = bestpoint.CountEnemiesInRange(400);
foreach (var point in points)
{
int count = point.CountEnemiesInRange(400);
if (count < enemies)
{
enemies = count;
bestpoint = point;
}
else if (count == enemies && Game.CursorPos.Distance(point) < Game.CursorPos.Distance(bestpoint))
{
enemies = count;
bestpoint = point;
}
}
if (IsGoodPosition(bestpoint))
CastQ(bestpoint);
}
if (!bestpoint.IsZero && bestpoint.CountEnemiesInRange(Variables._Player.BoundingRadius + Variables._Player.AttackRange + 100) == 0)
return Vector3.Zero;
return bestpoint;
}