/**
* Durandal.java
*/
package rampancy;
import java.awt.Color;
import java.awt.Graphics2D;
import rampancy.standard.*;
import rampancy.util.RUtil;
import rampancy.util.weapon.*;
import robocode.BattleEndedEvent;
import robocode.ScannedRobotEvent;
import robocode.util.Utils;
/**
* @author Matthew Chun-Lum
*
*/
public class Durandal extends RampantRobot {
public static final double MAX_RADAR_TRACKING_AMOUNT = Math.PI / 4.0;
public static final RGun[] guns = new RGun[] {
//new RDCGun(),
new RAGFGun(),
//new RPMGun()
new RCTGun()
};
public void onPaint(Graphics2D g) {
super.onPaint(g);
}
public void run() {
super.run();
initialSetup();
updateState(null);
targetingManager.updateNewRound();
while(getRadarTurnRemainingRadians() == 0) {
turnRadarRightRadians(MAX_RADAR_TRACKING_AMOUNT);
}
}
public void onScannedRobot(ScannedRobotEvent e) {
focusRadar(e);
super.onScannedRobot(e);
}
public void onBattleEnded(BattleEndedEvent e) {
if(targetingManager instanceof RDefaultTargetingManager) {
System.out.println(((RDefaultTargetingManager) targetingManager).getGunStatistics());
}
}
// Private Helpers
private void initialSetup() {
setColors(Color.black, new Color(0x0D5E10), new Color(0x0D5E10), Color.white, Color.blue);
// set the enemyManager if necessary
if(enemyManager == null)
enemyManager = new RDefaultEnemyManager(this);
enemyManager.updateReference(this);
enemyManager.resetAll();
if(waveManager == null)
waveManager = new RDefaultWaveManager(this);
waveManager.updateReference(this);
waveManager.clearWaves();
if(movementManager == null)
movementManager = new RDefaultMovementManager(this);
movementManager.updateReference(this);
if(targetingManager == null)
targetingManager = new RDefaultTargetingManager(guns);
if(statisticsManager == null)
statisticsManager = new RDefaultStatisticsManager();
}
/**
* Credit: Voidious
* Focuses the radar
* @param e
*/
private void focusRadar(ScannedRobotEvent e) {
double factor = 3;
if(getOthers() > 1) { // occasionally lose the lock against multiple bots.
factor = 0.2;
}
double radarBearingOffset = Utils.normalRelativeAngle(getRadarHeadingRadians() - (e.getBearingRadians() + getHeadingRadians()));
setTurnRadarLeftRadians(radarBearingOffset + (RUtil.nonZeroSign(radarBearingOffset) * (MAX_RADAR_TRACKING_AMOUNT / factor)));
}
}