added asfjiop
This commit is contained in:
@@ -0,0 +1,79 @@
|
|||||||
|
package pp.mdga.client.animation;
|
||||||
|
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class TimerManager {
|
||||||
|
private final List<TimedTask> tasks = new ArrayList<>();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a timed task that will execute after the specified delay.
|
||||||
|
*
|
||||||
|
* @param delaySeconds The delay in seconds.
|
||||||
|
* @param task The Runnable task to execute after the delay.
|
||||||
|
*/
|
||||||
|
public void addTask(float delaySeconds, Runnable task) {
|
||||||
|
tasks.add(new TimedTask(delaySeconds, task));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update the timer manager to process and execute tasks when their delay has elapsed.
|
||||||
|
* This should be called in the `controlUpdate` method or a similar update loop.
|
||||||
|
*
|
||||||
|
* @param tpf Time per frame (delta time) provided by the update loop.
|
||||||
|
*/
|
||||||
|
public void update(float tpf) {
|
||||||
|
Iterator<TimedTask> iterator = tasks.iterator();
|
||||||
|
while (iterator.hasNext()) {
|
||||||
|
TimedTask task = iterator.next();
|
||||||
|
task.update(tpf);
|
||||||
|
if (task.isReady()) {
|
||||||
|
task.run();
|
||||||
|
iterator.remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clears all pending tasks from the manager.
|
||||||
|
*/
|
||||||
|
public void clearTasks() {
|
||||||
|
tasks.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if the manager has any pending tasks.
|
||||||
|
*
|
||||||
|
* @return True if there are pending tasks, otherwise false.
|
||||||
|
*/
|
||||||
|
public boolean hasPendingTasks() {
|
||||||
|
return !tasks.isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Internal class representing a single timed task.
|
||||||
|
*/
|
||||||
|
private static class TimedTask {
|
||||||
|
private float remainingTime;
|
||||||
|
private final Runnable task;
|
||||||
|
|
||||||
|
public TimedTask(float delaySeconds, Runnable task) {
|
||||||
|
this.remainingTime = delaySeconds;
|
||||||
|
this.task = task;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void update(float tpf) {
|
||||||
|
remainingTime -= tpf;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isReady() {
|
||||||
|
return remainingTime <= 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void run() {
|
||||||
|
task.run();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user