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

◆ CanHitWithCheck()

static bool Terraria.Collision.CanHitWithCheck ( Vector2 Position1,
int Width1,
int Height1,
Vector2 Position2,
int Width2,
int Height2,
Utils::TileActionAttempt check )
inlinestatic

Definition at line 453 of file Collision.cs.

454 {
455 int num = (int)((Position1.X + (float)(Width1 / 2)) / 16f);
456 int num2 = (int)((Position1.Y + (float)(Height1 / 2)) / 16f);
457 int num3 = (int)((Position2.X + (float)(Width2 / 2)) / 16f);
458 int num4 = (int)((Position2.Y + (float)(Height2 / 2)) / 16f);
459 if (num <= 1)
460 {
461 num = 1;
462 }
463 if (num >= Main.maxTilesX)
464 {
465 num = Main.maxTilesX - 1;
466 }
467 if (num3 <= 1)
468 {
469 num3 = 1;
470 }
471 if (num3 >= Main.maxTilesX)
472 {
473 num3 = Main.maxTilesX - 1;
474 }
475 if (num2 <= 1)
476 {
477 num2 = 1;
478 }
479 if (num2 >= Main.maxTilesY)
480 {
481 num2 = Main.maxTilesY - 1;
482 }
483 if (num4 <= 1)
484 {
485 num4 = 1;
486 }
487 if (num4 >= Main.maxTilesY)
488 {
489 num4 = Main.maxTilesY - 1;
490 }
491 try
492 {
493 do
494 {
495 int num5 = Math.Abs(num - num3);
496 int num6 = Math.Abs(num2 - num4);
497 if (num == num3 && num2 == num4)
498 {
499 return true;
500 }
501 if (num5 > num6)
502 {
503 num = ((num >= num3) ? (num - 1) : (num + 1));
504 if (Main.tile[num, num2 - 1] == null)
505 {
506 return false;
507 }
508 if (Main.tile[num, num2 + 1] == null)
509 {
510 return false;
511 }
512 if (!Main.tile[num, num2 - 1].inActive() && Main.tile[num, num2 - 1].active() && Main.tileSolid[Main.tile[num, num2 - 1].type] && !Main.tileSolidTop[Main.tile[num, num2 - 1].type] && Main.tile[num, num2 - 1].slope() == 0 && !Main.tile[num, num2 - 1].halfBrick() && !Main.tile[num, num2 + 1].inActive() && Main.tile[num, num2 + 1].active() && Main.tileSolid[Main.tile[num, num2 + 1].type] && !Main.tileSolidTop[Main.tile[num, num2 + 1].type] && Main.tile[num, num2 + 1].slope() == 0 && !Main.tile[num, num2 + 1].halfBrick())
513 {
514 return false;
515 }
516 }
517 else
518 {
519 num2 = ((num2 >= num4) ? (num2 - 1) : (num2 + 1));
520 if (Main.tile[num - 1, num2] == null)
521 {
522 return false;
523 }
524 if (Main.tile[num + 1, num2] == null)
525 {
526 return false;
527 }
528 if (!Main.tile[num - 1, num2].inActive() && Main.tile[num - 1, num2].active() && Main.tileSolid[Main.tile[num - 1, num2].type] && !Main.tileSolidTop[Main.tile[num - 1, num2].type] && Main.tile[num - 1, num2].slope() == 0 && !Main.tile[num - 1, num2].halfBrick() && !Main.tile[num + 1, num2].inActive() && Main.tile[num + 1, num2].active() && Main.tileSolid[Main.tile[num + 1, num2].type] && !Main.tileSolidTop[Main.tile[num + 1, num2].type] && Main.tile[num + 1, num2].slope() == 0 && !Main.tile[num + 1, num2].halfBrick())
529 {
530 return false;
531 }
532 }
533 if (Main.tile[num, num2] == null)
534 {
535 return false;
536 }
537 if (!Main.tile[num, num2].inActive() && Main.tile[num, num2].active() && Main.tileSolid[Main.tile[num, num2].type] && !Main.tileSolidTop[Main.tile[num, num2].type])
538 {
539 return false;
540 }
541 }
542 while (check(num, num2));
543 return false;
544 }
545 catch
546 {
547 return false;
548 }
549 }
static double Abs(double value)

References System.Math.Abs(), Terraria.Main.maxTilesX, Terraria.Main.maxTilesY, Terraria.Main.tile, Terraria.Main.tileSolid, and Terraria.Main.tileSolidTop.

Referenced by Terraria.GameContent.SmartCursorHelper.Step_Walls().