136 lines
5.1 KiB
C#
136 lines
5.1 KiB
C#
// Decompiled with JetBrains decompiler
|
|
// Type: Terraria.Rain
|
|
// Assembly: Terraria, Version=1.4.0.5, Culture=neutral, PublicKeyToken=null
|
|
// MVID: 67F9E73E-0A81-4937-A22C-5515CD405A83
|
|
// Assembly location: C:\Users\mikeyisbaeyt\Downloads\depotdownloader-2.4.5\depots\105601\6707058\Terraria.exe
|
|
|
|
using Microsoft.Xna.Framework;
|
|
using System;
|
|
using Terraria.Graphics.Effects;
|
|
|
|
namespace Terraria
|
|
{
|
|
public class Rain
|
|
{
|
|
public Vector2 position;
|
|
public Vector2 velocity;
|
|
public float scale;
|
|
public float rotation;
|
|
public int alpha;
|
|
public bool active;
|
|
public byte type;
|
|
|
|
public static void ClearRain()
|
|
{
|
|
for (int index = 0; index < Main.maxRain; ++index)
|
|
Main.rain[index].active = false;
|
|
}
|
|
|
|
public static void MakeRain()
|
|
{
|
|
if (Main.netMode == 2 || Main.gamePaused || (double) Main.screenPosition.Y > Main.worldSurface * 16.0 || Main.gameMenu)
|
|
return;
|
|
float num1 = (float) Main.screenWidth / 1920f * 25f * (float) (0.25 + 1.0 * (double) Main.cloudAlpha);
|
|
if (Filters.Scene["Sandstorm"].IsActive())
|
|
return;
|
|
for (int index = 0; (double) index < (double) num1; ++index)
|
|
{
|
|
int num2 = 600;
|
|
if ((double) Main.player[Main.myPlayer].velocity.Y < 0.0)
|
|
num2 += (int) ((double) Math.Abs(Main.player[Main.myPlayer].velocity.Y) * 30.0);
|
|
Vector2 Position;
|
|
Position.X = (float) Main.rand.Next((int) Main.screenPosition.X - num2, (int) Main.screenPosition.X + Main.screenWidth + num2);
|
|
Position.Y = Main.screenPosition.Y - (float) Main.rand.Next(20, 100);
|
|
Position.X -= (float) ((double) Main.windSpeedCurrent * 15.0 * 40.0);
|
|
Position.X += Main.player[Main.myPlayer].velocity.X * 40f;
|
|
if ((double) Position.X < 0.0)
|
|
Position.X = 0.0f;
|
|
if ((double) Position.X > (double) ((Main.maxTilesX - 1) * 16))
|
|
Position.X = (float) ((Main.maxTilesX - 1) * 16);
|
|
int i = (int) Position.X / 16;
|
|
int j = (int) Position.Y / 16;
|
|
if (i < 0)
|
|
i = 0;
|
|
if (i > Main.maxTilesX - 1)
|
|
i = Main.maxTilesX - 1;
|
|
if (j < 0)
|
|
j = 0;
|
|
if (j > Main.maxTilesY - 1)
|
|
j = Main.maxTilesY - 1;
|
|
if (Main.gameMenu || !WorldGen.SolidTile(i, j) && Main.tile[i, j].wall <= (ushort) 0)
|
|
{
|
|
Vector2 Velocity = new Vector2(Main.windSpeedCurrent * 18f, 14f);
|
|
Rain.NewRain(Position, Velocity);
|
|
}
|
|
}
|
|
}
|
|
|
|
public void Update()
|
|
{
|
|
if (Main.gamePaused)
|
|
return;
|
|
this.position += this.velocity;
|
|
if (Main.gameMenu)
|
|
{
|
|
if ((double) this.position.Y <= (double) Main.screenPosition.Y + (double) Main.screenHeight + 2000.0)
|
|
return;
|
|
this.active = false;
|
|
}
|
|
else
|
|
{
|
|
if (!Collision.SolidCollision(this.position, 2, 2) && (double) this.position.Y <= (double) Main.screenPosition.Y + (double) Main.screenHeight + 100.0 && !Collision.WetCollision(this.position, 2, 2))
|
|
return;
|
|
this.active = false;
|
|
if ((double) Main.rand.Next(100) >= (double) Main.gfxQuality * 100.0)
|
|
return;
|
|
int index = Dust.NewDust(this.position - this.velocity, 2, 2, Dust.dustWater());
|
|
Main.dust[index].position.X -= 2f;
|
|
Main.dust[index].position.Y += 2f;
|
|
Main.dust[index].alpha = 38;
|
|
Main.dust[index].velocity *= 0.1f;
|
|
Main.dust[index].velocity += -this.velocity * 0.025f;
|
|
Main.dust[index].velocity.Y -= 2f;
|
|
Main.dust[index].scale = 0.6f;
|
|
Main.dust[index].noGravity = true;
|
|
}
|
|
}
|
|
|
|
private static int NewRain(Vector2 Position, Vector2 Velocity)
|
|
{
|
|
int index1 = -1;
|
|
int num1 = (int) ((double) Main.maxRain * (double) Main.cloudAlpha);
|
|
if (num1 > Main.maxRain)
|
|
num1 = Main.maxRain;
|
|
float num2 = (float) Main.maxTilesX / 6400f;
|
|
double num3 = (double) Math.Max(0.0f, Math.Min(1f, (float) (((double) Main.player[Main.myPlayer].position.Y / 16.0 - 85.0 * (double) num2) / (60.0 * (double) num2))));
|
|
float num4 = (float) ((1.0 + (double) Main.gfxQuality) / 2.0);
|
|
if ((double) num4 < 0.9)
|
|
num1 = (int) ((double) num1 * (double) num4);
|
|
float num5 = (float) (800 - Main.SceneMetrics.SnowTileCount);
|
|
if ((double) num5 < 0.0)
|
|
num5 = 0.0f;
|
|
float num6 = num5 / 800f;
|
|
int num7 = (int) ((double) (int) ((double) num1 * (double) num6) * Math.Pow((double) Main.atmo, 9.0));
|
|
if ((double) Main.atmo < 0.4)
|
|
num7 = 0;
|
|
for (int index2 = 0; index2 < num7; ++index2)
|
|
{
|
|
if (!Main.rain[index2].active)
|
|
{
|
|
index1 = index2;
|
|
break;
|
|
}
|
|
}
|
|
if (index1 == -1)
|
|
return Main.maxRain;
|
|
Rain rain = Main.rain[index1];
|
|
rain.active = true;
|
|
rain.position = Position;
|
|
rain.scale = (float) (1.0 + (double) Main.rand.Next(-20, 21) * 0.00999999977648258);
|
|
rain.velocity = Velocity * rain.scale;
|
|
rain.rotation = (float) Math.Atan2((double) rain.velocity.X, -(double) rain.velocity.Y);
|
|
rain.type = (byte) (Main.waterStyle * 3 + Main.rand.Next(3));
|
|
return index1;
|
|
}
|
|
}
|
|
}
|