public void SmartCursorLookup()
{
if (this.whoAmI != Main.myPlayer)
return;
Main.smartDigShowing = false;
if (!Main.smartDigEnabled)
return;
Item obj = this.inventory[this.selectedItem];
Vector2 vector2_1 = Main.screenPosition + new Vector2((float)Main.mouseX, (float)Main.mouseY);
if ((double)this.gravDir == -1.0)
vector2_1.Y = Main.screenPosition.Y + (float)Main.screenHeight - (float)Main.mouseY;
int x1 = Player.tileTargetX;
int y1 = Player.tileTargetY;
if (x1 < 10)
x1 = 10;
if (x1 > Main.maxTilesX - 10)
x1 = Main.maxTilesX - 10;
if (y1 < 10)
y1 = 10;
if (y1 > Main.maxTilesY - 10)
y1 = Main.maxTilesY - 10;
bool flag1 = false;
if (Main.tile[x1, y1] == null)
return;
if (Main.tile[x1, y1].active())
{
ushort num = Main.tile[x1, y1].type;
if ((uint)num <= 132U)
{
if ((uint)num <= 55U)
{
if ((uint)num <= 21U)
{
switch (num)
{
case (ushort)4:
case (ushort)10:
case (ushort)11:
case (ushort)13:
case (ushort)21:
break;
default:
goto label_45;
}
}
else if ((uint)num <= 33U)
{
if ((int)num != 29 && (int)num != 33)
goto label_45;
}
else
{
switch (num)
{
case (ushort)49:
case (ushort)50:
case (ushort)55:
break;
default:
goto label_45;
}
}
}
else if ((uint)num <= 88U)
{
if ((int)num != 79 && (int)num != 85 && (int)num != 88)
goto label_45;
}
else if ((uint)num <= 104U)
{
if ((int)num != 97 && (int)num != 104)
goto label_45;
}
else if ((int)num != 125 && (int)num != 132)
goto label_45;
}
else if ((uint)num <= 216U)
{
if ((uint)num <= 144U)
{
if ((int)num != 136 && (int)num != 139 && (int)num != 144)
goto label_45;
}
else if ((uint)num <= 209U)
{
switch (num)
{
case (ushort)174:
case (ushort)207:
case (ushort)209:
break;
default:
goto label_45;
}
}
else if ((int)num != 212 && (int)num != 216)
goto label_45;
}
else if ((uint)num <= 314U)
{
if ((uint)num <= 237U)
{
if ((int)num != 219 && (int)num != 237)
goto label_45;
}
else if ((int)num != 287)
{
if ((int)num == 314 && (double)this.gravDir == 1.0)
{
flag1 = true;
goto label_45;
}
else
goto label_45;
}
}
else if ((uint)num <= 354U)
{
switch (num)
{
case (ushort)334:
case (ushort)335:
case (ushort)338:
case (ushort)354:
break;
default:
goto label_45;
}
}
else
{
switch (num)
{
case (ushort)386:
case (ushort)387:
case (ushort)411:
break;
default:
goto label_45;
}
}
flag1 = true;
}
label_45:
int num1 = obj.tileBoost;
int num2 = 0;
if (obj.itemId == 1071 || obj.itemId == 1543 || (obj.itemId == 1072 || obj.itemId == 1544))
{
for (int index = 0; index < 58; ++index)
{
if (this.inventory[index].stack > 0 && (int)this.inventory[index].paint > 0)
{
num2 = (int)this.inventory[index].paint;
break;
}
}
}
int lx = (int)((double)this.position.X / 16.0) - Player.tileRangeX - num1 + 1;
int hx = (int)(((double)this.position.X + (double)this.width) / 16.0) + Player.tileRangeX + num1 - 1;
int ly = (int)((double)this.position.Y / 16.0) - Player.tileRangeY - num1 + 1;
int hy = (int)(((double)this.position.Y + (double)this.height) / 16.0) + Player.tileRangeY + num1 - 2;
if (lx < 10)
lx = 10;
if (hx > Main.maxTilesX - 10)
hx = Main.maxTilesX - 10;
if (ly < 10)
ly = 10;
if (hy > Main.maxTilesY - 10)
hy = Main.maxTilesY - 10;
if (flag1 && x1 >= lx && (x1 <= hx && y1 >= ly) && y1 <= hy)
return;
List<Tuple<int, int>> ignoreTargets = new List<Tuple<int, int>>();
for (int index = 0; index < this.grapCount; ++index)
{
Projectile projectile = Main.projectile[this.grappling[index]];
int num3 = (int)projectile.Center.X / 16;
int num4 = (int)projectile.Center.Y / 16;
ignoreTargets.Add(new Tuple<int, int>(num3, num4));
}
int num5 = -1;
int num6 = -1;
if (obj.axe > 0 && num5 == -1 && num6 == -1)
{
float num3 = -1f;
for (int index1 = lx; index1 <= hx; ++index1)
{
for (int index2 = ly; index2 <= hy; ++index2)
{
if (Main.tile[index1, index2].active())
{
Tile tile = Main.tile[index1, index2];
if (Main.tileAxe[(int)tile.type])
{
int x2 = index1;
int y2 = index2;
if ((int)tile.type == 5)
{
if (Collision.InTileBounds(x2 + 1, y2, lx, ly, hx, hy))
{
if ((int)Main.tile[x2, y2].frameY >= 198 && (int)Main.tile[x2, y2].frameX == 44)
++x2;
if ((int)Main.tile[x2, y2].frameX == 66 && (int)Main.tile[x2, y2].frameY <= 44)
++x2;
if ((int)Main.tile[x2, y2].frameX == 44 && (int)Main.tile[x2, y2].frameY >= 132 && (int)Main.tile[x2, y2].frameY <= 176)
++x2;
}
if (Collision.InTileBounds(x2 - 1, y2, lx, ly, hx, hy))
{
if ((int)Main.tile[x2, y2].frameY >= 198 && (int)Main.tile[x2, y2].frameX == 66)
--x2;
if ((int)Main.tile[x2, y2].frameX == 88 && (int)Main.tile[x2, y2].frameY >= 66 && (int)Main.tile[x2, y2].frameY <= 110)
--x2;
if ((int)Main.tile[x2, y2].frameX == 22 && (int)Main.tile[x2, y2].frameY >= 132 && (int)Main.tile[x2, y2].frameY <= 176)
--x2;
}
while (Main.tile[x2, y2].active() && (int)Main.tile[x2, y2].type == 5 && ((int)Main.tile[x2, y2 + 1].type == 5 && Collision.InTileBounds(x2, y2 + 1, lx, ly, hx, hy)))
++y2;
}
if ((int)tile.type == 80)
{
if (Collision.InTileBounds(x2 + 1, y2, lx, ly, hx, hy))
{
if ((int)Main.tile[x2, y2].frameX == 54)
++x2;
if ((int)Main.tile[x2, y2].frameX == 108 && (int)Main.tile[x2, y2].frameY == 36)
++x2;
}
if (Collision.InTileBounds(x2 - 1, y2, lx, ly, hx, hy))
{
if ((int)Main.tile[x2, y2].frameX == 36)
--x2;
if ((int)Main.tile[x2, y2].frameX == 108 && (int)Main.tile[x2, y2].frameY == 18)
--x2;
}
while (Main.tile[x2, y2].active() && (int)Main.tile[x2, y2].type == 80 && ((int)Main.tile[x2, y2 + 1].type == 80 && Collision.InTileBounds(x2, y2 + 1, lx, ly, hx, hy)))
++y2;
}
if ((int)tile.type == 323 || (int)tile.type == 72)
{
while (Main.tile[x2, y2].active() && ((int)Main.tile[x2, y2].type == 323 && (int)Main.tile[x2, y2 + 1].type == 323 || (int)Main.tile[x2, y2].type == 72 && (int)Main.tile[x2, y2 + 1].type == 72) && Collision.InTileBounds(x2, y2 + 1, lx, ly, hx, hy))
++y2;
}
float num4 = Vector2.Distance(new Vector2((float)x2, (float)y2) * 16f + Vector2.One * 8f, vector2_1);
if ((double)num3 == -1.0 || (double)num4 < (double)num3)
{
num3 = num4;
num5 = x2;
num6 = y2;
}
}
}
}
}
}
if (obj.pick > 0 && num5 == -1 && num6 == -1)
{
Vector2 vector2_2 = vector2_1 - this.Center;
int num3 = Math.Sign(vector2_2.X);
int num4 = Math.Sign(vector2_2.Y);
if ((double)Math.Abs(vector2_2.X) > (double)Math.Abs(vector2_2.Y) * 3.0)
{
num4 = 0;
vector2_1.Y = this.Center.Y;
}
if ((double)Math.Abs(vector2_2.Y) > (double)Math.Abs(vector2_2.X) * 3.0)
{
num3 = 0;
vector2_1.X = this.Center.X;
}
int num7 = (int)this.Center.X / 16;
int num8 = (int)this.Center.Y / 16;
List<Tuple<int, int>> list1 = new List<Tuple<int, int>>();
List<Tuple<int, int>> list2 = new List<Tuple<int, int>>();
int num9 = 1;
if (num4 == -1 && num3 != 0)
num9 = -1;
int index1 = (int)(((double)this.position.X + (double)(this.width / 2) + (double)((this.width / 2 - 1) * num3)) / 16.0);
int index2 = (int)(((double)this.position.Y + 0.1) / 16.0);
if (num9 == -1)
index2 = (int)(((double)this.position.Y + (double)this.height - 1.0) / 16.0);
int num10 = this.width / 16 + (this.width % 16 == 0 ? 0 : 1);
int num11 = this.height / 16 + (this.height % 16 == 0 ? 0 : 1);
if (num3 != 0)
{
for (int index3 = 0; index3 < num11; ++index3)
{
if (Main.tile[index1, index2 + index3 * num9] == null)
return;
list1.Add(new Tuple<int, int>(index1, index2 + index3 * num9));
}
}
if (num4 != 0)
{
for (int index3 = 0; index3 < num10; ++index3)
{
if (Main.tile[(int)((double)this.position.X / 16.0) + index3, index2] == null)
return;
list1.Add(new Tuple<int, int>((int)((double)this.position.X / 16.0) + index3, index2));
}
}
int index4 = (int)(((double)vector2_1.X + (double)((this.width / 2 - 1) * num3)) / 16.0);
int index5 = (int)(((double)vector2_1.Y + 0.1 - (double)(this.height / 2 + 1)) / 16.0);
if (num9 == -1)
index5 = (int)(((double)vector2_1.Y + (double)(this.height / 2) - 1.0) / 16.0);
if ((double)this.gravDir == -1.0 && num4 == 0)
++index5;
if (index5 < 10)
index5 = 10;
if (index5 > Main.maxTilesY - 10)
index5 = Main.maxTilesY - 10;
int num12 = this.width / 16 + (this.width % 16 == 0 ? 0 : 1);
int num13 = this.height / 16 + (this.height % 16 == 0 ? 0 : 1);
if (num3 != 0)
{
for (int index3 = 0; index3 < num13; ++index3)
{
if (Main.tile[index4, index5 + index3 * num9] == null)
return;
list2.Add(new Tuple<int, int>(index4, index5 + index3 * num9));
}
}
if (num4 != 0)
{
for (int index3 = 0; index3 < num12; ++index3)
{
if (Main.tile[(int)(((double)vector2_1.X - (double)(this.width / 2)) / 16.0) + index3, index5] == null)
return;
list2.Add(new Tuple<int, int>((int)(((double)vector2_1.X - (double)(this.width / 2)) / 16.0) + index3, index5));
}
}
List<Tuple<int, int>> list3 = new List<Tuple<int, int>>();
while (list1.Count > 0)
{
Tuple<int, int> tuple1 = list1[0];
Tuple<int, int> tuple2 = list2[0];
Tuple<int, int> col;
if (!Collision.TupleHitLine(tuple1.Item1, tuple1.Item2, tuple2.Item1, tuple2.Item2, num3 * (int)this.gravDir, -num4 * (int)this.gravDir, ignoreTargets, out col))
{
list1.Remove(tuple1);
list2.Remove(tuple2);
}
else
{
if (col.Item1 != tuple2.Item1 || col.Item2 != tuple2.Item2)
list3.Add(col);
Tile tile = Main.tile[col.Item1, col.Item2];
if (!tile.inActive() && tile.active() && (Main.tileSolid[(int)tile.type] && !Main.tileSolidTop[(int)tile.type]) && !ignoreTargets.Contains(col))
list3.Add(col);
list1.Remove(tuple1);
list2.Remove(tuple2);
}
}
List<Tuple<int, int>> list4 = new List<Tuple<int, int>>();
for (int index3 = 0; index3 < list3.Count; ++index3)
{
if (!WorldGen.CanKillTile(list3[index3].Item1, list3[index3].Item2))
list4.Add(list3[index3]);
}
for (int index3 = 0; index3 < list4.Count; ++index3)
list3.Remove(list4[index3]);
list4.Clear();
if (list3.Count > 0)
{
float num14 = -1f;
Tuple<int, int> tuple = list3[0];
for (int index3 = 0; index3 < list3.Count; ++index3)
{
float num15 = Vector2.Distance(new Vector2((float)list3[index3].Item1, (float)list3[index3].Item2) * 16f + Vector2.One * 8f, this.Center);
if ((double)num14 == -1.0 || (double)num15 < (double)num14)
{
num14 = num15;
tuple = list3[index3];
}
}
if (Collision.InTileBounds(tuple.Item1, tuple.Item2, lx, ly, hx, hy))
{
num5 = tuple.Item1;
num6 = tuple.Item2;
}
}
list1.Clear();
list2.Clear();
list3.Clear();
}
if ((obj.itemId == 509 || obj.itemId == 850 || obj.itemId == 851) && (num5 == -1 && num6 == -1))
{
List<Tuple<int, int>> list = new List<Tuple<int, int>>();
var flag = k_WireFlags.WIRE_NONE;
if (obj.itemId == 509)
flag = k_WireFlags.WIRE_RED;
if (obj.itemId == 850)
flag = k_WireFlags.WIRE_GREEN;
if (obj.itemId == 851)
flag = k_WireFlags.WIRE_BLUE;
if (flag != k_WireFlags.WIRE_NONE && !Main.tile[x1, y1].k_HasWireFlags(flag))
{
var directions = new int[][] { new int[] { 0, -1 }, new int[] { 0, 1 }, new int[] { -1, 0 }, new int[] { 1, 0 } };
for (int index1 = lx; index1 <= hx; ++index1)
{
for (int index2 = ly; index2 <= hy; ++index2)
{
Tile tile = Main.tile[index1, index2];
if (tile.k_HasWireFlags(flag))
{
for (int index3 = 0; index3 < 4; ++index3)
{
int i3x = index1 + directions[index3][0];
int i3y = index2 + directions[index3][1];
if (!Main.tile[i3x, i3y].k_HasWireFlags(flag))
list.Add(new Tuple<int, int>(i3x, i3y));
}
}
}
}
}
if (list.Count > 0)
{
float num4 = -1f;
Tuple<int, int> tuple = list[0];
for (int index = 0; index < list.Count; ++index)
{
float num7 = Vector2.Distance(new Vector2((float)list[index].Item1, (float)list[index].Item2) * 16f + Vector2.One * 8f, vector2_1);
if ((double)num4 == -1.0 || (double)num7 < (double)num4)
{
num4 = num7;
tuple = list[index];
}
}
if (Collision.InTileBounds(tuple.Item1, tuple.Item2, lx, ly, hx, hy))
{
num5 = tuple.Item1;
num6 = tuple.Item2;
}
}
list.Clear();
}
if (obj.hammer > 0 && num5 == -1 && num6 == -1)
{
Vector2 vector2_2 = vector2_1 - this.Center;
int num3 = Math.Sign(vector2_2.X);
int num4 = Math.Sign(vector2_2.Y);
if ((double)Math.Abs(vector2_2.X) > (double)Math.Abs(vector2_2.Y) * 3.0)
{
num4 = 0;
vector2_1.Y = this.Center.Y;
}
if ((double)Math.Abs(vector2_2.Y) > (double)Math.Abs(vector2_2.X) * 3.0)
{
num3 = 0;
vector2_1.X = this.Center.X;
}
int num7 = (int)this.Center.X / 16;
int num8 = (int)this.Center.Y / 16;
List<Tuple<int, int>> list1 = new List<Tuple<int, int>>();
List<Tuple<int, int>> list2 = new List<Tuple<int, int>>();
int num9 = 1;
if (num4 == -1 && num3 != 0)
num9 = -1;
int index1 = (int)(((double)this.position.X + (double)(this.width / 2) + (double)((this.width / 2 - 1) * num3)) / 16.0);
int index2 = (int)(((double)this.position.Y + 0.1) / 16.0);
if (num9 == -1)
index2 = (int)(((double)this.position.Y + (double)this.height - 1.0) / 16.0);
int num10 = this.width / 16 + (this.width % 16 == 0 ? 0 : 1);
int num11 = this.height / 16 + (this.height % 16 == 0 ? 0 : 1);
if (num3 != 0)
{
for (int index3 = 0; index3 < num11; ++index3)
{
if (Main.tile[index1, index2 + index3 * num9] == null)
return;
list1.Add(new Tuple<int, int>(index1, index2 + index3 * num9));
}
}
if (num4 != 0)
{
for (int index3 = 0; index3 < num10; ++index3)
{
if (Main.tile[(int)((double)this.position.X / 16.0) + index3, index2] == null)
return;
list1.Add(new Tuple<int, int>((int)((double)this.position.X / 16.0) + index3, index2));
}
}
int index4 = (int)(((double)vector2_1.X + (double)((this.width / 2 - 1) * num3)) / 16.0);
int index5 = (int)(((double)vector2_1.Y + 0.1 - (double)(this.height / 2 + 1)) / 16.0);
if (num9 == -1)
index5 = (int)(((double)vector2_1.Y + (double)(this.height / 2) - 1.0) / 16.0);
if ((double)this.gravDir == -1.0 && num4 == 0)
++index5;
if (index5 < 10)
index5 = 10;
if (index5 > Main.maxTilesY - 10)
index5 = Main.maxTilesY - 10;
int num12 = this.width / 16 + (this.width % 16 == 0 ? 0 : 1);
int num13 = this.height / 16 + (this.height % 16 == 0 ? 0 : 1);
if (num3 != 0)
{
for (int index3 = 0; index3 < num13; ++index3)
{
if (Main.tile[index4, index5 + index3 * num9] == null)
return;
list2.Add(new Tuple<int, int>(index4, index5 + index3 * num9));
}
}
if (num4 != 0)
{
for (int index3 = 0; index3 < num12; ++index3)
{
if (Main.tile[(int)(((double)vector2_1.X - (double)(this.width / 2)) / 16.0) + index3, index5] == null)
return;
list2.Add(new Tuple<int, int>((int)(((double)vector2_1.X - (double)(this.width / 2)) / 16.0) + index3, index5));
}
}
List<Tuple<int, int>> list3 = new List<Tuple<int, int>>();
while (list1.Count > 0)
{
Tuple<int, int> tuple1 = list1[0];
Tuple<int, int> tuple2 = list2[0];
Tuple<int, int> tuple3 = Collision.TupleHitLineWall(tuple1.Item1, tuple1.Item2, tuple2.Item1, tuple2.Item2);
if (tuple3.Item1 == -1 || tuple3.Item2 == -1)
{
list1.Remove(tuple1);
list2.Remove(tuple2);
}
else
{
if (tuple3.Item1 != tuple2.Item1 || tuple3.Item2 != tuple2.Item2)
list3.Add(tuple3);
Tile tile = Main.tile[tuple3.Item1, tuple3.Item2];
if (Collision.HitWallSubstep(tuple3.Item1, tuple3.Item2))
list3.Add(tuple3);
list1.Remove(tuple1);
list2.Remove(tuple2);
}
}
if (list3.Count > 0)
{
float num14 = -1f;
Tuple<int, int> tuple = list3[0];
for (int index3 = 0; index3 < list3.Count; ++index3)
{
float num15 = Vector2.Distance(new Vector2((float)list3[index3].Item1, (float)list3[index3].Item2) * 16f + Vector2.One * 8f, this.Center);
if ((double)num14 == -1.0 || (double)num15 < (double)num14)
{
num14 = num15;
tuple = list3[index3];
}
}
if (Collision.InTileBounds(tuple.Item1, tuple.Item2, lx, ly, hx, hy))
{
this.poundRelease = false;
num5 = tuple.Item1;
num6 = tuple.Item2;
}
}
list3.Clear();
list1.Clear();
list2.Clear();
}
if (obj.hammer > 0 && num5 == -1 && num6 == -1)
{
List<Tuple<int, int>> list = new List<Tuple<int, int>>();
for (int x2 = lx; x2 <= hx; ++x2)
{
for (int y2 = ly; y2 <= hy; ++y2)
{
if ((int)Main.tile[x2, y2].wall > 0 && Collision.HitWallSubstep(x2, y2))
list.Add(new Tuple<int, int>(x2, y2));
}
}
if (list.Count > 0)
{
float num3 = -1f;
Tuple<int, int> tuple = list[0];
for (int index = 0; index < list.Count; ++index)
{
float num4 = Vector2.Distance(new Vector2((float)list[index].Item1, (float)list[index].Item2) * 16f + Vector2.One * 8f, vector2_1);
if ((double)num3 == -1.0 || (double)num4 < (double)num3)
{
num3 = num4;
tuple = list[index];
}
}
if (Collision.InTileBounds(tuple.Item1, tuple.Item2, lx, ly, hx, hy))
{
this.poundRelease = false;
num5 = tuple.Item1;
num6 = tuple.Item2;
}
}
list.Clear();
}
if (obj.itemId == 510 && num5 == -1 && num6 == -1)
{
List<Tuple<int, int>> list = new List<Tuple<int, int>>();
for (int index1 = lx; index1 <= hx; ++index1)
{
for (int index2 = ly; index2 <= hy; ++index2)
{
Tile tile = Main.tile[index1, index2];
if (tile.k_wireFlags != k_WireFlags.WIRE_NONE)
list.Add(new Tuple<int, int>(index1, index2));
}
}
if (list.Count > 0)
{
float num3 = -1f;
Tuple<int, int> tuple = list[0];
for (int index = 0; index < list.Count; ++index)
{
float num4 = Vector2.Distance(new Vector2((float)list[index].Item1, (float)list[index].Item2) * 16f + Vector2.One * 8f, vector2_1);
if ((double)num3 == -1.0 || (double)num4 < (double)num3)
{
num3 = num4;
tuple = list[index];
}
}
if (Collision.InTileBounds(tuple.Item1, tuple.Item2, lx, ly, hx, hy))
{
num5 = tuple.Item1;
num6 = tuple.Item2;
}
}
list.Clear();
}
if (obj.createTile == 19 && num5 == -1 && num6 == -1)
{
List<Tuple<int, int>> list = new List<Tuple<int, int>>();
bool flag2 = false;
if (Main.tile[x1, y1].active() && (int)Main.tile[x1, y1].type == 19)
flag2 = true;
if (!flag2)
{
for (int index1 = lx; index1 <= hx; ++index1)
{
for (int index2 = ly; index2 <= hy; ++index2)
{
Tile tile1 = Main.tile[index1, index2];
if (tile1.active() && (int)tile1.type == 19)
{
int num3 = (int)tile1.slope();
if (num3 != 2 && !Main.tile[index1 - 1, index2 - 1].active())
list.Add(new Tuple<int, int>(index1 - 1, index2 - 1));
if (!Main.tile[index1 - 1, index2].active())
list.Add(new Tuple<int, int>(index1 - 1, index2));
if (num3 != 1 && !Main.tile[index1 - 1, index2 + 1].active())
list.Add(new Tuple<int, int>(index1 - 1, index2 + 1));
if (num3 != 1 && !Main.tile[index1 + 1, index2 - 1].active())
list.Add(new Tuple<int, int>(index1 + 1, index2 - 1));
if (!Main.tile[index1 + 1, index2].active())
list.Add(new Tuple<int, int>(index1 + 1, index2));
if (num3 != 2 && !Main.tile[index1 + 1, index2 + 1].active())
list.Add(new Tuple<int, int>(index1 + 1, index2 + 1));
}
if (!tile1.active())
{
int num3 = 0;
int num4 = 1;
Tile tile2 = Main.tile[index1 + num3, index2 + num4];
if (tile2.active() && Main.tileSolid[(int)tile2.type] && !Main.tileSolidTop[(int)tile2.type])
list.Add(new Tuple<int, int>(index1, index2));
int num7 = -1;
int num8 = 0;
Tile tile3 = Main.tile[index1 + num7, index2 + num8];
if (tile3.active() && Main.tileSolid[(int)tile3.type] && !Main.tileSolidTop[(int)tile3.type])
list.Add(new Tuple<int, int>(index1, index2));
int num9 = 1;
int num10 = 0;
Tile tile4 = Main.tile[index1 + num9, index2 + num10];
if (tile4.active() && Main.tileSolid[(int)tile4.type] && !Main.tileSolidTop[(int)tile4.type])
list.Add(new Tuple<int, int>(index1, index2));
}
}
}
}
if (list.Count > 0)
{
float num3 = -1f;
Tuple<int, int> tuple = list[0];
for (int index = 0; index < list.Count; ++index)
{
float num4 = Vector2.Distance(new Vector2((float)list[index].Item1, (float)list[index].Item2) * 16f + Vector2.One * 8f, vector2_1);
if ((double)num3 == -1.0 || (double)num4 < (double)num3)
{
num3 = num4;
tuple = list[index];
}
}
if (Collision.InTileBounds(tuple.Item1, tuple.Item2, lx, ly, hx, hy))
{
num5 = tuple.Item1;
num6 = tuple.Item2;
}
}
list.Clear();
}
if ((obj.itemId == 2340 || obj.itemId == 2739) && (num5 == -1 && num6 == -1))
{
List<Tuple<int, int>> list = new List<Tuple<int, int>>();
bool flag2 = false;
if (Main.tile[x1, y1].active() && (int)Main.tile[x1, y1].type == 314)
flag2 = true;
if (!flag2)
{
for (int index1 = lx; index1 <= hx; ++index1)
{
for (int index2 = ly; index2 <= hy; ++index2)
{
Tile tile = Main.tile[index1, index2];
if (tile.active() && (int)tile.type == 314)
{
bool flag3 = Main.tile[index1 + 1, index2 + 1].active() && (int)Main.tile[index1 + 1, index2 + 1].type == 314;
bool flag4 = Main.tile[index1 + 1, index2 - 1].active() && (int)Main.tile[index1 + 1, index2 - 1].type == 314;
bool flag5 = Main.tile[index1 - 1, index2 + 1].active() && (int)Main.tile[index1 - 1, index2 + 1].type == 314;
bool flag6 = Main.tile[index1 - 1, index2 - 1].active() && (int)Main.tile[index1 - 1, index2 - 1].type == 314;
if ((!Main.tile[index1 - 1, index2 - 1].active() || Main.tileCut[(int)Main.tile[index1 - 1, index2 - 1].type] || TileID.Sets.BreakableWhenPlacing[(int)Main.tile[index1 - 1, index2 - 1].type]) && (flag3 || !flag4))
list.Add(new Tuple<int, int>(index1 - 1, index2 - 1));
if (!Main.tile[index1 - 1, index2].active() || Main.tileCut[(int)Main.tile[index1 - 1, index2].type] || TileID.Sets.BreakableWhenPlacing[(int)Main.tile[index1 - 1, index2].type])
list.Add(new Tuple<int, int>(index1 - 1, index2));
if ((!Main.tile[index1 - 1, index2 + 1].active() || Main.tileCut[(int)Main.tile[index1 - 1, index2 + 1].type] || TileID.Sets.BreakableWhenPlacing[(int)Main.tile[index1 - 1, index2 + 1].type]) && (flag4 || !flag3))
list.Add(new Tuple<int, int>(index1 - 1, index2 + 1));
if ((!Main.tile[index1 + 1, index2 - 1].active() || Main.tileCut[(int)Main.tile[index1 + 1, index2 - 1].type] || TileID.Sets.BreakableWhenPlacing[(int)Main.tile[index1 + 1, index2 - 1].type]) && (flag5 || !flag6))
list.Add(new Tuple<int, int>(index1 + 1, index2 - 1));
if (!Main.tile[index1 + 1, index2].active() || Main.tileCut[(int)Main.tile[index1 + 1, index2].type] || TileID.Sets.BreakableWhenPlacing[(int)Main.tile[index1 + 1, index2].type])
list.Add(new Tuple<int, int>(index1 + 1, index2));
if ((!Main.tile[index1 + 1, index2 + 1].active() || Main.tileCut[(int)Main.tile[index1 + 1, index2 + 1].type] || TileID.Sets.BreakableWhenPlacing[(int)Main.tile[index1 + 1, index2 + 1].type]) && (flag6 || !flag5))
list.Add(new Tuple<int, int>(index1 + 1, index2 + 1));
}
}
}
}
if (list.Count > 0)
{
float num3 = -1f;
Tuple<int, int> tuple = list[0];
for (int index = 0; index < list.Count; ++index)
{
if ((!Main.tile[list[index].Item1, list[index].Item2 - 1].active() || (int)Main.tile[list[index].Item1, list[index].Item2 - 1].type != 314) && (!Main.tile[list[index].Item1, list[index].Item2 + 1].active() || (int)Main.tile[list[index].Item1, list[index].Item2 + 1].type != 314))
{
float num4 = Vector2.Distance(new Vector2((float)list[index].Item1, (float)list[index].Item2) * 16f + Vector2.One * 8f, vector2_1);
if ((double)num3 == -1.0 || (double)num4 < (double)num3)
{
num3 = num4;
tuple = list[index];
}
}
}
if (Collision.InTileBounds(tuple.Item1, tuple.Item2, lx, ly, hx, hy) && (double)num3 != -1.0)
{
num5 = tuple.Item1;
num6 = tuple.Item2;
}
}
list.Clear();
}
if (obj.itemId == 2492 && num5 == -1 && num6 == -1)
{
List<Tuple<int, int>> list = new List<Tuple<int, int>>();
bool flag2 = false;
if (Main.tile[x1, y1].active() && (int)Main.tile[x1, y1].type == 314)
flag2 = true;
if (!flag2)
{
for (int index1 = lx; index1 <= hx; ++index1)
{
for (int index2 = ly; index2 <= hy; ++index2)
{
Tile tile = Main.tile[index1, index2];
if (tile.active() && (int)tile.type == 314)
{
if (!Main.tile[index1 - 1, index2].active() || Main.tileCut[(int)Main.tile[index1 - 1, index2].type] || TileID.Sets.BreakableWhenPlacing[(int)Main.tile[index1 - 1, index2].type])
list.Add(new Tuple<int, int>(index1 - 1, index2));
if (!Main.tile[index1 + 1, index2].active() || Main.tileCut[(int)Main.tile[index1 + 1, index2].type] || TileID.Sets.BreakableWhenPlacing[(int)Main.tile[index1 + 1, index2].type])
list.Add(new Tuple<int, int>(index1 + 1, index2));
}
}
}
}
if (list.Count > 0)
{
float num3 = -1f;
Tuple<int, int> tuple = list[0];
for (int index = 0; index < list.Count; ++index)
{
if ((!Main.tile[list[index].Item1, list[index].Item2 - 1].active() || (int)Main.tile[list[index].Item1, list[index].Item2 - 1].type != 314) && (!Main.tile[list[index].Item1, list[index].Item2 + 1].active() || (int)Main.tile[list[index].Item1, list[index].Item2 + 1].type != 314))
{
float num4 = Vector2.Distance(new Vector2((float)list[index].Item1, (float)list[index].Item2) * 16f + Vector2.One * 8f, vector2_1);
if ((double)num3 == -1.0 || (double)num4 < (double)num3)
{
num3 = num4;
tuple = list[index];
}
}
}
if (Collision.InTileBounds(tuple.Item1, tuple.Item2, lx, ly, hx, hy) && (double)num3 != -1.0)
{
num5 = tuple.Item1;
num6 = tuple.Item2;
}
}
list.Clear();
}
if (obj.createWall > 0 && num5 == -1 && num6 == -1)
{
List<Tuple<int, int>> list = new List<Tuple<int, int>>();
for (int index1 = lx; index1 <= hx; ++index1)
{
for (int index2 = ly; index2 <= hy; ++index2)
{
Tile tile = Main.tile[index1, index2];
if ((int)tile.wall == 0 && (!tile.active() || !Main.tileSolid[(int)tile.type] || Main.tileSolidTop[(int)tile.type]) && Collision.CanHitWithCheck(this.position, this.width, this.height, new Vector2((float)index1, (float)index2) * 16f, 16, 16, new Utils.PerLinePoint(DelegateMethods.NotDoorStand)))
{
bool flag2 = false;
if (Main.tile[index1 - 1, index2].active() || (int)Main.tile[index1 - 1, index2].wall > 0)
flag2 = true;
if (Main.tile[index1 + 1, index2].active() || (int)Main.tile[index1 + 1, index2].wall > 0)
flag2 = true;
if (Main.tile[index1, index2 - 1].active() || (int)Main.tile[index1, index2 - 1].wall > 0)
flag2 = true;
if (Main.tile[index1, index2 + 1].active() || (int)Main.tile[index1, index2 + 1].wall > 0)
flag2 = true;
if (Main.tile[index1, index2].active() && (int)Main.tile[index1, index2].type == 11 && ((int)Main.tile[index1, index2].frameX < 18 || (int)Main.tile[index1, index2].frameX >= 54))
flag2 = false;
if (flag2)
list.Add(new Tuple<int, int>(index1, index2));
}
}
}
if (list.Count > 0)
{
float num3 = -1f;
Tuple<int, int> tuple = list[0];
for (int index = 0; index < list.Count; ++index)
{
float num4 = Vector2.Distance(new Vector2((float)list[index].Item1, (float)list[index].Item2) * 16f + Vector2.One * 8f, vector2_1);
if ((double)num3 == -1.0 || (double)num4 < (double)num3)
{
num3 = num4;
tuple = list[index];
}
}
if (Collision.InTileBounds(tuple.Item1, tuple.Item2, lx, ly, hx, hy))
{
num5 = tuple.Item1;
num6 = tuple.Item2;
}
}
list.Clear();
}
if (Player.SmartCursorSettings.SmartBlocksEnabled && obj.createTile > -1 && (obj.itemId != 213 && Main.tileSolid[obj.createTile]) && (!Main.tileSolidTop[obj.createTile] && !Main.tileFrameImportant[obj.createTile] && (num5 == -1 && num6 == -1)))
{
List<Tuple<int, int>> list = new List<Tuple<int, int>>();
bool flag2 = false;
if (Main.tile[x1, y1].active())
flag2 = true;
if (!Collision.InTileBounds(x1, y1, lx, ly, hx, hy))
flag2 = true;
if (!flag2)
{
for (int index1 = lx; index1 <= hx; ++index1)
{
for (int index2 = ly; index2 <= hy; ++index2)
{
Tile tile = Main.tile[index1, index2];
if (!tile.active() || Main.tileCut[(int)tile.type] || TileID.Sets.BreakableWhenPlacing[(int)tile.type])
{
bool flag3 = false;
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])
flag3 = true;
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])
flag3 = true;
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])
flag3 = true;
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])
flag3 = true;
if (flag3)
list.Add(new Tuple<int, int>(index1, index2));
}
}
}
}
if (list.Count > 0)
{
float num3 = -1f;
Tuple<int, int> tuple = list[0];
for (int index = 0; index < list.Count; ++index)
{
if (Collision.EmptyTile(list[index].Item1, list[index].Item2, false))
{
float num4 = Vector2.Distance(new Vector2((float)list[index].Item1, (float)list[index].Item2) * 16f + Vector2.One * 8f, vector2_1);
if ((double)num3 == -1.0 || (double)num4 < (double)num3)
{
num3 = num4;
tuple = list[index];
}
}
}
if (Collision.InTileBounds(tuple.Item1, tuple.Item2, lx, ly, hx, hy) && (double)num3 != -1.0)
{
num5 = tuple.Item1;
num6 = tuple.Item2;
}
}
list.Clear();
}
if ((obj.itemId == 1072 || obj.itemId == 1544) && (num2 != 0 && num5 == -1) && num6 == -1)
{
List<Tuple<int, int>> list = new List<Tuple<int, int>>();
for (int index1 = lx; index1 <= hx; ++index1)
{
for (int index2 = ly; index2 <= hy; ++index2)
{
Tile tile = Main.tile[index1, index2];
if ((int)tile.wall > 0 && (int)tile.wallColor() != num2 && (!tile.active() || !Main.tileSolid[(int)tile.type] || Main.tileSolidTop[(int)tile.type]))
list.Add(new Tuple<int, int>(index1, index2));
}
}
if (list.Count > 0)
{
float num3 = -1f;
Tuple<int, int> tuple = list[0];
for (int index = 0; index < list.Count; ++index)
{
float num4 = Vector2.Distance(new Vector2((float)list[index].Item1, (float)list[index].Item2) * 16f + Vector2.One * 8f, vector2_1);
if ((double)num3 == -1.0 || (double)num4 < (double)num3)
{
num3 = num4;
tuple = list[index];
}
}
if (Collision.InTileBounds(tuple.Item1, tuple.Item2, lx, ly, hx, hy))
{
num5 = tuple.Item1;
num6 = tuple.Item2;
}
}
list.Clear();
}
if ((obj.itemId == 1071 || obj.itemId == 1543) && (num2 != 0 && num5 == -1) && num6 == -1)
{
List<Tuple<int, int>> list = new List<Tuple<int, int>>();
for (int index1 = lx; index1 <= hx; ++index1)
{
for (int index2 = ly; index2 <= hy; ++index2)
{
Tile tile = Main.tile[index1, index2];
if (tile.active() && (int)tile.color() != num2)
list.Add(new Tuple<int, int>(index1, index2));
}
}
if (list.Count > 0)
{
float num3 = -1f;
Tuple<int, int> tuple = list[0];
for (int index = 0; index < list.Count; ++index)
{
float num4 = Vector2.Distance(new Vector2((float)list[index].Item1, (float)list[index].Item2) * 16f + Vector2.One * 8f, vector2_1);
if ((double)num3 == -1.0 || (double)num4 < (double)num3)
{
num3 = num4;
tuple = list[index];
}
}
if (Collision.InTileBounds(tuple.Item1, tuple.Item2, lx, ly, hx, hy))
{
num5 = tuple.Item1;
num6 = tuple.Item2;
}
}
list.Clear();
}
if ((obj.itemId == 1100 || obj.itemId == 1545) && (num5 == -1 && num6 == -1))
{
List<Tuple<int, int>> list = new List<Tuple<int, int>>();
for (int index1 = lx; index1 <= hx; ++index1)
{
for (int index2 = ly; index2 <= hy; ++index2)
{
Tile tile = Main.tile[index1, index2];
if (tile.active() && (int)tile.color() > 0 || (int)tile.wall > 0 && (int)tile.wallColor() > 0)
list.Add(new Tuple<int, int>(index1, index2));
}
}
if (list.Count > 0)
{
float num3 = -1f;
Tuple<int, int> tuple = list[0];
for (int index = 0; index < list.Count; ++index)
{
float num4 = Vector2.Distance(new Vector2((float)list[index].Item1, (float)list[index].Item2) * 16f + Vector2.One * 8f, vector2_1);
if ((double)num3 == -1.0 || (double)num4 < (double)num3)
{
num3 = num4;
tuple = list[index];
}
}
if (Collision.InTileBounds(tuple.Item1, tuple.Item2, lx, ly, hx, hy))
{
num5 = tuple.Item1;
num6 = tuple.Item2;
}
}
list.Clear();
}
if (obj.itemId == 27 && num5 == -1 && (num6 == -1 && ly > 20))
{
List<Tuple<int, int>> list1 = new List<Tuple<int, int>>();
for (int index = lx; index <= hx; ++index)
{
for (int endY = ly; endY <= hy; ++endY)
{
Tile tile1 = Main.tile[index, endY];
Tile tile2 = Main.tile[index, endY - 1];
Tile testTile = Main.tile[index, endY + 1];
Tile tile3 = Main.tile[index - 1, endY];
Tile tile4 = Main.tile[index + 1, endY];
if ((!tile1.active() || Main.tileCut[(int)tile1.type] || TileID.Sets.BreakableWhenPlacing[(int)tile1.type]) && (!tile2.active() || Main.tileCut[(int)tile2.type] || TileID.Sets.BreakableWhenPlacing[(int)tile2.type]) && ((!tile3.active() || (int)tile3.type != 20) && (!tile4.active() || (int)tile4.type != 20) && (testTile.active() && WorldGen.SolidTile2(testTile))))
{
ushort num3 = testTile.type;
if ((uint)num3 <= 109U)
{
if ((uint)num3 <= 23U)
{
if ((int)num3 != 2 && (int)num3 != 23)
continue;
}
else if ((int)num3 != 53)
{
if ((int)num3 != 60)
{
if ((int)num3 != 109)
continue;
}
else
{
if (WorldGen.EmptyTileCheck(index - 2, index + 2, endY - 20, endY, 20))
{
list1.Add(new Tuple<int, int>(index, endY));
continue;
}
continue;
}
}
}
else if ((uint)num3 <= 116U)
{
if ((int)num3 != 112 && (int)num3 != 116)
continue;
}
else if ((int)num3 != 147 && (int)num3 != 199 && (int)num3 != 234)
continue;
if ((int)tile3.liquid == 0 && (int)tile1.liquid == 0 && ((int)tile4.liquid == 0 && WorldGen.EmptyTileCheck(index - 2, index + 2, endY - 20, endY, 20)))
list1.Add(new Tuple<int, int>(index, endY));
}
}
}
List<Tuple<int, int>> list2 = new List<Tuple<int, int>>();
for (int index = 0; index < list1.Count; ++index)
{
bool flag2 = false;
int num3 = -1;
while (num3 < 2)
{
Tile tile = Main.tile[list1[index].Item1 + num3, list1[index].Item2 + 1];
if (tile.active())
{
ushort num4 = tile.type;
if ((uint)num4 <= 109U)
{
if ((uint)num4 <= 23U)
{
if ((int)num4 != 2 && (int)num4 != 23)
goto label_571;
}
else if ((int)num4 != 53 && (int)num4 != 60 && (int)num4 != 109)
goto label_571;
}
else if ((uint)num4 <= 116U)
{
if ((int)num4 != 112 && (int)num4 != 116)
goto label_571;
}
else if ((int)num4 != 147 && (int)num4 != 199 && (int)num4 != 234)
goto label_571;
flag2 = true;
}
label_571:
num3 += 2;
}
if (!flag2)
list2.Add(list1[index]);
}
for (int index = 0; index < list2.Count; ++index)
list1.Remove(list2[index]);
list2.Clear();
if (list1.Count > 0)
{
float num3 = -1f;
Tuple<int, int> tuple = list1[0];
for (int index = 0; index < list1.Count; ++index)
{
float num4 = Vector2.Distance(new Vector2((float)list1[index].Item1, (float)list1[index].Item2) * 16f + Vector2.One * 8f, vector2_1);
if ((double)num3 == -1.0 || (double)num4 < (double)num3)
{
num3 = num4;
tuple = list1[index];
}
}
if (Collision.InTileBounds(tuple.Item1, tuple.Item2, lx, ly, hx, hy))
{
num5 = tuple.Item1;
num6 = tuple.Item2;
}
}
list1.Clear();
}
if (obj.itemId == 205 && num5 == -1 && num6 == -1)
{
List<Tuple<int, int>> list = new List<Tuple<int, int>>();
for (int index1 = lx; index1 <= hx; ++index1)
{
for (int index2 = ly; index2 <= hy; ++index2)
{
Tile tile = Main.tile[index1, index2];
if ((int)tile.liquid > 0)
{
int num3 = (int)tile.liquidType();
int num4 = 0;
for (int index3 = index1 - 1; index3 <= index1 + 1; ++index3)
{
for (int index4 = index2 - 1; index4 <= index2 + 1; ++index4)
{
if ((int)Main.tile[index3, index4].liquidType() == num3)
num4 += (int)Main.tile[index3, index4].liquid;
}
}
if (num4 > 100)
list.Add(new Tuple<int, int>(index1, index2));
}
}
}
if (list.Count > 0)
{
float num3 = -1f;
Tuple<int, int> tuple = list[0];
for (int index = 0; index < list.Count; ++index)
{
float num4 = Vector2.Distance(new Vector2((float)list[index].Item1, (float)list[index].Item2) * 16f + Vector2.One * 8f, vector2_1);
if ((double)num3 == -1.0 || (double)num4 < (double)num3)
{
num3 = num4;
tuple = list[index];
}
}
if (Collision.InTileBounds(tuple.Item1, tuple.Item2, lx, ly, hx, hy))
{
num5 = tuple.Item1;
num6 = tuple.Item2;
}
}
list.Clear();
}
if (obj.itemId == 849 && num5 == -1 && num6 == -1)
{
List<Tuple<int, int>> list = new List<Tuple<int, int>>();
for (int index1 = lx; index1 <= hx; ++index1)
{
for (int index2 = ly; index2 <= hy; ++index2)
{
Tile tile = Main.tile[index1, index2];
if (tile.k_HasWireFlagsAny(k_WireFlags.WIRE_RGB) && !tile.k_HasWireFlags(k_WireFlags.WIRE_ACTUATOR) && tile.active())
list.Add(new Tuple<int, int>(index1, index2));
}
}
if (list.Count > 0)
{
float num3 = -1f;
Tuple<int, int> tuple = list[0];
for (int index = 0; index < list.Count; ++index)
{
float num4 = Vector2.Distance(new Vector2((float)list[index].Item1, (float)list[index].Item2) * 16f + Vector2.One * 8f, vector2_1);
if ((double)num3 == -1.0 || (double)num4 < (double)num3)
{
num3 = num4;
tuple = list[index];
}
}
if (Collision.InTileBounds(tuple.Item1, tuple.Item2, lx, ly, hx, hy))
{
num5 = tuple.Item1;
num6 = tuple.Item2;
}
}
list.Clear();
}
if (obj.createTile == 82 && num5 == -1 && num6 == -1)
{
int num3 = obj.placeStyle;
List<Tuple<int, int>> list = new List<Tuple<int, int>>();
for (int index1 = lx; index1 <= hx; ++index1)
{
for (int index2 = ly; index2 <= hy; ++index2)
{
Tile tile1 = Main.tile[index1, index2];
Tile tile2 = Main.tile[index1, index2 + 1];
if ((!tile1.active() || TileID.Sets.BreakableWhenPlacing[(int)tile1.type] || Main.tileCut[(int)tile1.type] && (int)tile1.type != 82 && (int)tile1.type != 83) && (tile2.nactive() && !tile2.halfBrick() && (int)tile2.slope() == 0))
{
if (num3 == 0)
{
if ((int)tile2.type != 78 && (int)tile2.type != 380 && ((int)tile2.type != 2 && (int)tile2.type != 109) || (int)tile1.liquid > 0)
continue;
}
else if (num3 == 1)
{
if ((int)tile2.type != 78 && (int)tile2.type != 380 && (int)tile2.type != 60 || (int)tile1.liquid > 0)
continue;
}
else if (num3 == 2)
{
if ((int)tile2.type != 78 && (int)tile2.type != 380 && ((int)tile2.type != 0 && (int)tile2.type != 59) || (int)tile1.liquid > 0)
continue;
}
else if (num3 == 3)
{
if ((int)tile2.type != 78 && (int)tile2.type != 380 && ((int)tile2.type != 203 && (int)tile2.type != 199) && ((int)tile2.type != 23 && (int)tile2.type != 25) || (int)tile1.liquid > 0)
continue;
}
else if (num3 == 4)
{
if ((int)tile2.type != 78 && (int)tile2.type != 380 && ((int)tile2.type != 53 && (int)tile2.type != 116) || (int)tile1.liquid > 0 && tile1.lava())
continue;
}
else if (num3 == 5)
{
if ((int)tile2.type != 78 && (int)tile2.type != 380 && (int)tile2.type != 57 || (int)tile1.liquid > 0 && !tile1.lava())
continue;
}
else if (num3 == 6 && ((int)tile2.type != 78 && (int)tile2.type != 380 && ((int)tile2.type != 147 && (int)tile2.type != 161) && ((int)tile2.type != 163 && (int)tile2.type != 164 && (int)tile2.type != 200) || (int)tile1.liquid > 0 && tile1.lava()))
continue;
list.Add(new Tuple<int, int>(index1, index2));
}
}
}
if (list.Count > 0)
{
float num4 = -1f;
Tuple<int, int> tuple = list[0];
for (int index = 0; index < list.Count; ++index)
{
float num7 = Vector2.Distance(new Vector2((float)list[index].Item1, (float)list[index].Item2) * 16f + Vector2.One * 8f, vector2_1);
if ((double)num4 == -1.0 || (double)num7 < (double)num4)
{
num4 = num7;
tuple = list[index];
}
}
if (Collision.InTileBounds(tuple.Item1, tuple.Item2, lx, ly, hx, hy))
{
num5 = tuple.Item1;
num6 = tuple.Item2;
}
}
list.Clear();
}
if (obj.createTile == 380 && num5 == -1 && num6 == -1)
{
List<Tuple<int, int>> list = new List<Tuple<int, int>>();
bool flag2 = false;
if (Main.tile[x1, y1].active() && (int)Main.tile[x1, y1].type == 380)
flag2 = true;
if (!flag2)
{
for (int index1 = lx; index1 <= hx; ++index1)
{
for (int index2 = ly; index2 <= hy; ++index2)
{
Tile tile = Main.tile[index1, index2];
if (tile.active() && (int)tile.type == 380)
{
if (!Main.tile[index1 - 1, index2].active() || Main.tileCut[(int)Main.tile[index1 - 1, index2].type] || TileID.Sets.BreakableWhenPlacing[(int)Main.tile[index1 - 1, index2].type])
list.Add(new Tuple<int, int>(index1 - 1, index2));
if (!Main.tile[index1 + 1, index2].active() || Main.tileCut[(int)Main.tile[index1 + 1, index2].type] || TileID.Sets.BreakableWhenPlacing[(int)Main.tile[index1 + 1, index2].type])
list.Add(new Tuple<int, int>(index1 + 1, index2));
}
}
}
}
if (list.Count > 0)
{
float num3 = -1f;
Tuple<int, int> tuple = list[0];
for (int index = 0; index < list.Count; ++index)
{
float num4 = Vector2.Distance(new Vector2((float)list[index].Item1, (float)list[index].Item2) * 16f + Vector2.One * 8f, vector2_1);
if ((double)num3 == -1.0 || (double)num4 < (double)num3)
{
num3 = num4;
tuple = list[index];
}
}
if (Collision.InTileBounds(tuple.Item1, tuple.Item2, lx, ly, hx, hy) && (double)num3 != -1.0)
{
num5 = tuple.Item1;
num6 = tuple.Item2;
}
}
list.Clear();
}
if (obj.createTile == 78 && num5 == -1 && num6 == -1)
{
List<Tuple<int, int>> list = new List<Tuple<int, int>>();
bool flag2 = false;
if (Main.tile[x1, y1].active())
flag2 = true;
if (!Collision.InTileBounds(x1, y1, lx, ly, hx, hy))
flag2 = true;
if (!flag2)
{
for (int index1 = lx; index1 <= hx; ++index1)
{
for (int index2 = ly; index2 <= hy; ++index2)
{
Tile tile1 = Main.tile[index1, index2];
Tile tile2 = Main.tile[index1, index2 + 1];
if ((!tile1.active() || Main.tileCut[(int)tile1.type] || TileID.Sets.BreakableWhenPlacing[(int)tile1.type]) && (tile2.nactive() && !tile2.halfBrick() && ((int)tile2.slope() == 0 && Main.tileSolid[(int)tile2.type])))
list.Add(new Tuple<int, int>(index1, index2));
}
}
}
if (list.Count > 0)
{
float num3 = -1f;
Tuple<int, int> tuple = list[0];
for (int index = 0; index < list.Count; ++index)
{
if (Collision.EmptyTile(list[index].Item1, list[index].Item2, true))
{
float num4 = Vector2.Distance(new Vector2((float)list[index].Item1, (float)list[index].Item2) * 16f + Vector2.One * 8f, vector2_1);
if ((double)num3 == -1.0 || (double)num4 < (double)num3)
{
num3 = num4;
tuple = list[index];
}
}
}
if (Collision.InTileBounds(tuple.Item1, tuple.Item2, lx, ly, hx, hy) && (double)num3 != -1.0)
{
num5 = tuple.Item1;
num6 = tuple.Item2;
}
}
list.Clear();
}
if (obj.itemId == 213 && num5 == -1 && num6 == -1)
{
List<Tuple<int, int>> list = new List<Tuple<int, int>>();
for (int index1 = lx; index1 <= hx; ++index1)
{
for (int index2 = ly; index2 <= hy; ++index2)
{
Tile tile = Main.tile[index1, index2];
bool flag2 = !Main.tile[index1 - 1, index2].active() || !Main.tile[index1, index2 + 1].active() || !Main.tile[index1 + 1, index2].active() || !Main.tile[index1, index2 - 1].active();
bool flag3 = !Main.tile[index1 - 1, index2 - 1].active() || !Main.tile[index1 - 1, index2 + 1].active() || !Main.tile[index1 + 1, index2 + 1].active() || !Main.tile[index1 + 1, index2 - 1].active();
if (tile.active() && !tile.inActive() && ((int)tile.type == 0 || (int)tile.type == 1) && (flag2 || (int)tile.type == 0 && flag3))
list.Add(new Tuple<int, int>(index1, index2));
}
}
if (list.Count > 0)
{
float num3 = -1f;
Tuple<int, int> tuple = list[0];
for (int index = 0; index < list.Count; ++index)
{
float num4 = Vector2.Distance(new Vector2((float)list[index].Item1, (float)list[index].Item2) * 16f + Vector2.One * 8f, vector2_1);
if ((double)num3 == -1.0 || (double)num4 < (double)num3)
{
num3 = num4;
tuple = list[index];
}
}
if (Collision.InTileBounds(tuple.Item1, tuple.Item2, lx, ly, hx, hy))
{
num5 = tuple.Item1;
num6 = tuple.Item2;
}
}
list.Clear();
}
if (num5 != -1 && num6 != -1)
{
Main.smartDigX = Player.tileTargetX = num5;
Main.smartDigY = Player.tileTargetY = num6;
Main.smartDigShowing = true;
}
ignoreTargets.Clear();
}