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

◆ AnyCollision()

static Vector2 Terraria.Collision.AnyCollision ( Vector2 Position,
Vector2 Velocity,
int Width,
int Height,
bool evenActuated = false )
inlinestatic

Definition at line 2436 of file Collision.cs.

2437 {
2438 Vector2 result = Velocity;
2439 Vector2 vector = Velocity;
2440 Vector2 vector2 = Position + Velocity;
2442 int num = (int)(Position.X / 16f) - 1;
2443 int num2 = (int)((Position.X + (float)Width) / 16f) + 2;
2444 int num3 = (int)(Position.Y / 16f) - 1;
2445 int num4 = (int)((Position.Y + (float)Height) / 16f) + 2;
2446 int num5 = -1;
2447 int num6 = -1;
2448 int num7 = -1;
2449 int num8 = -1;
2450 if (num < 0)
2451 {
2452 num = 0;
2453 }
2454 if (num2 > Main.maxTilesX)
2455 {
2456 num2 = Main.maxTilesX;
2457 }
2458 if (num3 < 0)
2459 {
2460 num3 = 0;
2461 }
2462 if (num4 > Main.maxTilesY)
2463 {
2464 num4 = Main.maxTilesY;
2465 }
2466 Vector2 vector4 = default(Vector2);
2467 for (int i = num; i < num2; i++)
2468 {
2469 for (int j = num3; j < num4; j++)
2470 {
2471 if (Main.tile[i, j] == null || !Main.tile[i, j].active() || (!evenActuated && Main.tile[i, j].inActive()))
2472 {
2473 continue;
2474 }
2475 vector4.X = i * 16;
2476 vector4.Y = j * 16;
2477 int num9 = 16;
2478 if (Main.tile[i, j].halfBrick())
2479 {
2480 vector4.Y += 8f;
2481 num9 -= 8;
2482 }
2483 if (!(vector2.X + (float)Width > vector4.X) || !(vector2.X < vector4.X + 16f) || !(vector2.Y + (float)Height > vector4.Y) || !(vector2.Y < vector4.Y + (float)num9))
2484 {
2485 continue;
2486 }
2487 if (vector3.Y + (float)Height <= vector4.Y)
2488 {
2489 num7 = i;
2490 num8 = j;
2491 if (num7 != num5)
2492 {
2493 result.Y = vector4.Y - (vector3.Y + (float)Height);
2494 }
2495 }
2496 else if (vector3.X + (float)Width <= vector4.X && !Main.tileSolidTop[Main.tile[i, j].type])
2497 {
2498 num5 = i;
2499 num6 = j;
2500 if (num6 != num8)
2501 {
2502 result.X = vector4.X - (vector3.X + (float)Width);
2503 }
2504 if (num7 == num5)
2505 {
2506 result.Y = vector.Y;
2507 }
2508 }
2509 else if (vector3.X >= vector4.X + 16f && !Main.tileSolidTop[Main.tile[i, j].type])
2510 {
2511 num5 = i;
2512 num6 = j;
2513 if (num6 != num8)
2514 {
2515 result.X = vector4.X + 16f - vector3.X;
2516 }
2517 if (num7 == num5)
2518 {
2519 result.Y = vector.Y;
2520 }
2521 }
2522 else if (vector3.Y >= vector4.Y + (float)num9 && !Main.tileSolidTop[Main.tile[i, j].type])
2523 {
2524 num7 = i;
2525 num8 = j;
2526 result.Y = vector4.Y + (float)num9 - vector3.Y + 0.01f;
2527 if (num8 == num6)
2528 {
2529 result.X = vector.X + 0.01f;
2530 }
2531 }
2532 }
2533 }
2534 return result;
2535 }

References Terraria.Main.maxTilesX, Terraria.Main.maxTilesY, Terraria.Main.tile, and Terraria.Main.tileSolidTop.