ConsoleScheduler.java 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package me.hammerle.snuviscript;
  2. import java.util.ArrayList;
  3. import me.hammerle.snuviscript.code.ISnuviScheduler;
  4. public class ConsoleScheduler implements ISnuviScheduler {
  5. private class Task {
  6. private Runnable r;
  7. private long delay;
  8. public Task(Runnable r, long delay) {
  9. this.r = r;
  10. this.delay = delay;
  11. }
  12. public void tick() {
  13. delay--;
  14. if(delay <= 0 && r != null) {
  15. r.run();
  16. r = null;
  17. activeTasks--;
  18. }
  19. }
  20. public void set(Runnable r, long delay) {
  21. this.r = r;
  22. this.delay = delay;
  23. }
  24. public boolean isFree() {
  25. return r == null;
  26. }
  27. }
  28. private int activeTasks = 0;
  29. private final ArrayList<Task> tasks = new ArrayList<>();
  30. @Override
  31. public void scheduleTask(String name, Runnable r, long delay) {
  32. activeTasks++;
  33. for(int i = 0; i < tasks.size(); i++) {
  34. Task t = tasks.get(i);
  35. if(t.isFree()) {
  36. t.set(r, delay);
  37. return;
  38. }
  39. }
  40. tasks.add(new Task(r, delay));
  41. }
  42. public void tick() {
  43. while(activeTasks > 0) {
  44. for(int i = 0; i < tasks.size(); i++) {
  45. tasks.get(i).tick();
  46. }
  47. }
  48. }
  49. }