package com.rpsg.rpg.util;
import com.badlogic.gdx.Gdx;
import com.rpsg.rpg.core.Game;
import java.util.ArrayList;
import java.util.List;
/**
* 延时运行工具<br>
* LibGDX本身也有个{@link Timer}工具,但是他的实现是靠多线程的,为了避免吃到意外的屎,只好造一个轮子了2333,该轮子不依靠线程,而是在主线程的主循环里工作。
*/
public class Timer {
static List<Task> list = new ArrayList<>();
public static final int FOREVER = -1;
static boolean pause = false;
public static Task add(int delayFrame, int repeat, Runnable run) {
Task task = new Task();
task.run = run;
task.time = task.originTime = delayFrame;
task.repeat = repeat;
list.add(task);
return task;
}
public static Task add(int delayFrame, Runnable run) {
return add(delayFrame, 1, run);
}
public static void act() {
if(!list.isEmpty()){
List<Task> removeList = new ArrayList<>();
for(Task timer : list)
if(timer.time -- < 0){
timer.run.run();
if(timer.repeat != FOREVER && -- timer.repeat == 0)
removeList.add(timer);
else
timer.time = timer.originTime;
}
list.removeAll(removeList);
}
//更新当前存档进行时间
if(Game.archive.has() && !pause)
Game.archive.get().time += Gdx.graphics.getDeltaTime() * 1000;
}
public static void pause() {
pause = true;
}
public static void resume() {
pause = false;
}
public static void remove(Task timer) {
list.remove(timer);
}
public static class Task{
public int time, originTime;
public int repeat = 1;
public Runnable run;
}
}