68 lines
3.8 KiB
C#
68 lines
3.8 KiB
C#
// Decompiled with JetBrains decompiler
|
|
// Type: Terraria.GameContent.Biomes.MiningExplosivesBiome
|
|
// 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 Terraria.GameContent.Generation;
|
|
using Terraria.WorldBuilding;
|
|
|
|
namespace Terraria.GameContent.Biomes
|
|
{
|
|
public class MiningExplosivesBiome : MicroBiome
|
|
{
|
|
public override bool Place(Point origin, StructureMap structures)
|
|
{
|
|
if (WorldGen.SolidTile(origin.X, origin.Y) || Main.tile[origin.X, origin.Y].wall == (ushort) 216 || Main.tile[origin.X, origin.Y].wall == (ushort) 187)
|
|
return false;
|
|
ushort type = Utils.SelectRandom<ushort>(GenBase._random, WorldGen.goldBar == 19 ? (ushort) 8 : (ushort) 169, WorldGen.silverBar == 21 ? (ushort) 9 : (ushort) 168, WorldGen.ironBar == 22 ? (ushort) 6 : (ushort) 167, WorldGen.copperBar == 20 ? (ushort) 7 : (ushort) 166);
|
|
double num1 = GenBase._random.NextDouble() * 2.0 - 1.0;
|
|
if (!WorldUtils.Find(origin, Searches.Chain(num1 > 0.0 ? (GenSearch) new Searches.Right(40) : (GenSearch) new Searches.Left(40), (GenCondition) new Conditions.IsSolid()), out origin))
|
|
return false;
|
|
if (!WorldUtils.Find(origin, Searches.Chain((GenSearch) new Searches.Down(80), (GenCondition) new Conditions.IsSolid()), out origin))
|
|
return false;
|
|
ShapeData shapeData = new ShapeData();
|
|
Ref<int> count1 = new Ref<int>(0);
|
|
Ref<int> count2 = new Ref<int>(0);
|
|
WorldUtils.Gen(origin, new ShapeRunner(10f, 20, new Vector2((float) num1, 1f)).Output(shapeData), Actions.Chain((GenAction) new Modifiers.Blotches(), (GenAction) new Actions.Scanner(count1), (GenAction) new Modifiers.IsSolid(), (GenAction) new Actions.Scanner(count2)));
|
|
if (count2.Value < count1.Value / 2)
|
|
return false;
|
|
Microsoft.Xna.Framework.Rectangle area = new Microsoft.Xna.Framework.Rectangle(origin.X - 15, origin.Y - 10, 30, 20);
|
|
if (!structures.CanPlace(area))
|
|
return false;
|
|
WorldUtils.Gen(origin, (GenShape) new ModShapes.All(shapeData), (GenAction) new Actions.SetTile(type, true));
|
|
WorldUtils.Gen(new Point(origin.X - (int) (num1 * -5.0), origin.Y - 5), (GenShape) new Shapes.Circle(5), Actions.Chain((GenAction) new Modifiers.Blotches(), (GenAction) new Actions.ClearTile(true)));
|
|
Point result1;
|
|
int num2 = 1 & (WorldUtils.Find(new Point(origin.X - (num1 > 0.0 ? 3 : -3), origin.Y - 3), Searches.Chain((GenSearch) new Searches.Down(10), (GenCondition) new Conditions.IsSolid()), out result1) ? 1 : 0);
|
|
int num3 = GenBase._random.Next(4) == 0 ? 3 : 7;
|
|
Point result2;
|
|
int num4 = WorldUtils.Find(new Point(origin.X - (num1 > 0.0 ? -num3 : num3), origin.Y - 3), Searches.Chain((GenSearch) new Searches.Down(10), (GenCondition) new Conditions.IsSolid()), out result2) ? 1 : 0;
|
|
if ((num2 & num4) == 0)
|
|
return false;
|
|
--result1.Y;
|
|
--result2.Y;
|
|
Tile tile1 = GenBase._tiles[result1.X, result1.Y + 1];
|
|
tile1.slope((byte) 0);
|
|
tile1.halfBrick(false);
|
|
for (int index = -1; index <= 1; ++index)
|
|
{
|
|
WorldUtils.ClearTile(result2.X + index, result2.Y);
|
|
Tile tile2 = GenBase._tiles[result2.X + index, result2.Y + 1];
|
|
if (!WorldGen.SolidOrSlopedTile(tile2))
|
|
{
|
|
tile2.ResetToType((ushort) 1);
|
|
tile2.active(true);
|
|
}
|
|
tile2.slope((byte) 0);
|
|
tile2.halfBrick(false);
|
|
WorldUtils.TileFrame(result2.X + index, result2.Y + 1, true);
|
|
}
|
|
WorldGen.PlaceTile(result1.X, result1.Y, 141);
|
|
WorldGen.PlaceTile(result2.X, result2.Y, 411, true, true);
|
|
WorldUtils.WireLine(result1, result2);
|
|
structures.AddProtectedStructure(area, 5);
|
|
return true;
|
|
}
|
|
}
|
|
}
|