Exemplo n.º 1
0
        public void getRobotScannedEvent(ScannedRobotEvent evnt)
        {
            enemyBearing = evnt.Bearing;
            enemyName    = evnt.Name;

            if (evnt.Name == newName1 || evnt.Name == newName2 || evnt.Name == newName3 || evnt.Name == newName4)
            {
                wrongTeam = true;
                return;
            }
            double gunAdjustForTarget = 0;

            robot.SetStop();
            double radarAdjustment = (evnt.Bearing - robot.RadarHeading) + robot.Heading;

            if (radarAdjustment > 180)
            {
                radarAdjustment -= 360;
            }
            if (radarAdjustment < -180)
            {
                radarAdjustment += 360;
            }

            if (robotHit == true)
            {
                double enemyX               = evnt.Distance * Math.Sin(evnt.BearingRadians + robot.HeadingRadians) + robot.X;
                double enemyY               = evnt.Distance * Math.Cos(evnt.BearingRadians + robot.HeadingRadians) + robot.Y;
                double timeToShoot          = evnt.Distance / 5;
                double distanceEnemyTravels = timeToShoot * evnt.Velocity;

                double destinationX = distanceEnemyTravels * Math.Sin(evnt.HeadingRadians) + enemyX;
                double destinationY = distanceEnemyTravels * Math.Cos(evnt.HeadingRadians) + enemyY;
                double a            = Math.Sqrt(Math.Pow(enemyX - destinationX, 2) + Math.Pow(enemyY - destinationY, 2));
                double b            = Math.Sqrt(Math.Pow(robot.X - destinationX, 2) + Math.Pow(robot.Y - destinationY, 2));
                double c            = Math.Sqrt(Math.Pow(robot.X - enemyX, 2) + Math.Pow(robot.Y - enemyY, 2));

                gunAdjustForTarget = (180 / Math.PI) * Math.Acos((Math.Pow(b, 2) + Math.Pow(c, 2) - Math.Pow(a, 2)) / (2 * b * c));
            }
            double gunAdjustment = (evnt.Bearing - robot.GunHeading) + robot.Heading + gunAdjustForTarget;

            if (gunAdjustment > 180)
            {
                gunAdjustment -= 360;
            }
            if (gunAdjustment < -180)
            {
                gunAdjustment += 360;
            }
            robot.SetTurnRadarRight(radarAdjustment);
            robot.SetTurnGunRight(gunAdjustment);
            robotScanned = true;
        }