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

◆ GrowSpike()

static void Terraria.WorldGen.GrowSpike ( int i,
int j,
ushort spikeType,
ushort landType )
inlinestatic

Definition at line 36507 of file WorldGen.cs.

36508 {
36509 int num = -1;
36510 switch (landType)
36511 {
36512 case 23:
36513 num = 661;
36514 break;
36515 case 199:
36516 num = 662;
36517 break;
36518 }
36519 int num2 = i;
36520 int num3 = j;
36521 int num4 = 0;
36522 if (Main.tile[num2 + 1, num3].active() && Main.tile[num2 + 1, num3].type == spikeType)
36523 {
36524 num4++;
36525 }
36526 if (Main.tile[num2 - 1, num3].active() && Main.tile[num2 - 1, num3].type == spikeType)
36527 {
36528 num4++;
36529 }
36530 if (Main.tile[num2, num3 + 1].active() && Main.tile[num2, num3 + 1].type == spikeType)
36531 {
36532 num4++;
36533 }
36534 if (Main.tile[num2, num3 - 1].active() && Main.tile[num2, num3 - 1].type == spikeType)
36535 {
36536 num4++;
36537 }
36538 if (num4 >= 3 && Main.tile[i, j].type != landType && Main.tile[i, j].type != num)
36539 {
36540 return;
36541 }
36542 switch (genRand.Next(4))
36543 {
36544 case 0:
36545 num3--;
36546 break;
36547 case 1:
36548 num3++;
36549 break;
36550 case 2:
36551 num2--;
36552 break;
36553 case 3:
36554 num2++;
36555 break;
36556 }
36557 if (Main.tile[num2, num3].active())
36558 {
36559 return;
36560 }
36561 num4 = 0;
36562 if (Main.tile[num2 + 1, num3].active() && Main.tile[num2 + 1, num3].type == spikeType)
36563 {
36564 num4++;
36565 }
36566 if (Main.tile[num2 - 1, num3].active() && Main.tile[num2 - 1, num3].type == spikeType)
36567 {
36568 num4++;
36569 }
36570 if (Main.tile[num2, num3 + 1].active() && Main.tile[num2, num3 + 1].type == spikeType)
36571 {
36572 num4++;
36573 }
36574 if (Main.tile[num2, num3 - 1].active() && Main.tile[num2, num3 - 1].type == spikeType)
36575 {
36576 num4++;
36577 }
36578 if (num4 >= 2)
36579 {
36580 return;
36581 }
36582 int num5 = 7;
36583 int num6 = num2 - num5;
36584 int num7 = num2 + num5;
36585 int num8 = num3 - num5;
36586 int num9 = num3 + num5;
36587 bool flag = false;
36588 for (int k = num6; k < num7; k++)
36589 {
36590 for (int l = num8; l < num9; l++)
36591 {
36592 if (Math.Abs(k - num2) * 2 + Math.Abs(l - num3) < 9 && Main.tile[k, l].active() && (Main.tile[k, l].type == landType || Main.tile[k, l].type == num) && Main.tile[k, l - 1].active() && Main.tile[k, l - 1].type == spikeType && Main.tile[k, l - 1].liquid == 0)
36593 {
36594 flag = true;
36595 break;
36596 }
36597 }
36598 }
36599 if (flag)
36600 {
36601 Main.tile[num2, num3].type = spikeType;
36602 Main.tile[num2, num3].active(active: true);
36603 Main.tile[num2, num3].CopyPaintAndCoating(Main.tile[i, j]);
36605 if (Main.netMode == 2)
36606 {
36607 NetMessage.SendTileSquare(-1, num2, num3, 1);
36608 }
36609 }
36610 }
static double Abs(double value)
static UnifiedRandom genRand
Definition WorldGen.cs:1215
static void SquareTileFrame(int i, int j, bool resetFrame=true)

References System.Math.Abs(), Terraria.Main.netMode, Terraria.NetMessage.SendTileSquare(), and Terraria.Main.tile.