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

◆ UpdateWorld()

static void Terraria.WorldGen.UpdateWorld ( )
inlinestatic

Definition at line 61905 of file WorldGen.cs.

61906 {
61907 if (gen)
61908 {
61909 return;
61910 }
61913 if (power != null && power.GetIsUnlocked())
61914 {
61916 }
61917 int wallDist = 3;
61918 Wiring.UpdateMech();
61920 foreach (TileEntity value in TileEntity.ByID.Values)
61921 {
61922 value.Update();
61923 }
61926 if (Main.netMode != 1)
61927 {
61928 totalD++;
61929 if (totalD >= 30)
61930 {
61931 totalD = 0;
61933 totalX++;
61934 if (totalX >= Main.maxTilesX)
61935 {
61936 totalX = 0;
61937 }
61938 }
61939 }
61940 Liquid.skipCount++;
61941 if (Liquid.skipCount > 1)
61942 {
61943 Liquid.UpdateLiquid();
61944 Liquid.skipCount = 0;
61945 }
61947 if (worldUpdateRate == 0)
61948 {
61949 return;
61950 }
61951 double num = 3E-05f * (float)worldUpdateRate;
61952 double num2 = 1.5E-05f * (float)worldUpdateRate;
61953 double num3 = 2.5E-05f * (float)worldUpdateRate;
61954 bool checkNPCSpawns = false;
61955 spawnDelay++;
61956 if (Main.invasionType > 0 || Main.eclipse)
61957 {
61958 spawnDelay = 0;
61959 }
61960 if (spawnDelay >= 20)
61961 {
61962 checkNPCSpawns = true;
61963 spawnDelay = 0;
61964 if (prioritizedTownNPCType != 37)
61965 {
61966 for (int i = 0; i < 200; i++)
61967 {
61968 if (Main.npc[i].active && Main.npc[i].homeless && Main.npc[i].townNPC && Main.npc[i].type != 368)
61969 {
61970 prioritizedTownNPCType = Main.npc[i].type;
61971 break;
61972 }
61973 }
61974 }
61975 }
61976 double num4 = (double)(Main.maxTilesX * Main.maxTilesY) * num;
61977 int num5 = 151;
61978 int num6 = (int)Utils.Lerp(num5, (double)num5 * 2.8, Utils.Clamp((double)Main.maxTilesX / 4200.0 - 1.0, 0.0, 1.0));
61979 for (int j = 0; (double)j < num4; j++)
61980 {
61981 if (Main.rand.Next(num6 * 100) == 0)
61982 {
61983 PlantAlch();
61984 }
61985 int i2 = genRand.Next(10, Main.maxTilesX - 10);
61986 int j2 = genRand.Next(10, (int)Main.worldSurface - 1);
61988 }
61989 if (Main.remixWorld)
61990 {
61991 for (int k = 0; (double)k < (double)(Main.maxTilesX * Main.maxTilesY) * num3; k++)
61992 {
61993 int i3 = genRand.Next(10, Main.maxTilesX - 10);
61994 int j3 = genRand.Next((int)Main.worldSurface - 1, Main.maxTilesY - 20);
61995 growGrassUnderground = true;
61998 growGrassUnderground = false;
61999 }
62000 }
62001 else
62002 {
62003 for (int l = 0; (double)l < (double)(Main.maxTilesX * Main.maxTilesY) * num2; l++)
62004 {
62005 int i4 = genRand.Next(10, Main.maxTilesX - 10);
62006 int j4 = genRand.Next((int)Main.worldSurface - 1, Main.maxTilesY - 20);
62008 }
62009 }
62010 if (Main.dayTime && !Main.remixWorld)
62011 {
62012 return;
62013 }
62014 for (int m = 0; m < Main.dayRate; m++)
62015 {
62016 double num7 = (double)Main.maxTilesX / 4200.0;
62017 num7 *= (double)Star.starfallBoost;
62018 if (!((double)Main.rand.Next(8000) < 10.0 * num7))
62019 {
62020 continue;
62021 }
62022 int num8 = 12;
62023 int num9 = Main.rand.Next(Main.maxTilesX - 50) + 100;
62024 num9 *= 16;
62025 int num10 = Main.rand.Next((int)((double)Main.maxTilesY * 0.05));
62026 num10 *= 16;
62027 Vector2 position = new Vector2(num9, num10);
62028 int num11 = -1;
62029 if (Main.expertMode && Main.rand.Next(15) == 0)
62030 {
62031 int num12 = Player.FindClosest(position, 1, 1);
62032 if ((double)Main.player[num12].position.Y < Main.worldSurface * 16.0 && Main.player[num12].afkCounter < 3600)
62033 {
62034 int num13 = Main.rand.Next(1, 640);
62035 position.X = Main.player[num12].position.X + (float)Main.rand.Next(-num13, num13 + 1);
62036 num11 = num12;
62037 }
62038 }
62039 if (!Collision.SolidCollision(position, 16, 16))
62040 {
62041 float num14 = Main.rand.Next(-100, 101);
62042 float num15 = Main.rand.Next(200) + 100;
62043 float num16 = (float)Math.Sqrt(num14 * num14 + num15 * num15);
62044 num16 = (float)num8 / num16;
62045 num14 *= num16;
62046 num15 *= num16;
62047 Projectile.NewProjectile(new EntitySource_ByProjectileSourceId(11), position.X, position.Y, num14, num15, 720, 0, 0f, Main.myPlayer, 0f, num11);
62048 }
62049 }
62050 }
static double Sqrt(double d)
static Dictionary< int, TileEntity > ByID
Definition TileEntity.cs:18
static bool growGrassUnderground
Definition WorldGen.cs:1194
static bool AllowedToSpreadInfections
Definition WorldGen.cs:1008
static volatile bool gen
Definition WorldGen.cs:972
static void PlantAlch()
static void UpdateWorld_OvergroundTile(int i, int j, bool checkNPCSpawns, int wallDist)
static int GetWorldUpdateRate()
static int prioritizedTownNPCType
Definition WorldGen.cs:1024
static UnifiedRandom genRand
Definition WorldGen.cs:1215
static void CountTiles(int X)
static int totalX
Definition WorldGen.cs:960
static void UpdateWorld_UndergroundTile(int i, int j, bool checkNPCSpawns, int wallDist)
static int totalD
Definition WorldGen.cs:962
static void UpdateLunarApocalypse()
static int spawnDelay
Definition WorldGen.cs:1022

References Terraria.DataStructures.TileEntity.ByID, Terraria.Main.dayRate, Terraria.Main.dayTime, System.E, Terraria.Main.eclipse, Terraria.Main.expertMode, Terraria.Player.FindClosest(), Terraria.GameContent.Creative.CreativePowerManager.Instance, Terraria.Main.invasionType, Terraria.Utils.Lerp(), Terraria.Main.maxTilesX, Terraria.Main.maxTilesY, Terraria.Main.myPlayer, Terraria.Main.netMode, Terraria.Projectile.NewProjectile(), Terraria.Main.npc, Terraria.Main.player, Terraria.Main.rand, Terraria.Main.remixWorld, Terraria.Liquid.skipCount, Terraria.Collision.SolidCollision(), System.Math.Sqrt(), Terraria.Star.starfallBoost, Terraria.DataStructures.TileEntity.UpdateEnd(), Terraria.Liquid.UpdateLiquid(), Terraria.Wiring.UpdateMech(), Terraria.DataStructures.TileEntity.UpdateStart(), System.value, Terraria.Main.worldSurface, Microsoft.Xna.Framework.Vector2.X, and Microsoft.Xna.Framework.Vector2.Y.

Referenced by Terraria.Main.DoUpdateInWorld().