package TaiGameCore;
/**
* Very much like PressTypeThreshold, except this requests the "current state" every call to isTypeTime
*/
public class PressActionThreshold {
private long initialD, slowNess;
public PressActionThreshold(double initialDelay, double delayBetween){
initialD = (long)(initialDelay*1e9);
slowNess = (long)(delayBetween*1e9);
}
private long now = -1;
private boolean lastWasAlsoPressed = false;
private long numberTimesPressed = 0;
public boolean isActionTime(boolean isActionRequesting){
if (lastWasAlsoPressed && isActionRequesting){
if (initialD>1e9*10){
return false; //Way too long.
}
//DELAY EFFECTS
long timeHeld = System.nanoTime()-now;
if (timeHeld > initialD){
if (slowNess<1e-6){
return true; //Instantaneous...
}
if (slowNess>1e9*10){
return false; //Way too long.
}
timeHeld-=initialD;
long couldBe = timeHeld / slowNess;
if (couldBe >= (numberTimesPressed-1)){
numberTimesPressed++;
return true;
} else {
return false; //Nope, in the middle of the interval.
}
} else {
return false; //Waiting...
}
}
release();
lastWasAlsoPressed = isActionRequesting;
now = System.nanoTime();
return isActionRequesting;
}
public void release() {
numberTimesPressed = 0;
lastWasAlsoPressed = false;
}
/**
* Simulates a press, and puts the timer past the delay period (so that you're in the state of "multipress")
*/
public void skipDelayPeriod() {
now = System.nanoTime() - initialD - (long)1e9;
lastWasAlsoPressed = true;
}
}