public void InspectSample()
        {
            JSONDataV2 Sample;

            if (!DATA.TryGetValue("InspectSample", out Sample))
            {
                return;
            }
            if (!checkPoints(Sample))
            {
                return;
            }
            ChangeTask("Inspect Sample");
            Console.WriteLine("Inspect Sample");
            click(Sample.RandomPoint[0]);                                  //point 0 button
            Point[] tubePos = Sample.RandomPoint.GetRange(2, 5).ToArray(); //point 2x5

            Point button = Sample.RandomPoint[1];                          //point 1

            for (var t = 0; t < tubePos.Length; t++)
            {
                Color a = ColorGet.GetColorAt(tubePos[t]);
                if (a.R > a.B)//check if tube is more red than blue
                {
                    click(tubePos[t].X, button.Y);
                    return;
                }
            }
        }
        public void DivertPower()
        {
            JSONDataV2 DivertPowerData;

            if (!DATA.TryGetValue("DivertPower", out DivertPowerData))
            {
                return;
            }
            if (!checkPoints(DivertPowerData))
            {
                return;
            }
            ChangeTask("Divert Power");
            Console.WriteLine("Divert Power");
            Point[] sliders = DivertPowerData.RandomPoint.ToArray();//all of random points
            for (var i = 0; i < sliders.Length; i++)
            {
                //if red is higher than 150
                if (ColorGet.GetColorAt(sliders[i]).R > 150)
                {
                    move(sliders[i]);
                    press();
                    Thread.Sleep(30);
                    move(sliders[i].X, 0);
                    release();
                }
            }
        }
        public void Wires()
        {
            JSONDataV2 WiresData;

            if (!DATA.TryGetValue("Wires", out WiresData))
            {
                return;
            }
            if (!checkPoints(WiresData))
            {
                return;
            }
            ChangeTask("Wires");
            Console.WriteLine("WIRES, fix me so it works every time");
            Point[] leftWires  = WiresData.RandomPoint.GetRange(0, 4).ToArray();//rp 0x4
            Point[] rightWires = WiresData.RandomPoint.GetRange(4, 4).ToArray();

            for (var l = 0; l < leftWires.Length; l++)
            {
                Color leftColor = ColorGet.GetColorAt(leftWires[l]);
                for (var r = 0; r < rightWires.Length; r++)
                {
                    if (ColorGet.GetColorAt(rightWires[r]).Equals(leftColor))
                    {
                        //connect wires
                        move(leftWires[l]);
                        Mouse.ButtonDown(Mouse.MouseKeys.Left);
                        move(rightWires[r]);
                        Mouse.ButtonUp(Mouse.MouseKeys.Left);
                    }
                }
            }
        }
        public void Lights()
        {
            JSONDataV2 LightsData;

            if (!DATA.TryGetValue("Lights", out LightsData))
            {
                return;
            }
            if (!checkPoints(LightsData))
            {
                return;
            }
            Console.WriteLine("Lights");
            ChangeTask("Lights");
            Point SwitchY = LightsData.RandomPoint[0];                      //random point 0

            Point[] leds = LightsData.RandomPoint.GetRange(1, 5).ToArray(); //random point 1-5

            for (var i = 0; i < leds.Length; i++)
            {
                if (ColorGet.GetColorAt(leds[i]).Equals(LightsData.RandomColor[6]))//random color 0
                {
                    click(leds[i].X, SwitchY.Y);
                }
            }
        }
        public void Refuel()
        {
            JSONDataV2 RefuelData;

            if (!DATA.TryGetValue("Refuel", out RefuelData))
            {
                return;
            }
            if (!checkPoints(RefuelData))
            {
                return;
            }
            ChangeTask("Refuel");
            Console.WriteLine("Refuel");
            Color ledColor    = RefuelData.RandomColor[0];
            Point ledPoint    = RefuelData.RandomPoint[0];
            Point buttonPoint = RefuelData.RandomPoint[1];

            move(buttonPoint);
            press();
            while (ColorGet.GetColorAt(ledPoint).Equals(ledColor))
            {
                Thread.Sleep(100);
            }
            release();
        }
 /// <summary>
 /// Checks points for this color
 /// </summary>
 public static bool checkPoints(JSONDataV2 data)
 {
     if (!data.Active)
     {
         return(false);
     }
     foreach (Tuple <Point, Color> item in data.CheckPointColor)
     {
         if (!ColorGet.GetColorAt(item.Item1).Equals(item.Item2))
         {
             return(false);
         }
     }
     return(true);
 }
        public void Shields()
        {
            JSONDataV2 ShieldsData;

            if (!DATA.TryGetValue("Shields", out ShieldsData))
            {
                return;
            }
            if (!checkPoints(ShieldsData))
            {
                return;
            }
            ChangeTask("Shields");
            Console.WriteLine("Shields");
            Point[] s = ShieldsData.RandomPoint.ToArray();
            for (var i = 0; i < s.Length; i++)
            {
                if (ColorGet.GetColorAt(s[i]).G < 150)//it appears that the active sheilds greens are higher than 150 and reds are lower
                {
                    click(s[i]);
                }
            }
        }
        public void AlignEngine()
        {
            JSONDataV2 AlignEngineData;

            if (!DATA.TryGetValue("AlignEngine", out AlignEngineData))
            {
                return;
            }
            if (!checkPoints(AlignEngineData))
            {
                return;
            }
            ChangeTask("Align Engine");
            Console.WriteLine("Align Engine");
            List <Point> rp     = AlignEngineData.RandomPoint;
            Point        top    = rp[0];
            Point        bottom = rp[1]; //random p 1
            Point        center = rp[2]; //random p 2

            //Color thingColor = Color.FromArgb(255, 163, 163, 178);
            for (var a = top.Y; a < bottom.Y; a += 10)//scan for the thingy
            {
                Color color = ColorGet.GetColorAt(top.X, a);
                //get difference between rgb if its over 5 then its the pointer, probably
                int diff = Math.Max(Math.Max(color.R, color.B), color.G)
                           - Math.Min(Math.Min(color.R, color.B), color.G);
                if (diff > 5)
                {
                    move(top.X, a);
                    press();
                    move(center);
                    release();
                    return;
                }
            }
        }
        public void CalibrateDistributor()
        {
            JSONDataV2 DistributorData;

            if (!DATA.TryGetValue("CalibrateDistributor", out DistributorData))
            {
                return;
            }
            if (!checkPoints(DistributorData))
            {
                return;
            }
            ChangeTask("Calibrate Distributor");
            Console.WriteLine("Calibrate Distributor");
            Point[] leds = DistributorData.RandomPoint.GetRange(0, 3).ToArray();
            Console.WriteLine();
            Point[] buttons = DistributorData.RandomPoint.GetRange(3, 3).ToArray();//random point 3-5
            for (var i = 0; i < leds.Length; i++)
            {
                int a = 0;
                while (checkPoints(DistributorData) && a < 200)
                {
                    if (!ColorGet.GetColorAt(leds[i]).Equals(Color.FromArgb(255, 0, 0, 0)))
                    {
                        clickNoDelay(buttons[i]);
                        Thread.Sleep(200);
                        if (!ColorGet.GetColorAt(leds[i]).Equals(Color.FromArgb(255, 0, 0, 0)))
                        {
                            a = 300;
                        }
                    }
                    a++;
                    Thread.Sleep(10);
                }
            }
        }