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); } } }