Example #1
0
        public override RequestQueue Execute(SensorRepository repSensors, RequestQueue LastWinner)
        {
            bool iWon = LastWinner != null && LastWinner.BehaviorName == m_Name;
            RequestQueue requests = new RequestQueue(m_Name);

            if (repSensors.SensorValueBool("IsPower") && repSensors.SensorValueInt("Direction") == (int)Cruise.MoveDir.Mov_Fwd)
            {
                if(repSensors.SensorValueInt("DistL30") < repSensors.SensorValueInt("DistR30"))
                {
                    if(repSensors.SensorValueInt("DistL30") < 20 || (iWon && repSensors.SensorValueInt("DistL30") < 24))
                    {
                        requests.Enqueue(new Request() { Name = "Turn Right", Channel = "Drive", Command = "RT" });
                    }
                }
                else
                {
                    if(repSensors.SensorValueInt("DistR30") < 20 || (iWon && repSensors.SensorValueInt("DistR30") < 24))
                    {
                        requests.Enqueue(new Request() { Name = "Turn Left", Channel = "Drive", Command = "LF" });
                    }
                }
            }

            return requests;
        }
Example #2
0
        public override RequestQueue Execute(SensorRepository repSensors, RequestQueue LastWinner)
        {
            bool iWon = LastWinner != null && LastWinner.BehaviorName == m_Name;
            RequestQueue requests = new RequestQueue(m_Name);

            // Ignore if powered off or during a spin
            if (!repSensors.SensorValueBool("IsPower") ||
                repSensors.SensorValueInt("Direction") == (int)Cruise.MoveDir.Mov_SpinCW ||
                repSensors.SensorValueInt("Direction") == (int)Cruise.MoveDir.Mov_SpinCCW)
                return requests;

            if (repSensors.SensorValueInt("DistFwd") <= 8)
            {
                if (iWon || repSensors.SensorValueInt("Direction") == (int)Cruise.MoveDir.Mov_Halt)
                {
                    // Halt already sent so create a NOP request to retain control
                    requests.Enqueue(new Request() { Name = "NOP", Channel = "NA", Command = "NP" });
                }
                else
                {
                    // Halt
                    requests.Enqueue(new Request() { Name = "Halt", Channel = "Drive", Command = "HL" });
                }
            }

            return requests;
        }
Example #3
0
        public override RequestQueue Execute(SensorRepository repSensors, RequestQueue LastWinner)
        {
            bool iWon = LastWinner != null && LastWinner.BehaviorName == m_Name;
            RequestQueue requests = new RequestQueue(m_Name);

            if (repSensors.SensorValueBool("IsPower") && repSensors.SensorValueInt("Direction") == (int)Cruise.MoveDir.Mov_Fwd && m_DesiredHeading != -1)
            {
                int herr = HeadingError(repSensors.SensorValueInt("Heading"));
                int corr = m_HhPID.Calculate(herr);

                if(corr > 0)
                    requests.Enqueue(new Request() { Name = "Right Turn" + corr.ToString(), Channel = "Drive", Command = "RX" + corr.ToString() });
                else if (corr < 0)
                    requests.Enqueue(new Request() { Name = "Left Turn" + Math.Abs(corr).ToString(), Channel = "Drive", Command = "LX" + Math.Abs(corr).ToString() });
            }

            return requests;
        }