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

◆ addCloud()

static void Terraria.Cloud.addCloud ( )
inlinestatic

Definition at line 57 of file Cloud.cs.

58 {
59 if (Main.netMode == 2)
60 {
61 return;
62 }
63 int num = -1;
64 for (int i = 0; i < 200; i++)
65 {
66 if (!Main.cloud[i].active)
67 {
68 num = i;
69 break;
70 }
71 }
72 if (num < 0)
73 {
74 return;
75 }
76 Main.cloud[num].kill = false;
77 Main.cloud[num].rSpeed = 0f;
78 Main.cloud[num].sSpeed = 0f;
79 Main.cloud[num].scale = (float)rand.Next(70, 131) * 0.01f;
80 Main.cloud[num].rotation = (float)rand.Next(-10, 11) * 0.01f;
81 Main.cloud[num].width = (int)((float)TextureAssets.Cloud[Main.cloud[num].type].Width() * Main.cloud[num].scale);
82 Main.cloud[num].height = (int)((float)TextureAssets.Cloud[Main.cloud[num].type].Height() * Main.cloud[num].scale);
83 Main.cloud[num].Alpha = 0f;
84 Main.cloud[num].spriteDir = SpriteEffects.None;
85 if (rand.Next(2) == 0)
86 {
87 Main.cloud[num].spriteDir = SpriteEffects.FlipHorizontally;
88 }
89 float num2 = Main.windSpeedCurrent;
90 if (!Main.gameMenu)
91 {
92 num2 = Main.windSpeedCurrent - Main.player[Main.myPlayer].velocity.X * 0.1f;
93 }
94 int num3 = 0;
95 int num4 = 0;
96 if (num2 > 0f)
97 {
98 num3 -= 200;
99 }
100 if (num2 < 0f)
101 {
102 num4 += 200;
103 }
104 int num5 = 300;
105 float x = rand.Next(num3 - num5, Main.screenWidth + num4 + num5);
106 Main.cloud[num].Alpha = 0f;
107 Main.cloud[num].position.Y = rand.Next((int)((float)(-Main.screenHeight) * 0.25f), (int)((float)Main.screenHeight * 0.15f));
108 if (rand.Next(3) == 0)
109 {
110 Main.cloud[num].position.Y -= rand.Next((int)((float)Main.screenHeight * 0.1f));
111 }
112 Main.cloud[num].type = rand.Next(4);
113 if ((Main.cloudAlpha > 0f && rand.Next(4) != 0) || (Main.cloudBGActive >= 1f && rand.Next(2) == 0))
114 {
115 Main.cloud[num].type = rand.Next(18, 22);
116 if ((double)Main.cloud[num].scale >= 1.15)
117 {
118 Main.cloud[num].position.Y -= 150f;
119 }
120 if (Main.cloud[num].scale >= 1f)
121 {
122 Main.cloud[num].position.Y -= 150f;
123 }
124 }
125 else if (Main.cloudBGActive <= 0f && Main.cloudAlpha == 0f && Main.cloud[num].scale < 1f && Main.cloud[num].position.Y < (float)(-Main.screenHeight) * 0.15f && (double)Main.numClouds <= 80.0)
126 {
127 Main.cloud[num].type = rand.Next(9, 14);
128 }
129 else if ((((double)Main.cloud[num].scale < 1.15 && Main.cloud[num].position.Y < (float)(-Main.screenHeight) * 0.3f) || ((double)Main.cloud[num].scale < 0.85 && Main.cloud[num].position.Y < (float)Main.screenHeight * 0.15f)) && ((double)Main.numClouds > 70.0 || Main.cloudBGActive >= 1f))
130 {
131 Main.cloud[num].type = rand.Next(4, 9);
132 }
133 else if (Main.cloud[num].position.Y > (float)(-Main.screenHeight) * 0.15f && rand.Next(2) == 0 && (double)Main.numClouds > 20.0)
134 {
135 Main.cloud[num].type = rand.Next(14, 18);
136 }
137 if (rand.Next((Main.dontStarveWorld || Main.tenthAnniversaryWorld) ? 25 : 150) == 0)
138 {
139 Main.cloud[num].type = RollRareCloud();
140 }
141 else if (Main.tenthAnniversaryWorld && rand.Next(3) == 0)
142 {
143 Main.cloud[num].type = RollRareCloud();
144 }
145 if ((double)Main.cloud[num].scale > 1.2)
146 {
147 Main.cloud[num].position.Y += 100f;
148 }
149 if ((double)Main.cloud[num].scale > 1.3)
150 {
151 Main.cloud[num].scale = 1.3f;
152 }
153 if ((double)Main.cloud[num].scale < 0.7)
154 {
155 Main.cloud[num].scale = 0.7f;
156 }
157 Main.cloud[num].active = true;
158 Main.cloud[num].position.X = x;
159 if (Main.cloud[num].position.X > (float)(Main.screenWidth + 400))
160 {
161 Main.cloud[num].Alpha = 1f;
162 }
163 if (Main.cloud[num].position.X + (float)TextureAssets.Cloud[Main.cloud[num].type].Width() * Main.cloud[num].scale < -400f)
164 {
165 Main.cloud[num].Alpha = 1f;
166 }
167 Rectangle rectangle = new Rectangle((int)Main.cloud[num].position.X, (int)Main.cloud[num].position.Y, Main.cloud[num].width, Main.cloud[num].height);
168 for (int j = 0; j < 200; j++)
169 {
170 if (num != j && Main.cloud[j].active)
171 {
172 Rectangle value = new Rectangle((int)Main.cloud[j].position.X, (int)Main.cloud[j].position.Y, Main.cloud[j].width, Main.cloud[j].height);
173 if (rectangle.Intersects(value))
174 {
175 Main.cloud[num].active = false;
176 }
177 }
178 }
179 }
static UnifiedRandom rand
Definition Cloud.cs:34
static int RollRareCloud()
Definition Cloud.cs:181
static Asset< Texture2D >[] Cloud
bool Intersects(Rectangle value)
Definition Rectangle.cs:129

References Terraria.GameContent.TextureAssets.Cloud, Terraria.Main.cloud, Terraria.Main.cloudAlpha, Terraria.Main.cloudBGActive, Terraria.Main.dontStarveWorld, Terraria.Main.gameMenu, Microsoft.Xna.Framework.Rectangle.Intersects(), Terraria.Main.myPlayer, Terraria.Main.netMode, Terraria.Main.numClouds, Terraria.Main.player, Terraria.Cloud.rand, Terraria.Cloud.RollRareCloud(), Terraria.Main.screenHeight, Terraria.Main.screenWidth, Terraria.Main.tenthAnniversaryWorld, and Terraria.Main.windSpeedCurrent.

Referenced by Terraria.Cloud.resetClouds(), and Terraria.Cloud.UpdateClouds().