package marathon.leela;
import java.awt.geom.*;
import java.awt.*;
import java.util.*;
import rampancy_old.util.Util;
import robocode.*;
import robocode.util.*;
/**
* Main robot class.
* @author Matthew Chun-Lum
*
*/
public class Leela extends AdvancedRobot {
// private static TargetingManager targetingManager = new TargetingManager();
// private static EnemyStatisticsManager enemyStatisticsManager = new EnemyStatisticsManager();
private static MovementManager movementManager = new MovementManager();
private static EnemyManager enemyManager = new EnemyManager();
private Point2D.Double location;
private double bearing;
public void run() {
setInitialState();
while(getRadarTurnRemainingRadians() == 0) {
turnRadarRightRadians(Constants.MAX_RADAR_TRACKING);
}
}
// ----------- INVOKED METHODS --------------- //
public void onScannedRobot(ScannedRobotEvent e) {
location = new Point2D.Double(getX(), getY());
bearing = getHeadingRadians();
if(!enemyManager.isTrackingEnemy(e.getName())) {
enemyManager.addEnemy(e);
} else {
enemyManager.updateEnemy(e);
}
EnemyRobot enemy = enemyManager.getEnemy(e.getName());
double shotPower;
if(enemy.getDistance() < 100) {
shotPower = 3.0;
} else {
shotPower = (1 - enemy.getDistance() / 1400.0) * 3.0;
}
shotPower = Util.limit(0.1, shotPower, 3.0);
setTurnGunRightRadians(enemy.getAbsoluteBearing() - getGunHeadingRadians());
this.setFire(shotPower);
movementManager.makeMove();
}
/**
* Custom draw actions when the robot is painted
*/
public void onPaint(Graphics2D g) {
//movementManager.draw(g);
}
// ---------- END INVOKED METHODS ----------- //
/**
* @return a reference to Leela's current location
*/
public Point2D.Double getLocation() {
return location;
}
/**
* Returns a string representation of Leela
*/
public String toString() {
return "Leela: ";
}
// ------- PRIVATE HELPERS -------- //
/**
* Sets the initial state for every round
*/
private void setInitialState() {
setAdjustGunForRobotTurn(true);
setAdjustRadarForGunTurn(true);
enemyManager.addListener(movementManager);
enemyManager.setReference(this);
movementManager.setInitialState(this, getBattleFieldWidth(), getBattleFieldHeight());
}
}