162 lines
5.7 KiB
C#
162 lines
5.7 KiB
C#
// Decompiled with JetBrains decompiler
|
|
// Type: Terraria.StrayMethods
|
|
// 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;
|
|
|
|
namespace Terraria
|
|
{
|
|
public class StrayMethods
|
|
{
|
|
public static bool CountSandHorizontally(
|
|
int i,
|
|
int j,
|
|
bool[] fittingTypes,
|
|
int requiredTotalSpread = 4,
|
|
int spreadInEachAxis = 5)
|
|
{
|
|
if (!WorldGen.InWorld(i, j, 2))
|
|
return false;
|
|
int num1 = 0;
|
|
int num2 = 0;
|
|
for (int i1 = i - 1; num1 < spreadInEachAxis && i1 > 0; --i1)
|
|
{
|
|
Tile tile = Main.tile[i1, j];
|
|
if (tile.active() && fittingTypes[(int) tile.type] && !WorldGen.SolidTileAllowBottomSlope(i1, j - 1))
|
|
++num1;
|
|
else if (!tile.active())
|
|
break;
|
|
}
|
|
for (int i2 = i + 1; num2 < spreadInEachAxis && i2 < Main.maxTilesX - 1; ++i2)
|
|
{
|
|
Tile tile = Main.tile[i2, j];
|
|
if (tile.active() && fittingTypes[(int) tile.type] && !WorldGen.SolidTileAllowBottomSlope(i2, j - 1))
|
|
++num2;
|
|
else if (!tile.active())
|
|
break;
|
|
}
|
|
return num1 + num2 + 1 >= requiredTotalSpread;
|
|
}
|
|
|
|
public static bool CanSpawnSandstormHostile(Vector2 position, int expandUp, int expandDown)
|
|
{
|
|
bool flag = true;
|
|
Point tileCoordinates = position.ToTileCoordinates();
|
|
for (int index = -1; index <= 1; ++index)
|
|
{
|
|
int topY;
|
|
int bottomY;
|
|
Collision.ExpandVertically(tileCoordinates.X + index, tileCoordinates.Y, out topY, out bottomY, expandUp, expandDown);
|
|
++topY;
|
|
--bottomY;
|
|
if (bottomY - topY < 20)
|
|
{
|
|
flag = false;
|
|
break;
|
|
}
|
|
}
|
|
return flag;
|
|
}
|
|
|
|
public static bool CanSpawnSandstormFriendly(Vector2 position, int expandUp, int expandDown)
|
|
{
|
|
bool flag = true;
|
|
Point tileCoordinates = position.ToTileCoordinates();
|
|
for (int index = -1; index <= 1; ++index)
|
|
{
|
|
int topY;
|
|
int bottomY;
|
|
Collision.ExpandVertically(tileCoordinates.X + index, tileCoordinates.Y, out topY, out bottomY, expandUp, expandDown);
|
|
++topY;
|
|
--bottomY;
|
|
if (bottomY - topY < 10)
|
|
{
|
|
flag = false;
|
|
break;
|
|
}
|
|
}
|
|
return flag;
|
|
}
|
|
|
|
public static void CheckArenaScore(
|
|
Vector2 arenaCenter,
|
|
out Point xLeftEnd,
|
|
out Point xRightEnd,
|
|
int walkerWidthInTiles = 5,
|
|
int walkerHeightInTiles = 10)
|
|
{
|
|
bool showDebug = false;
|
|
Point tileCoordinates = arenaCenter.ToTileCoordinates();
|
|
xLeftEnd = xRightEnd = tileCoordinates;
|
|
int bottomY;
|
|
Collision.ExpandVertically(tileCoordinates.X, tileCoordinates.Y, out int _, out bottomY, 0, 4);
|
|
tileCoordinates.Y = bottomY;
|
|
if (showDebug)
|
|
Dust.QuickDust(tileCoordinates, Color.Blue).scale = 5f;
|
|
Point lastIteratedFloorSpot1;
|
|
StrayMethods.SendWalker(tileCoordinates, walkerHeightInTiles, -1, out int _, out lastIteratedFloorSpot1, 120, showDebug);
|
|
Point lastIteratedFloorSpot2;
|
|
StrayMethods.SendWalker(tileCoordinates, walkerHeightInTiles, 1, out int _, out lastIteratedFloorSpot2, 120, showDebug);
|
|
++lastIteratedFloorSpot1.X;
|
|
--lastIteratedFloorSpot2.X;
|
|
if (showDebug)
|
|
Dust.QuickDustLine(lastIteratedFloorSpot1.ToWorldCoordinates(), lastIteratedFloorSpot2.ToWorldCoordinates(), 50f, Color.Pink);
|
|
xLeftEnd = lastIteratedFloorSpot1;
|
|
xRightEnd = lastIteratedFloorSpot2;
|
|
}
|
|
|
|
public static void SendWalker(
|
|
Point startFloorPosition,
|
|
int height,
|
|
int direction,
|
|
out int distanceCoveredInTiles,
|
|
out Point lastIteratedFloorSpot,
|
|
int maxDistance = 100,
|
|
bool showDebug = false)
|
|
{
|
|
distanceCoveredInTiles = 0;
|
|
--startFloorPosition.Y;
|
|
lastIteratedFloorSpot = startFloorPosition;
|
|
for (int index1 = 0; index1 < maxDistance; ++index1)
|
|
{
|
|
for (int index2 = 0; index2 < 3 && WorldGen.SolidTile3(startFloorPosition.X, startFloorPosition.Y); ++index2)
|
|
--startFloorPosition.Y;
|
|
int topY1;
|
|
int bottomY1;
|
|
Collision.ExpandVertically(startFloorPosition.X, startFloorPosition.Y, out topY1, out bottomY1, height, 2);
|
|
++topY1;
|
|
--bottomY1;
|
|
if (!WorldGen.SolidTile3(startFloorPosition.X, bottomY1 + 1))
|
|
{
|
|
int topY2;
|
|
int bottomY2;
|
|
Collision.ExpandVertically(startFloorPosition.X, bottomY1, out topY2, out bottomY2, 0, 6);
|
|
if (showDebug)
|
|
Dust.QuickBox(new Vector2((float) (startFloorPosition.X * 16 + 8), (float) (topY2 * 16)), new Vector2((float) (startFloorPosition.X * 16 + 8), (float) (bottomY2 * 16)), 1, Color.Blue, (Action<Dust>) null);
|
|
if (!WorldGen.SolidTile3(startFloorPosition.X, bottomY2))
|
|
break;
|
|
}
|
|
if (bottomY1 - topY1 >= height - 1)
|
|
{
|
|
if (showDebug)
|
|
{
|
|
Dust.QuickDust(startFloorPosition, Color.Green).scale = 1f;
|
|
Dust.QuickBox(new Vector2((float) (startFloorPosition.X * 16 + 8), (float) (topY1 * 16)), new Vector2((float) (startFloorPosition.X * 16 + 8), (float) (bottomY1 * 16 + 16)), 1, Color.Red, (Action<Dust>) null);
|
|
}
|
|
distanceCoveredInTiles += direction;
|
|
startFloorPosition.X += direction;
|
|
startFloorPosition.Y = bottomY1;
|
|
lastIteratedFloorSpot = startFloorPosition;
|
|
if (Math.Abs(distanceCoveredInTiles) >= maxDistance)
|
|
break;
|
|
}
|
|
else
|
|
break;
|
|
}
|
|
distanceCoveredInTiles = Math.Abs(distanceCoveredInTiles);
|
|
}
|
|
}
|
|
}
|