/** * Durandal.java */ package rampancy; import java.awt.Color; import rampancy.standard.*; import rampancy.util.RUtil; import rampancy.util.weapon.*; import rampancy.whuphs.WhuphsMovementManager; import robocode.ScannedRobotEvent; import robocode.util.Utils; /** * @author Matthew Chun-Lum * */ public class WhuphsCT extends RampantRobot { public static final double MAX_RADAR_TRACKING_AMOUNT = Math.PI / 4.0; public static final RGun[] guns = new RGun[] { new RCTGun() }; 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); } // Private Helpers private void initialSetup() { setColors(Color.magenta, Color.white, Color.magenta, Color.magenta, Color.magenta); // 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 WhuphsMovementManager(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))); } }