/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.petah.spring.bai.group;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import org.petah.spring.bai.cache.CachedUnit;
import org.petah.spring.bai.delegate.AIDelegate;
import org.petah.spring.bai.tasks.Task;
/**
*
* @author Petah
*/
public class UnitGroup implements Iterable<CachedUnit> {
private String name;
protected AIDelegate aiDelegate;
protected List<CachedUnit> units = new CopyOnWriteArrayList<CachedUnit>();
protected List<Task> tasks = new CopyOnWriteArrayList<Task>();
public UnitGroup(AIDelegate aiDelegate, String name) {
this.aiDelegate = aiDelegate;
this.name = name;
}
public void addUnit(CachedUnit unit) {
if (!units.contains(unit)) {
units.add(unit);
}
}
public void removeUnit(int unitID) {
for (CachedUnit unit : units) {
if (unit.getUnitId() == unitID) {
units.remove(unit);
return;
}
}
}
public void addTask(Task task) {
if (!tasks.contains(task)) {
tasks.add(task);
}
}
public void removeTask(Task task) {
tasks.remove(task);
}
public void clearTasks() {
tasks.clear();
}
public void update(int frame) {
// If there is a task avalible
if (tasks.size() > 0) {
// Get the first task and update it
if (tasks.get(0).update(this, frame)) {
// If the task returns true, remove it
tasks.remove(0);
}
}
}
public CachedUnit getUnit(int i) {
return units.get(i);
}
public int size() {
return units.size();
}
public Iterator<CachedUnit> iterator() {
return units.iterator();
}
public boolean contains(CachedUnit unit) {
return units.contains(unit);
}
public List<Task> getTasks() {
return tasks;
}
public String getName() {
return name;
}
}