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

2555 lines
113 KiB
C#

// Decompiled with JetBrains decompiler
// Type: Terraria.Wiring
// 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;
using System.Collections.Generic;
using Terraria.Audio;
using Terraria.DataStructures;
using Terraria.GameContent.Events;
using Terraria.GameContent.UI;
using Terraria.ID;
using Terraria.Localization;
namespace Terraria
{
public static class Wiring
{
public static bool blockPlayerTeleportationForOneIteration;
public static bool running;
private static Dictionary<Point16, bool> _wireSkip;
private static DoubleStack<Point16> _wireList;
private static DoubleStack<byte> _wireDirectionList;
private static Dictionary<Point16, byte> _toProcess;
private static Queue<Point16> _GatesCurrent;
private static Queue<Point16> _LampsToCheck;
private static Queue<Point16> _GatesNext;
private static Dictionary<Point16, bool> _GatesDone;
private static Dictionary<Point16, byte> _PixelBoxTriggers;
private static Vector2[] _teleport;
private const int MaxPump = 20;
private static int[] _inPumpX;
private static int[] _inPumpY;
private static int _numInPump;
private static int[] _outPumpX;
private static int[] _outPumpY;
private static int _numOutPump;
private const int MaxMech = 1000;
private static int[] _mechX;
private static int[] _mechY;
private static int _numMechs;
private static int[] _mechTime;
private static int _currentWireColor;
private static int CurrentUser = (int) byte.MaxValue;
public static void SetCurrentUser(int plr = -1)
{
if (plr < 0 || plr > (int) byte.MaxValue)
plr = (int) byte.MaxValue;
if (Main.netMode == 0)
plr = Main.myPlayer;
Wiring.CurrentUser = plr;
}
public static void Initialize()
{
Wiring._wireSkip = new Dictionary<Point16, bool>();
Wiring._wireList = new DoubleStack<Point16>();
Wiring._wireDirectionList = new DoubleStack<byte>();
Wiring._toProcess = new Dictionary<Point16, byte>();
Wiring._GatesCurrent = new Queue<Point16>();
Wiring._GatesNext = new Queue<Point16>();
Wiring._GatesDone = new Dictionary<Point16, bool>();
Wiring._LampsToCheck = new Queue<Point16>();
Wiring._PixelBoxTriggers = new Dictionary<Point16, byte>();
Wiring._inPumpX = new int[20];
Wiring._inPumpY = new int[20];
Wiring._outPumpX = new int[20];
Wiring._outPumpY = new int[20];
Wiring._teleport = new Vector2[2];
Wiring._mechX = new int[1000];
Wiring._mechY = new int[1000];
Wiring._mechTime = new int[1000];
}
public static void SkipWire(int x, int y) => Wiring._wireSkip[new Point16(x, y)] = true;
public static void SkipWire(Point16 point) => Wiring._wireSkip[point] = true;
public static void UpdateMech()
{
Wiring.SetCurrentUser();
for (int index1 = Wiring._numMechs - 1; index1 >= 0; --index1)
{
--Wiring._mechTime[index1];
if (Main.tile[Wiring._mechX[index1], Wiring._mechY[index1]].active() && Main.tile[Wiring._mechX[index1], Wiring._mechY[index1]].type == (ushort) 144)
{
if (Main.tile[Wiring._mechX[index1], Wiring._mechY[index1]].frameY == (short) 0)
{
Wiring._mechTime[index1] = 0;
}
else
{
int num = (int) Main.tile[Wiring._mechX[index1], Wiring._mechY[index1]].frameX / 18;
switch (num)
{
case 0:
num = 60;
break;
case 1:
num = 180;
break;
case 2:
num = 300;
break;
case 3:
num = 30;
break;
case 4:
num = 15;
break;
}
if (Math.IEEERemainder((double) Wiring._mechTime[index1], (double) num) == 0.0)
{
Wiring._mechTime[index1] = 18000;
Wiring.TripWire(Wiring._mechX[index1], Wiring._mechY[index1], 1, 1);
}
}
}
if (Wiring._mechTime[index1] <= 0)
{
if (Main.tile[Wiring._mechX[index1], Wiring._mechY[index1]].active() && Main.tile[Wiring._mechX[index1], Wiring._mechY[index1]].type == (ushort) 144)
{
Main.tile[Wiring._mechX[index1], Wiring._mechY[index1]].frameY = (short) 0;
NetMessage.SendTileSquare(-1, Wiring._mechX[index1], Wiring._mechY[index1], 1);
}
if (Main.tile[Wiring._mechX[index1], Wiring._mechY[index1]].active() && Main.tile[Wiring._mechX[index1], Wiring._mechY[index1]].type == (ushort) 411)
{
Tile tile = Main.tile[Wiring._mechX[index1], Wiring._mechY[index1]];
int num1 = (int) tile.frameX % 36 / 18;
int num2 = (int) tile.frameY % 36 / 18;
int tileX = Wiring._mechX[index1] - num1;
int tileY = Wiring._mechY[index1] - num2;
int num3 = 36;
if (Main.tile[tileX, tileY].frameX >= (short) 36)
num3 = -36;
for (int index2 = tileX; index2 < tileX + 2; ++index2)
{
for (int index3 = tileY; index3 < tileY + 2; ++index3)
Main.tile[index2, index3].frameX += (short) num3;
}
NetMessage.SendTileSquare(-1, tileX, tileY, 2);
}
for (int index4 = index1; index4 < Wiring._numMechs; ++index4)
{
Wiring._mechX[index4] = Wiring._mechX[index4 + 1];
Wiring._mechY[index4] = Wiring._mechY[index4 + 1];
Wiring._mechTime[index4] = Wiring._mechTime[index4 + 1];
}
--Wiring._numMechs;
}
}
}
public static void HitSwitch(int i, int j)
{
if (!WorldGen.InWorld(i, j) || Main.tile[i, j] == null)
return;
if (Main.tile[i, j].type == (ushort) 135 || Main.tile[i, j].type == (ushort) 314 || Main.tile[i, j].type == (ushort) 423 || Main.tile[i, j].type == (ushort) 428 || Main.tile[i, j].type == (ushort) 442 || Main.tile[i, j].type == (ushort) 476)
{
SoundEngine.PlaySound(28, i * 16, j * 16, 0);
Wiring.TripWire(i, j, 1, 1);
}
else if (Main.tile[i, j].type == (ushort) 440)
{
SoundEngine.PlaySound(28, i * 16 + 16, j * 16 + 16, 0);
Wiring.TripWire(i, j, 3, 3);
}
else if (Main.tile[i, j].type == (ushort) 136)
{
Main.tile[i, j].frameY = Main.tile[i, j].frameY != (short) 0 ? (short) 0 : (short) 18;
SoundEngine.PlaySound(28, i * 16, j * 16, 0);
Wiring.TripWire(i, j, 1, 1);
}
else if (Main.tile[i, j].type == (ushort) 443)
Wiring.GeyserTrap(i, j);
else if (Main.tile[i, j].type == (ushort) 144)
{
if (Main.tile[i, j].frameY == (short) 0)
{
Main.tile[i, j].frameY = (short) 18;
if (Main.netMode != 1)
Wiring.CheckMech(i, j, 18000);
}
else
Main.tile[i, j].frameY = (short) 0;
SoundEngine.PlaySound(28, i * 16, j * 16, 0);
}
else if (Main.tile[i, j].type == (ushort) 441 || Main.tile[i, j].type == (ushort) 468)
{
int num1 = (int) Main.tile[i, j].frameX / 18 * -1;
int num2 = (int) Main.tile[i, j].frameY / 18 * -1;
int num3 = num1 % 4;
if (num3 < -1)
num3 += 2;
int left = num3 + i;
int top = num2 + j;
SoundEngine.PlaySound(28, i * 16, j * 16, 0);
Wiring.TripWire(left, top, 2, 2);
}
else if (Main.tile[i, j].type == (ushort) 467)
{
if ((int) Main.tile[i, j].frameX / 36 != 4)
return;
int num4 = (int) Main.tile[i, j].frameX / 18 * -1;
int num5 = (int) Main.tile[i, j].frameY / 18 * -1;
int num6 = num4 % 4;
if (num6 < -1)
num6 += 2;
int left = num6 + i;
int top = num5 + j;
SoundEngine.PlaySound(28, i * 16, j * 16, 0);
Wiring.TripWire(left, top, 2, 2);
}
else
{
if (Main.tile[i, j].type != (ushort) 132 && Main.tile[i, j].type != (ushort) 411)
return;
short num7 = 36;
int num8 = (int) Main.tile[i, j].frameX / 18 * -1;
int num9 = (int) Main.tile[i, j].frameY / 18 * -1;
int num10 = num8 % 4;
if (num10 < -1)
{
num10 += 2;
num7 = (short) -36;
}
int index1 = num10 + i;
int index2 = num9 + j;
if (Main.netMode != 1 && Main.tile[index1, index2].type == (ushort) 411)
Wiring.CheckMech(index1, index2, 60);
for (int index3 = index1; index3 < index1 + 2; ++index3)
{
for (int index4 = index2; index4 < index2 + 2; ++index4)
{
if (Main.tile[index3, index4].type == (ushort) 132 || Main.tile[index3, index4].type == (ushort) 411)
Main.tile[index3, index4].frameX += num7;
}
}
WorldGen.TileFrame(index1, index2);
SoundEngine.PlaySound(28, i * 16, j * 16, 0);
Wiring.TripWire(index1, index2, 2, 2);
}
}
public static void PokeLogicGate(int lampX, int lampY)
{
if (Main.netMode == 1)
return;
Wiring._LampsToCheck.Enqueue(new Point16(lampX, lampY));
Wiring.LogicGatePass();
}
public static bool Actuate(int i, int j)
{
Tile tile = Main.tile[i, j];
if (!tile.actuator())
return false;
if (tile.inActive())
Wiring.ReActive(i, j);
else
Wiring.DeActive(i, j);
return true;
}
public static void ActuateForced(int i, int j)
{
if (Main.tile[i, j].inActive())
Wiring.ReActive(i, j);
else
Wiring.DeActive(i, j);
}
public static void MassWireOperation(Point ps, Point pe, Player master)
{
int wireCount = 0;
int actuatorCount = 0;
for (int index = 0; index < 58; ++index)
{
if (master.inventory[index].type == 530)
wireCount += master.inventory[index].stack;
if (master.inventory[index].type == 849)
actuatorCount += master.inventory[index].stack;
}
int num1 = wireCount;
int num2 = actuatorCount;
Wiring.MassWireOperationInner(ps, pe, master.Center, master.direction == 1, ref wireCount, ref actuatorCount);
int num3 = wireCount;
int num4 = num1 - num3;
int num5 = num2 - actuatorCount;
if (Main.netMode == 2)
{
NetMessage.SendData(110, master.whoAmI, number: 530, number2: ((float) num4), number3: ((float) master.whoAmI));
NetMessage.SendData(110, master.whoAmI, number: 849, number2: ((float) num5), number3: ((float) master.whoAmI));
}
else
{
for (int index = 0; index < num4; ++index)
master.ConsumeItem(530);
for (int index = 0; index < num5; ++index)
master.ConsumeItem(849);
}
}
private static bool CheckMech(int i, int j, int time)
{
for (int index = 0; index < Wiring._numMechs; ++index)
{
if (Wiring._mechX[index] == i && Wiring._mechY[index] == j)
return false;
}
if (Wiring._numMechs >= 999)
return false;
Wiring._mechX[Wiring._numMechs] = i;
Wiring._mechY[Wiring._numMechs] = j;
Wiring._mechTime[Wiring._numMechs] = time;
++Wiring._numMechs;
return true;
}
private static void XferWater()
{
for (int index1 = 0; index1 < Wiring._numInPump; ++index1)
{
int i1 = Wiring._inPumpX[index1];
int j1 = Wiring._inPumpY[index1];
int liquid1 = (int) Main.tile[i1, j1].liquid;
if (liquid1 > 0)
{
bool lava = Main.tile[i1, j1].lava();
bool honey = Main.tile[i1, j1].honey();
for (int index2 = 0; index2 < Wiring._numOutPump; ++index2)
{
int i2 = Wiring._outPumpX[index2];
int j2 = Wiring._outPumpY[index2];
int liquid2 = (int) Main.tile[i2, j2].liquid;
if (liquid2 < (int) byte.MaxValue)
{
bool flag1 = Main.tile[i2, j2].lava();
bool flag2 = Main.tile[i2, j2].honey();
if (liquid2 == 0)
{
flag1 = lava;
flag2 = honey;
}
if (lava == flag1 && honey == flag2)
{
int num = liquid1;
if (num + liquid2 > (int) byte.MaxValue)
num = (int) byte.MaxValue - liquid2;
Main.tile[i2, j2].liquid += (byte) num;
Main.tile[i1, j1].liquid -= (byte) num;
liquid1 = (int) Main.tile[i1, j1].liquid;
Main.tile[i2, j2].lava(lava);
Main.tile[i2, j2].honey(honey);
WorldGen.SquareTileFrame(i2, j2);
if (Main.tile[i1, j1].liquid == (byte) 0)
{
Main.tile[i1, j1].lava(false);
WorldGen.SquareTileFrame(i1, j1);
break;
}
}
}
}
WorldGen.SquareTileFrame(i1, j1);
}
}
}
private static void TripWire(int left, int top, int width, int height)
{
if (Main.netMode == 1)
return;
Wiring.running = true;
if (Wiring._wireList.Count != 0)
Wiring._wireList.Clear(true);
if (Wiring._wireDirectionList.Count != 0)
Wiring._wireDirectionList.Clear(true);
Vector2[] vector2Array1 = new Vector2[8];
int num1 = 0;
Point16 back;
for (int X = left; X < left + width; ++X)
{
for (int Y = top; Y < top + height; ++Y)
{
back = new Point16(X, Y);
Tile tile = Main.tile[X, Y];
if (tile != null && tile.wire())
Wiring._wireList.PushBack(back);
}
}
Wiring._teleport[0].X = -1f;
Wiring._teleport[0].Y = -1f;
Wiring._teleport[1].X = -1f;
Wiring._teleport[1].Y = -1f;
if (Wiring._wireList.Count > 0)
{
Wiring._numInPump = 0;
Wiring._numOutPump = 0;
Wiring.HitWire(Wiring._wireList, 1);
if (Wiring._numInPump > 0 && Wiring._numOutPump > 0)
Wiring.XferWater();
}
Vector2[] vector2Array2 = vector2Array1;
int index1 = num1;
int num2 = index1 + 1;
Vector2 vector2_1 = Wiring._teleport[0];
vector2Array2[index1] = vector2_1;
Vector2[] vector2Array3 = vector2Array1;
int index2 = num2;
int num3 = index2 + 1;
Vector2 vector2_2 = Wiring._teleport[1];
vector2Array3[index2] = vector2_2;
for (int X = left; X < left + width; ++X)
{
for (int Y = top; Y < top + height; ++Y)
{
back = new Point16(X, Y);
Tile tile = Main.tile[X, Y];
if (tile != null && tile.wire2())
Wiring._wireList.PushBack(back);
}
}
Wiring._teleport[0].X = -1f;
Wiring._teleport[0].Y = -1f;
Wiring._teleport[1].X = -1f;
Wiring._teleport[1].Y = -1f;
if (Wiring._wireList.Count > 0)
{
Wiring._numInPump = 0;
Wiring._numOutPump = 0;
Wiring.HitWire(Wiring._wireList, 2);
if (Wiring._numInPump > 0 && Wiring._numOutPump > 0)
Wiring.XferWater();
}
Vector2[] vector2Array4 = vector2Array1;
int index3 = num3;
int num4 = index3 + 1;
Vector2 vector2_3 = Wiring._teleport[0];
vector2Array4[index3] = vector2_3;
Vector2[] vector2Array5 = vector2Array1;
int index4 = num4;
int num5 = index4 + 1;
Vector2 vector2_4 = Wiring._teleport[1];
vector2Array5[index4] = vector2_4;
Wiring._teleport[0].X = -1f;
Wiring._teleport[0].Y = -1f;
Wiring._teleport[1].X = -1f;
Wiring._teleport[1].Y = -1f;
for (int X = left; X < left + width; ++X)
{
for (int Y = top; Y < top + height; ++Y)
{
back = new Point16(X, Y);
Tile tile = Main.tile[X, Y];
if (tile != null && tile.wire3())
Wiring._wireList.PushBack(back);
}
}
if (Wiring._wireList.Count > 0)
{
Wiring._numInPump = 0;
Wiring._numOutPump = 0;
Wiring.HitWire(Wiring._wireList, 3);
if (Wiring._numInPump > 0 && Wiring._numOutPump > 0)
Wiring.XferWater();
}
Vector2[] vector2Array6 = vector2Array1;
int index5 = num5;
int num6 = index5 + 1;
Vector2 vector2_5 = Wiring._teleport[0];
vector2Array6[index5] = vector2_5;
Vector2[] vector2Array7 = vector2Array1;
int index6 = num6;
int num7 = index6 + 1;
Vector2 vector2_6 = Wiring._teleport[1];
vector2Array7[index6] = vector2_6;
Wiring._teleport[0].X = -1f;
Wiring._teleport[0].Y = -1f;
Wiring._teleport[1].X = -1f;
Wiring._teleport[1].Y = -1f;
for (int X = left; X < left + width; ++X)
{
for (int Y = top; Y < top + height; ++Y)
{
back = new Point16(X, Y);
Tile tile = Main.tile[X, Y];
if (tile != null && tile.wire4())
Wiring._wireList.PushBack(back);
}
}
if (Wiring._wireList.Count > 0)
{
Wiring._numInPump = 0;
Wiring._numOutPump = 0;
Wiring.HitWire(Wiring._wireList, 4);
if (Wiring._numInPump > 0 && Wiring._numOutPump > 0)
Wiring.XferWater();
}
Vector2[] vector2Array8 = vector2Array1;
int index7 = num7;
int num8 = index7 + 1;
Vector2 vector2_7 = Wiring._teleport[0];
vector2Array8[index7] = vector2_7;
Vector2[] vector2Array9 = vector2Array1;
int index8 = num8;
int num9 = index8 + 1;
Vector2 vector2_8 = Wiring._teleport[1];
vector2Array9[index8] = vector2_8;
Wiring.running = false;
for (int index9 = 0; index9 < 8; index9 += 2)
{
Wiring._teleport[0] = vector2Array1[index9];
Wiring._teleport[1] = vector2Array1[index9 + 1];
if ((double) Wiring._teleport[0].X >= 0.0 && (double) Wiring._teleport[1].X >= 0.0)
Wiring.Teleport();
}
Wiring.PixelBoxPass();
Wiring.LogicGatePass();
}
private static void PixelBoxPass()
{
foreach (KeyValuePair<Point16, byte> pixelBoxTrigger in Wiring._PixelBoxTriggers)
{
if (pixelBoxTrigger.Value != (byte) 2)
{
if (pixelBoxTrigger.Value == (byte) 1)
{
if (Main.tile[(int) pixelBoxTrigger.Key.X, (int) pixelBoxTrigger.Key.Y].frameX != (short) 0)
{
Main.tile[(int) pixelBoxTrigger.Key.X, (int) pixelBoxTrigger.Key.Y].frameX = (short) 0;
NetMessage.SendTileSquare(-1, (int) pixelBoxTrigger.Key.X, (int) pixelBoxTrigger.Key.Y, 1);
}
}
else if (pixelBoxTrigger.Value == (byte) 3 && Main.tile[(int) pixelBoxTrigger.Key.X, (int) pixelBoxTrigger.Key.Y].frameX != (short) 18)
{
Main.tile[(int) pixelBoxTrigger.Key.X, (int) pixelBoxTrigger.Key.Y].frameX = (short) 18;
NetMessage.SendTileSquare(-1, (int) pixelBoxTrigger.Key.X, (int) pixelBoxTrigger.Key.Y, 1);
}
}
}
Wiring._PixelBoxTriggers.Clear();
}
private static void LogicGatePass()
{
if (Wiring._GatesCurrent.Count != 0)
return;
Wiring._GatesDone.Clear();
while (Wiring._LampsToCheck.Count > 0)
{
while (Wiring._LampsToCheck.Count > 0)
{
Point16 point16 = Wiring._LampsToCheck.Dequeue();
Wiring.CheckLogicGate((int) point16.X, (int) point16.Y);
}
while (Wiring._GatesNext.Count > 0)
{
Utils.Swap<Queue<Point16>>(ref Wiring._GatesCurrent, ref Wiring._GatesNext);
while (Wiring._GatesCurrent.Count > 0)
{
Point16 key = Wiring._GatesCurrent.Peek();
bool flag;
if (Wiring._GatesDone.TryGetValue(key, out flag) && flag)
{
Wiring._GatesCurrent.Dequeue();
}
else
{
Wiring._GatesDone.Add(key, true);
Wiring.TripWire((int) key.X, (int) key.Y, 1, 1);
Wiring._GatesCurrent.Dequeue();
}
}
}
}
Wiring._GatesDone.Clear();
if (!Wiring.blockPlayerTeleportationForOneIteration)
return;
Wiring.blockPlayerTeleportationForOneIteration = false;
}
private static void CheckLogicGate(int lampX, int lampY)
{
if (!WorldGen.InWorld(lampX, lampY, 1))
return;
for (int index1 = lampY; index1 < Main.maxTilesY; ++index1)
{
Tile tile1 = Main.tile[lampX, index1];
if (!tile1.active())
break;
if (tile1.type == (ushort) 420)
{
bool flag1;
Wiring._GatesDone.TryGetValue(new Point16(lampX, index1), out flag1);
int num1 = (int) tile1.frameY / 18;
bool flag2 = tile1.frameX == (short) 18;
bool flag3 = tile1.frameX == (short) 36;
if (num1 < 0)
break;
int num2 = 0;
int num3 = 0;
bool flag4 = false;
for (int index2 = index1 - 1; index2 > 0; --index2)
{
Tile tile2 = Main.tile[lampX, index2];
if (tile2.active() && tile2.type == (ushort) 419)
{
if (tile2.frameX == (short) 36)
{
flag4 = true;
break;
}
++num2;
num3 += (tile2.frameX == (short) 18).ToInt();
}
else
break;
}
bool flag5;
switch (num1)
{
case 0:
flag5 = num2 == num3;
break;
case 1:
flag5 = num3 > 0;
break;
case 2:
flag5 = num2 != num3;
break;
case 3:
flag5 = num3 == 0;
break;
case 4:
flag5 = num3 == 1;
break;
case 5:
flag5 = num3 != 1;
break;
default:
return;
}
bool flag6 = !flag4 & flag3;
bool flag7 = false;
if (flag4 && Framing.GetTileSafely(lampX, lampY).frameX == (short) 36)
flag7 = true;
if (!(flag5 != flag2 | flag6 | flag7))
break;
int num4 = (int) tile1.frameX % 18 / 18;
tile1.frameX = (short) (18 * flag5.ToInt());
if (flag4)
tile1.frameX = (short) 36;
Wiring.SkipWire(lampX, index1);
WorldGen.SquareTileFrame(lampX, index1);
NetMessage.SendTileSquare(-1, lampX, index1, 1);
bool flag8 = !flag4 | flag7;
if (flag7)
{
if (num3 == 0 || num2 == 0)
;
flag8 = (double) Main.rand.NextFloat() < (double) num3 / (double) num2;
}
if (flag6)
flag8 = false;
if (!flag8)
break;
if (!flag1)
{
Wiring._GatesNext.Enqueue(new Point16(lampX, index1));
break;
}
Vector2 position = new Vector2((float) lampX, (float) index1) * 16f - new Vector2(10f);
Utils.PoofOfSmoke(position);
NetMessage.SendData(106, number: ((int) position.X), number2: position.Y);
break;
}
if (tile1.type != (ushort) 419)
break;
}
}
private static void HitWire(DoubleStack<Point16> next, int wireType)
{
Wiring._wireDirectionList.Clear(true);
for (int index = 0; index < next.Count; ++index)
{
Point16 point16 = next.PopFront();
Wiring.SkipWire(point16);
Wiring._toProcess.Add(point16, (byte) 4);
next.PushBack(point16);
Wiring._wireDirectionList.PushBack((byte) 0);
}
Wiring._currentWireColor = wireType;
while (next.Count > 0)
{
Point16 key = next.PopFront();
int num1 = (int) Wiring._wireDirectionList.PopFront();
int x = (int) key.X;
int y = (int) key.Y;
if (!Wiring._wireSkip.ContainsKey(key))
Wiring.HitWireSingle(x, y);
for (int index = 0; index < 4; ++index)
{
int X;
int Y;
switch (index)
{
case 0:
X = x;
Y = y + 1;
break;
case 1:
X = x;
Y = y - 1;
break;
case 2:
X = x + 1;
Y = y;
break;
case 3:
X = x - 1;
Y = y;
break;
default:
X = x;
Y = y + 1;
break;
}
if (X >= 2 && X < Main.maxTilesX - 2 && Y >= 2 && Y < Main.maxTilesY - 2)
{
Tile tile1 = Main.tile[X, Y];
if (tile1 != null)
{
Tile tile2 = Main.tile[x, y];
if (tile2 != null)
{
byte num2 = 3;
if (tile1.type == (ushort) 424 || tile1.type == (ushort) 445)
num2 = (byte) 0;
if (tile2.type == (ushort) 424)
{
switch ((int) tile2.frameX / 18)
{
case 0:
if (index == num1)
break;
continue;
case 1:
if (num1 == 0 && index == 3 || num1 == 3 && index == 0 || num1 == 1 && index == 2 || num1 == 2 && index == 1)
break;
continue;
case 2:
if (num1 == 0 && index == 2 || num1 == 2 && index == 0 || num1 == 1 && index == 3 || num1 == 3 && index == 1)
break;
continue;
}
}
if (tile2.type == (ushort) 445)
{
if (index == num1)
{
if (Wiring._PixelBoxTriggers.ContainsKey(key))
Wiring._PixelBoxTriggers[key] |= index == 0 | index == 1 ? (byte) 2 : (byte) 1;
else
Wiring._PixelBoxTriggers[key] = index == 0 | index == 1 ? (byte) 2 : (byte) 1;
}
else
continue;
}
bool flag;
switch (wireType)
{
case 1:
flag = tile1.wire();
break;
case 2:
flag = tile1.wire2();
break;
case 3:
flag = tile1.wire3();
break;
case 4:
flag = tile1.wire4();
break;
default:
flag = false;
break;
}
if (flag)
{
Point16 point16 = new Point16(X, Y);
byte num3;
if (Wiring._toProcess.TryGetValue(point16, out num3))
{
--num3;
if (num3 == (byte) 0)
Wiring._toProcess.Remove(point16);
else
Wiring._toProcess[point16] = num3;
}
else
{
next.PushBack(point16);
Wiring._wireDirectionList.PushBack((byte) index);
if (num2 > (byte) 0)
Wiring._toProcess.Add(point16, num2);
}
}
}
}
}
}
}
Wiring._wireSkip.Clear();
Wiring._toProcess.Clear();
}
private static void HitWireSingle(int i, int j)
{
Tile tile1 = Main.tile[i, j];
int type = (int) tile1.type;
if (tile1.actuator())
Wiring.ActuateForced(i, j);
if (!tile1.active())
return;
switch (type)
{
case 144:
Wiring.HitSwitch(i, j);
WorldGen.SquareTileFrame(i, j);
NetMessage.SendTileSquare(-1, i, j, 1);
break;
case 421:
if (!tile1.actuator())
{
tile1.type = (ushort) 422;
WorldGen.SquareTileFrame(i, j);
NetMessage.SendTileSquare(-1, i, j, 1);
break;
}
break;
default:
if (type == 422 && !tile1.actuator())
{
tile1.type = (ushort) 421;
WorldGen.SquareTileFrame(i, j);
NetMessage.SendTileSquare(-1, i, j, 1);
break;
}
break;
}
if (type >= (int) byte.MaxValue && type <= 268)
{
if (tile1.actuator())
return;
if (type >= 262)
tile1.type -= (ushort) 7;
else
tile1.type += (ushort) 7;
WorldGen.SquareTileFrame(i, j);
NetMessage.SendTileSquare(-1, i, j, 1);
}
else
{
switch (type)
{
case 130:
if (Main.tile[i, j - 1] != null && Main.tile[i, j - 1].active() && (TileID.Sets.BasicChest[(int) Main.tile[i, j - 1].type] || TileID.Sets.BasicChestFake[(int) Main.tile[i, j - 1].type] || Main.tile[i, j - 1].type == (ushort) 88))
break;
tile1.type = (ushort) 131;
WorldGen.SquareTileFrame(i, j);
NetMessage.SendTileSquare(-1, i, j, 1);
break;
case 131:
tile1.type = (ushort) 130;
WorldGen.SquareTileFrame(i, j);
NetMessage.SendTileSquare(-1, i, j, 1);
break;
case 209:
int num1 = (int) tile1.frameX % 72 / 18;
int num2 = (int) tile1.frameY % 54 / 18;
int num3 = i - num1;
int num4 = j - num2;
int angle = (int) tile1.frameY / 54;
int num5 = (int) tile1.frameX / 72;
int num6 = -1;
if (num1 == 1 || num1 == 2)
num6 = num2;
int num7 = 0;
if (num1 == 3)
num7 = -54;
if (num1 == 0)
num7 = 54;
if (angle >= 8 && num7 > 0)
num7 = 0;
if (angle == 0 && num7 < 0)
num7 = 0;
bool flag1 = false;
if (num7 != 0)
{
for (int x = num3; x < num3 + 4; ++x)
{
for (int y = num4; y < num4 + 3; ++y)
{
Wiring.SkipWire(x, y);
Main.tile[x, y].frameY += (short) num7;
}
}
flag1 = true;
}
if ((num5 == 3 || num5 == 4) && (num6 == 0 || num6 == 1))
{
int num8 = num5 == 3 ? 72 : -72;
for (int x = num3; x < num3 + 4; ++x)
{
for (int y = num4; y < num4 + 3; ++y)
{
Wiring.SkipWire(x, y);
Main.tile[x, y].frameX += (short) num8;
}
}
flag1 = true;
}
if (flag1)
NetMessage.SendTileSquare(-1, num3 + 1, num4 + 1, 4);
if (num6 == -1)
break;
bool flag2 = true;
if ((num5 == 3 || num5 == 4) && num6 < 2)
flag2 = false;
if (!(Wiring.CheckMech(num3, num4, 30) & flag2))
break;
WorldGen.ShootFromCannon(num3, num4, angle, num5 + 1, 0, 0.0f, Wiring.CurrentUser);
break;
case 212:
int num9 = (int) tile1.frameX % 54 / 18;
int num10 = (int) tile1.frameY % 54 / 18;
int i1 = i - num9;
int j1 = j - num10;
int num11 = (int) tile1.frameX / 54;
int num12 = -1;
if (num9 == 1)
num12 = num10;
int num13 = 0;
if (num9 == 0)
num13 = -54;
if (num9 == 2)
num13 = 54;
if (num11 >= 1 && num13 > 0)
num13 = 0;
if (num11 == 0 && num13 < 0)
num13 = 0;
bool flag3 = false;
if (num13 != 0)
{
for (int x = i1; x < i1 + 3; ++x)
{
for (int y = j1; y < j1 + 3; ++y)
{
Wiring.SkipWire(x, y);
Main.tile[x, y].frameX += (short) num13;
}
}
flag3 = true;
}
if (flag3)
NetMessage.SendTileSquare(-1, i1 + 1, j1 + 1, 4);
if (num12 == -1 || !Wiring.CheckMech(i1, j1, 10))
break;
double num14 = 12.0 + (double) Main.rand.Next(450) * 0.00999999977648258;
float num15 = (float) Main.rand.Next(85, 105);
double num16 = (double) Main.rand.Next(-35, 11);
int Type1 = 166;
int Damage1 = 0;
float KnockBack1 = 0.0f;
Vector2 vector2_1 = new Vector2((float) ((i1 + 2) * 16 - 8), (float) ((j1 + 2) * 16 - 8));
if ((int) tile1.frameX / 54 == 0)
{
num15 *= -1f;
vector2_1.X -= 12f;
}
else
vector2_1.X += 12f;
float num17 = num15;
float num18 = (float) num16;
double num19 = Math.Sqrt((double) num17 * (double) num17 + (double) num18 * (double) num18);
float num20 = (float) (num14 / num19);
float SpeedX1 = num17 * num20;
float SpeedY1 = num18 * num20;
Projectile.NewProjectile(vector2_1.X, vector2_1.Y, SpeedX1, SpeedY1, Type1, Damage1, KnockBack1, Wiring.CurrentUser);
break;
case 215:
int num21 = (int) tile1.frameX % 54 / 18;
int num22 = (int) tile1.frameY % 36 / 18;
int index1 = i - num21;
int index2 = j - num22;
int num23 = 36;
if (Main.tile[index1, index2].frameY >= (short) 36)
num23 = -36;
for (int x = index1; x < index1 + 3; ++x)
{
for (int y = index2; y < index2 + 2; ++y)
{
Wiring.SkipWire(x, y);
Main.tile[x, y].frameY += (short) num23;
}
}
NetMessage.SendTileSquare(-1, index1 + 1, index2 + 1, 3);
break;
case 405:
int num24 = (int) tile1.frameX % 54 / 18;
int num25 = (int) tile1.frameY % 36 / 18;
int index3 = i - num24;
int index4 = j - num25;
int num26 = 54;
if (Main.tile[index3, index4].frameX >= (short) 54)
num26 = -54;
for (int x = index3; x < index3 + 3; ++x)
{
for (int y = index4; y < index4 + 2; ++y)
{
Wiring.SkipWire(x, y);
Main.tile[x, y].frameX += (short) num26;
}
}
NetMessage.SendTileSquare(-1, index3 + 1, index4 + 1, 3);
break;
case 406:
int num27 = (int) tile1.frameX % 54 / 18;
int num28 = (int) tile1.frameY % 54 / 18;
int index5 = i - num27;
int index6 = j - num28;
int num29 = 54;
if (Main.tile[index5, index6].frameY >= (short) 108)
num29 = -108;
for (int x = index5; x < index5 + 3; ++x)
{
for (int y = index6; y < index6 + 3; ++y)
{
Wiring.SkipWire(x, y);
Main.tile[x, y].frameY += (short) num29;
}
}
NetMessage.SendTileSquare(-1, index5 + 1, index6 + 1, 3);
break;
case 411:
int num30 = (int) tile1.frameX % 36 / 18;
int num31 = (int) tile1.frameY % 36 / 18;
int tileX = i - num30;
int tileY = j - num31;
int num32 = 36;
if (Main.tile[tileX, tileY].frameX >= (short) 36)
num32 = -36;
for (int x = tileX; x < tileX + 2; ++x)
{
for (int y = tileY; y < tileY + 2; ++y)
{
Wiring.SkipWire(x, y);
Main.tile[x, y].frameX += (short) num32;
}
}
NetMessage.SendTileSquare(-1, tileX, tileY, 2);
break;
case 419:
int num33 = 18;
if ((int) tile1.frameX >= num33)
num33 = -num33;
if (tile1.frameX == (short) 36)
num33 = 0;
Wiring.SkipWire(i, j);
tile1.frameX += (short) num33;
WorldGen.SquareTileFrame(i, j);
NetMessage.SendTileSquare(-1, i, j, 1);
Wiring._LampsToCheck.Enqueue(new Point16(i, j));
break;
case 425:
int num34 = (int) tile1.frameX % 36 / 18;
int num35 = (int) tile1.frameY % 36 / 18;
int i2 = i - num34;
int j2 = j - num35;
for (int x = i2; x < i2 + 2; ++x)
{
for (int y = j2; y < j2 + 2; ++y)
Wiring.SkipWire(x, y);
}
if (Main.AnnouncementBoxDisabled)
break;
Color pink = Color.Pink;
int index7 = Sign.ReadSign(i2, j2, false);
if (index7 == -1 || Main.sign[index7] == null || string.IsNullOrWhiteSpace(Main.sign[index7].text))
break;
if (Main.AnnouncementBoxRange == -1)
{
if (Main.netMode == 0)
{
Main.NewTextMultiline(Main.sign[index7].text, c: pink, WidthLimit: 460);
break;
}
if (Main.netMode != 2)
break;
NetMessage.SendData(107, text: NetworkText.FromLiteral(Main.sign[index7].text), number: ((int) byte.MaxValue), number2: ((float) pink.R), number3: ((float) pink.G), number4: ((float) pink.B), number5: 460);
break;
}
switch (Main.netMode)
{
case 0:
if ((double) Main.player[Main.myPlayer].Distance(new Vector2((float) (i2 * 16 + 16), (float) (j2 * 16 + 16))) > (double) Main.AnnouncementBoxRange)
return;
Main.NewTextMultiline(Main.sign[index7].text, c: pink, WidthLimit: 460);
return;
case 2:
for (int remoteClient = 0; remoteClient < (int) byte.MaxValue; ++remoteClient)
{
if (Main.player[remoteClient].active && (double) Main.player[remoteClient].Distance(new Vector2((float) (i2 * 16 + 16), (float) (j2 * 16 + 16))) <= (double) Main.AnnouncementBoxRange)
NetMessage.SendData(107, remoteClient, text: NetworkText.FromLiteral(Main.sign[index7].text), number: ((int) byte.MaxValue), number2: ((float) pink.R), number3: ((float) pink.G), number4: ((float) pink.B), number5: 460);
}
return;
default:
return;
}
case 452:
int num36 = (int) tile1.frameX % 54 / 18;
int num37 = (int) tile1.frameY % 54 / 18;
int index8 = i - num36;
int index9 = j - num37;
int num38 = 54;
if (Main.tile[index8, index9].frameX >= (short) 54)
num38 = -54;
for (int x = index8; x < index8 + 3; ++x)
{
for (int y = index9; y < index9 + 3; ++y)
{
Wiring.SkipWire(x, y);
Main.tile[x, y].frameX += (short) num38;
}
}
NetMessage.SendTileSquare(-1, index8 + 1, index9 + 1, 3);
break;
default:
if (type == 387 || type == 386)
{
bool flag4 = type == 387;
int num39 = WorldGen.ShiftTrapdoor(i, j, true).ToInt();
if (num39 == 0)
num39 = -WorldGen.ShiftTrapdoor(i, j, false).ToInt();
if (num39 == 0)
break;
NetMessage.SendData(19, number: (3 - flag4.ToInt()), number2: ((float) i), number3: ((float) j), number4: ((float) num39));
break;
}
if (type == 389 || type == 388)
{
bool closing = type == 389;
WorldGen.ShiftTallGate(i, j, closing);
NetMessage.SendData(19, number: (4 + closing.ToInt()), number2: ((float) i), number3: ((float) j));
break;
}
switch (type)
{
case 10:
int direction = 1;
if (Main.rand.Next(2) == 0)
direction = -1;
if (!WorldGen.OpenDoor(i, j, direction))
{
if (!WorldGen.OpenDoor(i, j, -direction))
return;
NetMessage.SendData(19, number2: ((float) i), number3: ((float) j), number4: ((float) -direction));
return;
}
NetMessage.SendData(19, number2: ((float) i), number3: ((float) j), number4: ((float) direction));
return;
case 11:
if (!WorldGen.CloseDoor(i, j, true))
return;
NetMessage.SendData(19, number: 1, number2: ((float) i), number3: ((float) j));
return;
case 216:
WorldGen.LaunchRocket(i, j);
Wiring.SkipWire(i, j);
return;
default:
if (type == 497 || type == 15 && (int) tile1.frameY / 40 == 1 || type == 15 && (int) tile1.frameY / 40 == 20)
{
int num40 = j - (int) tile1.frameY % 40 / 18;
int num41 = i;
Wiring.SkipWire(num41, num40);
Wiring.SkipWire(num41, num40 + 1);
if (!Wiring.CheckMech(num41, num40, 60))
return;
Projectile.NewProjectile((float) (num41 * 16 + 8), (float) (num40 * 16 + 12), 0.0f, 0.0f, 733, 0, 0.0f, Main.myPlayer);
return;
}
switch (type)
{
case 4:
if (tile1.frameX < (short) 66)
tile1.frameX += (short) 66;
else
tile1.frameX -= (short) 66;
NetMessage.SendTileSquare(-1, i, j, 1);
return;
case 42:
int num42 = (int) tile1.frameY / 18;
while (num42 >= 2)
num42 -= 2;
int y1 = j - num42;
short num43 = 18;
if (tile1.frameX > (short) 0)
num43 = (short) -18;
Main.tile[i, y1].frameX += num43;
Main.tile[i, y1 + 1].frameX += num43;
Wiring.SkipWire(i, y1);
Wiring.SkipWire(i, y1 + 1);
NetMessage.SendTileSquare(-1, i, j, 3);
return;
case 93:
int num44 = (int) tile1.frameY / 18;
while (num44 >= 3)
num44 -= 3;
int y2 = j - num44;
short num45 = 18;
if (tile1.frameX > (short) 0)
num45 = (short) -18;
Main.tile[i, y2].frameX += num45;
Main.tile[i, y2 + 1].frameX += num45;
Main.tile[i, y2 + 2].frameX += num45;
Wiring.SkipWire(i, y2);
Wiring.SkipWire(i, y2 + 1);
Wiring.SkipWire(i, y2 + 2);
NetMessage.SendTileSquare(-1, i, y2 + 1, 3);
return;
case 149:
if (tile1.frameX < (short) 54)
tile1.frameX += (short) 54;
else
tile1.frameX -= (short) 54;
NetMessage.SendTileSquare(-1, i, j, 1);
return;
case 235:
int num46 = i - (int) tile1.frameX / 18;
if (tile1.wall == (ushort) 87 && (double) j > Main.worldSurface && !NPC.downedPlantBoss)
return;
if ((double) Wiring._teleport[0].X == -1.0)
{
Wiring._teleport[0].X = (float) num46;
Wiring._teleport[0].Y = (float) j;
if (!tile1.halfBrick())
return;
Wiring._teleport[0].Y += 0.5f;
return;
}
if ((double) Wiring._teleport[0].X == (double) num46 && (double) Wiring._teleport[0].Y == (double) j)
return;
Wiring._teleport[1].X = (float) num46;
Wiring._teleport[1].Y = (float) j;
if (!tile1.halfBrick())
return;
Wiring._teleport[1].Y += 0.5f;
return;
case 244:
int num47 = (int) tile1.frameX / 18;
while (num47 >= 3)
num47 -= 3;
int num48 = (int) tile1.frameY / 18;
while (num48 >= 3)
num48 -= 3;
int index10 = i - num47;
int index11 = j - num48;
int num49 = 54;
if (Main.tile[index10, index11].frameX >= (short) 54)
num49 = -54;
for (int x = index10; x < index10 + 3; ++x)
{
for (int y3 = index11; y3 < index11 + 2; ++y3)
{
Wiring.SkipWire(x, y3);
Main.tile[x, y3].frameX += (short) num49;
}
}
NetMessage.SendTileSquare(-1, index10 + 1, index11 + 1, 3);
return;
case 335:
int num50 = j - (int) tile1.frameY / 18;
int num51 = i - (int) tile1.frameX / 18;
Wiring.SkipWire(num51, num50);
Wiring.SkipWire(num51, num50 + 1);
Wiring.SkipWire(num51 + 1, num50);
Wiring.SkipWire(num51 + 1, num50 + 1);
if (!Wiring.CheckMech(num51, num50, 30))
return;
WorldGen.LaunchRocketSmall(num51, num50);
return;
case 338:
int num52 = j - (int) tile1.frameY / 18;
int num53 = i - (int) tile1.frameX / 18;
Wiring.SkipWire(num53, num52);
Wiring.SkipWire(num53, num52 + 1);
if (!Wiring.CheckMech(num53, num52, 30))
return;
bool flag5 = false;
for (int index12 = 0; index12 < 1000; ++index12)
{
if (Main.projectile[index12].active && Main.projectile[index12].aiStyle == 73 && (double) Main.projectile[index12].ai[0] == (double) num53 && (double) Main.projectile[index12].ai[1] == (double) num52)
{
flag5 = true;
break;
}
}
if (flag5)
return;
Projectile.NewProjectile((float) (num53 * 16 + 8), (float) (num52 * 16 + 2), 0.0f, 0.0f, 419 + Main.rand.Next(4), 0, 0.0f, Main.myPlayer, (float) num53, (float) num52);
return;
case 429:
int num54 = (int) Main.tile[i, j].frameX / 18;
bool flag6 = num54 % 2 >= 1;
bool flag7 = num54 % 4 >= 2;
bool flag8 = num54 % 8 >= 4;
bool flag9 = num54 % 16 >= 8;
bool flag10 = false;
short num55 = 0;
switch (Wiring._currentWireColor)
{
case 1:
num55 = (short) 18;
flag10 = !flag6;
break;
case 2:
num55 = (short) 72;
flag10 = !flag8;
break;
case 3:
num55 = (short) 36;
flag10 = !flag7;
break;
case 4:
num55 = (short) 144;
flag10 = !flag9;
break;
}
if (flag10)
tile1.frameX += num55;
else
tile1.frameX -= num55;
NetMessage.SendTileSquare(-1, i, j, 1);
return;
case 565:
int num56 = (int) tile1.frameX / 18;
while (num56 >= 2)
num56 -= 2;
int num57 = (int) tile1.frameY / 18;
while (num57 >= 2)
num57 -= 2;
int index13 = i - num56;
int index14 = j - num57;
int num58 = 36;
if (Main.tile[index13, index14].frameX >= (short) 36)
num58 = -36;
for (int x = index13; x < index13 + 2; ++x)
{
for (int y4 = index14; y4 < index14 + 2; ++y4)
{
Wiring.SkipWire(x, y4);
Main.tile[x, y4].frameX += (short) num58;
}
}
NetMessage.SendTileSquare(-1, index13 + 1, index14 + 1, 3);
return;
default:
if (type == 126 || type == 95 || type == 100 || type == 173 || type == 564)
{
int num59 = (int) tile1.frameY / 18;
while (num59 >= 2)
num59 -= 2;
int index15 = j - num59;
int num60 = (int) tile1.frameX / 18;
if (num60 > 1)
num60 -= 2;
int index16 = i - num60;
short num61 = 36;
if (Main.tile[index16, index15].frameX > (short) 0)
num61 = (short) -36;
Main.tile[index16, index15].frameX += num61;
Main.tile[index16, index15 + 1].frameX += num61;
Main.tile[index16 + 1, index15].frameX += num61;
Main.tile[index16 + 1, index15 + 1].frameX += num61;
Wiring.SkipWire(index16, index15);
Wiring.SkipWire(index16 + 1, index15);
Wiring.SkipWire(index16, index15 + 1);
Wiring.SkipWire(index16 + 1, index15 + 1);
NetMessage.SendTileSquare(-1, index16, index15, 3);
return;
}
switch (type)
{
case 34:
int num62 = (int) tile1.frameY / 18;
while (num62 >= 3)
num62 -= 3;
int index17 = j - num62;
int num63 = (int) tile1.frameX % 108 / 18;
if (num63 > 2)
num63 -= 3;
int index18 = i - num63;
short num64 = 54;
if ((int) Main.tile[index18, index17].frameX % 108 > 0)
num64 = (short) -54;
for (int x = index18; x < index18 + 3; ++x)
{
for (int y5 = index17; y5 < index17 + 3; ++y5)
{
Main.tile[x, y5].frameX += num64;
Wiring.SkipWire(x, y5);
}
}
NetMessage.SendTileSquare(-1, index18 + 1, index17 + 1, 3);
return;
case 314:
if (!Wiring.CheckMech(i, j, 5))
return;
Minecart.FlipSwitchTrack(i, j);
return;
case 593:
int index19 = i;
int index20 = j;
Wiring.SkipWire(index19, index20);
short num65 = Main.tile[index19, index20].frameX != (short) 0 ? (short) -18 : (short) 18;
Main.tile[index19, index20].frameX += num65;
if (Main.netMode == 2)
NetMessage.SendTileRange(-1, index19, index20, 1, 1);
int num66 = num65 > (short) 0 ? 4 : 3;
Animation.NewTemporaryAnimation(num66, (ushort) 593, index19, index20);
NetMessage.SendTemporaryAnimation(-1, num66, 593, index19, index20);
return;
case 594:
int num67 = (int) tile1.frameY / 18;
while (num67 >= 2)
num67 -= 2;
int index21 = j - num67;
int num68 = (int) tile1.frameX / 18;
if (num68 > 1)
num68 -= 2;
int index22 = i - num68;
Wiring.SkipWire(index22, index21);
Wiring.SkipWire(index22, index21 + 1);
Wiring.SkipWire(index22 + 1, index21);
Wiring.SkipWire(index22 + 1, index21 + 1);
short num69 = Main.tile[index22, index21].frameX != (short) 0 ? (short) -36 : (short) 36;
for (int index23 = 0; index23 < 2; ++index23)
{
for (int index24 = 0; index24 < 2; ++index24)
Main.tile[index22 + index23, index21 + index24].frameX += num69;
}
if (Main.netMode == 2)
NetMessage.SendTileRange(-1, index22, index21, 2, 2);
int num70 = num69 > (short) 0 ? 4 : 3;
Animation.NewTemporaryAnimation(num70, (ushort) 594, index22, index21);
NetMessage.SendTemporaryAnimation(-1, num70, 594, index22, index21);
return;
default:
if (type == 33 || type == 174 || type == 49 || type == 372)
{
short num71 = 18;
if (tile1.frameX > (short) 0)
num71 = (short) -18;
tile1.frameX += num71;
NetMessage.SendTileSquare(-1, i, j, 3);
return;
}
switch (type)
{
case 92:
int num72 = j - (int) tile1.frameY / 18;
short num73 = 18;
if (tile1.frameX > (short) 0)
num73 = (short) -18;
for (int y6 = num72; y6 < num72 + 6; ++y6)
{
Main.tile[i, y6].frameX += num73;
Wiring.SkipWire(i, y6);
}
NetMessage.SendTileSquare(-1, i, num72 + 3, 7);
return;
case 137:
int num74 = (int) tile1.frameY / 18;
Vector2 vector2_2 = Vector2.Zero;
float SpeedX2 = 0.0f;
float SpeedY2 = 0.0f;
int Type2 = 0;
int Damage2 = 0;
switch (num74)
{
case 0:
case 1:
case 2:
if (Wiring.CheckMech(i, j, 200))
{
int num75 = tile1.frameX == (short) 0 ? -1 : (tile1.frameX == (short) 18 ? 1 : 0);
int num76 = tile1.frameX < (short) 36 ? 0 : (tile1.frameX < (short) 72 ? -1 : 1);
vector2_2 = new Vector2((float) (i * 16 + 8 + 10 * num75), (float) (j * 16 + 8 + 10 * num76));
float num77 = 3f;
if (num74 == 0)
{
Type2 = 98;
Damage2 = 20;
num77 = 12f;
}
if (num74 == 1)
{
Type2 = 184;
Damage2 = 40;
num77 = 12f;
}
if (num74 == 2)
{
Type2 = 187;
Damage2 = 40;
num77 = 5f;
}
SpeedX2 = (float) num75 * num77;
SpeedY2 = (float) num76 * num77;
break;
}
break;
case 3:
if (Wiring.CheckMech(i, j, 300))
{
int num78 = 200;
for (int index25 = 0; index25 < 1000; ++index25)
{
if (Main.projectile[index25].active && Main.projectile[index25].type == Type2)
{
float num79 = (new Vector2((float) (i * 16 + 8), (float) (j * 18 + 8)) - Main.projectile[index25].Center).Length();
if ((double) num79 < 50.0)
num78 -= 50;
else if ((double) num79 < 100.0)
num78 -= 15;
else if ((double) num79 < 200.0)
num78 -= 10;
else if ((double) num79 < 300.0)
num78 -= 8;
else if ((double) num79 < 400.0)
num78 -= 6;
else if ((double) num79 < 500.0)
num78 -= 5;
else if ((double) num79 < 700.0)
num78 -= 4;
else if ((double) num79 < 900.0)
num78 -= 3;
else if ((double) num79 < 1200.0)
num78 -= 2;
else
--num78;
}
}
if (num78 > 0)
{
Type2 = 185;
Damage2 = 40;
int num80 = 0;
int num81 = 0;
switch ((int) tile1.frameX / 18)
{
case 0:
case 1:
num80 = 0;
num81 = 1;
break;
case 2:
num80 = 0;
num81 = -1;
break;
case 3:
num80 = -1;
num81 = 0;
break;
case 4:
num80 = 1;
num81 = 0;
break;
}
SpeedX2 = (float) (4 * num80) + (float) Main.rand.Next((num80 == 1 ? 20 : 0) - 20, 21 - (num80 == -1 ? 20 : 0)) * 0.05f;
SpeedY2 = (float) (4 * num81) + (float) Main.rand.Next((num81 == 1 ? 20 : 0) - 20, 21 - (num81 == -1 ? 20 : 0)) * 0.05f;
vector2_2 = new Vector2((float) (i * 16 + 8 + 14 * num80), (float) (j * 16 + 8 + 14 * num81));
break;
}
break;
}
break;
case 4:
if (Wiring.CheckMech(i, j, 90))
{
int num82 = 0;
int num83 = 0;
switch ((int) tile1.frameX / 18)
{
case 0:
case 1:
num82 = 0;
num83 = 1;
break;
case 2:
num82 = 0;
num83 = -1;
break;
case 3:
num82 = -1;
num83 = 0;
break;
case 4:
num82 = 1;
num83 = 0;
break;
}
SpeedX2 = (float) (8 * num82);
SpeedY2 = (float) (8 * num83);
Damage2 = 60;
Type2 = 186;
vector2_2 = new Vector2((float) (i * 16 + 8 + 18 * num82), (float) (j * 16 + 8 + 18 * num83));
break;
}
break;
}
switch (num74 + 10)
{
case 0:
if (Wiring.CheckMech(i, j, 200))
{
int num84 = -1;
if (tile1.frameX != (short) 0)
num84 = 1;
SpeedX2 = (float) (12 * num84);
Damage2 = 20;
Type2 = 98;
vector2_2 = new Vector2((float) (i * 16 + 8), (float) (j * 16 + 7));
vector2_2.X += (float) (10 * num84);
vector2_2.Y += 2f;
break;
}
break;
case 1:
if (Wiring.CheckMech(i, j, 200))
{
int num85 = -1;
if (tile1.frameX != (short) 0)
num85 = 1;
SpeedX2 = (float) (12 * num85);
Damage2 = 40;
Type2 = 184;
vector2_2 = new Vector2((float) (i * 16 + 8), (float) (j * 16 + 7));
vector2_2.X += (float) (10 * num85);
vector2_2.Y += 2f;
break;
}
break;
case 2:
if (Wiring.CheckMech(i, j, 200))
{
int num86 = -1;
if (tile1.frameX != (short) 0)
num86 = 1;
SpeedX2 = (float) (5 * num86);
Damage2 = 40;
Type2 = 187;
vector2_2 = new Vector2((float) (i * 16 + 8), (float) (j * 16 + 7));
vector2_2.X += (float) (10 * num86);
vector2_2.Y += 2f;
break;
}
break;
case 3:
if (Wiring.CheckMech(i, j, 300))
{
Type2 = 185;
int num87 = 200;
for (int index26 = 0; index26 < 1000; ++index26)
{
if (Main.projectile[index26].active && Main.projectile[index26].type == Type2)
{
float num88 = (new Vector2((float) (i * 16 + 8), (float) (j * 18 + 8)) - Main.projectile[index26].Center).Length();
if ((double) num88 < 50.0)
num87 -= 50;
else if ((double) num88 < 100.0)
num87 -= 15;
else if ((double) num88 < 200.0)
num87 -= 10;
else if ((double) num88 < 300.0)
num87 -= 8;
else if ((double) num88 < 400.0)
num87 -= 6;
else if ((double) num88 < 500.0)
num87 -= 5;
else if ((double) num88 < 700.0)
num87 -= 4;
else if ((double) num88 < 900.0)
num87 -= 3;
else if ((double) num88 < 1200.0)
num87 -= 2;
else
--num87;
}
}
if (num87 > 0)
{
SpeedX2 = (float) Main.rand.Next(-20, 21) * 0.05f;
SpeedY2 = (float) (4.0 + (double) Main.rand.Next(0, 21) * 0.0500000007450581);
Damage2 = 40;
vector2_2 = new Vector2((float) (i * 16 + 8), (float) (j * 16 + 16));
vector2_2.Y += 6f;
Projectile.NewProjectile((float) (int) vector2_2.X, (float) (int) vector2_2.Y, SpeedX2, SpeedY2, Type2, Damage2, 2f, Main.myPlayer);
break;
}
break;
}
break;
case 4:
if (Wiring.CheckMech(i, j, 90))
{
SpeedX2 = 0.0f;
SpeedY2 = 8f;
Damage2 = 60;
Type2 = 186;
vector2_2 = new Vector2((float) (i * 16 + 8), (float) (j * 16 + 16));
vector2_2.Y += 10f;
break;
}
break;
}
if (Type2 == 0)
return;
Projectile.NewProjectile((float) (int) vector2_2.X, (float) (int) vector2_2.Y, SpeedX2, SpeedY2, Type2, Damage2, 2f, Main.myPlayer);
return;
case 443:
Wiring.GeyserTrap(i, j);
return;
case 531:
int num89 = (int) tile1.frameX / 36;
int num90 = (int) tile1.frameY / 54;
int i3 = i - ((int) tile1.frameX - num89 * 36) / 18;
int j3 = j - ((int) tile1.frameY - num90 * 54) / 18;
if (!Wiring.CheckMech(i3, j3, 900))
return;
Vector2 vector2_3 = new Vector2((float) (i3 + 1), (float) j3) * 16f;
vector2_3.Y += 28f;
int Type3 = 99;
int Damage3 = 70;
float KnockBack2 = 10f;
if (Type3 == 0)
return;
Projectile.NewProjectile((float) (int) vector2_3.X, (float) (int) vector2_3.Y, 0.0f, 0.0f, Type3, Damage3, KnockBack2, Main.myPlayer);
return;
default:
if (type == 139 || type == 35)
{
WorldGen.SwitchMB(i, j);
return;
}
if (type == 207)
{
WorldGen.SwitchFountain(i, j);
return;
}
if (type == 410 || type == 480 || type == 509)
{
WorldGen.SwitchMonolith(i, j);
return;
}
switch (type)
{
case 141:
WorldGen.KillTile(i, j, noItem: true);
NetMessage.SendTileSquare(-1, i, j, 1);
Projectile.NewProjectile((float) (i * 16 + 8), (float) (j * 16 + 8), 0.0f, 0.0f, 108, 500, 10f, Main.myPlayer);
return;
case 210:
WorldGen.ExplodeMine(i, j);
return;
case 455:
BirthdayParty.ToggleManualParty();
return;
default:
if (type == 142 || type == 143)
{
int y7 = j - (int) tile1.frameY / 18;
int num91 = (int) tile1.frameX / 18;
if (num91 > 1)
num91 -= 2;
int x = i - num91;
Wiring.SkipWire(x, y7);
Wiring.SkipWire(x, y7 + 1);
Wiring.SkipWire(x + 1, y7);
Wiring.SkipWire(x + 1, y7 + 1);
if (type == 142)
{
for (int index27 = 0; index27 < 4 && Wiring._numInPump < 19; ++index27)
{
int num92;
int num93;
switch (index27)
{
case 0:
num92 = x;
num93 = y7 + 1;
break;
case 1:
num92 = x + 1;
num93 = y7 + 1;
break;
case 2:
num92 = x;
num93 = y7;
break;
default:
num92 = x + 1;
num93 = y7;
break;
}
Wiring._inPumpX[Wiring._numInPump] = num92;
Wiring._inPumpY[Wiring._numInPump] = num93;
++Wiring._numInPump;
}
return;
}
for (int index28 = 0; index28 < 4 && Wiring._numOutPump < 19; ++index28)
{
int num94;
int num95;
switch (index28)
{
case 0:
num94 = x;
num95 = y7 + 1;
break;
case 1:
num94 = x + 1;
num95 = y7 + 1;
break;
case 2:
num94 = x;
num95 = y7;
break;
default:
num94 = x + 1;
num95 = y7;
break;
}
Wiring._outPumpX[Wiring._numOutPump] = num94;
Wiring._outPumpY[Wiring._numOutPump] = num95;
++Wiring._numOutPump;
}
return;
}
switch (type)
{
case 105:
int num96 = j - (int) tile1.frameY / 18;
int num97 = (int) tile1.frameX / 18;
int num98 = 0;
while (num97 >= 2)
{
num97 -= 2;
++num98;
}
int num99 = i - num97;
int num100 = i - (int) tile1.frameX % 36 / 18;
int num101 = j - (int) tile1.frameY % 54 / 18;
int num102 = (int) tile1.frameY / 54 % 3;
int num103 = (int) tile1.frameX / 36 + num102 * 55;
Wiring.SkipWire(num100, num101);
Wiring.SkipWire(num100, num101 + 1);
Wiring.SkipWire(num100, num101 + 2);
Wiring.SkipWire(num100 + 1, num101);
Wiring.SkipWire(num100 + 1, num101 + 1);
Wiring.SkipWire(num100 + 1, num101 + 2);
int X = num100 * 16 + 16;
int Y = (num101 + 3) * 16;
int index29 = -1;
int num104 = -1;
bool flag11 = true;
bool flag12 = false;
switch (num103)
{
case 5:
num104 = 73;
break;
case 13:
num104 = 24;
break;
case 30:
num104 = 6;
break;
case 35:
num104 = 2;
break;
case 51:
num104 = (int) Utils.SelectRandom<short>(Main.rand, (short) 299, (short) 538);
break;
case 52:
num104 = 356;
break;
case 53:
num104 = 357;
break;
case 54:
num104 = (int) Utils.SelectRandom<short>(Main.rand, (short) 355, (short) 358);
break;
case 55:
num104 = (int) Utils.SelectRandom<short>(Main.rand, (short) 367, (short) 366);
break;
case 56:
num104 = (int) Utils.SelectRandom<short>(Main.rand, (short) 359, (short) 359, (short) 359, (short) 359, (short) 360);
break;
case 57:
num104 = 377;
break;
case 58:
num104 = 300;
break;
case 59:
num104 = (int) Utils.SelectRandom<short>(Main.rand, (short) 364, (short) 362);
break;
case 60:
num104 = 148;
break;
case 61:
num104 = 361;
break;
case 62:
num104 = (int) Utils.SelectRandom<short>(Main.rand, (short) 487, (short) 486, (short) 485);
break;
case 63:
num104 = 164;
flag11 &= NPC.MechSpawn((float) X, (float) Y, 165);
break;
case 64:
num104 = 86;
flag12 = true;
break;
case 65:
num104 = 490;
break;
case 66:
num104 = 82;
break;
case 67:
num104 = 449;
break;
case 68:
num104 = 167;
break;
case 69:
num104 = 480;
break;
case 70:
num104 = 48;
break;
case 71:
num104 = (int) Utils.SelectRandom<short>(Main.rand, (short) 170, (short) 180, (short) 171);
flag12 = true;
break;
case 72:
num104 = 481;
break;
case 73:
num104 = 482;
break;
case 74:
num104 = 430;
break;
case 75:
num104 = 489;
break;
case 76:
num104 = 611;
break;
case 77:
num104 = 602;
break;
case 78:
num104 = (int) Utils.SelectRandom<short>(Main.rand, (short) 595, (short) 596, (short) 599, (short) 597, (short) 600, (short) 598);
break;
case 79:
num104 = (int) Utils.SelectRandom<short>(Main.rand, (short) 616, (short) 617);
break;
}
if (((num104 == -1 || !Wiring.CheckMech(num100, num101, 30) ? 0 : (NPC.MechSpawn((float) X, (float) Y, num104) ? 1 : 0)) & (flag11 ? 1 : 0)) != 0)
{
if (!flag12 || !Collision.SolidTiles(num100 - 2, num100 + 3, num101, num101 + 2))
{
index29 = NPC.NewNPC(X, Y, num104);
}
else
{
Vector2 position = new Vector2((float) (X - 4), (float) (Y - 22)) - new Vector2(10f);
Utils.PoofOfSmoke(position);
NetMessage.SendData(106, number: ((int) position.X), number2: position.Y);
}
}
if (index29 <= -1)
{
switch (num103)
{
case 2:
if (Wiring.CheckMech(num100, num101, 600) && Item.MechSpawn((float) X, (float) Y, 184) && Item.MechSpawn((float) X, (float) Y, 1735) && Item.MechSpawn((float) X, (float) Y, 1868))
{
Item.NewItem(X, Y - 16, 0, 0, 184);
break;
}
break;
case 4:
if (Wiring.CheckMech(num100, num101, 30) && NPC.MechSpawn((float) X, (float) Y, 1))
{
index29 = NPC.NewNPC(X, Y - 12, 1);
break;
}
break;
case 7:
if (Wiring.CheckMech(num100, num101, 30) && NPC.MechSpawn((float) X, (float) Y, 49))
{
index29 = NPC.NewNPC(X - 4, Y - 6, 49);
break;
}
break;
case 8:
if (Wiring.CheckMech(num100, num101, 30) && NPC.MechSpawn((float) X, (float) Y, 55))
{
index29 = NPC.NewNPC(X, Y - 12, 55);
break;
}
break;
case 9:
int num105 = 46;
if (BirthdayParty.PartyIsUp)
num105 = 540;
if (Wiring.CheckMech(num100, num101, 30) && NPC.MechSpawn((float) X, (float) Y, num105))
{
index29 = NPC.NewNPC(X, Y - 12, num105);
break;
}
break;
case 10:
if (Wiring.CheckMech(num100, num101, 30) && NPC.MechSpawn((float) X, (float) Y, 21))
{
index29 = NPC.NewNPC(X, Y, 21);
break;
}
break;
case 16:
if (Wiring.CheckMech(num100, num101, 30) && NPC.MechSpawn((float) X, (float) Y, 42))
{
if (!Collision.SolidTiles(num100 - 1, num100 + 1, num101, num101 + 1))
{
index29 = NPC.NewNPC(X, Y - 12, 42);
break;
}
Vector2 position = new Vector2((float) (X - 4), (float) (Y - 22)) - new Vector2(10f);
Utils.PoofOfSmoke(position);
NetMessage.SendData(106, number: ((int) position.X), number2: position.Y);
break;
}
break;
case 17:
if (Wiring.CheckMech(num100, num101, 600) && Item.MechSpawn((float) X, (float) Y, 166))
{
Item.NewItem(X, Y - 20, 0, 0, 166);
break;
}
break;
case 18:
if (Wiring.CheckMech(num100, num101, 30) && NPC.MechSpawn((float) X, (float) Y, 67))
{
index29 = NPC.NewNPC(X, Y - 12, 67);
break;
}
break;
case 23:
if (Wiring.CheckMech(num100, num101, 30) && NPC.MechSpawn((float) X, (float) Y, 63))
{
index29 = NPC.NewNPC(X, Y - 12, 63);
break;
}
break;
case 27:
if (Wiring.CheckMech(num100, num101, 30) && NPC.MechSpawn((float) X, (float) Y, 85))
{
index29 = NPC.NewNPC(X - 9, Y, 85);
break;
}
break;
case 28:
if (Wiring.CheckMech(num100, num101, 30) && NPC.MechSpawn((float) X, (float) Y, 74))
{
index29 = NPC.NewNPC(X, Y - 12, (int) Utils.SelectRandom<short>(Main.rand, (short) 74, (short) 297, (short) 298));
break;
}
break;
case 34:
for (int index30 = 0; index30 < 2; ++index30)
{
for (int index31 = 0; index31 < 3; ++index31)
{
Tile tile2 = Main.tile[num100 + index30, num101 + index31];
tile2.type = (ushort) 349;
tile2.frameX = (short) (index30 * 18 + 216);
tile2.frameY = (short) (index31 * 18);
}
}
Animation.NewTemporaryAnimation(0, (ushort) 349, num100, num101);
if (Main.netMode == 2)
{
NetMessage.SendTileRange(-1, num100, num101, 2, 3);
break;
}
break;
case 37:
if (Wiring.CheckMech(num100, num101, 600) && Item.MechSpawn((float) X, (float) Y, 58) && Item.MechSpawn((float) X, (float) Y, 1734) && Item.MechSpawn((float) X, (float) Y, 1867))
{
Item.NewItem(X, Y - 16, 0, 0, 58);
break;
}
break;
case 40:
if (Wiring.CheckMech(num100, num101, 300))
{
int length = 50;
int[] numArray = new int[length];
int maxValue = 0;
for (int index32 = 0; index32 < 200; ++index32)
{
if (Main.npc[index32].active && (Main.npc[index32].type == 17 || Main.npc[index32].type == 19 || Main.npc[index32].type == 22 || Main.npc[index32].type == 38 || Main.npc[index32].type == 54 || Main.npc[index32].type == 107 || Main.npc[index32].type == 108 || Main.npc[index32].type == 142 || Main.npc[index32].type == 160 || Main.npc[index32].type == 207 || Main.npc[index32].type == 209 || Main.npc[index32].type == 227 || Main.npc[index32].type == 228 || Main.npc[index32].type == 229 || Main.npc[index32].type == 368 || Main.npc[index32].type == 369 || Main.npc[index32].type == 550 || Main.npc[index32].type == 441 || Main.npc[index32].type == 588))
{
numArray[maxValue] = index32;
++maxValue;
if (maxValue >= length)
break;
}
}
if (maxValue > 0)
{
int number = numArray[Main.rand.Next(maxValue)];
Main.npc[number].position.X = (float) (X - Main.npc[number].width / 2);
Main.npc[number].position.Y = (float) (Y - Main.npc[number].height - 1);
NetMessage.SendData(23, number: number);
break;
}
break;
}
break;
case 41:
if (Wiring.CheckMech(num100, num101, 300))
{
int length = 50;
int[] numArray = new int[length];
int maxValue = 0;
for (int index33 = 0; index33 < 200; ++index33)
{
if (Main.npc[index33].active && (Main.npc[index33].type == 18 || Main.npc[index33].type == 20 || Main.npc[index33].type == 124 || Main.npc[index33].type == 178 || Main.npc[index33].type == 208 || Main.npc[index33].type == 353 || Main.npc[index33].type == 633))
{
numArray[maxValue] = index33;
++maxValue;
if (maxValue >= length)
break;
}
}
if (maxValue > 0)
{
int number = numArray[Main.rand.Next(maxValue)];
Main.npc[number].position.X = (float) (X - Main.npc[number].width / 2);
Main.npc[number].position.Y = (float) (Y - Main.npc[number].height - 1);
NetMessage.SendData(23, number: number);
break;
}
break;
}
break;
case 42:
if (Wiring.CheckMech(num100, num101, 30) && NPC.MechSpawn((float) X, (float) Y, 58))
{
index29 = NPC.NewNPC(X, Y - 12, 58);
break;
}
break;
case 50:
if (Wiring.CheckMech(num100, num101, 30) && NPC.MechSpawn((float) X, (float) Y, 65))
{
if (!Collision.SolidTiles(num100 - 2, num100 + 3, num101, num101 + 2))
{
index29 = NPC.NewNPC(X, Y - 12, 65);
break;
}
Vector2 position = new Vector2((float) (X - 4), (float) (Y - 22)) - new Vector2(10f);
Utils.PoofOfSmoke(position);
NetMessage.SendData(106, number: ((int) position.X), number2: position.Y);
break;
}
break;
}
}
if (index29 < 0)
return;
Main.npc[index29].value = 0.0f;
Main.npc[index29].npcSlots = 0.0f;
Main.npc[index29].SpawnedFromStatue = true;
return;
case 349:
int num106 = (int) tile1.frameY / 18 % 3;
int index34 = j - num106;
int num107 = (int) tile1.frameX / 18;
while (num107 >= 2)
num107 -= 2;
int index35 = i - num107;
Wiring.SkipWire(index35, index34);
Wiring.SkipWire(index35, index34 + 1);
Wiring.SkipWire(index35, index34 + 2);
Wiring.SkipWire(index35 + 1, index34);
Wiring.SkipWire(index35 + 1, index34 + 1);
Wiring.SkipWire(index35 + 1, index34 + 2);
short num108 = Main.tile[index35, index34].frameX != (short) 0 ? (short) -216 : (short) 216;
for (int index36 = 0; index36 < 2; ++index36)
{
for (int index37 = 0; index37 < 3; ++index37)
Main.tile[index35 + index36, index34 + index37].frameX += num108;
}
if (Main.netMode == 2)
NetMessage.SendTileRange(-1, index35, index34, 2, 3);
Animation.NewTemporaryAnimation(num108 > (short) 0 ? 0 : 1, (ushort) 349, index35, index34);
return;
case 506:
int num109 = (int) tile1.frameY / 18 % 3;
int index38 = j - num109;
int num110 = (int) tile1.frameX / 18;
while (num110 >= 2)
num110 -= 2;
int index39 = i - num110;
Wiring.SkipWire(index39, index38);
Wiring.SkipWire(index39, index38 + 1);
Wiring.SkipWire(index39, index38 + 2);
Wiring.SkipWire(index39 + 1, index38);
Wiring.SkipWire(index39 + 1, index38 + 1);
Wiring.SkipWire(index39 + 1, index38 + 2);
short num111 = Main.tile[index39, index38].frameX >= (short) 72 ? (short) -72 : (short) 72;
for (int index40 = 0; index40 < 2; ++index40)
{
for (int index41 = 0; index41 < 3; ++index41)
Main.tile[index39 + index40, index38 + index41].frameX += num111;
}
if (Main.netMode != 2)
return;
NetMessage.SendTileRange(-1, index39, index38, 2, 3);
return;
case 546:
tile1.type = (ushort) 557;
WorldGen.SquareTileFrame(i, j);
NetMessage.SendTileSquare(-1, i, j, 1);
return;
case 557:
tile1.type = (ushort) 546;
WorldGen.SquareTileFrame(i, j);
NetMessage.SendTileSquare(-1, i, j, 1);
return;
default:
return;
}
}
}
}
}
}
}
}
}
private static void GeyserTrap(int i, int j)
{
Tile tile = Main.tile[i, j];
if (tile.type != (ushort) 443)
return;
int num = (int) tile.frameX / 36;
int i1 = i - ((int) tile.frameX - num * 36) / 18;
int j1 = j;
if (!Wiring.CheckMech(i1, j1, 200))
return;
Vector2 zero = Vector2.Zero;
Vector2 vector2_1 = Vector2.Zero;
int Type = 654;
int Damage = 20;
Vector2 vector2_2;
if (num < 2)
{
vector2_2 = new Vector2((float) (i1 + 1), (float) j1) * 16f;
vector2_1 = new Vector2(0.0f, -8f);
}
else
{
vector2_2 = new Vector2((float) (i1 + 1), (float) (j1 + 1)) * 16f;
vector2_1 = new Vector2(0.0f, 8f);
}
if (Type == 0)
return;
Projectile.NewProjectile((float) (int) vector2_2.X, (float) (int) vector2_2.Y, vector2_1.X, vector2_1.Y, Type, Damage, 2f, Main.myPlayer);
}
private static void Teleport()
{
if ((double) Wiring._teleport[0].X < (double) Wiring._teleport[1].X + 3.0 && (double) Wiring._teleport[0].X > (double) Wiring._teleport[1].X - 3.0 && (double) Wiring._teleport[0].Y > (double) Wiring._teleport[1].Y - 3.0 && (double) Wiring._teleport[0].Y < (double) Wiring._teleport[1].Y)
return;
Rectangle[] rectangleArray = new Rectangle[2];
rectangleArray[0].X = (int) ((double) Wiring._teleport[0].X * 16.0);
rectangleArray[0].Width = 48;
rectangleArray[0].Height = 48;
rectangleArray[0].Y = (int) ((double) Wiring._teleport[0].Y * 16.0 - (double) rectangleArray[0].Height);
rectangleArray[1].X = (int) ((double) Wiring._teleport[1].X * 16.0);
rectangleArray[1].Width = 48;
rectangleArray[1].Height = 48;
rectangleArray[1].Y = (int) ((double) Wiring._teleport[1].Y * 16.0 - (double) rectangleArray[1].Height);
for (int index1 = 0; index1 < 2; ++index1)
{
Vector2 vector2_1 = new Vector2((float) (rectangleArray[1].X - rectangleArray[0].X), (float) (rectangleArray[1].Y - rectangleArray[0].Y));
if (index1 == 1)
vector2_1 = new Vector2((float) (rectangleArray[0].X - rectangleArray[1].X), (float) (rectangleArray[0].Y - rectangleArray[1].Y));
if (!Wiring.blockPlayerTeleportationForOneIteration)
{
for (int playerIndex = 0; playerIndex < (int) byte.MaxValue; ++playerIndex)
{
if (Main.player[playerIndex].active && !Main.player[playerIndex].dead && !Main.player[playerIndex].teleporting && Wiring.TeleporterHitboxIntersects(rectangleArray[index1], Main.player[playerIndex].Hitbox))
{
Vector2 vector2_2 = Main.player[playerIndex].position + vector2_1;
Main.player[playerIndex].teleporting = true;
if (Main.netMode == 2)
RemoteClient.CheckSection(playerIndex, vector2_2);
Main.player[playerIndex].Teleport(vector2_2);
if (Main.netMode == 2)
NetMessage.SendData(65, number2: ((float) playerIndex), number3: vector2_2.X, number4: vector2_2.Y);
}
}
}
for (int index2 = 0; index2 < 200; ++index2)
{
if (Main.npc[index2].active && !Main.npc[index2].teleporting && Main.npc[index2].lifeMax > 5 && !Main.npc[index2].boss && !Main.npc[index2].noTileCollide)
{
int type = Main.npc[index2].type;
if (!NPCID.Sets.TeleportationImmune[type] && Wiring.TeleporterHitboxIntersects(rectangleArray[index1], Main.npc[index2].Hitbox))
{
Main.npc[index2].teleporting = true;
Main.npc[index2].Teleport(Main.npc[index2].position + vector2_1);
}
}
}
}
for (int index = 0; index < (int) byte.MaxValue; ++index)
Main.player[index].teleporting = false;
for (int index = 0; index < 200; ++index)
Main.npc[index].teleporting = false;
}
private static bool TeleporterHitboxIntersects(Rectangle teleporter, Rectangle entity)
{
Rectangle rectangle = Rectangle.Union(teleporter, entity);
return rectangle.Width <= teleporter.Width + entity.Width && rectangle.Height <= teleporter.Height + entity.Height;
}
private static void DeActive(int i, int j)
{
if (!Main.tile[i, j].active() || Main.tile[i, j].type == (ushort) 226 && (double) j > Main.worldSurface && !NPC.downedPlantBoss)
return;
bool flag = Main.tileSolid[(int) Main.tile[i, j].type] && !TileID.Sets.NotReallySolid[(int) Main.tile[i, j].type];
switch (Main.tile[i, j].type)
{
case 314:
case 386:
case 387:
case 388:
case 389:
case 476:
flag = false;
break;
}
if (!flag || Main.tile[i, j - 1].active() && (TileID.Sets.BasicChest[(int) Main.tile[i, j - 1].type] || Main.tile[i, j - 1].type == (ushort) 26 || Main.tile[i, j - 1].type == (ushort) 77 || Main.tile[i, j - 1].type == (ushort) 88 || Main.tile[i, j - 1].type == (ushort) 470 || Main.tile[i, j - 1].type == (ushort) 475 || Main.tile[i, j - 1].type == (ushort) 237 || Main.tile[i, j - 1].type == (ushort) 597 || !WorldGen.CanKillTile(i, j - 1)))
return;
Main.tile[i, j].inActive(true);
WorldGen.SquareTileFrame(i, j, false);
if (Main.netMode == 1)
return;
NetMessage.SendTileSquare(-1, i, j, 1);
}
private static void ReActive(int i, int j)
{
Main.tile[i, j].inActive(false);
WorldGen.SquareTileFrame(i, j, false);
if (Main.netMode == 1)
return;
NetMessage.SendTileSquare(-1, i, j, 1);
}
private static void MassWireOperationInner(
Point ps,
Point pe,
Vector2 dropPoint,
bool dir,
ref int wireCount,
ref int actuatorCount)
{
Math.Abs(ps.X - pe.X);
Math.Abs(ps.Y - pe.Y);
int num1 = Math.Sign(pe.X - ps.X);
int num2 = Math.Sign(pe.Y - ps.Y);
WiresUI.Settings.MultiToolMode toolMode = WiresUI.Settings.ToolMode;
Point pt = new Point();
bool flag1 = false;
Item.StartCachingType(530);
Item.StartCachingType(849);
bool flag2 = dir;
int num3;
int num4;
int num5;
if (flag2)
{
pt.X = ps.X;
num3 = ps.Y;
num4 = pe.Y;
num5 = num2;
}
else
{
pt.Y = ps.Y;
num3 = ps.X;
num4 = pe.X;
num5 = num1;
}
for (int index = num3; index != num4 && !flag1; index += num5)
{
if (flag2)
pt.Y = index;
else
pt.X = index;
bool? nullable = Wiring.MassWireOperationStep(pt, toolMode, ref wireCount, ref actuatorCount);
if (nullable.HasValue && !nullable.Value)
{
flag1 = true;
break;
}
}
int num6;
int num7;
int num8;
if (flag2)
{
pt.Y = pe.Y;
num6 = ps.X;
num7 = pe.X;
num8 = num1;
}
else
{
pt.X = pe.X;
num6 = ps.Y;
num7 = pe.Y;
num8 = num2;
}
for (int index = num6; index != num7 && !flag1; index += num8)
{
if (!flag2)
pt.Y = index;
else
pt.X = index;
bool? nullable = Wiring.MassWireOperationStep(pt, toolMode, ref wireCount, ref actuatorCount);
if (nullable.HasValue && !nullable.Value)
{
flag1 = true;
break;
}
}
if (!flag1)
Wiring.MassWireOperationStep(pe, toolMode, ref wireCount, ref actuatorCount);
Item.DropCache(dropPoint, Vector2.Zero, 530);
Item.DropCache(dropPoint, Vector2.Zero, 849);
}
private static bool? MassWireOperationStep(
Point pt,
WiresUI.Settings.MultiToolMode mode,
ref int wiresLeftToConsume,
ref int actuatorsLeftToConstume)
{
if (!WorldGen.InWorld(pt.X, pt.Y, 1))
return new bool?();
Tile tile = Main.tile[pt.X, pt.Y];
if (tile == null)
return new bool?();
if (!mode.HasFlag((Enum) WiresUI.Settings.MultiToolMode.Cutter))
{
if (mode.HasFlag((Enum) WiresUI.Settings.MultiToolMode.Red) && !tile.wire())
{
if (wiresLeftToConsume <= 0)
return new bool?(false);
--wiresLeftToConsume;
WorldGen.PlaceWire(pt.X, pt.Y);
NetMessage.SendData(17, number: 5, number2: ((float) pt.X), number3: ((float) pt.Y));
}
if (mode.HasFlag((Enum) WiresUI.Settings.MultiToolMode.Green) && !tile.wire3())
{
if (wiresLeftToConsume <= 0)
return new bool?(false);
--wiresLeftToConsume;
WorldGen.PlaceWire3(pt.X, pt.Y);
NetMessage.SendData(17, number: 12, number2: ((float) pt.X), number3: ((float) pt.Y));
}
if (mode.HasFlag((Enum) WiresUI.Settings.MultiToolMode.Blue) && !tile.wire2())
{
if (wiresLeftToConsume <= 0)
return new bool?(false);
--wiresLeftToConsume;
WorldGen.PlaceWire2(pt.X, pt.Y);
NetMessage.SendData(17, number: 10, number2: ((float) pt.X), number3: ((float) pt.Y));
}
if (mode.HasFlag((Enum) WiresUI.Settings.MultiToolMode.Yellow) && !tile.wire4())
{
if (wiresLeftToConsume <= 0)
return new bool?(false);
--wiresLeftToConsume;
WorldGen.PlaceWire4(pt.X, pt.Y);
NetMessage.SendData(17, number: 16, number2: ((float) pt.X), number3: ((float) pt.Y));
}
if (mode.HasFlag((Enum) WiresUI.Settings.MultiToolMode.Actuator) && !tile.actuator())
{
if (actuatorsLeftToConstume <= 0)
return new bool?(false);
--actuatorsLeftToConstume;
WorldGen.PlaceActuator(pt.X, pt.Y);
NetMessage.SendData(17, number: 8, number2: ((float) pt.X), number3: ((float) pt.Y));
}
}
if (mode.HasFlag((Enum) WiresUI.Settings.MultiToolMode.Cutter))
{
if (mode.HasFlag((Enum) WiresUI.Settings.MultiToolMode.Red) && tile.wire() && WorldGen.KillWire(pt.X, pt.Y))
NetMessage.SendData(17, number: 6, number2: ((float) pt.X), number3: ((float) pt.Y));
if (mode.HasFlag((Enum) WiresUI.Settings.MultiToolMode.Green) && tile.wire3() && WorldGen.KillWire3(pt.X, pt.Y))
NetMessage.SendData(17, number: 13, number2: ((float) pt.X), number3: ((float) pt.Y));
if (mode.HasFlag((Enum) WiresUI.Settings.MultiToolMode.Blue) && tile.wire2() && WorldGen.KillWire2(pt.X, pt.Y))
NetMessage.SendData(17, number: 11, number2: ((float) pt.X), number3: ((float) pt.Y));
if (mode.HasFlag((Enum) WiresUI.Settings.MultiToolMode.Yellow) && tile.wire4() && WorldGen.KillWire4(pt.X, pt.Y))
NetMessage.SendData(17, number: 17, number2: ((float) pt.X), number3: ((float) pt.Y));
if (mode.HasFlag((Enum) WiresUI.Settings.MultiToolMode.Actuator) && tile.actuator() && WorldGen.KillActuator(pt.X, pt.Y))
NetMessage.SendData(17, number: 9, number2: ((float) pt.X), number3: ((float) pt.Y));
}
return new bool?(true);
}
}
}