/**
* EnemyManager.java
*/
package rampancy_old.management;
import rampancy_old.*;
import rampancy_old.util.*;
import robocode.ScannedRobotEvent;
import robocode.util.Utils;
import java.util.*;
import java.awt.*;
/**
* This class tracks enemy movements and provides updates
* to objects listening to enemy movements.
* @author Matthew Chun-Lum
*
*/
public class EnemyManager {
private HashMap<String, EnemyRobot> enemies;
private RampantRobot reference;
/**
* Default constructor
*/
public EnemyManager() {
enemies = new HashMap<String, EnemyRobot>();
}
/**
* Processes a ScannedRobotEvent
* @param e
* @return the EnemyRobot scanned
*/
public EnemyRobot processScannedRobotEvent(ScannedRobotEvent e) {
EnemyRobot enemy;
if(enemies.containsKey(e.getName())) {
enemy = getEnemy(e.getName());
enemy.update(e);
enemy.updateVariationProfile();
reference.getStatisticsManager().getWeaponStatsForEnemy(e.getName()).getPMGunStats().logState(enemy);
} else {
enemy = new EnemyRobot(e, reference);
enemy.addListener(reference.getWaveManager());
addEnemy(enemy);
}
return enemy;
}
/**
* Gets an enemy from the map
* @param name the name of the enemy
* @return an <code>EnemyRobot</code> or <code>null</code>
*/
public EnemyRobot getEnemy(String name) {
return enemies.get(name);
}
/**
* Adds an enemy to the map of enemies if the enemy is not already being tracked
* @param enemy the enemy to add
* @return <code>true</code> if the enemy was added to the map
*/
public boolean addEnemy(EnemyRobot enemy) {
if(enemies.containsKey(enemy.getName()))
return false;
enemies.put(enemy.getName(), enemy);
reference.getStatisticsManager().addEnemy(enemy);
System.out.println("EnemyManager: Tracking: " + enemy.getName());
return true;
}
/**
* Removes an enemy from the map
* @param enemy the enemy to remove
* @return <code>true</code> if the enemy was removed
*/
public boolean removeEnemy(EnemyRobot enemy) {
return removeEnemy(enemy.getName());
}
/**
* Removes an enemy from the map
* @param name the name of the enemy to remove
* @return <code>true</code> if the enemy was removed
*/
public boolean removeEnemy(String name) {
return (enemies.remove(name) != null);
}
/**
* Sets the reference to Durandal
* @param reference
*/
public void setInitialState(RampantRobot reference) {
this.reference = reference;
for(EnemyRobot enemy : enemies.values())
enemy.setReference(reference);
}
public void draw(Graphics2D g) {
if(!enemies.isEmpty())
for(EnemyRobot enemy : enemies.values())
enemy.draw(g);
}
/**
* Returns a string representation of the EnemyManager
*/
public String toString() {
return "EnemyManager: Tracked enemies: " + enemies.size() + " ";
}
}