package net.sourceforge.pain.plugin.reset;
import net.sourceforge.pain.*;
import net.sourceforge.pain.data.type.*;
import net.sourceforge.pain.plugin.*;
import net.sourceforge.pain.util.*;
import java.util.*;
public final class ResetPlugin extends Plugin implements TimeListener {
public static final int RESETS_GRANULARITY = 2 * Time.PULSE_PER_SCD; // 2 seconds
private int nextRunTime = 0;
public ResetPlugin() {
}
public void init() throws Exception {
Core.getTime().addListener(this);
}
public void deinit() {
Core.getTime().removeListener(this);
}
public void pulse(int time) {
if (nextRunTime > time) {
return;
}
nextRunTime = time + RESETS_GRANULARITY;
int minNextTime = Integer.MAX_VALUE;
Collection resetGroups = Core.getWorld().getResetGroupRegistry().getResetGroups();
for (Iterator it = resetGroups.iterator(); it.hasNext();) {
ResetGroup g = (ResetGroup) it.next();
final int nextResetTime = g.getNextResetTime();
if (nextResetTime > time) {
minNextTime = nextResetTime < minNextTime ? nextResetTime : minNextTime;
} else {
reset(g);
int groupResetPeriod = g.getResetPeriod();
minNextTime = groupResetPeriod < minNextTime ? groupResetPeriod : minNextTime;
g.setNextResetTime(time + groupResetPeriod);
}
}
nextRunTime = nextRunTime < minNextTime ? minNextTime : nextRunTime;
}
private static void reset(ResetGroup g) {
try {
Core.processEvent("ResetEvent", g);
} catch (Exception e) {
Log.error("ResetPlugin:", e);
}
}
}