public static bool InMiddileWall(Vector2 firstwall, Vector2 lastwall) { var midwall = new Vector2((firstwall.X + lastwall.X) / 2, (firstwall.Y + lastwall.Y) / 2); var point = midwall.LSExtend(Game.CursorPos.LSTo2D(), 50); for (int i = 0; i <= 350; i = i + 10) { var testpoint = point.BadaoRotateAround(midwall, i); var flags = NavMesh.GetCollisionFlags(testpoint.X, testpoint.Y); if (!flags.HasFlag(CollisionFlags.Wall) && !flags.HasFlag(CollisionFlags.Building)) { return false; } } return true; }
private static Queue<Vector2> GeneratePath(Vector2 start, Vector2 end) { //return PathGenerator.GeneratePath(start.ToWorldPoint().To2D(), end.ToWorldPoint().To2D()); var d = start.LSDistance(end); var path = new Queue<Vector2>(); if (d < 75) { path.Enqueue(end); return path; } var increment = (int) d / 30; //(2 * d / FPS) var count = 0; for (var i = 0; i < d; i += increment) { if (i > d) { break; } var point = start.LSExtend(end, i); if (count++ % 10 == 0) { point.Randomize(10, 50); if (count % 6 == 0) { point.Randomize(50, 100); } } path.Enqueue(point); } path.Enqueue(end); return path; }
public static List<Vector2> GetRadiusPoints(Vector2 targetpredictedpos, Vector2 passivepredictedposition) { List<Vector2> RadiusPoints = new List<Vector2>(); for (int i = 50; i <= 300; i = i + 25) { var x = targetpredictedpos.LSExtend(passivepredictedposition, i); for (int j = -45; j <= 45; j = j + 5) { RadiusPoints.Add(x.RotateAround(targetpredictedpos, j * (float)(Math.PI / 180))); } } return RadiusPoints; }
private void castWOnAngle(Vector2 playerPos, Vector2 targetPos, float ag) { var posW = playerPos.LSExtend(targetPos, azir.Spells.W.Range); if (!RotatePoint(posW, playerPos, ag).LSIsWall()) azir.Spells.W.Cast(RotatePoint(posW, playerPos, ag)); }
/// <summary> /// Gets collided units & flags /// </summary> /// <param name="from">Start position</param> /// <param name="to">End position</param> /// <param name="width">Rectangle scale</param> /// <param name="delay">Spell delay</param> /// <param name="missileSpeed">Spell missile speed</param> /// <returns>Collision result as <see cref="Collision.Result"/></returns> public static Result GetCollisions(Vector2 from, Vector2 to, float range, float width, float delay, float missileSpeed = 0, bool isArc = false) { List<Obj_AI_Base> collidedUnits = new List<Obj_AI_Base>(); var spellHitBox = ClipperWrapper.MakePaths(ClipperWrapper.DefineRectangle(from, to.LSExtend(from, -width), width)); if (isArc) { spellHitBox = ClipperWrapper.MakePaths(new SPrediction.Geometry.Polygon( ClipperWrapper.DefineArc(from - new Vector2(900 / 2f, 20), to, (float)Math.PI * (to.LSDistance(from) / 900), 410, 200 * (to.LSDistance(from) / 900)), ClipperWrapper.DefineArc(from - new Vector2(900 / 2f, 20), to, (float)Math.PI * (to.LSDistance(from) / 900), 410, 320 * (to.LSDistance(from) / 900)))); } Flags _colFlags = Flags.None; var collidedMinions = MinionManager.GetMinions(range + 100, MinionTypes.All, MinionTeam.NotAlly, MinionOrderTypes.None).AsParallel().Where(p => ClipperWrapper.IsIntersects(ClipperWrapper.MakePaths(ClipperWrapper.DefineCircle(Prediction.GetFastUnitPosition(p, delay, missileSpeed), p.BoundingRadius + 15)), spellHitBox)); var collidedEnemies = HeroManager.Enemies.AsParallel().Where(p => ClipperWrapper.IsIntersects(ClipperWrapper.MakePaths(ClipperWrapper.DefineCircle(Prediction.GetFastUnitPosition(p, delay, missileSpeed), p.BoundingRadius)), spellHitBox)); var collidedAllies = HeroManager.Allies.AsParallel().Where(p => ClipperWrapper.IsIntersects(ClipperWrapper.MakePaths(ClipperWrapper.DefineCircle(Prediction.GetFastUnitPosition(p, delay, missileSpeed), p.BoundingRadius)), spellHitBox)); if (collidedMinions != null && collidedMinions.Count() != 0) { collidedUnits.AddRange(collidedMinions); _colFlags |= Flags.Minions; } if (collidedEnemies != null && collidedEnemies.Count() != 0) { collidedUnits.AddRange(collidedEnemies); _colFlags |= Flags.EnemyChampions; } if (collidedAllies != null && collidedAllies.Count() != 0) { collidedUnits.AddRange(collidedAllies); _colFlags |= Flags.AllyChampions; } if (CheckWallCollision(from, to)) _colFlags |= Flags.Wall; if (CheckYasuoWallCollision(from, to, width)) _colFlags |= Flags.YasuoWall; return new Result(collidedUnits, _colFlags); }
/// <summary> /// Checks wall collisions /// </summary> /// <param name="from">Start position</param> /// <param name="to">End position</param> /// <returns>true if collision found</returns> public static bool CheckWallCollision(Vector2 from, Vector2 to) { float step = from.LSDistance(to) / 20; for (var i = 0; i < 20; i++) { var p = from.LSExtend(to, step * i); if (NavMesh.GetCollisionFlags(p.X, p.Y).HasFlag(CollisionFlags.Wall)) return true; } return false; }
public static bool willColide(Skillshot ss, Vector2 from, float speed, Vector2 direction, float radius) { Vector2 ssVel = ss.Direction.Normalized() * ss.SpellData.MissileSpeed; Vector2 dashVel = direction * speed; Vector2 a = ssVel - dashVel;//true direction + speed Vector2 realFrom = from.LSExtend(direction, ss.SpellData.Delay + speed); if (!ss.IsAboutToHit((int)((dashVel.Length() / 475) * 1000) + Game.Ping + 100, ObjectManager.Player)) return false; if (ss.IsAboutToHit(1000, ObjectManager.Player) && interCir(ss.MissilePosition, ss.MissilePosition.LSExtend(ss.MissilePosition + a, ss.SpellData.Range + 50), from, radius)) return true; return false; }