/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.petah.spring.bai.cache;
import com.springrts.ai.oo.AIFloat3;
import com.springrts.ai.oo.clb.Unit;
import com.springrts.ai.oo.clb.WeaponDef;
import java.io.Serializable;
import java.util.concurrent.ConcurrentHashMap;
import org.petah.spring.bai.AIReturnCode;
import org.petah.spring.bai.listener.DamageEventListener;
import org.petah.spring.bai.listener.EnemyEventListener;
import org.petah.spring.bai.listener.UnitEventListener;
import org.petah.spring.bai.listener.UpdateEventListener;
/**
*
* @author Petah
*/
public class CachedUnitManager implements UnitEventListener,
EnemyEventListener, DamageEventListener, UpdateEventListener {
// Units lists
private ConcurrentHashMap<Integer, CachedUnit> friendlyUnits = new ConcurrentHashMap<Integer, CachedUnit>();
private ConcurrentHashMap<Integer, CachedUnit> enemyUnits = new ConcurrentHashMap<Integer, CachedUnit>();
// Public methods
public void update(int frame) {
for (CachedUnit unit : friendlyUnits.values()) {
unit.update(frame);
}
for (CachedUnit unit : enemyUnits.values()) {
unit.update(frame);
}
}
// List accessors/mutators
public void addFriendlyUnit(Unit unit) {
if (!friendlyUnits.containsKey(unit.getUnitId())) {
friendlyUnits.put(unit.getUnitId(), new CachedUnit(unit));
}
}
public void removeFriendlyUnit(Unit unit) {
friendlyUnits.remove(unit.getUnitId());
}
public void addEnemyUnit(Unit unit) {
if (!enemyUnits.containsKey(unit.getUnitId())) {
// TODO: remove this when all units have a config, maybe
try {
enemyUnits.put(unit.getUnitId(), new CachedUnit(unit));
} catch (Exception e) {
System.err.println("Unit could not be created, config might not exist.");
System.err.println(e.getMessage());
}
}
}
public void removeEnemyUnit(Unit unit) {
enemyUnits.remove(unit.getUnitId());
}
// Implemented methods
public void unitCaptured(Unit unit, int oldTeamId, int newTeamId) {
addFriendlyUnit(unit);
}
public void unitCreated(Unit unit, Unit builder) {
addFriendlyUnit(unit);
}
public void unitFinished(Unit unit) {
addFriendlyUnit(unit);
}
public void unitGiven(Unit unit, int oldTeamId, int newTeamId) {
addFriendlyUnit(unit);
}
public void enemyEnterLOS(Unit enemy) {
addEnemyUnit(enemy);
}
public void enemyEnterRadar(Unit enemy) {
addEnemyUnit(enemy);
}
public void enemyLeaveLOS(Unit enemy) {
removeEnemyUnit(enemy);
}
public void enemyLeaveRadar(Unit enemy) {
removeEnemyUnit(enemy);
}
public void enemyDamaged(Unit enemy, Unit attacker, float damage, AIFloat3 dir, WeaponDef weaponDef, boolean paralyzer) {
}
public void enemyDestroyed(Unit enemy, Unit attacker) {
removeEnemyUnit(enemy);
}
public void unitDamaged(Unit unit, Unit attacker, float damage, AIFloat3 dir, WeaponDef weaponDef, boolean paralyzer) {
}
public void unitDestroyed(Unit unit, Unit attacker) {
removeFriendlyUnit(unit);
}
// Getters
public CachedUnit getCachedUnit(int unitID) {
if (friendlyUnits.containsKey(unitID)) {
return friendlyUnits.get(unitID);
}
if (enemyUnits.containsKey(unitID)) {
return enemyUnits.get(unitID);
}
return null;
}
public ConcurrentHashMap<Integer, CachedUnit> getEnemyUnits() {
return enemyUnits;
}
public ConcurrentHashMap<Integer, CachedUnit> getFriendlyUnits() {
return friendlyUnits;
}
}