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

◆ AnyCollisionWithSpecificTiles()

static Vector2 Terraria.Collision.AnyCollisionWithSpecificTiles ( Vector2 Position,
Vector2 Velocity,
int Width,
int Height,
bool[] tilesWeCanCollideWithByType,
bool evenActuated = false )
inlinestatic

Definition at line 2334 of file Collision.cs.

2335 {
2336 Vector2 result = Velocity;
2337 Vector2 vector = Velocity;
2338 Vector2 vector2 = Position + Velocity;
2340 int num = (int)(Position.X / 16f) - 1;
2341 int num2 = (int)((Position.X + (float)Width) / 16f) + 2;
2342 int num3 = (int)(Position.Y / 16f) - 1;
2343 int num4 = (int)((Position.Y + (float)Height) / 16f) + 2;
2344 int num5 = -1;
2345 int num6 = -1;
2346 int num7 = -1;
2347 int num8 = -1;
2348 if (num < 0)
2349 {
2350 num = 0;
2351 }
2352 if (num2 > Main.maxTilesX)
2353 {
2354 num2 = Main.maxTilesX;
2355 }
2356 if (num3 < 0)
2357 {
2358 num3 = 0;
2359 }
2360 if (num4 > Main.maxTilesY)
2361 {
2362 num4 = Main.maxTilesY;
2363 }
2364 Vector2 vector4 = default(Vector2);
2365 for (int i = num; i < num2; i++)
2366 {
2367 for (int j = num3; j < num4; j++)
2368 {
2369 Tile tile = Main.tile[i, j];
2370 if (tile == null || !tile.active() || (!evenActuated && tile.inActive()) || !tilesWeCanCollideWithByType[tile.type])
2371 {
2372 continue;
2373 }
2374 vector4.X = i * 16;
2375 vector4.Y = j * 16;
2376 int num9 = 16;
2377 if (tile.halfBrick())
2378 {
2379 vector4.Y += 8f;
2380 num9 -= 8;
2381 }
2382 if (!(vector2.X + (float)Width > vector4.X) || !(vector2.X < vector4.X + 16f) || !(vector2.Y + (float)Height > vector4.Y) || !(vector2.Y < vector4.Y + (float)num9))
2383 {
2384 continue;
2385 }
2386 if (vector3.Y + (float)Height <= vector4.Y)
2387 {
2388 num7 = i;
2389 num8 = j;
2390 if (num7 != num5)
2391 {
2392 result.Y = vector4.Y - (vector3.Y + (float)Height);
2393 }
2394 }
2395 else if (vector3.X + (float)Width <= vector4.X && !Main.tileSolidTop[tile.type])
2396 {
2397 num5 = i;
2398 num6 = j;
2399 if (num6 != num8)
2400 {
2401 result.X = vector4.X - (vector3.X + (float)Width);
2402 }
2403 if (num7 == num5)
2404 {
2405 result.Y = vector.Y;
2406 }
2407 }
2408 else if (vector3.X >= vector4.X + 16f && !Main.tileSolidTop[tile.type])
2409 {
2410 num5 = i;
2411 num6 = j;
2412 if (num6 != num8)
2413 {
2414 result.X = vector4.X + 16f - vector3.X;
2415 }
2416 if (num7 == num5)
2417 {
2418 result.Y = vector.Y;
2419 }
2420 }
2421 else if (vector3.Y >= vector4.Y + (float)num9 && !Main.tileSolidTop[tile.type])
2422 {
2423 num7 = i;
2424 num8 = j;
2425 result.Y = vector4.Y + (float)num9 - vector3.Y + 0.01f;
2426 if (num8 == num6)
2427 {
2428 result.X = vector.X + 0.01f;
2429 }
2430 }
2431 }
2432 }
2433 return result;
2434 }

References Terraria.Tile.active(), Terraria.Tile.halfBrick(), Terraria.Tile.inActive(), Terraria.Main.maxTilesX, Terraria.Main.maxTilesY, Terraria.Main.tile, Terraria.Main.tileSolidTop, and Terraria.Tile.type.

Referenced by Terraria.Projectile.HandleMovement().