Initial Commit
This commit is contained in:
commit
5dc0cf584c
3351 changed files with 51753 additions and 0 deletions
210
Terraria/Cloud.cs
Normal file
210
Terraria/Cloud.cs
Normal file
|
|
@ -0,0 +1,210 @@
|
|||
namespace Terraria
|
||||
{
|
||||
using Microsoft.Xna.Framework;
|
||||
using System;
|
||||
|
||||
public class Cloud
|
||||
{
|
||||
public bool active;
|
||||
public int height;
|
||||
public Vector2 position;
|
||||
private static Random rand = new Random();
|
||||
public float rotation;
|
||||
public float rSpeed;
|
||||
public float scale;
|
||||
public float sSpeed;
|
||||
public int type;
|
||||
public int width;
|
||||
|
||||
public static void addCloud()
|
||||
{
|
||||
int index = -1;
|
||||
for (int i = 0; i < 100; i++)
|
||||
{
|
||||
if (!Main.cloud[i].active)
|
||||
{
|
||||
index = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (index >= 0)
|
||||
{
|
||||
Main.cloud[index].rSpeed = 0f;
|
||||
Main.cloud[index].sSpeed = 0f;
|
||||
Main.cloud[index].type = rand.Next(4);
|
||||
Main.cloud[index].scale = rand.Next(8, 13) * 0.1f;
|
||||
Main.cloud[index].rotation = rand.Next(-10, 11) * 0.01f;
|
||||
Main.cloud[index].width = (int) (Main.cloudTexture[Main.cloud[index].type].Width * Main.cloud[index].scale);
|
||||
Main.cloud[index].height = (int) (Main.cloudTexture[Main.cloud[index].type].Height * Main.cloud[index].scale);
|
||||
if (Main.windSpeed > 0f)
|
||||
{
|
||||
Main.cloud[index].position.X = (-Main.cloud[index].width - Main.cloudTexture[Main.cloud[index].type].Width) - rand.Next(Main.screenWidth * 2);
|
||||
}
|
||||
else
|
||||
{
|
||||
Main.cloud[index].position.X = (Main.screenWidth + Main.cloudTexture[Main.cloud[index].type].Width) + rand.Next(Main.screenWidth * 2);
|
||||
}
|
||||
Main.cloud[index].position.Y = rand.Next((int) (-Main.screenHeight * 0.25f), (int) (Main.screenHeight * 1.25));
|
||||
Main.cloud[index].position.Y -= rand.Next((int) (Main.screenHeight * 0.25f));
|
||||
Main.cloud[index].position.Y -= rand.Next((int) (Main.screenHeight * 0.25f));
|
||||
Cloud cloud1 = Main.cloud[index];
|
||||
cloud1.scale *= 2.2f - ((float) ((((double) (Main.cloud[index].position.Y + (Main.screenHeight * 0.25f))) / (Main.screenHeight * 1.5)) + 0.699999988079071));
|
||||
if (Main.cloud[index].scale > 1.4)
|
||||
{
|
||||
Main.cloud[index].scale = 1.4f;
|
||||
}
|
||||
if (Main.cloud[index].scale < 0.6)
|
||||
{
|
||||
Main.cloud[index].scale = 0.6f;
|
||||
}
|
||||
Main.cloud[index].active = true;
|
||||
Rectangle rectangle = new Rectangle((int) Main.cloud[index].position.X, (int) Main.cloud[index].position.Y, Main.cloud[index].width, Main.cloud[index].height);
|
||||
for (int j = 0; j < 100; j++)
|
||||
{
|
||||
if ((index != j) && Main.cloud[j].active)
|
||||
{
|
||||
Rectangle rectangle2 = new Rectangle((int) Main.cloud[j].position.X, (int) Main.cloud[j].position.Y, Main.cloud[j].width, Main.cloud[j].height);
|
||||
if (rectangle.Intersects(rectangle2))
|
||||
{
|
||||
Main.cloud[index].active = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public object Clone()
|
||||
{
|
||||
return base.MemberwiseClone();
|
||||
}
|
||||
|
||||
public static void resetClouds()
|
||||
{
|
||||
if (Main.cloudLimit >= 10)
|
||||
{
|
||||
Main.numClouds = rand.Next(10, Main.cloudLimit);
|
||||
Main.windSpeed = 0f;
|
||||
while (Main.windSpeed == 0f)
|
||||
{
|
||||
Main.windSpeed = rand.Next(-100, 0x65) * 0.01f;
|
||||
}
|
||||
for (int i = 0; i < 100; i++)
|
||||
{
|
||||
Main.cloud[i].active = false;
|
||||
}
|
||||
for (int j = 0; j < Main.numClouds; j++)
|
||||
{
|
||||
addCloud();
|
||||
}
|
||||
for (int k = 0; k < Main.numClouds; k++)
|
||||
{
|
||||
if (Main.windSpeed < 0f)
|
||||
{
|
||||
Main.cloud[k].position.X -= Main.screenWidth * 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
Main.cloud[k].position.X += Main.screenWidth * 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void Update()
|
||||
{
|
||||
if (Main.gameMenu)
|
||||
{
|
||||
this.position.X += (Main.windSpeed * this.scale) * 3f;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.position.X += (Main.windSpeed - (Main.player[Main.myPlayer].velocity.X * 0.1f)) * this.scale;
|
||||
}
|
||||
if (Main.windSpeed > 0f)
|
||||
{
|
||||
if ((this.position.X - Main.cloudTexture[this.type].Width) > Main.screenWidth)
|
||||
{
|
||||
this.active = false;
|
||||
}
|
||||
}
|
||||
else if (((this.position.X + this.width) + Main.cloudTexture[this.type].Width) < 0f)
|
||||
{
|
||||
this.active = false;
|
||||
}
|
||||
this.rSpeed += rand.Next(-10, 11) * 2E-05f;
|
||||
if (this.rSpeed > 0.0007)
|
||||
{
|
||||
this.rSpeed = 0.0007f;
|
||||
}
|
||||
if (this.rSpeed < -0.0007)
|
||||
{
|
||||
this.rSpeed = -0.0007f;
|
||||
}
|
||||
if (this.rotation > 0.05)
|
||||
{
|
||||
this.rotation = 0.05f;
|
||||
}
|
||||
if (this.rotation < -0.05)
|
||||
{
|
||||
this.rotation = -0.05f;
|
||||
}
|
||||
this.sSpeed += rand.Next(-10, 11) * 2E-05f;
|
||||
if (this.sSpeed > 0.0007)
|
||||
{
|
||||
this.sSpeed = 0.0007f;
|
||||
}
|
||||
if (this.sSpeed < -0.0007)
|
||||
{
|
||||
this.sSpeed = -0.0007f;
|
||||
}
|
||||
if (this.scale > 1.4)
|
||||
{
|
||||
this.scale = 1.4f;
|
||||
}
|
||||
if (this.scale < 0.6)
|
||||
{
|
||||
this.scale = 0.6f;
|
||||
}
|
||||
this.rotation += this.rSpeed;
|
||||
this.scale += this.sSpeed;
|
||||
this.width = (int) (Main.cloudTexture[this.type].Width * this.scale);
|
||||
this.height = (int) (Main.cloudTexture[this.type].Height * this.scale);
|
||||
}
|
||||
|
||||
public static void UpdateClouds()
|
||||
{
|
||||
int num = 0;
|
||||
for (int i = 0; i < 100; i++)
|
||||
{
|
||||
if (Main.cloud[i].active)
|
||||
{
|
||||
Main.cloud[i].Update();
|
||||
num++;
|
||||
}
|
||||
}
|
||||
for (int j = 0; j < 100; j++)
|
||||
{
|
||||
if (Main.cloud[j].active)
|
||||
{
|
||||
if ((j > 1) && (!Main.cloud[j - 1].active || (Main.cloud[j - 1].scale > (Main.cloud[j].scale + 0.02))))
|
||||
{
|
||||
Cloud cloud = (Cloud) Main.cloud[j - 1].Clone();
|
||||
Main.cloud[j - 1] = (Cloud) Main.cloud[j].Clone();
|
||||
Main.cloud[j] = cloud;
|
||||
}
|
||||
if ((j < 0x63) && (!Main.cloud[j].active || (Main.cloud[j + 1].scale < (Main.cloud[j].scale - 0.02))))
|
||||
{
|
||||
Cloud cloud2 = (Cloud) Main.cloud[j + 1].Clone();
|
||||
Main.cloud[j + 1] = (Cloud) Main.cloud[j].Clone();
|
||||
Main.cloud[j] = cloud2;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (num < Main.numClouds)
|
||||
{
|
||||
addCloud();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue