package net.scapeemulator.game.model.player;
import java.util.EnumMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
/**
* Handles player instance timers. Some timers may be accessed through other classes, such as the
* combat delay timer in the combat handler class.
*
* @author David Insley
*/
public class PlayerTimers {
public enum Timer {
EAT, DRINK, FROZEN
}
private final Map<Timer, Integer> timers;
PlayerTimers() {
timers = new EnumMap<Timer, Integer>(Timer.class);
}
public boolean timerActive(Timer type) {
return timers.containsKey(type);
}
public int getTimer(Timer type) {
if (timers.containsKey(type)) {
return timers.get(type);
}
return 0;
}
/**
* Sets the time for the specified timer type. A value less than 0 will keep the timer active
* until resetTimer is called for the same type.
*
* @param type timer type to set the time for
* @param time int value of timer, in ticks
*/
public void setTimer(Timer type, int time) {
if (time < 0) {
timers.put(type, -1);
} else if (time == 0) {
return;
} else {
timers.put(type, time);
}
}
/**
* Resets a timer, removing it from the active timers collection no matter what the current
* remaining time may be.
*
* @param type timer type to reset
*/
public void resetTimer(Timer type) {
timers.remove(type);
}
public void tick() {
Iterator<Entry<Timer, Integer>> it = timers.entrySet().iterator();
while (it.hasNext()) {
Entry<Timer, Integer> timer = it.next();
int time = timer.getValue();
if (time == -1) {
continue;
} else if (time == 1) {
it.remove();
} else {
timer.setValue(time - 1);
}
}
}
}