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

◆ GetClosestEdgeToCircle()

static bool Terraria.Physics.BallCollision.GetClosestEdgeToCircle ( Vector2 position,
Vector2 size,
Vector2 velocity,
out Vector2 collisionPoint,
out Tile collisionTile )
inlinestaticprivate

Definition at line 152 of file BallCollision.cs.

153 {
154 Rectangle tileBounds = GetTileBounds(position, size);
155 Vector2 vector = position + size * 0.5f;
156 TileEdges tileEdges = TileEdges.None;
157 tileEdges = ((!(velocity.Y < 0f)) ? (tileEdges | TileEdges.Top) : (tileEdges | TileEdges.Bottom));
158 tileEdges = ((!(velocity.X < 0f)) ? (tileEdges | TileEdges.Left) : (tileEdges | TileEdges.Right));
159 tileEdges = ((!(velocity.Y > velocity.X)) ? (tileEdges | TileEdges.TopRightSlope) : (tileEdges | TileEdges.BottomLeftSlope));
160 tileEdges = ((!(velocity.Y > 0f - velocity.X)) ? (tileEdges | TileEdges.TopLeftSlope) : (tileEdges | TileEdges.BottomRightSlope));
161 collisionPoint = Vector2.Zero;
162 collisionTile = null;
163 float num = float.MaxValue;
164 Vector2 closestPointOut = default(Vector2);
165 float distanceSquaredOut = 0f;
166 for (int i = tileBounds.Left; i < tileBounds.Right; i++)
167 {
168 for (int j = tileBounds.Top; j < tileBounds.Bottom; j++)
169 {
170 if (GetCollisionPointForTile(tileEdges, i, j, vector, ref closestPointOut, ref distanceSquaredOut) && !(distanceSquaredOut >= num) && !(Vector2.Dot(velocity, vector - closestPointOut) > 0f))
171 {
172 num = distanceSquaredOut;
173 collisionPoint = closestPointOut;
174 collisionTile = Main.tile[i, j];
175 }
176 }
177 }
178 float num2 = size.X / 2f;
179 return num < num2 * num2;
180 }
static Rectangle GetTileBounds(Vector2 position, Vector2 size)
static bool GetCollisionPointForTile(TileEdges edgesToTest, int x, int y, Vector2 center, ref Vector2 closestPointOut, ref float distanceSquaredOut)
static float Dot(Vector2 value1, Vector2 value2)
Definition Vector2.cs:121

References Microsoft.Xna.Framework.Rectangle.Bottom, Microsoft.Xna.Framework.Vector2.Dot(), Terraria.Physics.BallCollision.GetCollisionPointForTile(), Terraria.Physics.BallCollision.GetTileBounds(), Microsoft.Xna.Framework.Rectangle.Left, Microsoft.Xna.Framework.Rectangle.Right, Terraria.Main.tile, Microsoft.Xna.Framework.Rectangle.Top, Microsoft.Xna.Framework.Vector2.X, and Microsoft.Xna.Framework.Vector2.Zero.

Referenced by Terraria.Physics.BallCollision.Step().