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);
}