terraria-source-code/WorldBuilding/SimpleStructure.cs
2021-10-26 12:45:26 -04:00

91 lines
2.7 KiB
C#

// Decompiled with JetBrains decompiler
// Type: Terraria.WorldBuilding.SimpleStructure
// 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;
namespace Terraria.WorldBuilding
{
public class SimpleStructure : GenStructure
{
private int[,] _data;
private int _width;
private int _height;
private GenAction[] _actions;
private bool _xMirror;
private bool _yMirror;
public int Width => this._width;
public int Height => this._height;
public SimpleStructure(params string[] data) => this.ReadData(data);
public SimpleStructure(string data) => this.ReadData(data.Split('\n'));
private void ReadData(string[] lines)
{
this._height = lines.Length;
this._width = lines[0].Length;
this._data = new int[this._width, this._height];
for (int index1 = 0; index1 < this._height; ++index1)
{
for (int index2 = 0; index2 < this._width; ++index2)
{
int num = (int) lines[index1][index2];
switch (num)
{
case 48:
case 49:
case 50:
case 51:
case 52:
case 53:
case 54:
case 55:
case 56:
case 57:
this._data[index2, index1] = num - 48;
break;
default:
this._data[index2, index1] = -1;
break;
}
}
}
}
public SimpleStructure SetActions(params GenAction[] actions)
{
this._actions = actions;
return this;
}
public SimpleStructure Mirror(bool horizontalMirror, bool verticalMirror)
{
this._xMirror = horizontalMirror;
this._yMirror = verticalMirror;
return this;
}
public override bool Place(Point origin, StructureMap structures)
{
if (!structures.CanPlace(new Microsoft.Xna.Framework.Rectangle(origin.X, origin.Y, this._width, this._height)))
return false;
for (int index1 = 0; index1 < this._width; ++index1)
{
for (int index2 = 0; index2 < this._height; ++index2)
{
int num1 = this._xMirror ? -index1 : index1;
int num2 = this._yMirror ? -index2 : index2;
if (this._data[index1, index2] != -1 && !this._actions[this._data[index1, index2]].Apply(origin, num1 + origin.X, num2 + origin.Y))
return false;
}
}
structures.AddProtectedStructure(new Microsoft.Xna.Framework.Rectangle(origin.X, origin.Y, this._width, this._height));
return true;
}
}
}