Module/Radar/SpinningBestStartDirection
Jump to navigation
Jump to search
package jab.radar;
import robocode.util.Utils;
import jab.Module;
import jab.Radar;
/**
* Credits
* SpinningBestStartDirection by jab. Code license: RWPCL
* Calculate if the radar must turns clockwise or not.
* The main idea is to start scanning the opposite quadrant (biggest area)
* as quick as possible, and if it starts scanning that quadrant
* scan in the direction of that quadrant that has more area.
*/
public class SpinningBestStartDirection extends Radar {
public SpinningBestStartDirection (Module bot) {
super(bot);
}
private double radarClockwise;
public void scan() {
// Get the start radar direction only when the battle begins
if (radarClockwise==0) radarClockwise = getRadarDirection();
bot.setTurnRadarRightRadians(Double.POSITIVE_INFINITY * radarClockwise);
}
private int getRadarDirection() {
double width = bot.getBattleFieldWidth();
double height = bot.getBattleFieldHeight();
double radarHeadingRadians = bot.getRadarHeadingRadians();
double to0 = Math.abs(Utils.normalRelativeAngle(radarHeadingRadians));
double to90 = Math.abs(Utils.normalRelativeAngle(radarHeadingRadians
- Math.PI / 2));
double to180 = Math.abs(Utils.normalRelativeAngle(radarHeadingRadians
- Math.PI));
double to270 = Math.abs(Utils.normalRelativeAngle(radarHeadingRadians
- 3 * Math.PI / 2));
// 1 2
// 3 4
if (bot.getX() <= width / 2 && bot.getY() >= height / 2)
return (to90 < to180) ? 1 : -1;
if (bot.getX() >= width / 2 && bot.getY() >= height / 2)
return (to180 < to270) ? 1 : -1;
if (bot.getX() <= width / 2 && bot.getY() <= height / 2)
return (to0 < to90) ? 1 : -1;
return (to270 < to0) ? 1 : -1;
}
}