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

◆ SpreadGrass()

static void Terraria.WorldGen.SpreadGrass ( int i,
int j,
int dirt = 0,
int grass = 2,
bool repeat = true,
TileColorCache color = default(TileColorCache) )
inlinestatic

Definition at line 64990 of file WorldGen.cs.

64991 {
64992 try
64993 {
64994 if (!InWorld(i, j, 10) || !Main.tile[i, j].active() || Main.tile[i, j].type != dirt)
64995 {
64996 return;
64997 }
64998 if (gen && (grass == 199 || grass == 23))
64999 {
65000 int num = beachDistance;
65001 if ((!tenthAnniversaryWorldGen && (double)i > (double)Main.maxTilesX * 0.45 && (double)i <= (double)Main.maxTilesX * 0.55) || i < num || i >= Main.maxTilesX - num)
65002 {
65003 return;
65004 }
65005 }
65006 else if ((gen || (grass != 199 && grass != 23 && grass != 661 && grass != 662)) && (Main.tile[i, j].type != dirt || !Main.tile[i, j].active() || ((double)j >= Main.worldSurface && dirt == 0)) && !growGrassUnderground)
65007 {
65008 return;
65009 }
65010 int num2 = i - 1;
65011 int num3 = i + 2;
65012 int num4 = j - 1;
65013 int num5 = j + 2;
65014 if (num2 < 0)
65015 {
65016 num2 = 0;
65017 }
65018 if (num3 > Main.maxTilesX)
65019 {
65020 num3 = Main.maxTilesX;
65021 }
65022 if (num4 < 0)
65023 {
65024 num4 = 0;
65025 }
65026 if (num5 > Main.maxTilesY)
65027 {
65028 num5 = Main.maxTilesY;
65029 }
65030 bool flag = true;
65031 for (int k = num2; k < num3; k++)
65032 {
65033 for (int l = num4; l < num5; l++)
65034 {
65035 if (!Main.tile[k, l].active() || !Main.tileSolid[Main.tile[k, l].type])
65036 {
65037 flag = false;
65038 }
65039 if (Main.tile[k, l].lava() && Main.tile[k, l].liquid > 0)
65040 {
65041 flag = true;
65042 break;
65043 }
65044 }
65045 }
65046 if (flag || !TileID.Sets.CanBeClearedDuringGeneration[Main.tile[i, j].type] || ((grass == 23 || grass == 661) && Main.tile[i, j - 1].type == 27) || ((grass == 199 || grass == 662) && Main.tile[i, j - 1].type == 27) || (grass == 109 && Main.tile[i, j - 1].type == 27))
65047 {
65048 return;
65049 }
65050 Main.tile[i, j].type = (ushort)grass;
65051 Main.tile[i, j].UseBlockColors(color);
65052 for (int m = num2; m < num3; m++)
65053 {
65054 for (int n = num4; n < num5; n++)
65055 {
65056 if (!Main.tile[m, n].active() || Main.tile[m, n].type != dirt)
65057 {
65058 continue;
65059 }
65060 try
65061 {
65062 if (repeat && grassSpread < 1000)
65063 {
65064 grassSpread++;
65065 SpreadGrass(m, n, dirt, grass);
65066 grassSpread--;
65067 }
65068 }
65069 catch
65070 {
65071 }
65072 }
65073 }
65074 }
65075 catch
65076 {
65077 }
65078 }
static bool[] CanBeClearedDuringGeneration
Definition TileID.cs:229
static bool growGrassUnderground
Definition WorldGen.cs:1194
static volatile bool gen
Definition WorldGen.cs:972
static bool tenthAnniversaryWorldGen
Definition WorldGen.cs:1160
static readonly int beachDistance
Definition WorldGen.cs:928
static int grassSpread
Definition WorldGen.cs:1198
static void SpreadGrass(int i, int j, int dirt=0, int grass=2, bool repeat=true, TileColorCache color=default(TileColorCache))
static bool InWorld(int x, int y, int fluff=0)
Definition WorldGen.cs:5816

References Terraria.ID.TileID.Sets.CanBeClearedDuringGeneration, Terraria.Main.maxTilesX, Terraria.Main.maxTilesY, Terraria.Main.tile, Terraria.Main.tileSolid, and Terraria.Main.worldSurface.

Referenced by Terraria.WorldGen.GenerateWorld(), and Terraria.WorldGen.neonMossBiome().