public void onScannedRobot(ScannedRobotEvent e) { // ... // if(getRadarHeadingRadians() - getGunHeading() == 0) // fire(1); // Absolute angle towards target double angleToEnemy = getHeadingRadians() + e.getBearingRadians(); // Subtract current radar heading to get the turn required to face the enemy, be sure it is // normalized double radarTurn = Utils.normalRelativeAngle(angleToEnemy - getRadarHeadingRadians()); // Distance we want to scan from middle of enemy to either side // The 36.0 is how many units from the center of the enemy robot it scans. double extraTurn = Math.min(Math.atan(5.0 / e.getDistance()), Rules.RADAR_TURN_RATE_RADIANS); // Adjust the radar turn so it goes that much further in the direction it is going to turn // Basically if we were going to turn it left, turn it even more left, if right, turn more // right. // This allows us to overshoot our enemy so that we get a good sweep that will not slip. radarTurn += (radarTurn < 0 ? -extraTurn : extraTurn); // Turn the radar setTurnRadarRightRadians(radarTurn); // is the enemy left or right of us double distance = getRadarHeading() - getGunHeading(); double[] wert = {distance}; // setTurnGunLeft(encog.Adjust.predict(NETWORK, wert)); if (distance < 0) setTurnGunRight(distance); if (distance >= 0) setTurnGunRight(distance); // System.out.println(distance); // if enemy is within fire range -> fire // if (getGunHeading() > getRadarHeading()-2 && getGunHeading() < getRadarHeading()+2) setFire(1); System.out.println("gunheat:" + getGunHeat()); if (getGunHeat() == 1.2) { LIST.add(getTime()); System.out.println("distance: " + LIST); // int shouldHit = (int) (getTime() + (e.getDistance() / 17)); // System.out.println("when should it hit: " + shouldHit); } if (LIST.size() != 0) { if (LIST.get(0) + (getTime() - LIST.get(0)) * VELOCITY > e.getDistance()) { System.out.println("did you hit?: " + getTime()); LIST.remove(0); } } execute(); }
private void goTo(Point2D destination) { double angle = Utils.normalRelativeAngle( absoluteBearing(robotLocation, destination) - getHeadingRadians()); double turnAngle = Math.atan(Math.tan(angle)); setTurnRightRadians(turnAngle); setAhead(robotLocation.distance(destination) * (angle == turnAngle ? 1 : -1)); // Hit the brake pedal hard if we need to turn sharply setMaxVelocity(Math.abs(getTurnRemaining()) > 33 ? 0 : MAX_VELOCITY); }