165 {
166 if (Main.gamePaused)
167 {
168 return;
169 }
170 int sandTileCount = Main.SceneMetrics.SandTileCount;
171 Player player = Main.player[Main.myPlayer];
174 if (sandTileCount < 100 || (double)player.position.Y > Main.worldSurface * 16.0 || player.ZoneBeach)
175 {
176 return;
177 }
178 int maxValue = 1;
179 if (!flag || Main.rand.Next(maxValue) != 0)
180 {
181 return;
182 }
183 int num =
Math.
Sign(Main.windSpeedCurrent);
184 float num2 =
Math.
Abs(Main.windSpeedCurrent);
185 if (num2 < 0.01f)
186 {
187 return;
188 }
190 float num4 = 2000f / (float)sandTileCount;
191 float value = 3f / num4;
193 int num5 = (int)num4;
194 float num6 = (float)Main.screenWidth / (float)Main.maxScreenW;
195 int num7 = (int)(1000f * num6);
197 float num9 = (float)num7 * (Main.gfxQuality * 0.5f + 0.5f) + (float)num7 * 0.1f - (float)Dust.SandStormCount;
198 if (num9 <= 0f)
199 {
200 return;
201 }
202 float num10 = (float)Main.screenWidth + 1000f;
203 float num11 = Main.screenHeight;
204 Vector2 vector = Main.screenPosition + player.velocity;
206 weightedRandom.
Add(
new Color(200, 160, 20, 180), Main.SceneMetrics.GetTileCount(53) + Main.SceneMetrics.GetTileCount(396) + Main.SceneMetrics.GetTileCount(397));
207 weightedRandom.
Add(
new Color(103, 98, 122, 180), Main.SceneMetrics.GetTileCount(112) + Main.SceneMetrics.GetTileCount(400) + Main.SceneMetrics.GetTileCount(398));
208 weightedRandom.
Add(
new Color(135, 43, 34, 180), Main.SceneMetrics.GetTileCount(234) + Main.SceneMetrics.GetTileCount(401) + Main.SceneMetrics.GetTileCount(399));
209 weightedRandom.
Add(
new Color(213, 196, 197, 180), Main.SceneMetrics.GetTileCount(116) + Main.SceneMetrics.GetTileCount(403) + Main.SceneMetrics.GetTileCount(402));
212 float amount = (
value - 0.77f) / 0.23000002f;
214 for (
int i = 0; (float)i < num8;
i++)
215 {
216 if (Main.rand.Next(num5 / 4) != 0)
217 {
218 continue;
219 }
220 Vector2 position =
new Vector2(Main.rand.NextFloat() * num10 - 500f, Main.rand.NextFloat() * -50f);
221 if (Main.rand.Next(3) == 0 && num == 1)
222 {
223 position.X = Main.rand.Next(500) - 500;
224 }
225 else if (Main.rand.Next(3) == 0 && num == -1)
226 {
227 position.X = Main.rand.Next(500) + Main.screenWidth;
228 }
229 if (position.
X < 0f || position.
X > (
float)Main.screenWidth)
230 {
231 position.Y += Main.rand.NextFloat() * num11 * 0.9f;
232 }
233 position += vector;
234 int num14 = (int)position.
X / 16;
235 int num15 = (int)position.
Y / 16;
236 if (!
WorldGen.InWorld(num14, num15, 10) || Main.tile[num14, num15] ==
null || Main.tile[num14, num15].wall != 0)
237 {
238 continue;
239 }
240 for (int j = 0; j < 1; j++)
241 {
242 Dust dust = Main.dust[Dust.NewDust(position, 10, 10, 268)];
243 dust.velocity.Y = 2f + Main.rand.NextFloat() * 0.2f;
244 dust.velocity.Y *= dust.scale;
245 dust.velocity.Y *= 0.35f;
246 dust.velocity.X = num3 * 5f + Main.rand.NextFloat() * 1f;
247 dust.velocity.X += num3 * num13 * 20f;
248 dust.fadeIn += num13 * 0.2f;
249 dust.velocity *= 1f + num12 * 0.5f;
250 dust.color = weightedRandom;
251 dust.velocity *= 1f + num12;
252 dust.velocity *=
value;
253 dust.scale = 0.9f;
254 num9 -= 1f;
255 if (num9 <= 0f)
256 {
257 break;
258 }
259 if (Main.rand.Next(maxValue2) != 0)
260 {
261 j--;
262 position += Utils.RandomVector2(Main.rand, -10f, 10f) + dust.velocity * -1.1f;
263 num14 = (int)position.
X / 16;
264 num15 = (int)position.
Y / 16;
265 if (
WorldGen.InWorld(num14, num15, 10) && Main.tile[num14, num15] !=
null)
266 {
267 _ = Main.tile[num14, num15].wall;
268 }
269 }
270 }
271 if (num9 <= 0f)
272 {
273 break;
274 }
275 }
276 }
static float Lerp(float value1, float value2, float amount)
static float Clamp(float value, float min, float max)
static double Abs(double value)
static int Sign(decimal value)
static bool ShouldSandstormDustPersist()
static void HandleEffectAndSky(bool toState)
void Add(T element, double weight=1.0)