Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
TeleportHelpers.cs
Go to the documentation of this file.
2
4
5public class TeleportHelpers
6{
7 public static bool RequestMagicConchTeleportPosition(Player player, int crawlOffsetX, int startX, out Point landingPoint)
8 {
9 landingPoint = default(Point);
10 Point point = new Point(startX, 50);
11 int num = 1;
12 int num2 = -1;
13 int num3 = 1;
14 int num4 = 0;
15 int num5 = 5000;
16 Vector2 vector = new Vector2((float)player.width * 0.5f, player.height);
17 int num6 = 40;
18 bool flag = WorldGen.SolidOrSlopedTile(Main.tile[point.X, point.Y]);
19 int num7 = 0;
20 int num8 = 400;
21 while (num4 < num5 && num7 < num8)
22 {
23 num4++;
24 Tile tile = Main.tile[point.X, point.Y];
25 Tile tile2 = Main.tile[point.X, point.Y + num3];
26 bool flag2 = WorldGen.SolidOrSlopedTile(tile) || tile.liquid > 0;
27 bool flag3 = WorldGen.SolidOrSlopedTile(tile2) || tile2.liquid > 0;
28 if (IsInSolidTilesExtended(new Vector2(point.X * 16 + 8, point.Y * 16 + 15) - vector, player.velocity, player.width, player.height, (int)player.gravDir))
29 {
30 if (flag)
31 {
32 point.Y += num;
33 }
34 else
35 {
36 point.Y += num2;
37 }
38 continue;
39 }
40 if (flag2)
41 {
42 if (flag)
43 {
44 point.Y += num;
45 }
46 else
47 {
48 point.Y += num2;
49 }
50 continue;
51 }
52 flag = false;
53 if (!IsInSolidTilesExtended(new Vector2(point.X * 16 + 8, point.Y * 16 + 15 + 16) - vector, player.velocity, player.width, player.height, (int)player.gravDir) && !flag3 && (double)point.Y < Main.worldSurface)
54 {
55 point.Y += num;
56 continue;
57 }
58 if (tile2.liquid > 0)
59 {
60 point.X += crawlOffsetX;
61 num7++;
62 continue;
63 }
64 if (TileIsDangerous(point.X, point.Y))
65 {
66 point.X += crawlOffsetX;
67 num7++;
68 continue;
69 }
70 if (TileIsDangerous(point.X, point.Y + num3))
71 {
72 point.X += crawlOffsetX;
73 num7++;
74 continue;
75 }
76 if (point.Y >= num6)
77 {
78 break;
79 }
80 point.Y += num;
81 }
82 if (num4 == num5 || num7 >= num8)
83 {
84 return false;
85 }
86 if (!WorldGen.InWorld(point.X, point.Y, 40))
87 {
88 return false;
89 }
90 landingPoint = point;
91 return true;
92 }
93
94 private static bool TileIsDangerous(int x, int y)
95 {
96 Tile tile = Main.tile[x, y];
97 if (tile.liquid > 0 && tile.lava())
98 {
99 return true;
100 }
101 if (tile.wall == 87 && (double)y > Main.worldSurface && !NPC.downedPlantBoss)
102 {
103 return true;
104 }
105 if (Main.wallDungeon[tile.wall] && (double)y > Main.worldSurface && !NPC.downedBoss3)
106 {
107 return true;
108 }
109 return false;
110 }
111
112 private static bool IsInSolidTilesExtended(Vector2 testPosition, Vector2 playerVelocity, int width, int height, int gravDir)
113 {
114 if (Collision.LavaCollision(testPosition, width, height))
115 {
116 return true;
117 }
118 if (Collision.AnyHurtingTiles(testPosition, width, height))
119 {
120 return true;
121 }
122 if (Collision.SolidCollision(testPosition, width, height))
123 {
124 return true;
125 }
126 Vector2 vector = Vector2.UnitX * 16f;
127 if (Collision.TileCollision(testPosition - vector, vector, width, height, fallThrough: false, fall2: false, gravDir) != vector)
128 {
129 return true;
130 }
131 vector = -Vector2.UnitX * 16f;
132 if (Collision.TileCollision(testPosition - vector, vector, width, height, fallThrough: false, fall2: false, gravDir) != vector)
133 {
134 return true;
135 }
136 vector = Vector2.UnitY * 16f;
137 if (Collision.TileCollision(testPosition - vector, vector, width, height, fallThrough: false, fall2: false, gravDir) != vector)
138 {
139 return true;
140 }
141 vector = -Vector2.UnitY * 16f;
142 if (Collision.TileCollision(testPosition - vector, vector, width, height, fallThrough: false, fall2: false, gravDir) != vector)
143 {
144 return true;
145 }
146 return false;
147 }
148}
static bool AnyHurtingTiles(Vector2 Position, int Width, int Height)
static Vector2 TileCollision(Vector2 Position, Vector2 Velocity, int Width, int Height, bool fallThrough=false, bool fall2=false, int gravDir=1)
static bool LavaCollision(Vector2 Position, int Width, int Height)
static bool SolidCollision(Vector2 Position, int Width, int Height)
Vector2 velocity
Definition Entity.cs:16
static bool TileIsDangerous(int x, int y)
static bool IsInSolidTilesExtended(Vector2 testPosition, Vector2 playerVelocity, int width, int height, int gravDir)
static bool RequestMagicConchTeleportPosition(Player player, int crawlOffsetX, int startX, out Point landingPoint)
static double worldSurface
Definition Main.cs:1272
static bool[] wallDungeon
Definition Main.cs:1443
static Tile[,] tile
Definition Main.cs:1675
static bool downedBoss3
Definition NPC.cs:349
static bool downedPlantBoss
Definition NPC.cs:363
byte liquid
Definition Tile.cs:12
bool lava()
Definition Tile.cs:362
ushort wall
Definition Tile.cs:10
static bool InWorld(int x, int y, int fluff=0)
Definition WorldGen.cs:5816
static bool SolidOrSlopedTile(Tile tile)