Terraria.Wiring.HitWire C# (CSharp) Method

HitWire() private static method

private static HitWire ( DoubleStack next, int wireType ) : void
next DoubleStack
wireType int
return void
        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;
        }