terraria-source-code/Star.cs
2021-10-26 12:45:26 -04:00

206 lines
6.2 KiB
C#

// Decompiled with JetBrains decompiler
// Type: Terraria.Star
// 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.Utilities;
namespace Terraria
{
public class Star
{
public Vector2 position;
public float scale;
public float rotation;
public int type;
public float twinkle;
public float twinkleSpeed;
public float rotationSpeed;
public bool falling;
public bool hidden;
public Vector2 fallSpeed;
public int fallTime;
public static bool dayCheck = false;
public static float starfallBoost = 1f;
public static int starFallCount = 0;
public float fadeIn;
public static void NightSetup()
{
Star.starfallBoost = 1f;
if (Main.rand.Next(10) == 0)
Star.starfallBoost = (float) Main.rand.Next(300, 501) * 0.01f;
else if (Main.rand.Next(3) == 0)
Star.starfallBoost = (float) Main.rand.Next(100, 151) * 0.01f;
Star.starFallCount = 0;
}
public static void StarFall(float positionX)
{
++Star.starFallCount;
int index1 = -1;
float num1 = -1f;
float num2 = (float) ((double) positionX / (double) Main.rightWorld * 1920.0);
for (int index2 = 0; index2 < Main.numStars; ++index2)
{
if (!Main.star[index2].hidden && !Main.star[index2].falling)
{
float num3 = Math.Abs(Main.star[index2].position.X - num2);
if ((double) num1 == -1.0 || (double) num3 < (double) num1)
{
index1 = index2;
num1 = num3;
}
}
}
if (index1 < 0)
return;
Main.star[index1].Fall();
}
public static void SpawnStars(int s = -1)
{
FastRandom withRandomSeed = FastRandom.CreateWithRandomSeed();
int num1 = withRandomSeed.Next(200, 400);
int num2 = 0;
int num3 = num1;
if (s >= 0)
{
num2 = s;
num3 = s + 1;
}
for (int index1 = num2; index1 < num3; ++index1)
{
Main.star[index1] = new Star();
if (s >= 0)
{
Main.star[index1].fadeIn = 1f;
int num4 = 10;
int num5 = -2000;
for (int index2 = 0; index2 < num4; ++index2)
{
float num6 = (float) withRandomSeed.Next(1921);
int num7 = 2000;
for (int index3 = 0; index3 < Main.numStars; ++index3)
{
if (index3 != s && !Main.star[index3].hidden && !Main.star[index3].falling)
{
int num8 = (int) Math.Abs(num6 - Main.star[index3].position.X);
if (num8 < num7)
num7 = num8;
}
}
if (s == 0 || num7 > num5)
{
num5 = num7;
Main.star[index1].position.X = num6;
}
}
}
else
Main.star[index1].position.X = (float) withRandomSeed.Next(1921);
Main.star[index1].position.Y = (float) withRandomSeed.Next(1201);
Main.star[index1].rotation = (float) withRandomSeed.Next(628) * 0.01f;
Main.star[index1].scale = (float) withRandomSeed.Next(70, 130) * (3f / 500f);
Main.star[index1].type = withRandomSeed.Next(0, 4);
Main.star[index1].twinkle = (float) withRandomSeed.Next(60, 101) * 0.01f;
Main.star[index1].twinkleSpeed = (float) withRandomSeed.Next(30, 110) * 0.0001f;
if (withRandomSeed.Next(2) == 0)
Main.star[index1].twinkleSpeed *= -1f;
Main.star[index1].rotationSpeed = (float) withRandomSeed.Next(5, 50) * 0.0001f;
if (withRandomSeed.Next(2) == 0)
Main.star[index1].rotationSpeed *= -1f;
if (withRandomSeed.Next(40) == 0)
{
Main.star[index1].scale *= 2f;
Main.star[index1].twinkleSpeed /= 2f;
Main.star[index1].rotationSpeed /= 2f;
}
}
if (s != -1)
return;
Main.numStars = num1;
}
public void Fall()
{
this.fallTime = 0;
this.falling = true;
this.fallSpeed.Y = (float) Main.rand.Next(700, 1001) * 0.01f;
this.fallSpeed.X = (float) Main.rand.Next(-400, 401) * 0.01f;
}
public void Update()
{
if (this.falling && !this.hidden)
{
this.fallTime += Main.dayRate;
this.position += this.fallSpeed * (float) (Main.dayRate + 99) / 100f;
if ((double) this.position.Y > 1500.0)
this.hidden = true;
this.twinkle += this.twinkleSpeed * 3f;
if ((double) this.twinkle > 1.0)
{
this.twinkle = 1f;
this.twinkleSpeed *= -1f;
}
else if ((double) this.twinkle < 0.6)
{
this.twinkle = 0.6f;
this.twinkleSpeed *= -1f;
}
this.rotation += 0.5f;
if ((double) this.rotation > 6.28)
this.rotation -= 6.28f;
if ((double) this.rotation >= 0.0)
return;
this.rotation += 6.28f;
}
else
{
if ((double) this.fadeIn > 0.0)
{
this.fadeIn -= 6.172839E-05f * (float) Main.dayRate;
if ((double) this.fadeIn < 0.0)
this.fadeIn = 0.0f;
}
this.twinkle += this.twinkleSpeed;
if ((double) this.twinkle > 1.0)
{
this.twinkle = 1f;
this.twinkleSpeed *= -1f;
}
else if ((double) this.twinkle < 0.6)
{
this.twinkle = 0.6f;
this.twinkleSpeed *= -1f;
}
this.rotation += this.rotationSpeed;
if ((double) this.rotation > 6.28)
this.rotation -= 6.28f;
if ((double) this.rotation >= 0.0)
return;
this.rotation += 6.28f;
}
}
public static void UpdateStars()
{
if (!Main.dayTime)
Star.dayCheck = false;
else if (!Star.dayCheck && Main.time >= 27000.0)
{
for (int s = 0; s < Main.numStars; ++s)
{
if (Main.star[s].hidden)
Star.SpawnStars(s);
}
}
for (int index = 0; index < Main.numStars; ++index)
Main.star[index].Update();
}
}
}