Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package scripts.ReactionTime;
- import org.tribot.api.input.Mouse;
- import org.tribot.api2007.Login;
- import java.awt.*;
- import java.util.HashSet;
- import java.util.Set;
- import java.util.function.Supplier;
- import static org.tribot.api.General.sleep;
- /**
- * Simple observer pattern engine for firing sleep and wake events.
- * Sleep events signify that the DataCollector script should start a timer to track the player's reaction time.
- * Wake events indicate that the player is no longer sleeping and has begun to react to whatever event is being measured.
- * 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.
- */ class Collector {
- static class Observer {
- // ESSENTIAL VARIABLES
- private Set<Listener> listeners = new HashSet<>();
- private Thread observerThread;
- // COMPARISON VARIABLES
- final long[] sleepStartTime = {System.currentTimeMillis()};
- final Point[] sleepStartMousePosition = {Mouse.getPos()};
- final boolean[] previouslySleeping = {true};
- final boolean[] previouslyAwake = {false};
- // CONDITION FOR EVALUATING WHETHER OR NOT THE MOUSE HAS MOVED SIGNIFICANTLY SINCE ITS POSITION WHEN THE SLEEP BEGAN
- private Supplier<Boolean> wakeEvaluator = () -> Mouse.getPos().distance(sleepStartMousePosition[0]) > 20;
- public Observer(Listener listener, Supplier<Boolean> sleepEvaluator) {
- addListener(listener);
- observerThread = new Thread(() -> {
- System.out.println("Now observing for sleep state changes");
- while (!Thread.interrupted()) {
- sleep(5);
- // WAIT UNTIL LOGGED IN
- if (Login.getLoginState() != Login.STATE.INGAME) {
- continue;
- }
- boolean currentlySleeping = sleepEvaluator.get();
- boolean currentlyAwake = wakeEvaluator.get();
- if (!previouslySleeping[0] && currentlySleeping) {
- sleepStartTime[0] = System.currentTimeMillis();
- sleepStartMousePosition[0] = (Point) Mouse.getPos().clone();
- firePlayerSleep();
- } else if (!previouslyAwake[0] && currentlyAwake) {
- if (sleepStartTime[0] != 0) {
- firePlayerWake(System.currentTimeMillis() - sleepStartTime[0]);
- sleepStartTime[0] = 0;
- }
- }
- previouslySleeping[0] = currentlySleeping;
- previouslyAwake[0] = currentlyAwake;
- }
- });
- observerThread.start();
- }
- public synchronized void addListener(Listener listener) {
- listeners.add(listener);
- }
- public synchronized void removeListener(Listener listener) {
- listeners.remove(listener);
- }
- synchronized void firePlayerWake(long reactionTime) {
- for (Listener listener : listeners) {
- listener.onPlayerWake(reactionTime);
- }
- }
- synchronized void firePlayerSleep() {
- for (Listener listener : listeners) {
- listener.onPlayerSleep();
- }
- }
- void stop() {
- observerThread.interrupt();
- }
- }
- public interface Listener {
- void onPlayerWake(long reactionTime);
- void onPlayerSleep();
- }
- }
Add Comment
Please, Sign In to add comment