1.0.4.0 Source
This commit is contained in:
commit
ff3d24ee9d
35 changed files with 101417 additions and 0 deletions
668
Collision.cs
Normal file
668
Collision.cs
Normal file
|
@ -0,0 +1,668 @@
|
|||
// Decompiled with JetBrains decompiler
|
||||
// Type: Terraria.Collision
|
||||
// Assembly: Terraria, Version=1.0.4.0, Culture=neutral, PublicKeyToken=null
|
||||
// MVID: FF258283-FE37-4E8A-A035-CB1E6DC74C3C
|
||||
// Assembly location: C:\Users\mikeyisbaeyt\Downloads\depotdownloader-2.4.5\depots\105601\6707058\Terraria.exe
|
||||
|
||||
using Microsoft.Xna.Framework;
|
||||
using System;
|
||||
|
||||
namespace Terraria
|
||||
{
|
||||
public class Collision
|
||||
{
|
||||
public static bool up;
|
||||
public static bool down;
|
||||
|
||||
public static bool CanHit(
|
||||
Vector2 Position1,
|
||||
int Width1,
|
||||
int Height1,
|
||||
Vector2 Position2,
|
||||
int Width2,
|
||||
int Height2)
|
||||
{
|
||||
int index1 = (int) (((double) Position1.X + (double) (Width1 / 2)) / 16.0);
|
||||
int index2 = (int) (((double) Position1.Y + (double) (Height1 / 2)) / 16.0);
|
||||
int num1 = (int) (((double) Position2.X + (double) (Width2 / 2)) / 16.0);
|
||||
int num2 = (int) (((double) Position2.Y + (double) (Height2 / 2)) / 16.0);
|
||||
try
|
||||
{
|
||||
do
|
||||
{
|
||||
int num3 = Math.Abs(index1 - num1);
|
||||
int num4 = Math.Abs(index2 - num2);
|
||||
if (index1 == num1 && index2 == num2)
|
||||
return true;
|
||||
if (num3 > num4)
|
||||
{
|
||||
if (index1 < num1)
|
||||
++index1;
|
||||
else
|
||||
--index1;
|
||||
if (Main.tile[index1, index2 - 1] == null)
|
||||
Main.tile[index1, index2 - 1] = new Tile();
|
||||
if (Main.tile[index1, index2 + 1] == null)
|
||||
Main.tile[index1, index2 + 1] = new Tile();
|
||||
if (Main.tile[index1, index2 - 1].active && Main.tileSolid[(int) Main.tile[index1, index2 - 1].type] && !Main.tileSolidTop[(int) Main.tile[index1, index2 - 1].type] && Main.tile[index1, index2 + 1].active && Main.tileSolid[(int) Main.tile[index1, index2 + 1].type] && !Main.tileSolidTop[(int) Main.tile[index1, index2 + 1].type])
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (index2 < num2)
|
||||
++index2;
|
||||
else
|
||||
--index2;
|
||||
if (Main.tile[index1 - 1, index2] == null)
|
||||
Main.tile[index1 - 1, index2] = new Tile();
|
||||
if (Main.tile[index1 + 1, index2] == null)
|
||||
Main.tile[index1 + 1, index2] = new Tile();
|
||||
if (Main.tile[index1 - 1, index2].active && Main.tileSolid[(int) Main.tile[index1 - 1, index2].type] && !Main.tileSolidTop[(int) Main.tile[index1 - 1, index2].type] && Main.tile[index1 + 1, index2].active && Main.tileSolid[(int) Main.tile[index1 + 1, index2].type] && !Main.tileSolidTop[(int) Main.tile[index1 + 1, index2].type])
|
||||
return false;
|
||||
}
|
||||
if (Main.tile[index1, index2] == null)
|
||||
Main.tile[index1, index2] = new Tile();
|
||||
}
|
||||
while (!Main.tile[index1, index2].active || !Main.tileSolid[(int) Main.tile[index1, index2].type] || Main.tileSolidTop[(int) Main.tile[index1, index2].type]);
|
||||
return false;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static bool EmptyTile(int i, int j, bool ignoreTiles = false)
|
||||
{
|
||||
Rectangle rectangle = new Rectangle(i * 16, j * 16, 16, 16);
|
||||
if (Main.tile[i, j].active && !ignoreTiles)
|
||||
return false;
|
||||
for (int index = 0; index < (int) byte.MaxValue; ++index)
|
||||
{
|
||||
if (Main.player[index].active && rectangle.Intersects(new Rectangle((int) Main.player[index].position.X, (int) Main.player[index].position.Y, Main.player[index].width, Main.player[index].height)))
|
||||
return false;
|
||||
}
|
||||
for (int index = 0; index < 200; ++index)
|
||||
{
|
||||
if (Main.npc[index].active && rectangle.Intersects(new Rectangle((int) Main.npc[index].position.X, (int) Main.npc[index].position.Y, Main.npc[index].width, Main.npc[index].height)))
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public static bool DrownCollision(Vector2 Position, int Width, int Height, float gravDir = -1f)
|
||||
{
|
||||
Vector2 vector2_1 = new Vector2(Position.X + (float) (Width / 2), Position.Y + (float) (Height / 2));
|
||||
int num1 = 10;
|
||||
int num2 = 12;
|
||||
if (num1 > Width)
|
||||
num1 = Width;
|
||||
if (num2 > Height)
|
||||
num2 = Height;
|
||||
vector2_1 = new Vector2(vector2_1.X - (float) (num1 / 2), Position.Y - 2f);
|
||||
if ((double) gravDir == -1.0)
|
||||
vector2_1.Y += (float) (Height / 2 - 6);
|
||||
int num3 = (int) ((double) Position.X / 16.0) - 1;
|
||||
int num4 = (int) (((double) Position.X + (double) Width) / 16.0) + 2;
|
||||
int num5 = (int) ((double) Position.Y / 16.0) - 1;
|
||||
int num6 = (int) (((double) Position.Y + (double) Height) / 16.0) + 2;
|
||||
if (num3 < 0)
|
||||
num3 = 0;
|
||||
if (num4 > Main.maxTilesX)
|
||||
num4 = Main.maxTilesX;
|
||||
if (num5 < 0)
|
||||
num5 = 0;
|
||||
if (num6 > Main.maxTilesY)
|
||||
num6 = Main.maxTilesY;
|
||||
for (int index1 = num3; index1 < num4; ++index1)
|
||||
{
|
||||
for (int index2 = num5; index2 < num6; ++index2)
|
||||
{
|
||||
if (Main.tile[index1, index2] != null && Main.tile[index1, index2].liquid > (byte) 0)
|
||||
{
|
||||
Vector2 vector2_2;
|
||||
vector2_2.X = (float) (index1 * 16);
|
||||
vector2_2.Y = (float) (index2 * 16);
|
||||
int num7 = 16;
|
||||
float num8 = (float) (256 - (int) Main.tile[index1, index2].liquid) / 32f;
|
||||
vector2_2.Y += num8 * 2f;
|
||||
int num9 = num7 - (int) ((double) num8 * 2.0);
|
||||
if ((double) vector2_1.X + (double) num1 > (double) vector2_2.X && (double) vector2_1.X < (double) vector2_2.X + 16.0 && (double) vector2_1.Y + (double) num2 > (double) vector2_2.Y && (double) vector2_1.Y < (double) vector2_2.Y + (double) num9)
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static bool WetCollision(Vector2 Position, int Width, int Height)
|
||||
{
|
||||
Vector2 vector2_1 = new Vector2(Position.X + (float) (Width / 2), Position.Y + (float) (Height / 2));
|
||||
int num1 = 10;
|
||||
int num2 = Height / 2;
|
||||
if (num1 > Width)
|
||||
num1 = Width;
|
||||
if (num2 > Height)
|
||||
num2 = Height;
|
||||
vector2_1 = new Vector2(vector2_1.X - (float) (num1 / 2), vector2_1.Y - (float) (num2 / 2));
|
||||
int num3 = (int) ((double) Position.X / 16.0) - 1;
|
||||
int num4 = (int) (((double) Position.X + (double) Width) / 16.0) + 2;
|
||||
int num5 = (int) ((double) Position.Y / 16.0) - 1;
|
||||
int num6 = (int) (((double) Position.Y + (double) Height) / 16.0) + 2;
|
||||
if (num3 < 0)
|
||||
num3 = 0;
|
||||
if (num4 > Main.maxTilesX)
|
||||
num4 = Main.maxTilesX;
|
||||
if (num5 < 0)
|
||||
num5 = 0;
|
||||
if (num6 > Main.maxTilesY)
|
||||
num6 = Main.maxTilesY;
|
||||
for (int index1 = num3; index1 < num4; ++index1)
|
||||
{
|
||||
for (int index2 = num5; index2 < num6; ++index2)
|
||||
{
|
||||
if (Main.tile[index1, index2] != null && Main.tile[index1, index2].liquid > (byte) 0)
|
||||
{
|
||||
Vector2 vector2_2;
|
||||
vector2_2.X = (float) (index1 * 16);
|
||||
vector2_2.Y = (float) (index2 * 16);
|
||||
int num7 = 16;
|
||||
float num8 = (float) (256 - (int) Main.tile[index1, index2].liquid) / 32f;
|
||||
vector2_2.Y += num8 * 2f;
|
||||
int num9 = num7 - (int) ((double) num8 * 2.0);
|
||||
if ((double) vector2_1.X + (double) num1 > (double) vector2_2.X && (double) vector2_1.X < (double) vector2_2.X + 16.0 && (double) vector2_1.Y + (double) num2 > (double) vector2_2.Y && (double) vector2_1.Y < (double) vector2_2.Y + (double) num9)
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static bool LavaCollision(Vector2 Position, int Width, int Height)
|
||||
{
|
||||
int num1 = Height;
|
||||
int num2 = (int) ((double) Position.X / 16.0) - 1;
|
||||
int num3 = (int) (((double) Position.X + (double) Width) / 16.0) + 2;
|
||||
int num4 = (int) ((double) Position.Y / 16.0) - 1;
|
||||
int num5 = (int) (((double) Position.Y + (double) Height) / 16.0) + 2;
|
||||
if (num2 < 0)
|
||||
num2 = 0;
|
||||
if (num3 > Main.maxTilesX)
|
||||
num3 = Main.maxTilesX;
|
||||
if (num4 < 0)
|
||||
num4 = 0;
|
||||
if (num5 > Main.maxTilesY)
|
||||
num5 = Main.maxTilesY;
|
||||
for (int index1 = num2; index1 < num3; ++index1)
|
||||
{
|
||||
for (int index2 = num4; index2 < num5; ++index2)
|
||||
{
|
||||
if (Main.tile[index1, index2] != null && Main.tile[index1, index2].liquid > (byte) 0 && Main.tile[index1, index2].lava)
|
||||
{
|
||||
Vector2 vector2;
|
||||
vector2.X = (float) (index1 * 16);
|
||||
vector2.Y = (float) (index2 * 16);
|
||||
int num6 = 16;
|
||||
float num7 = (float) (256 - (int) Main.tile[index1, index2].liquid) / 32f;
|
||||
vector2.Y += num7 * 2f;
|
||||
int num8 = num6 - (int) ((double) num7 * 2.0);
|
||||
if ((double) Position.X + (double) Width > (double) vector2.X && (double) Position.X < (double) vector2.X + 16.0 && (double) Position.Y + (double) num1 > (double) vector2.Y && (double) Position.Y < (double) vector2.Y + (double) num8)
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static Vector2 TileCollision(
|
||||
Vector2 Position,
|
||||
Vector2 Velocity,
|
||||
int Width,
|
||||
int Height,
|
||||
bool fallThrough = false,
|
||||
bool fall2 = false)
|
||||
{
|
||||
Collision.up = false;
|
||||
Collision.down = false;
|
||||
Vector2 vector2_1 = Velocity;
|
||||
Vector2 vector2_2 = Velocity;
|
||||
Vector2 vector2_3 = Position + Velocity;
|
||||
Vector2 vector2_4 = Position;
|
||||
int num1 = (int) ((double) Position.X / 16.0) - 1;
|
||||
int num2 = (int) (((double) Position.X + (double) Width) / 16.0) + 2;
|
||||
int num3 = (int) ((double) Position.Y / 16.0) - 1;
|
||||
int num4 = (int) (((double) Position.Y + (double) Height) / 16.0) + 2;
|
||||
int num5 = -1;
|
||||
int num6 = -1;
|
||||
int num7 = -1;
|
||||
int num8 = -1;
|
||||
if (num1 < 0)
|
||||
num1 = 0;
|
||||
if (num2 > Main.maxTilesX)
|
||||
num2 = Main.maxTilesX;
|
||||
if (num3 < 0)
|
||||
num3 = 0;
|
||||
if (num4 > Main.maxTilesY)
|
||||
num4 = Main.maxTilesY;
|
||||
for (int index1 = num1; index1 < num2; ++index1)
|
||||
{
|
||||
for (int index2 = num3; index2 < num4; ++index2)
|
||||
{
|
||||
if (Main.tile[index1, index2] != null && Main.tile[index1, index2].active && (Main.tileSolid[(int) Main.tile[index1, index2].type] || Main.tileSolidTop[(int) Main.tile[index1, index2].type] && Main.tile[index1, index2].frameY == (short) 0))
|
||||
{
|
||||
Vector2 vector2_5;
|
||||
vector2_5.X = (float) (index1 * 16);
|
||||
vector2_5.Y = (float) (index2 * 16);
|
||||
if ((double) vector2_3.X + (double) Width > (double) vector2_5.X && (double) vector2_3.X < (double) vector2_5.X + 16.0 && (double) vector2_3.Y + (double) Height > (double) vector2_5.Y && (double) vector2_3.Y < (double) vector2_5.Y + 16.0)
|
||||
{
|
||||
if ((double) vector2_4.Y + (double) Height <= (double) vector2_5.Y)
|
||||
{
|
||||
Collision.down = true;
|
||||
if (!Main.tileSolidTop[(int) Main.tile[index1, index2].type] || !fallThrough || (double) Velocity.Y > 1.0 && !fall2)
|
||||
{
|
||||
num7 = index1;
|
||||
num8 = index2;
|
||||
if (num7 != num5)
|
||||
vector2_1.Y = vector2_5.Y - (vector2_4.Y + (float) Height);
|
||||
}
|
||||
}
|
||||
else if ((double) vector2_4.X + (double) Width <= (double) vector2_5.X && !Main.tileSolidTop[(int) Main.tile[index1, index2].type])
|
||||
{
|
||||
num5 = index1;
|
||||
num6 = index2;
|
||||
if (num6 != num8)
|
||||
vector2_1.X = vector2_5.X - (vector2_4.X + (float) Width);
|
||||
if (num7 == num5)
|
||||
vector2_1.Y = vector2_2.Y;
|
||||
}
|
||||
else if ((double) vector2_4.X >= (double) vector2_5.X + 16.0 && !Main.tileSolidTop[(int) Main.tile[index1, index2].type])
|
||||
{
|
||||
num5 = index1;
|
||||
num6 = index2;
|
||||
if (num6 != num8)
|
||||
vector2_1.X = vector2_5.X + 16f - vector2_4.X;
|
||||
if (num7 == num5)
|
||||
vector2_1.Y = vector2_2.Y;
|
||||
}
|
||||
else if ((double) vector2_4.Y >= (double) vector2_5.Y + 16.0 && !Main.tileSolidTop[(int) Main.tile[index1, index2].type])
|
||||
{
|
||||
Collision.up = true;
|
||||
num7 = index1;
|
||||
num8 = index2;
|
||||
vector2_1.Y = vector2_5.Y + 16f - vector2_4.Y;
|
||||
if (num8 == num6)
|
||||
vector2_1.X = vector2_2.X;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return vector2_1;
|
||||
}
|
||||
|
||||
public static bool SolidCollision(Vector2 Position, int Width, int Height)
|
||||
{
|
||||
int num1 = (int) ((double) Position.X / 16.0) - 1;
|
||||
int num2 = (int) (((double) Position.X + (double) Width) / 16.0) + 2;
|
||||
int num3 = (int) ((double) Position.Y / 16.0) - 1;
|
||||
int num4 = (int) (((double) Position.Y + (double) Height) / 16.0) + 2;
|
||||
if (num1 < 0)
|
||||
num1 = 0;
|
||||
if (num2 > Main.maxTilesX)
|
||||
num2 = Main.maxTilesX;
|
||||
if (num3 < 0)
|
||||
num3 = 0;
|
||||
if (num4 > Main.maxTilesY)
|
||||
num4 = Main.maxTilesY;
|
||||
for (int index1 = num1; index1 < num2; ++index1)
|
||||
{
|
||||
for (int index2 = num3; index2 < num4; ++index2)
|
||||
{
|
||||
if (Main.tile[index1, index2] != null && Main.tile[index1, index2].active && Main.tileSolid[(int) Main.tile[index1, index2].type] && !Main.tileSolidTop[(int) Main.tile[index1, index2].type])
|
||||
{
|
||||
Vector2 vector2;
|
||||
vector2.X = (float) (index1 * 16);
|
||||
vector2.Y = (float) (index2 * 16);
|
||||
if ((double) Position.X + (double) Width > (double) vector2.X && (double) Position.X < (double) vector2.X + 16.0 && (double) Position.Y + (double) Height > (double) vector2.Y && (double) Position.Y < (double) vector2.Y + 16.0)
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static Vector2 WaterCollision(
|
||||
Vector2 Position,
|
||||
Vector2 Velocity,
|
||||
int Width,
|
||||
int Height,
|
||||
bool fallThrough = false,
|
||||
bool fall2 = false)
|
||||
{
|
||||
Vector2 vector2_1 = Velocity;
|
||||
Vector2 vector2_2 = Position + Velocity;
|
||||
Vector2 vector2_3 = Position;
|
||||
int num1 = (int) ((double) Position.X / 16.0) - 1;
|
||||
int num2 = (int) (((double) Position.X + (double) Width) / 16.0) + 2;
|
||||
int num3 = (int) ((double) Position.Y / 16.0) - 1;
|
||||
int num4 = (int) (((double) Position.Y + (double) Height) / 16.0) + 2;
|
||||
if (num1 < 0)
|
||||
num1 = 0;
|
||||
if (num2 > Main.maxTilesX)
|
||||
num2 = Main.maxTilesX;
|
||||
if (num3 < 0)
|
||||
num3 = 0;
|
||||
if (num4 > Main.maxTilesY)
|
||||
num4 = Main.maxTilesY;
|
||||
for (int index1 = num1; index1 < num2; ++index1)
|
||||
{
|
||||
for (int index2 = num3; index2 < num4; ++index2)
|
||||
{
|
||||
if (Main.tile[index1, index2] != null && Main.tile[index1, index2].liquid > (byte) 0)
|
||||
{
|
||||
int num5 = (int) Math.Round((double) ((float) Main.tile[index1, index2].liquid / 32f)) * 2;
|
||||
Vector2 vector2_4;
|
||||
vector2_4.X = (float) (index1 * 16);
|
||||
vector2_4.Y = (float) (index2 * 16 + 16 - num5);
|
||||
if ((double) vector2_2.X + (double) Width > (double) vector2_4.X && (double) vector2_2.X < (double) vector2_4.X + 16.0 && (double) vector2_2.Y + (double) Height > (double) vector2_4.Y && (double) vector2_2.Y < (double) vector2_4.Y + (double) num5 && (double) vector2_3.Y + (double) Height <= (double) vector2_4.Y && !fallThrough)
|
||||
vector2_1.Y = vector2_4.Y - (vector2_3.Y + (float) Height);
|
||||
}
|
||||
}
|
||||
}
|
||||
return vector2_1;
|
||||
}
|
||||
|
||||
public static Vector2 AnyCollision(
|
||||
Vector2 Position,
|
||||
Vector2 Velocity,
|
||||
int Width,
|
||||
int Height)
|
||||
{
|
||||
Vector2 vector2_1 = Velocity;
|
||||
Vector2 vector2_2 = Velocity;
|
||||
Vector2 vector2_3 = Position + Velocity;
|
||||
Vector2 vector2_4 = Position;
|
||||
int num1 = (int) ((double) Position.X / 16.0) - 1;
|
||||
int num2 = (int) (((double) Position.X + (double) Width) / 16.0) + 2;
|
||||
int num3 = (int) ((double) Position.Y / 16.0) - 1;
|
||||
int num4 = (int) (((double) Position.Y + (double) Height) / 16.0) + 2;
|
||||
int num5 = -1;
|
||||
int num6 = -1;
|
||||
int num7 = -1;
|
||||
int num8 = -1;
|
||||
if (num1 < 0)
|
||||
num1 = 0;
|
||||
if (num2 > Main.maxTilesX)
|
||||
num2 = Main.maxTilesX;
|
||||
if (num3 < 0)
|
||||
num3 = 0;
|
||||
if (num4 > Main.maxTilesY)
|
||||
num4 = Main.maxTilesY;
|
||||
for (int index1 = num1; index1 < num2; ++index1)
|
||||
{
|
||||
for (int index2 = num3; index2 < num4; ++index2)
|
||||
{
|
||||
if (Main.tile[index1, index2] != null && Main.tile[index1, index2].active)
|
||||
{
|
||||
Vector2 vector2_5;
|
||||
vector2_5.X = (float) (index1 * 16);
|
||||
vector2_5.Y = (float) (index2 * 16);
|
||||
if ((double) vector2_3.X + (double) Width > (double) vector2_5.X && (double) vector2_3.X < (double) vector2_5.X + 16.0 && (double) vector2_3.Y + (double) Height > (double) vector2_5.Y && (double) vector2_3.Y < (double) vector2_5.Y + 16.0)
|
||||
{
|
||||
if ((double) vector2_4.Y + (double) Height <= (double) vector2_5.Y)
|
||||
{
|
||||
num7 = index1;
|
||||
num8 = index2;
|
||||
if (num7 != num5)
|
||||
vector2_1.Y = vector2_5.Y - (vector2_4.Y + (float) Height);
|
||||
}
|
||||
else if ((double) vector2_4.X + (double) Width <= (double) vector2_5.X && !Main.tileSolidTop[(int) Main.tile[index1, index2].type])
|
||||
{
|
||||
num5 = index1;
|
||||
num6 = index2;
|
||||
if (num6 != num8)
|
||||
vector2_1.X = vector2_5.X - (vector2_4.X + (float) Width);
|
||||
if (num7 == num5)
|
||||
vector2_1.Y = vector2_2.Y;
|
||||
}
|
||||
else if ((double) vector2_4.X >= (double) vector2_5.X + 16.0 && !Main.tileSolidTop[(int) Main.tile[index1, index2].type])
|
||||
{
|
||||
num5 = index1;
|
||||
num6 = index2;
|
||||
if (num6 != num8)
|
||||
vector2_1.X = vector2_5.X + 16f - vector2_4.X;
|
||||
if (num7 == num5)
|
||||
vector2_1.Y = vector2_2.Y;
|
||||
}
|
||||
else if ((double) vector2_4.Y >= (double) vector2_5.Y + 16.0 && !Main.tileSolidTop[(int) Main.tile[index1, index2].type])
|
||||
{
|
||||
num7 = index1;
|
||||
num8 = index2;
|
||||
vector2_1.Y = (float) ((double) vector2_5.Y + 16.0 - (double) vector2_4.Y + 0.00999999977648258);
|
||||
if (num8 == num6)
|
||||
vector2_1.X = vector2_2.X + 0.01f;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return vector2_1;
|
||||
}
|
||||
|
||||
public static void HitTiles(Vector2 Position, Vector2 Velocity, int Width, int Height)
|
||||
{
|
||||
Vector2 vector2_1 = Position + Velocity;
|
||||
int num1 = (int) ((double) Position.X / 16.0) - 1;
|
||||
int num2 = (int) (((double) Position.X + (double) Width) / 16.0) + 2;
|
||||
int num3 = (int) ((double) Position.Y / 16.0) - 1;
|
||||
int num4 = (int) (((double) Position.Y + (double) Height) / 16.0) + 2;
|
||||
if (num1 < 0)
|
||||
num1 = 0;
|
||||
if (num2 > Main.maxTilesX)
|
||||
num2 = Main.maxTilesX;
|
||||
if (num3 < 0)
|
||||
num3 = 0;
|
||||
if (num4 > Main.maxTilesY)
|
||||
num4 = Main.maxTilesY;
|
||||
for (int i = num1; i < num2; ++i)
|
||||
{
|
||||
for (int j = num3; j < num4; ++j)
|
||||
{
|
||||
if (Main.tile[i, j] != null && Main.tile[i, j].active && (Main.tileSolid[(int) Main.tile[i, j].type] || Main.tileSolidTop[(int) Main.tile[i, j].type] && Main.tile[i, j].frameY == (short) 0))
|
||||
{
|
||||
Vector2 vector2_2;
|
||||
vector2_2.X = (float) (i * 16);
|
||||
vector2_2.Y = (float) (j * 16);
|
||||
if ((double) vector2_1.X + (double) Width >= (double) vector2_2.X && (double) vector2_1.X <= (double) vector2_2.X + 16.0 && (double) vector2_1.Y + (double) Height >= (double) vector2_2.Y && (double) vector2_1.Y <= (double) vector2_2.Y + 16.0)
|
||||
WorldGen.KillTile(i, j, true, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static Vector2 HurtTiles(
|
||||
Vector2 Position,
|
||||
Vector2 Velocity,
|
||||
int Width,
|
||||
int Height,
|
||||
bool fireImmune = false)
|
||||
{
|
||||
Vector2 vector2_1 = Position;
|
||||
int num1 = (int) ((double) Position.X / 16.0) - 1;
|
||||
int num2 = (int) (((double) Position.X + (double) Width) / 16.0) + 2;
|
||||
int num3 = (int) ((double) Position.Y / 16.0) - 1;
|
||||
int num4 = (int) (((double) Position.Y + (double) Height) / 16.0) + 2;
|
||||
if (num1 < 0)
|
||||
num1 = 0;
|
||||
if (num2 > Main.maxTilesX)
|
||||
num2 = Main.maxTilesX;
|
||||
if (num3 < 0)
|
||||
num3 = 0;
|
||||
if (num4 > Main.maxTilesY)
|
||||
num4 = Main.maxTilesY;
|
||||
for (int i = num1; i < num2; ++i)
|
||||
{
|
||||
for (int j = num3; j < num4; ++j)
|
||||
{
|
||||
if (Main.tile[i, j] != null && Main.tile[i, j].active && (Main.tile[i, j].type == (byte) 32 || Main.tile[i, j].type == (byte) 37 || Main.tile[i, j].type == (byte) 48 || Main.tile[i, j].type == (byte) 53 || Main.tile[i, j].type == (byte) 57 || Main.tile[i, j].type == (byte) 58 || Main.tile[i, j].type == (byte) 69 || Main.tile[i, j].type == (byte) 76 || Main.tile[i, j].type == (byte) 112 || Main.tile[i, j].type == (byte) 116 || Main.tile[i, j].type == (byte) 123))
|
||||
{
|
||||
Vector2 vector2_2;
|
||||
vector2_2.X = (float) (i * 16);
|
||||
vector2_2.Y = (float) (j * 16);
|
||||
int num5 = 0;
|
||||
int type = (int) Main.tile[i, j].type;
|
||||
switch (type)
|
||||
{
|
||||
case 32:
|
||||
case 69:
|
||||
case 80:
|
||||
if ((double) vector2_1.X + (double) Width > (double) vector2_2.X && (double) vector2_1.X < (double) vector2_2.X + 16.0 && (double) vector2_1.Y + (double) Height > (double) vector2_2.Y && (double) vector2_1.Y < (double) vector2_2.Y + 16.01)
|
||||
{
|
||||
int num6 = 1;
|
||||
if ((double) vector2_1.X + (double) (Width / 2) < (double) vector2_2.X + 8.0)
|
||||
num6 = -1;
|
||||
int num7 = 10;
|
||||
switch (type)
|
||||
{
|
||||
case 69:
|
||||
num7 = 17;
|
||||
break;
|
||||
case 80:
|
||||
num7 = 6;
|
||||
break;
|
||||
}
|
||||
if (type == 32 || type == 69)
|
||||
{
|
||||
WorldGen.KillTile(i, j);
|
||||
if (Main.netMode == 1 && !Main.tile[i, j].active && Main.netMode == 1)
|
||||
NetMessage.SendData(17, number: 4, number2: ((float) i), number3: ((float) j));
|
||||
}
|
||||
return new Vector2((float) num6, (float) num7);
|
||||
}
|
||||
continue;
|
||||
case 53:
|
||||
case 112:
|
||||
case 116:
|
||||
case 123:
|
||||
if ((double) vector2_1.X + (double) Width - 2.0 >= (double) vector2_2.X && (double) vector2_1.X + 2.0 <= (double) vector2_2.X + 16.0 && (double) vector2_1.Y + (double) Height - 2.0 >= (double) vector2_2.Y && (double) vector2_1.Y + 2.0 <= (double) vector2_2.Y + 16.0)
|
||||
{
|
||||
int num8 = 1;
|
||||
if ((double) vector2_1.X + (double) (Width / 2) < (double) vector2_2.X + 8.0)
|
||||
num8 = -1;
|
||||
int num9 = 20;
|
||||
return new Vector2((float) num8, (float) num9);
|
||||
}
|
||||
continue;
|
||||
default:
|
||||
if ((double) vector2_1.X + (double) Width >= (double) vector2_2.X && (double) vector2_1.X <= (double) vector2_2.X + 16.0 && (double) vector2_1.Y + (double) Height >= (double) vector2_2.Y && (double) vector2_1.Y <= (double) vector2_2.Y + 16.01)
|
||||
{
|
||||
int num10 = 1;
|
||||
if ((double) vector2_1.X + (double) (Width / 2) < (double) vector2_2.X + 8.0)
|
||||
num10 = -1;
|
||||
if (!fireImmune && (type == 37 || type == 58 || type == 76))
|
||||
num5 = 20;
|
||||
if (type == 48)
|
||||
num5 = 40;
|
||||
return new Vector2((float) num10, (float) num5);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return new Vector2();
|
||||
}
|
||||
|
||||
public static bool SwitchTiles(Vector2 Position, int Width, int Height, Vector2 oldPosition)
|
||||
{
|
||||
int num1 = (int) ((double) Position.X / 16.0) - 1;
|
||||
int num2 = (int) (((double) Position.X + (double) Width) / 16.0) + 2;
|
||||
int num3 = (int) ((double) Position.Y / 16.0) - 1;
|
||||
int num4 = (int) (((double) Position.Y + (double) Height) / 16.0) + 2;
|
||||
if (num1 < 0)
|
||||
num1 = 0;
|
||||
if (num2 > Main.maxTilesX)
|
||||
num2 = Main.maxTilesX;
|
||||
if (num3 < 0)
|
||||
num3 = 0;
|
||||
if (num4 > Main.maxTilesY)
|
||||
num4 = Main.maxTilesY;
|
||||
for (int index = num1; index < num2; ++index)
|
||||
{
|
||||
for (int j = num3; j < num4; ++j)
|
||||
{
|
||||
if (Main.tile[index, j] != null && Main.tile[index, j].active && Main.tile[index, j].type == (byte) 135)
|
||||
{
|
||||
Vector2 vector2;
|
||||
vector2.X = (float) (index * 16);
|
||||
vector2.Y = (float) (j * 16 + 12);
|
||||
if ((double) Position.X + (double) Width > (double) vector2.X && (double) Position.X < (double) vector2.X + 16.0 && (double) Position.Y + (double) Height > (double) vector2.Y && (double) Position.Y < (double) vector2.Y + 4.01 && ((double) oldPosition.X + (double) Width <= (double) vector2.X || (double) oldPosition.X >= (double) vector2.X + 16.0 || (double) oldPosition.Y + (double) Height <= (double) vector2.Y || (double) oldPosition.Y >= (double) vector2.Y + 16.01))
|
||||
{
|
||||
WorldGen.hitSwitch(index, j);
|
||||
NetMessage.SendData(59, number: index, number2: ((float) j));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static Vector2 StickyTiles(
|
||||
Vector2 Position,
|
||||
Vector2 Velocity,
|
||||
int Width,
|
||||
int Height)
|
||||
{
|
||||
Vector2 vector2_1 = Position;
|
||||
int num1 = (int) ((double) Position.X / 16.0) - 1;
|
||||
int num2 = (int) (((double) Position.X + (double) Width) / 16.0) + 2;
|
||||
int num3 = (int) ((double) Position.Y / 16.0) - 1;
|
||||
int num4 = (int) (((double) Position.Y + (double) Height) / 16.0) + 2;
|
||||
if (num1 < 0)
|
||||
num1 = 0;
|
||||
if (num2 > Main.maxTilesX)
|
||||
num2 = Main.maxTilesX;
|
||||
if (num3 < 0)
|
||||
num3 = 0;
|
||||
if (num4 > Main.maxTilesY)
|
||||
num4 = Main.maxTilesY;
|
||||
for (int index1 = num1; index1 < num2; ++index1)
|
||||
{
|
||||
for (int index2 = num3; index2 < num4; ++index2)
|
||||
{
|
||||
if (Main.tile[index1, index2] != null && Main.tile[index1, index2].active && Main.tile[index1, index2].type == (byte) 51)
|
||||
{
|
||||
Vector2 vector2_2;
|
||||
vector2_2.X = (float) (index1 * 16);
|
||||
vector2_2.Y = (float) (index2 * 16);
|
||||
if ((double) vector2_1.X + (double) Width > (double) vector2_2.X && (double) vector2_1.X < (double) vector2_2.X + 16.0 && (double) vector2_1.Y + (double) Height > (double) vector2_2.Y && (double) vector2_1.Y < (double) vector2_2.Y + 16.01)
|
||||
{
|
||||
if ((double) Math.Abs(Velocity.X) + (double) Math.Abs(Velocity.Y) > 0.7 && Main.rand.Next(30) == 0)
|
||||
Dust.NewDust(new Vector2((float) (index1 * 16), (float) (index2 * 16)), 16, 16, 30);
|
||||
return new Vector2((float) index1, (float) index2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return new Vector2(-1f, -1f);
|
||||
}
|
||||
|
||||
public static bool SolidTiles(int startX, int endX, int startY, int endY)
|
||||
{
|
||||
if (startX < 0 || endX >= Main.maxTilesX || startY < 0 || endY >= Main.maxTilesY)
|
||||
return true;
|
||||
for (int index1 = startX; index1 < endX + 1; ++index1)
|
||||
{
|
||||
for (int index2 = startY; index2 < endY + 1; ++index2)
|
||||
{
|
||||
if (Main.tile[index1, index2] == null)
|
||||
return false;
|
||||
if (Main.tile[index1, index2].active && Main.tileSolid[(int) Main.tile[index1, index2].type] && !Main.tileSolidTop[(int) Main.tile[index1, index2].type])
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue