Exemplo n.º 1
0
            public void OnScannedRobotHandler(ScannedRobotEvent e)
            {
                // Ignore our teammates if scanned
                if (e.Name == "CAP4053.Benchmark.WreckItRalph (1)" || e.Name == "CAP4053.Benchmark.WreckItRalph (2)" || e.Name == "CAP4053.Benchmark.TrevBot (1)" || e.Name == "CAP4053.Benchmark.TrevBot (2)")
                {
                    return;
                }

                lastKnownLocation = e;
                enemyFound        = true;
                finalCountdown    = initCountdown;

                double radarHeading = 1.9 * Utils.NormalRelativeAngle(r.HeadingRadians - r.RadarHeadingRadians + e.BearingRadians);
                double bodyHeading  = smallestAngle(r.RadarHeadingRadians - r.HeadingRadians);
                double gunHeading   = smallestAngle(r.HeadingRadians - r.GunHeadingRadians + e.BearingRadians);

                // Calculate firing angle using Linear Targeting
                if (fireAtEnemy && r.GunHeat == 0 && System.Math.Abs(r.GunTurnRemaining) < 10)
                {
                    gunHeading = Utils.NormalRelativeAngle(((r.HeadingRadians + e.BearingRadians)
                                                            + Math.Asin(e.Velocity / (20 - firePower * 3)
                                                                        * Math.Sin(e.HeadingRadians - (r.HeadingRadians + e.BearingRadians)))
                                                            - r.GunHeadingRadians));
                    r.SetFire(firePower);
                }

                r.SetTurnRightRadians(direction * (bodyHeading + Math.PI / 2)); // Circle the opponent
                r.SetTurnRadarRightRadians(radarHeading);
                r.SetTurnGunRightRadians(gunHeading);

                // Employ Stop and GO movement to confuse enemy tracking
                if (enemyEnergy > (enemyEnergy = e.Energy))
                {
                    r.SetAhead(movementDistance);
                }
            }