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

◆ TryPlacingPortal()

static int Terraria.GameContent.PortalHelper.TryPlacingPortal ( Projectile theBolt,
Vector2 velocity,
Vector2 theCrashVelocity )
inlinestatic

Definition at line 213 of file PortalHelper.cs.

214 {
215 Vector2 vector = velocity / velocity.Length();
216 Point position = FindCollision(theBolt.position, theBolt.position + velocity + vector * 32f).ToTileCoordinates();
217 Tile tile = Main.tile[position.X, position.Y];
218 Vector2 vector2 = new Vector2(position.X * 16 + 8, position.Y * 16 + 8);
219 if (!WorldGen.SolidOrSlopedTile(tile))
220 {
221 return -1;
222 }
223 int num = tile.slope();
224 bool flag = tile.halfBrick();
225 for (int i = 0; i < (flag ? 2 : EDGES.Length); i++)
226 {
227 if (Vector2.Dot(EDGES[i], vector) > 0f && FindValidLine(position, (int)EDGES[i].Y, (int)(0f - EDGES[i].X), out var bestPosition))
228 {
229 vector2 = new Vector2(bestPosition.X * 16 + 8, bestPosition.Y * 16 + 8);
230 return AddPortal(theBolt, vector2 - EDGES[i] * (flag ? 0f : 8f), (float)Math.Atan2(EDGES[i].Y, EDGES[i].X) + (float)Math.PI / 2f, (int)theBolt.ai[0], theBolt.direction);
231 }
232 }
233 if (num != 0)
234 {
235 Vector2 value = SLOPE_EDGES[num - 1];
236 if (Vector2.Dot(value, -vector) > 0f && FindValidLine(position, -SLOPE_OFFSETS[num - 1].Y, SLOPE_OFFSETS[num - 1].X, out var bestPosition2))
237 {
238 vector2 = new Vector2(bestPosition2.X * 16 + 8, bestPosition2.Y * 16 + 8);
239 return AddPortal(theBolt, vector2, (float)Math.Atan2(value.Y, value.X) - (float)Math.PI / 2f, (int)theBolt.ai[0], theBolt.direction);
240 }
241 }
242 return -1;
243 }
static double Atan2(double y, double x)
const double PI
Definition Math.cs:16
static readonly Point[] SLOPE_OFFSETS
static int AddPortal(Projectile sourceProjectile, Vector2 position, float angle, int form, int direction)
static Vector2 FindCollision(Vector2 startPosition, Vector2 stopPosition)
static readonly Vector2[] EDGES
static bool FindValidLine(Point position, int xOffset, int yOffset, out Point bestPosition)
static readonly Vector2[] SLOPE_EDGES
static float Dot(Vector2 value1, Vector2 value2)
Definition Vector2.cs:121

References Terraria.GameContent.PortalHelper.AddPortal(), System.Math.Atan2(), Microsoft.Xna.Framework.Vector2.Dot(), Terraria.GameContent.PortalHelper.EDGES, Terraria.GameContent.PortalHelper.FindCollision(), Terraria.GameContent.PortalHelper.FindValidLine(), Terraria.Tile.halfBrick(), Microsoft.Xna.Framework.Vector2.Length(), System.Math.PI, Terraria.Tile.slope(), Terraria.GameContent.PortalHelper.SLOPE_EDGES, Terraria.GameContent.PortalHelper.SLOPE_OFFSETS, Terraria.WorldGen.SolidOrSlopedTile(), Terraria.Main.tile, System.value, Microsoft.Xna.Framework.Point.X, System.X, Microsoft.Xna.Framework.Point.Y, and System.Y.

Referenced by Terraria.Projectile.HandleMovement().