icekontroi

Collector Class 2.0

Jan 5th, 2018
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.62 KB | None | 0 0
  1. package scripts.ReactionTime;
  2.  
  3. import org.tribot.api.input.Mouse;
  4. import org.tribot.api2007.Login;
  5.  
  6. import java.awt.*;
  7. import java.util.HashSet;
  8. import java.util.Set;
  9. import java.util.function.Supplier;
  10.  
  11. import static org.tribot.api.General.sleep;
  12.  
  13. /**
  14. * Simple observer pattern engine for firing sleep and wake events.
  15. * Sleep events signify that the DataCollector script should start a timer to track the player's reaction time.
  16. * Wake events indicate that the player is no longer sleeping and has begun to react to whatever event is being measured.
  17. * Currently there is only one way to detect a player's awake status, and that's if the cursor has moved > 20 pixels from its position at the time of sleep start.
  18. */ class Collector {
  19.  
  20. static class Observer {
  21.  
  22. // ESSENTIAL VARIABLES
  23. private Set<Listener> listeners = new HashSet<>();
  24. private Thread observerThread;
  25.  
  26. // COMPARISON VARIABLES
  27. final long[] sleepStartTime = {System.currentTimeMillis()};
  28. final Point[] sleepStartMousePosition = {Mouse.getPos()};
  29. final boolean[] previouslySleeping = {true};
  30. final boolean[] previouslyAwake = {false};
  31.  
  32. // CONDITION FOR EVALUATING WHETHER OR NOT THE MOUSE HAS MOVED SIGNIFICANTLY SINCE ITS POSITION WHEN THE SLEEP BEGAN
  33. private Supplier<Boolean> wakeEvaluator = () -> Mouse.getPos().distance(sleepStartMousePosition[0]) > 20;
  34.  
  35. public Observer(Listener listener, Supplier<Boolean> sleepEvaluator) {
  36. addListener(listener);
  37. observerThread = new Thread(() -> {
  38. System.out.println("Now observing for sleep state changes");
  39. while (!Thread.interrupted()) {
  40. sleep(5);
  41. // WAIT UNTIL LOGGED IN
  42. if (Login.getLoginState() != Login.STATE.INGAME) {
  43. continue;
  44. }
  45. boolean currentlySleeping = sleepEvaluator.get();
  46. boolean currentlyAwake = wakeEvaluator.get();
  47. if (!previouslySleeping[0] && currentlySleeping) {
  48. sleepStartTime[0] = System.currentTimeMillis();
  49. sleepStartMousePosition[0] = (Point) Mouse.getPos().clone();
  50. firePlayerSleep();
  51. } else if (!previouslyAwake[0] && currentlyAwake) {
  52. if (sleepStartTime[0] != 0) {
  53. firePlayerWake(System.currentTimeMillis() - sleepStartTime[0]);
  54. sleepStartTime[0] = 0;
  55. }
  56. }
  57. previouslySleeping[0] = currentlySleeping;
  58. previouslyAwake[0] = currentlyAwake;
  59. }
  60. });
  61. observerThread.start();
  62. }
  63.  
  64. public synchronized void addListener(Listener listener) {
  65.  
  66. listeners.add(listener);
  67. }
  68.  
  69. public synchronized void removeListener(Listener listener) {
  70.  
  71. listeners.remove(listener);
  72. }
  73.  
  74. synchronized void firePlayerWake(long reactionTime) {
  75. for (Listener listener : listeners) {
  76. listener.onPlayerWake(reactionTime);
  77. }
  78. }
  79.  
  80. synchronized void firePlayerSleep() {
  81. for (Listener listener : listeners) {
  82. listener.onPlayerSleep();
  83. }
  84. }
  85.  
  86. void stop() {
  87.  
  88. observerThread.interrupt();
  89. }
  90. }
  91.  
  92. public interface Listener {
  93.  
  94. void onPlayerWake(long reactionTime);
  95. void onPlayerSleep();
  96. }
  97. }
Add Comment
Please, Sign In to add comment