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

◆ GrowLivingTree_HorizontalTunnel()

static bool Terraria.WorldGen.GrowLivingTree_HorizontalTunnel ( int i,
int j )
inlinestaticprivate

Definition at line 21536 of file WorldGen.cs.

21537 {
21538 int num = i;
21539 int num5 = i;
21540 int num6 = 80;
21541 bool flag = false;
21542 int num7 = 1;
21543 if (genRand.Next(2) == 0)
21544 {
21545 num7 *= -1;
21546 }
21547 for (int k = 0; k < 2; k++)
21548 {
21549 flag = false;
21550 if (num == i && num7 > 0)
21551 {
21552 for (int l = i + 5; l < i + num6; l++)
21553 {
21554 if (!InWorld(l, j, 10))
21555 {
21556 return false;
21557 }
21558 if ((double)j < Main.worldSurface)
21559 {
21560 for (int m = j - 7; m <= j + 7 && Main.tile[l, m].wall != 0; m++)
21561 {
21562 }
21563 }
21564 if (Main.tile[l, j].type == 48)
21565 {
21566 flag = true;
21567 break;
21568 }
21569 if (Main.tile[l, j].type == 191)
21570 {
21571 for (int n = j - 2; n <= j; n++)
21572 {
21573 if (Main.tile[l + 2, n].wall != 244)
21574 {
21575 flag = true;
21576 }
21577 }
21578 if (!flag)
21579 {
21580 k = 2;
21581 num5 = l + 2;
21582 }
21583 break;
21584 }
21585 if (Main.tile[l, j].active())
21586 {
21587 continue;
21588 }
21589 bool flag2 = true;
21590 for (int num8 = j - 2; num8 <= j; num8++)
21591 {
21592 if ((double)j < Main.worldSurface + 3.0 && (Main.tile[l + 1, num8].wall == 0 || Main.tile[l + 2, num8].wall == 0 || Main.tile[l + 3, num8].wall == 0))
21593 {
21594 return false;
21595 }
21596 if (Main.tile[l, num8].active() || Main.tile[l + 1, num8].active() || Main.tile[l + 2, num8].active())
21597 {
21598 flag2 = false;
21599 }
21600 }
21601 if (flag2)
21602 {
21603 k = 2;
21604 num5 = l;
21605 break;
21606 }
21607 }
21608 }
21609 flag = false;
21610 if (num5 == i && num7 < 0)
21611 {
21612 for (int num9 = i - 5; num9 > i - num6; num9--)
21613 {
21614 if (!InWorld(num9, j, 10))
21615 {
21616 return false;
21617 }
21618 if ((double)j < Main.worldSurface)
21619 {
21620 for (int num10 = j - 7; num10 <= j + 7 && Main.tile[num9, num10].wall != 0; num10++)
21621 {
21622 }
21623 }
21624 if (Main.tile[num9, j].type == 48)
21625 {
21626 flag = true;
21627 break;
21628 }
21629 if (Main.tile[num9, j].type == 191)
21630 {
21631 for (int num11 = j - 2; num11 <= j; num11++)
21632 {
21633 if (Main.tile[num9 - 3, num11].wall != 244)
21634 {
21635 flag = true;
21636 }
21637 }
21638 if (!flag)
21639 {
21640 k = 2;
21641 num = num9 - 2;
21642 }
21643 break;
21644 }
21645 if (!Main.tile[num9, j].active())
21646 {
21647 bool flag3 = true;
21648 for (int num12 = j - 2; num12 <= j; num12++)
21649 {
21650 if ((double)j < Main.worldSurface + 3.0 && (Main.tile[num9 - 1, num12].wall == 0 || Main.tile[num9 - 2, num12].wall == 0 || Main.tile[num9 - 3, num12].wall == 0))
21651 {
21652 return false;
21653 }
21654 if (Main.tile[num9, num12].active() || Main.tile[num9 - 1, num12].active() || Main.tile[num9 - 2, num12].active())
21655 {
21656 flag3 = false;
21657 }
21658 }
21659 if (flag3)
21660 {
21661 k = 2;
21662 num = num9;
21663 break;
21664 }
21665 }
21666 }
21667 }
21668 num7 *= -1;
21669 }
21670 if (num == num5)
21671 {
21672 return false;
21673 }
21674 bool flag4 = false;
21675 bool flag5 = false;
21676 for (int num2 = j - 5; num2 <= j + 1; num2++)
21677 {
21678 for (int num3 = num; num3 <= num5; num3++)
21679 {
21680 int num4 = 2;
21681 if (Math.Abs(num3 - num5) > 3 && Math.Abs(num3 - num) > 3)
21682 {
21683 num4 = 4;
21684 }
21685 if (Main.tile[num3, num2].wall != 244 && Main.tile[num3, num2].type != 19 && Main.tile[num3, num2].type != 15 && Main.tile[num3, num2].type != 304 && Main.tile[num3, num2].type != 21 && Main.tile[num3, num2].type != 10)
21686 {
21687 if (!Main.wallDungeon[Main.tile[num3, num2].wall] && (!Main.tile[num3, num2].active() || (!Main.wallDungeon[Main.tile[num3, num2 - 1].wall] && !Main.wallDungeon[Main.tile[num3, num2 + 1].wall])))
21688 {
21689 Main.tile[num3, num2].active(active: true);
21690 Main.tile[num3, num2].type = 191;
21691 Main.tile[num3, num2].halfBrick(halfBrick: false);
21692 }
21693 if (Main.tile[num3, num2 - 1].type == 40)
21694 {
21695 Main.tile[num3, num2 - 1].type = 0;
21696 }
21697 if (Main.tile[num3, num2 + 1].type == 40)
21698 {
21699 Main.tile[num3, num2 + 1].type = 0;
21700 }
21701 }
21702 if (num2 >= j - num4 && num2 <= j && Main.tile[num3, num2].type != 19 && Main.tile[num3, num2].type != 15 && Main.tile[num3, num2].type != 304 && Main.tile[num3, num2].type != 21 && Main.tile[num3, num2].type != 10 && Main.tile[num3, num2 - 1].type != 15 && Main.tile[num3, num2 - 1].type != 304 && Main.tile[num3, num2 - 1].type != 21 && Main.tile[num3, num2 - 1].type != 10 && Main.tile[num3, num2 + 1].type != 10)
21703 {
21704 if (!Main.wallDungeon[Main.tile[num3, num2].wall])
21705 {
21706 Main.tile[num3, num2].wall = 244;
21707 }
21708 Main.tile[num3, num2].liquid = 0;
21709 Main.tile[num3, num2].active(active: false);
21710 }
21711 if (num2 != j)
21712 {
21713 continue;
21714 }
21715 int style = 7;
21716 if (Main.wallDungeon[Main.tile[num3, num2].wall] || Main.wallDungeon[Main.tile[num3, num2 - 1].wall] || Main.wallDungeon[Main.tile[num3, num2 - 2].wall])
21717 {
21718 style = 13;
21719 }
21720 if (num3 <= num + 4 && !flag4)
21721 {
21722 if (Main.tile[num3 - 1, num2].type == 10 || Main.tile[num3 + 1, num2].type == 10)
21723 {
21724 flag4 = true;
21725 }
21726 else if (genRand.Next(3) == 0)
21727 {
21728 PlaceTile(num3, num2, 10, mute: true, forced: false, -1, style);
21729 if (Main.tile[num3, num2].type == 10)
21730 {
21731 flag4 = true;
21732 }
21733 }
21734 }
21735 if (num3 < num5 - 4 || flag5)
21736 {
21737 continue;
21738 }
21739 if (Main.tile[num3 - 1, num2].type == 10 || Main.tile[num3 + 1, num2].type == 10)
21740 {
21741 flag5 = true;
21742 }
21743 else if (genRand.Next(3) == 0)
21744 {
21745 PlaceTile(num3, num2, 10, mute: true, forced: false, -1, style);
21746 if (Main.tile[num3, num2].type == 10)
21747 {
21748 flag5 = true;
21749 }
21750 }
21751 }
21752 }
21753 return true;
21754 }
static bool PlaceTile(int i, int j, int Type, bool mute=false, bool forced=false, int plr=-1, int style=0)
static UnifiedRandom genRand
Definition WorldGen.cs:1455
static bool InWorld(int x, int y, int fluff=0)
Definition WorldGen.cs:6481

References Terraria.Main.tile, Terraria.Main.wallDungeon, and Terraria.Main.worldSurface.