Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ AI_007_TownEntities_GetWalkPrediction()

void Terraria.NPC.AI_007_TownEntities_GetWalkPrediction ( int myTileX,
int homeFloorX,
bool canBreathUnderWater,
bool currentlyDrowning,
int tileX,
int tileY,
out bool keepwalking,
out bool avoidFalling )
inlineprivate

Definition at line 48813 of file NPC.cs.

48814 {
48815 keepwalking = false;
48816 avoidFalling = true;
48817 bool flag = myTileX >= homeFloorX - 35 && myTileX <= homeFloorX + 35;
48818 if (townNPC && ai[1] < 30f)
48819 {
48820 keepwalking = !Utils.PlotTileLine(base.Top, base.Bottom, width, DelegateMethods.SearchAvoidedByNPCs);
48821 if (!keepwalking)
48822 {
48823 Rectangle hitbox = base.Hitbox;
48824 hitbox.X -= 20;
48825 hitbox.Width += 40;
48826 for (int i = 0; i < 200; i++)
48827 {
48828 if (Main.npc[i].active && Main.npc[i].friendly && i != whoAmI && Main.npc[i].velocity.X == 0f && hitbox.Intersects(Main.npc[i].Hitbox))
48829 {
48830 keepwalking = true;
48831 break;
48832 }
48833 }
48834 }
48835 }
48837 {
48838 keepwalking = true;
48839 }
48841 {
48842 avoidFalling = false;
48843 }
48844 if (!avoidFalling)
48845 {
48846 return;
48847 }
48848 bool flag2 = false;
48849 Point p = default(Point);
48850 int num = 0;
48851 for (int j = -1; j <= 4; j++)
48852 {
48853 Tile tileSafely = Framing.GetTileSafely(tileX, tileY + j);
48854 if (tileSafely.liquid > 0)
48855 {
48856 num++;
48857 if (tileSafely.lava())
48858 {
48859 flag2 = true;
48860 break;
48861 }
48862 }
48863 if (tileSafely.nactive() && Main.tileSolid[tileSafely.type])
48864 {
48865 if (num > 0)
48866 {
48867 p.X = tileX;
48868 p.Y = tileY + j;
48869 }
48870 avoidFalling = false;
48871 break;
48872 }
48873 }
48875 double num2 = Math.Ceiling((float)height / 16f);
48876 if ((double)num >= num2)
48877 {
48878 avoidFalling = true;
48879 }
48880 if (!avoidFalling && p.X != 0 && p.Y != 0)
48881 {
48882 Vector2 vector = p.ToWorldCoordinates(8f, 0f) + new Vector2(-width / 2, -height);
48883 avoidFalling = Collision.DrownCollision(vector, width, height, 1f);
48884 }
48885 }
static double Ceiling(double a)
static int Sign(decimal value)
Definition Math.cs:1202
static bool[] TownCritter
Definition NPCID.cs:4200
float[] ai
Definition NPC.cs:447
int type
Definition NPC.cs:445
bool townNPC
Definition NPC.cs:537

References Terraria.NPC.ai, System.Math.Ceiling(), Terraria.Entity.direction, Terraria.Collision.DrownCollision(), Terraria.Framing.GetTileSafely(), Terraria.Entity.height, Terraria.Main.npc, Terraria.Utils.PlotTileLine(), Terraria.DelegateMethods.SearchAvoidedByNPCs(), System.Math.Sign(), Terraria.Main.tileSolid, Terraria.ID.NPCID.Sets.TownCritter, Terraria.NPC.townNPC, Terraria.NPC.type, Microsoft.Xna.Framework.Graphics.Vector2, Terraria.Entity.whoAmI, Terraria.Entity.width, Microsoft.Xna.Framework.Point.X, and Microsoft.Xna.Framework.Point.Y.

Referenced by Terraria.NPC.AI_007_TownEntities().