Skip to content

Commit

Permalink
removed CheckLineOfSight
Browse files Browse the repository at this point in the history
  • Loading branch information
direwolf420 committed Sep 12, 2020
1 parent 4792287 commit de08013
Show file tree
Hide file tree
Showing 9 changed files with 12 additions and 33 deletions.
24 changes: 2 additions & 22 deletions Base/AssAI.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,30 +25,10 @@ public static void TeleportIfTooFar(Projectile projectile, Vector2 desiredCenter
}
}

//Credit to Itorius
/// <summary>
/// Uses ray tracking as an alternative to Collision.CanHitLine
/// </summary>
public static bool CheckLineOfSight(Vector2 center, Vector2 target)
{
Ray ray = new Ray(new Vector3(center, 0), new Vector3(target - center, 0));

List<Vector2> tiles = new List<Vector2>();
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);
}

/// <summary>
/// Finds target in range of relativeCenter. Returns index of target
/// </summary>
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;
Expand All @@ -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;
Expand Down
4 changes: 2 additions & 2 deletions Projectiles/Minions/Drones/BasicLaserDrone.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down
2 changes: 1 addition & 1 deletion Projectiles/Minions/Drones/HeavyLaserDrone.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
4 changes: 2 additions & 2 deletions Projectiles/Minions/Drones/MissileDrone.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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)
{
Expand Down
2 changes: 1 addition & 1 deletion Projectiles/Minions/Drones/MissileDroneRocket.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
2 changes: 1 addition & 1 deletion Projectiles/Pets/PetDestroyer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand Down
2 changes: 1 addition & 1 deletion Projectiles/Pets/PetGolemHeadProj.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
4 changes: 2 additions & 2 deletions Projectiles/Pets/PetPlanteraProj.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
1 change: 0 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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*
Expand Down

0 comments on commit de08013

Please sign in to comment.