package net.CyanWool.api.entity.ai;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
public class EntityAITasks {
private List<BasicAI> aiList = new ArrayList<BasicAI>();
private List<BasicAI> activeAIList = new LinkedList<BasicAI>();
private int tickCount;
private int tickRate = 3;
public void addAI(BasicAI ai) {
synchronized (aiList) {
aiList.add(ai);
}
}
public void removeAI(BasicAI ai) {
synchronized (aiList) {
aiList.remove(ai);
}
}
public void clearAI() {
synchronized (aiList) {
aiList.clear();
}
}
public void onUpdateAI() {
ArrayList<BasicAI> list = new ArrayList<BasicAI>();
Iterator<BasicAI> iterator;
if (this.tickCount++ % this.tickRate == 0) {
iterator = this.aiList.iterator();
while (iterator.hasNext()) {
BasicAI ai = iterator.next();
if (this.activeAIList.contains(ai)) {
if (ai.canContinue()) {
continue;
}
ai.resetTask();
this.activeAIList.remove(ai);
}
if (ai.shouldExecute()) {
list.add(ai);
this.activeAIList.add(ai);
}
}
} else {
iterator = this.activeAIList.iterator();
while (iterator.hasNext()) {
BasicAI ai = iterator.next();
if (!ai.canContinue()) {
ai.resetTask();
iterator.remove();
}
}
}
iterator = list.iterator();
while (iterator.hasNext()) {
BasicAI ai = iterator.next();
ai.startExecuting();
}
iterator = this.activeAIList.iterator();
while (iterator.hasNext()) {
BasicAI ai = iterator.next();
ai.updateTask();
}
}
}