/**
*
*/
package rampancy.standard;
import java.awt.Color;
import java.awt.Graphics2D;
import rampancy.RTargetingManager;
import rampancy.RampantRobot;
import rampancy.util.*;
import rampancy.util.wave.RBulletWave;
import rampancy.util.weapon.*;
import robocode.util.Utils;
import java.util.*;
/**
* @author Matthew Chun-Lum
*
*/
public class RDefaultTargetingManager implements RTargetingManager {
private RDisabledEnemyGun disabledEnemyGun;
private ArrayList<RGun> guns;
private ArrayList<RFiringSolution> examinedSolutions;
public RDefaultTargetingManager(RGun[] guns) {
disabledEnemyGun = new RDisabledEnemyGun();
this.guns = new ArrayList<RGun>();
for(int i = 0; i < guns.length; i++)
this.guns.add(guns[i]);
}
/* (non-Javadoc)
* @see rampancy_v2.RTargetingManager#getBestFiringSolution(rampancy_v2.util.REnemyRobot)
*/
public List<RFiringSolution> getBestFiringSolutions(REnemyRobot enemy) {
ArrayList<RFiringSolution> firingSolutions = new ArrayList<RFiringSolution>();
if(enemy.getCurrentState().energy == 0) { // disabled
firingSolutions.add(disabledEnemyGun.getFiringSolution(enemy));
} else {
for(RGun gun : guns) {
RFiringSolution fs = gun.getFiringSolution(enemy);
if(fs != null) {
firingSolutions.add(fs);
}
}
if(firingSolutions.isEmpty()) {
return firingSolutions;
}
RFiringSolution bestSolution = firingSolutions.get(0);
double bestHitPercent = 0;
for(RFiringSolution solution : firingSolutions) {
double percent = solution.gun.getStats().getWeightedHitPercent();
if(percent > bestHitPercent) {
bestHitPercent = percent;
bestSolution = solution;
}
}
firingSolutions.remove(bestSolution);
firingSolutions.add(0, bestSolution);
}
return firingSolutions;
}
/* (non-Javadoc)
* @see rampancy_v2.RTargetingManager#draw(java.awt.Graphics2D)
*/
public void draw(Graphics2D g) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see rampancy.RTargetingManager#updateGuns(rampancy.util.wave.RBulletWave)
*/
public void updateGuns(RBulletWave wave) {
for(RGun gun : guns)
if(gun.getName().equals(wave.getFiringSolution().gun.getName()))
gun.update(wave);
}
/* (non-Javadoc)
* @see rampancy.RTargetingManager#updateNewRound()
*/
public void updateNewRound() {
System.out.println("Gun Stats\n************");
for(RGun gun : guns) {
System.out.println(gun.toString());
}
System.out.println();
for(RGun gun : guns) {
gun.updateNewRound();
}
}
public String getGunStatistics() {
String str = "Targeting manager statistics:\n****************\n";
for(RGun gun : guns)
str += gun.getOverview() + "\n";
return str + "\n";
}
}