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

◆ GetCollisionPointForTile()

static bool Terraria.Physics.BallCollision.GetCollisionPointForTile ( TileEdges edgesToTest,
int x,
int y,
Vector2 center,
ref Vector2 closestPointOut,
ref float distanceSquaredOut )
inlinestaticprivate

Definition at line 182 of file BallCollision.cs.

183 {
184 Tile tile = Main.tile[x, y];
185 if (tile == null || !tile.nactive() || (!Main.tileSolid[tile.type] && !Main.tileSolidTop[tile.type]))
186 {
187 return false;
188 }
189 if (!Main.tileSolid[tile.type] && Main.tileSolidTop[tile.type] && tile.frameY != 0)
190 {
191 return false;
192 }
193 if (Main.tileSolidTop[tile.type])
194 {
195 edgesToTest &= TileEdges.Top | TileEdges.BottomLeftSlope | TileEdges.BottomRightSlope;
196 }
197 Vector2 tilePosition = new Vector2((float)x * 16f, (float)y * 16f);
198 bool flag = false;
199 LineSegment edge = default(LineSegment);
200 if (GetSlopeEdge(ref edgesToTest, tile, tilePosition, ref edge))
201 {
202 closestPointOut = ClosestPointOnLineSegment(center, edge);
203 distanceSquaredOut = Vector2.DistanceSquared(closestPointOut, center);
204 flag = true;
205 }
206 if (GetTopOrBottomEdge(edgesToTest, x, y, tilePosition, ref edge))
207 {
208 Vector2 vector = ClosestPointOnLineSegment(center, edge);
209 float num = Vector2.DistanceSquared(vector, center);
210 if (!flag || num < distanceSquaredOut)
211 {
212 distanceSquaredOut = num;
213 closestPointOut = vector;
214 }
215 flag = true;
216 }
217 if (GetLeftOrRightEdge(edgesToTest, x, y, tilePosition, ref edge))
218 {
219 Vector2 vector2 = ClosestPointOnLineSegment(center, edge);
220 float num2 = Vector2.DistanceSquared(vector2, center);
221 if (!flag || num2 < distanceSquaredOut)
222 {
223 distanceSquaredOut = num2;
224 closestPointOut = vector2;
225 }
226 flag = true;
227 }
228 return flag;
229 }
static bool GetLeftOrRightEdge(TileEdges edgesToTest, int x, int y, Vector2 tilePosition, ref LineSegment edge)
static Vector2 ClosestPointOnLineSegment(Vector2 point, LineSegment lineSegment)
static bool GetSlopeEdge(ref TileEdges edgesToTest, Tile tile, Vector2 tilePosition, ref LineSegment edge)
static bool GetTopOrBottomEdge(TileEdges edgesToTest, int x, int y, Vector2 tilePosition, ref LineSegment edge)
static float DistanceSquared(Vector2 value1, Vector2 value2)
Definition Vector2.cs:107

References Terraria.Physics.BallCollision.ClosestPointOnLineSegment(), Microsoft.Xna.Framework.Vector2.DistanceSquared(), Terraria.Tile.frameY, Terraria.Physics.BallCollision.GetLeftOrRightEdge(), Terraria.Physics.BallCollision.GetSlopeEdge(), Terraria.Physics.BallCollision.GetTopOrBottomEdge(), Terraria.Tile.nactive(), Terraria.Main.tile, Terraria.Main.tileSolid, Terraria.Main.tileSolidTop, and Terraria.Tile.type.

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