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

◆ AI_AttemptToFindTeleportSpot()

bool Terraria.NPC.AI_AttemptToFindTeleportSpot ( ref Vector2 chosenTile,
int targetTileX,
int targetTileY,
int rangeFromTargetTile = 20,
int telefragPreventionDistanceInTiles = 5,
int solidTileCheckFluff = 1,
bool solidTileCheckCentered = false,
bool teleportInAir = false )
inline

Definition at line 12861 of file NPC.cs.

12862 {
12863 int num = (int)base.Center.X / 16;
12864 int num2 = (int)base.Center.Y / 16;
12865 int num3 = 0;
12866 bool flag = false;
12867 float num4 = 20f;
12868 if (Math.Abs(num * 16 - targetTileX * 16) + Math.Abs(num2 * 16 - targetTileY * 16) > 2000)
12869 {
12870 num3 = 100;
12871 flag = false;
12872 }
12873 while (!flag && num3 < 100)
12874 {
12875 num3++;
12878 {
12879 if ((i >= num2 - 1 && i <= num2 + 1 && num5 >= num - 1 && num5 <= num + 1) || (!teleportInAir && !Main.tile[num5, i].nactive()))
12880 {
12881 continue;
12882 }
12883 bool flag2 = true;
12884 if ((type == 32 || (type >= 281 && type <= 286)) && !Main.wallDungeon[Main.tile[num5, i - 1].wall])
12885 {
12886 if (!AnyNPCs(35))
12887 {
12888 flag2 = false;
12889 }
12890 }
12891 else if (Main.tile[num5, i - 1].lava())
12892 {
12893 flag2 = false;
12894 }
12895 if (!flag2 || (!teleportInAir && !Main.tileSolid[Main.tile[num5, i].type]))
12896 {
12897 continue;
12898 }
12899 bool flag3 = false;
12900 if (!((!solidTileCheckCentered) ? (!Collision.SolidTiles(num5 - solidTileCheckFluff, num5 + solidTileCheckFluff, i - 3 - solidTileCheckFluff, i - 1)) : (!Collision.SolidTiles(num5 - solidTileCheckFluff, num5 + solidTileCheckFluff, i - solidTileCheckFluff, i + solidTileCheckFluff))))
12901 {
12902 continue;
12903 }
12904 Rectangle rectangle = new Rectangle(num5 * 16, i * 16, 16, 16);
12906 for (int j = 0; j < Main.player.Length; j++)
12907 {
12908 Player player = Main.player[j];
12909 if (player != null && player.active && !player.DeadOrGhost)
12910 {
12911 Rectangle value = player.Hitbox;
12912 Rectangle value2 = value.Modified((int)(player.velocity.X * num4), (int)(player.velocity.Y * num4), 0, 0);
12914 if (value2.Intersects(rectangle))
12915 {
12916 flag2 = false;
12917 flag = false;
12918 break;
12919 }
12920 }
12921 }
12922 if (flag2)
12923 {
12924 chosenTile = new Vector2(num5, i);
12925 flag = true;
12926 }
12927 break;
12928 }
12929 }
12930 return flag;
12931 }
static double Abs(double value)
float value
Definition NPC.cs:523
static bool AnyNPCs(int Type)
Definition NPC.cs:86689
int type
Definition NPC.cs:445
static Rectangle Union(Rectangle value1, Rectangle value2)
Definition Rectangle.cs:197

References System.Math.Abs(), Terraria.Entity.active, Terraria.NPC.AnyNPCs(), Terraria.Player.DeadOrGhost, Terraria.Entity.Hitbox, Terraria.Main.player, Terraria.Main.rand, Terraria.Collision.SolidTiles(), Terraria.Main.tile, Terraria.Main.tileSolid, Terraria.NPC.type, Microsoft.Xna.Framework.Rectangle.Union(), Terraria.NPC.value, Microsoft.Xna.Framework.Graphics.Vector2, Terraria.Entity.velocity, Terraria.Main.wallDungeon, Microsoft.Xna.Framework.Vector2.X, and Microsoft.Xna.Framework.Vector2.Y.

Referenced by Terraria.NPC.AI(), and Terraria.NPC.AI_003_Fighters().