1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

Resource evaluate an action for a specific amount of time

Discussion in 'Tutorials & Resources' started by tztok, Dec 18, 2016.

  1. tztok

    Joined:
    Nov 7, 2015
    Messages:
    31
    Likes Received:
    5
    If you want to evaluate an action for a specific amount of time.
    For example, the player is not moving for at least 400ms.

    Code (Text):
    1.  
    2. MinimumAction<Boolean> notMoving = new MinimumAction<>(player::isMoving, (a, b) -> !a && !b, 400);
    3.  
    Code (Text):
    1.  
    2. import com.runemate.game.api.script.Execution;
    3.  
    4. import java.util.function.BiPredicate;
    5. import java.util.function.Supplier;
    6.  
    7. public class MinimumAction<T> {
    8.  
    9.     private static final long DEFAULT_INTERVAL = 100;
    10.  
    11.     private final Supplier<T> supplier;
    12.     private final BiPredicate<T, T> predicate;
    13.     private final long delta;
    14.     private final long interval;
    15.  
    16.     public MinimumAction(Supplier<T> supplier, BiPredicate<T, T> predicate, long delta) {
    17.         this(supplier, predicate, delta, DEFAULT_INTERVAL);
    18.     }
    19.  
    20.     public MinimumAction(Supplier<T> supplier, BiPredicate<T, T> predicate, long delta, long interval) {
    21.         this.supplier = supplier;
    22.         this.predicate = predicate;
    23.         this.delta = delta;
    24.         this.interval = interval;
    25.     }
    26.  
    27.     public boolean evaluate() {
    28.         long start = System.currentTimeMillis();
    29.         T previousAction = supplier.get();
    30.  
    31.         while (System.currentTimeMillis() - start < delta) {
    32.             if (!predicate.test(previousAction, supplier.get())) {
    33.                 return false;
    34.             }
    35.             Execution.delay(interval);
    36.         }
    37.         return predicate.test(previousAction, supplier.get());
    38.     }
    39.  
    40. }
    41.  
     
  2. Party

    Party Client Developer

    Joined:
    Oct 12, 2015
    Messages:
    3,708
    Likes Received:
    1,606
  3. Savior

    Savior Java Warlord

    Joined:
    Nov 17, 2014
    Messages:
    4,906
    Likes Received:
    2,748
    Is there any difference to Execution.delayWhile(localPlayer::isMoving, 400)?
     
  4. tztok

    Joined:
    Nov 7, 2015
    Messages:
    31
    Likes Received:
    5
    from which bridge can I jump?
     

Share This Page

Loading...