/** * */ package rampancy; import java.awt.Color; import java.awt.Graphics2D; import rampancy.leela.RMeleMovementManager; import rampancy.leela.RMeleWaveManager; import rampancy.standard.*; import rampancy.util.*; import rampancy.util.weapon.*; import robocode.ScannedRobotEvent; import robocode.util.Utils; /** * @author Matthew Chun-Lum * */ public class Leela extends RampantRobot { public static final double MAX_RADAR_TRACKING_AMOUNT = Math.PI / 4.0; public static final RGun[] guns = new RGun[] { new RPMGun() }; 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.black, Color.white, Color.magenta, Color.white, Color.magenta); // set the enemyManager if necessary if(enemyManager == null) enemyManager = new RDefaultEnemyManager(this); enemyManager.updateReference(this); enemyManager.resetAll(); if(waveManager == null) waveManager = new RMeleWaveManager(this); waveManager.updateReference(this); waveManager.clearWaves(); if(movementManager == null) movementManager = new RMeleMovementManager(this); movementManager.updateReference(this); if(targetingManager == null) targetingManager = new RDefaultTargetingManager(guns); if(statisticsManager == null) statisticsManager = new RDefaultStatisticsManager(); } public void onPaint(Graphics2D g) { if(globalBattlefield != null) globalBattlefield.draw(g); if(enemyManager != null) enemyManager.draw(g); // if(waveManager != null) // waveManager.draw(g); if(movementManager != null) movementManager.draw(g); } /** * 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))); } }