From de08013e78d26f9e3e2ed5eadae574db836541a5 Mon Sep 17 00:00:00 2001 From: direwolf420 Date: Sat, 12 Sep 2020 11:59:13 +0200 Subject: [PATCH] removed CheckLineOfSight --- Base/AssAI.cs | 24 ++----------------- Projectiles/Minions/Drones/BasicLaserDrone.cs | 4 ++-- Projectiles/Minions/Drones/HeavyLaserDrone.cs | 2 +- Projectiles/Minions/Drones/MissileDrone.cs | 4 ++-- .../Minions/Drones/MissileDroneRocket.cs | 2 +- Projectiles/Pets/PetDestroyer.cs | 2 +- Projectiles/Pets/PetGolemHeadProj.cs | 2 +- Projectiles/Pets/PetPlanteraProj.cs | 4 ++-- README.md | 1 - 9 files changed, 12 insertions(+), 33 deletions(-) diff --git a/Base/AssAI.cs b/Base/AssAI.cs index 9bee5aa7..7f550c0c 100644 --- a/Base/AssAI.cs +++ b/Base/AssAI.cs @@ -25,30 +25,10 @@ public static void TeleportIfTooFar(Projectile projectile, Vector2 desiredCenter } } - //Credit to Itorius - /// - /// Uses ray tracking as an alternative to Collision.CanHitLine - /// - public static bool CheckLineOfSight(Vector2 center, Vector2 target) - { - Ray ray = new Ray(new Vector3(center, 0), new Vector3(target - center, 0)); - - List tiles = new List(); - Utils.PlotTileLine(center, target, 42, (i, j) => - { - tiles.Add(i * 16 > center.X ? new Vector2(i, j + 1) * 16 : new Vector2(i, j) * 16); - return true; - }); - - return tiles - .Where(tile => WorldGen.SolidTile((int)(tile.X / 16), (int)(tile.Y / 16))) - .All(tile => new BoundingBox(new Vector3(tile - new Vector2(2), 0), new Vector3(tile + new Vector2(20), 0)).Intersects(ray) == null); - } - /// /// Finds target in range of relativeCenter. Returns index of target /// - public static int FindTarget(Entity ent, Vector2 relativeCenter, float range = 300f, bool ignoreTiles = false, bool useSlowLOS = false) + public static int FindTarget(Entity ent, Vector2 relativeCenter, float range, bool ignoreTiles = false) { int targetIndex = -1; float distanceFromTarget = 10000000f; @@ -63,7 +43,7 @@ public static int FindTarget(Entity ent, Vector2 relativeCenter, float range = 3 float between = Vector2.DistanceSquared(npc.Center, relativeCenter); if ((between < range && Vector2.DistanceSquared(relativeCenter, targetCenter) > between && between < distanceFromTarget) || targetIndex == -1) { - if (ignoreTiles || (useSlowLOS ? CheckLineOfSight(relativeCenter, npc.Center) : Collision.CanHitLine(ent.position, ent.width, ent.height, npc.position, npc.width, npc.height))) + if (ignoreTiles || Collision.CanHitLine(ent.position, ent.width, ent.height, npc.position, npc.width, npc.height)) { distanceFromTarget = between; targetCenter = npc.Center; diff --git a/Projectiles/Minions/Drones/BasicLaserDrone.cs b/Projectiles/Minions/Drones/BasicLaserDrone.cs index 477bc4cb..eacefcc0 100644 --- a/Projectiles/Minions/Drones/BasicLaserDrone.cs +++ b/Projectiles/Minions/Drones/BasicLaserDrone.cs @@ -148,7 +148,7 @@ protected override void CustomAI() //Main.NewText("Counter: " + Counter); #region Handle State - int targetIndex = AssAI.FindTarget(projectile, projectile.Center, range: 1000, ignoreTiles: true); + int targetIndex = AssAI.FindTarget(projectile, projectile.Center, 1000, ignoreTiles: true); if (targetIndex != -1) { if (AI_STATE == STATE_IDLE) AI_STATE = STATE_TARGET_FOUND; @@ -302,7 +302,7 @@ private int FindClosestTargetBelow(int range = 1000) float between = Vector2.Distance(npc.Center, projectile.Center); if (((between < range && Vector2.Distance(player.Center, targetCenter) > between && between < distanceFromTarget) || targetIndex == -1) && - projectile.Bottom.Y < npc.Top.Y + 40 && AssAI.CheckLineOfSight(projectile.Center, npc.Center)) + projectile.Bottom.Y < npc.Top.Y + 40 && Collision.CanHitLine(projectile.Center, 1, 1, npc.position, npc.width, npc.height)) { distanceFromTarget = between; targetCenter = npc.Center; diff --git a/Projectiles/Minions/Drones/HeavyLaserDrone.cs b/Projectiles/Minions/Drones/HeavyLaserDrone.cs index 271d5953..ab970de4 100644 --- a/Projectiles/Minions/Drones/HeavyLaserDrone.cs +++ b/Projectiles/Minions/Drones/HeavyLaserDrone.cs @@ -406,7 +406,7 @@ private int FindClosestHorizontalTarget() float between = Vector2.Distance(npc.Center, player.Center); if (((between < range && Vector2.Distance(player.Center, targetCenter) > between && between < distanceFromTarget) || targetIndex == -1) && - AssAI.CheckLineOfSight(player.Center, npc.Center)) + Collision.CanHitLine(player.Center, 1, 1, npc.position, npc.width, npc.height)) { distanceFromTarget = between; targetCenter = npc.Center; diff --git a/Projectiles/Minions/Drones/MissileDrone.cs b/Projectiles/Minions/Drones/MissileDrone.cs index 9873ed56..9c40bc2b 100644 --- a/Projectiles/Minions/Drones/MissileDrone.cs +++ b/Projectiles/Minions/Drones/MissileDrone.cs @@ -150,7 +150,7 @@ protected override void CustomAI() if (Counter > AttackDelay) { Counter = 0; - int targetIndex = AssAI.FindTarget(projectile, projectile.Center, range: 900, useSlowLOS: true); + int targetIndex = AssAI.FindTarget(projectile, projectile.Center, 900); if (targetIndex != -1) { Vector2 aboveCheck = new Vector2(0, -16 * 8); @@ -180,7 +180,7 @@ protected override void CustomAI() if (AI_STATE == STATE_FIRING) { - int targetIndex = AssAI.FindTarget(projectile, projectile.Center, 900, useSlowLOS: true); + int targetIndex = AssAI.FindTarget(projectile, projectile.Center, 900); if (targetIndex != -1) { diff --git a/Projectiles/Minions/Drones/MissileDroneRocket.cs b/Projectiles/Minions/Drones/MissileDroneRocket.cs index 68ea7bd7..14df5e45 100644 --- a/Projectiles/Minions/Drones/MissileDroneRocket.cs +++ b/Projectiles/Minions/Drones/MissileDroneRocket.cs @@ -195,7 +195,7 @@ public override void AI() int targetIndex; if (projectile.ai[0] > 60) { - targetIndex = AssAI.FindTarget(projectile, projectile.Center, range: 1200f, ignoreTiles: true); + targetIndex = AssAI.FindTarget(projectile, projectile.Center, 1200, ignoreTiles: true); if (targetIndex != -1) { if (FirstTarget == -1) FirstTarget = targetIndex; diff --git a/Projectiles/Pets/PetDestroyer.cs b/Projectiles/Pets/PetDestroyer.cs index b1c095ac..3c505f83 100644 --- a/Projectiles/Pets/PetDestroyer.cs +++ b/Projectiles/Pets/PetDestroyer.cs @@ -195,7 +195,7 @@ public override void AI() AssAI.ZephyrfishAI(projectile, parent: parent, velocityFactor: 1f, random: false, swapSides: 1, offsetX: offsetX, offsetY: offsetY); - int targetIndex = AssAI.FindTarget(projectile, projectile.Center, range: 500f); + int targetIndex = AssAI.FindTarget(projectile, projectile.Center, 500); if (Main.myPlayer == projectile.owner) { diff --git a/Projectiles/Pets/PetGolemHeadProj.cs b/Projectiles/Pets/PetGolemHeadProj.cs index 4d410e76..8ec64144 100644 --- a/Projectiles/Pets/PetGolemHeadProj.cs +++ b/Projectiles/Pets/PetGolemHeadProj.cs @@ -119,7 +119,7 @@ protected override void CustomAI() { if (Main.myPlayer == projectile.owner) { - int targetIndex = AssAI.FindTarget(projectile, projectile.Center, range: 600f); + int targetIndex = AssAI.FindTarget(projectile, projectile.Center, 600); if (targetIndex != -1 && !Collision.SolidCollision(projectile.position, projectile.width, projectile.height)) { if (Counter == AttackDelay) Counter += AttackDelay; diff --git a/Projectiles/Pets/PetPlanteraProj.cs b/Projectiles/Pets/PetPlanteraProj.cs index 84279ee3..db4cd5e2 100644 --- a/Projectiles/Pets/PetPlanteraProj.cs +++ b/Projectiles/Pets/PetPlanteraProj.cs @@ -76,12 +76,12 @@ public override void AI() } #region Handle State - int targetIndex = AssAI.FindTarget(projectile, player.Center); //check for player surrounding + int targetIndex = AssAI.FindTarget(projectile, player.Center, 300); //check for player surrounding if (targetIndex == -1) { if (AI_STATE == STATE_ATTACK) { - targetIndex = AssAI.FindTarget(projectile, player.Center, range: 400f, useSlowLOS: false); //check for player surrounding + targetIndex = AssAI.FindTarget(projectile, player.Center, 400); //check for player surrounding if (targetIndex == -1) { AI_STATE = STATE_IDLE; diff --git a/README.md b/README.md index b2aa65f4..586b0d62 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,6 @@ Small sample of the contents: ![Sample](https://raw.githubusercontent.com/Werebearguy/AssortedCrazyThings/master/sample.png) Credits for code: - * Itorius for *CheckLineOfSight* * IDGCaptainRussia for *DrawTether* * Muzuwi for *CircleUI* * jopojelly for *PremultiplyTexture*