import nl.ru.des.sensors.SensorCollector;
public abstract class BasicBehaviour implements Behavior{
- protected enum SuppressedState {
- IDLE, IN_ACTION, SUPPRESSED;
- }
- private SuppressedState suppressed;
+ protected boolean suppressed;
+ protected boolean finished;
protected RegulatedMotor leftMotor, rightMotor, measMotor;
protected SensorCollector sensors;
protected long time;
this.rightMotor = rightMotor;
this.measMotor = measMotor;
this.sensors = sensors;
+ suppressed = false;
+ finished = true;
}
protected void reset(){
+ finished = true;
rightMotor.setSpeed(Constants.speed);
rightMotor.setAcceleration(Constants.acceleration);
leftMotor.setSpeed(Constants.speed);
leftMotor.setAcceleration(Constants.acceleration);
rightMotor.stop(true);
leftMotor.stop(true);
- setSuppressed(SuppressedState.IDLE);
- long time = System.currentTimeMillis();
- while(System.currentTimeMillis()-time > 250){
- Thread.yield();
- }
}
protected void measure(){
measMotor.backward();
- while(getSuppressed() == SuppressedState.IN_ACTION && !measMotor.isStalled()){
+ while(!suppressed && !measMotor.isStalled()){
Thread.yield();
}
measMotor.forward();
- while(getSuppressed() == SuppressedState.IN_ACTION && !measMotor.isStalled()){
+ while(!suppressed && !measMotor.isStalled()){
Thread.yield();
}
measMotor.stop(true);
rightTurn(90);
}
+ protected void turnRandom(int from, int to){
+ int degrees = Marster.random.nextInt(to-from)+from;
+ if(Marster.random.nextBoolean()){
+ rightTurn(degrees);
+ } else {
+ leftTurn(degrees);
+ }
+ }
+
protected void rightTurn(int angle){
- rightMotor.stop();
+ rightMotor.stop(true);
leftMotor.stop();
sensors.resetGyro();
rightMotor.backward();
leftMotor.forward();
- while(getSuppressed() == SuppressedState.IN_ACTION && Math.abs(sensors.gyro()) < angle){
+ while(!suppressed && Math.abs(sensors.gyro()) < angle){
Thread.yield();
}
+ rightMotor.stop(true);
+ leftMotor.stop(true);
LCDPrinter.print(Float.toString(sensors.gyro()));
}
protected void leftTurn(int angle){
- rightMotor.stop();
+ rightMotor.stop(true);
leftMotor.stop();
sensors.resetGyro();
leftMotor.backward();
rightMotor.forward();
- while(getSuppressed() == SuppressedState.IN_ACTION && Math.abs(sensors.gyro()) < angle){
+ while(!suppressed && Math.abs(sensors.gyro()) < angle){
Thread.yield();
}
+ rightMotor.stop(true);
+ leftMotor.stop(true);
LCDPrinter.print(Float.toString(sensors.gyro()));
}
- protected synchronized void setSuppressed(SuppressedState sup){
- suppressed = sup;
- }
-
- protected SuppressedState getSuppressed(){
- return suppressed;
- }
-
@Override
public void action() {
- setSuppressed(SuppressedState.IN_ACTION);
+ suppressed = false;
+ finished = false;
}
@Override
public void suppress() {
- setSuppressed(SuppressedState.SUPPRESSED);
+ suppressed = true;
+ finished = true;
}
@Override public boolean takeControl(){