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

◆ CheckAABBvLineCollision() [2/2]

static bool Terraria.Collision.CheckAABBvLineCollision ( Vector2 objectPosition,
Vector2 objectDimensions,
Vector2 lineStart,
Vector2 lineEnd,
float lineWidth,
ref float collisionPoint )
inlinestatic

Definition at line 246 of file Collision.cs.

247 {
248 float num = lineWidth * 0.5f;
249 Vector2 position = lineStart;
250 Vector2 dimensions = lineEnd - lineStart;
251 if (dimensions.X > 0f)
252 {
253 dimensions.X += lineWidth;
254 position.X -= num;
255 }
256 else
257 {
258 position.X += dimensions.X - num;
259 dimensions.X = 0f - dimensions.X + lineWidth;
260 }
261 if (dimensions.Y > 0f)
262 {
263 dimensions.Y += lineWidth;
264 position.Y -= num;
265 }
266 else
267 {
268 position.Y += dimensions.Y - num;
269 dimensions.Y = 0f - dimensions.Y + lineWidth;
270 }
271 if (!CheckAABBvAABBCollision(objectPosition, objectDimensions, position, dimensions))
272 {
273 return false;
274 }
280 float num2 = vector2.Length();
281 float num3 = (float)Math.Atan2(vector2.Y, vector2.X);
282 Vector2[] array = new Vector2[4]
283 {
284 vector.RotatedBy(0f - num3),
285 spinningpoint3.RotatedBy(0f - num3),
286 spinningpoint.RotatedBy(0f - num3),
287 spinningpoint2.RotatedBy(0f - num3)
288 };
290 bool result = false;
291 for (int i = 0; i < array.Length; i++)
292 {
293 if (Math.Abs(array[i].Y) < num && array[i].X < collisionPoint && array[i].X >= 0f)
294 {
296 result = true;
297 }
298 }
299 Vector2 vector3 = new Vector2(0f, num);
300 Vector2 vector4 = new Vector2(num2, num);
301 Vector2 vector5 = new Vector2(0f, 0f - num);
302 Vector2 vector6 = new Vector2(num2, 0f - num);
303 for (int j = 0; j < array.Length; j++)
304 {
305 int num4 = (j + 1) % array.Length;
308 float num5 = vector7.X * vector8.Y - vector7.Y * vector8.X;
309 if (num5 != 0f)
310 {
312 float num6 = (vector9.X * vector8.Y - vector9.Y * vector8.X) / num5;
313 if (num6 >= 0f && num6 <= 1f)
314 {
315 float num7 = (vector9.X * vector7.Y - vector9.Y * vector7.X) / num5;
316 if (num7 >= 0f && num7 <= 1f)
317 {
318 result = true;
320 }
321 }
322 }
324 num5 = vector7.X * vector8.Y - vector7.Y * vector8.X;
325 if (num5 == 0f)
326 {
327 continue;
328 }
330 float num8 = (vector10.X * vector8.Y - vector10.Y * vector8.X) / num5;
331 if (num8 >= 0f && num8 <= 1f)
332 {
333 float num9 = (vector10.X * vector7.Y - vector10.Y * vector7.X) / num5;
334 if (num9 >= 0f && num9 <= 1f)
335 {
336 result = true;
338 }
339 }
340 }
341 return result;
342 }
static byte Min(byte val1, byte val2)
Definition Math.cs:912
static double Atan2(double y, double x)
static double Abs(double value)
static bool CheckAABBvAABBCollision(Vector2 position1, Vector2 dimensions1, Vector2 position2, Vector2 dimensions2)
Definition Collision.cs:157

References System.Math.Abs(), System.array, System.Math.Atan2(), Terraria.Collision.CheckAABBvAABBCollision(), System.Math.Min(), Microsoft.Xna.Framework.Vector2.X, and Microsoft.Xna.Framework.Vector2.Y.