private static void HitWire(DoubleStack<Point16> next, int wireType)
{
for (int index = 0; index < next.Count; ++index)
{
Point16 point16 = next.PopFront();
Wiring.SkipWire(point16);
Wiring._toProcess.Add(point16, (byte)4);
next.PushBack(point16);
}
while (next.Count > 0)
{
Point16 key = next.PopFront();
int i = (int)key.X;
int j = (int)key.Y;
if (!Wiring._wireSkip.ContainsKey(key))
Wiring.HitWireSingle(i, j);
for (int index1 = 0; index1 < 4; ++index1)
{
int X;
int Y;
switch (index1)
{
case 0:
X = i;
Y = j + 1;
break;
case 1:
X = i;
Y = j - 1;
break;
case 2:
X = i + 1;
Y = j;
break;
case 3:
X = i - 1;
Y = j;
break;
default:
X = i;
Y = j + 1;
break;
}
if (X >= 2 && X < Main.maxTilesX - 2 && (Y >= 2 && Y < Main.maxTilesY - 2))
{
Tile tile = Main.tile[X, Y];
if (tile != null)
{
bool flag;
switch (wireType)
{
case 1:
flag = tile.k_HasWireFlags(k_WireFlags.WIRE_RED);
break;
case 2:
flag = tile.k_HasWireFlags(k_WireFlags.WIRE_GREEN);
break;
case 3:
flag = tile.k_HasWireFlags(k_WireFlags.WIRE_BLUE);
break;
default:
flag = false;
break;
}
if (flag)
{
Point16 index2 = new Point16(X, Y);
byte num;
if (Wiring._toProcess.TryGetValue(index2, out num))
{
--num;
if ((int)num == 0)
Wiring._toProcess.Remove(index2);
else
Wiring._toProcess[index2] = num;
}
else
{
next.PushBack(index2);
Wiring._toProcess.Add(index2, (byte)3);
}
}
}
}
}
}
Wiring._wireSkip.Clear();
Wiring._toProcess.Clear();
Wiring.running = false;
}