update code
[des2015.git] / dsl / runtime / src / nl / ru / des / BasicBehaviour.java
index 8fd1fd3..2a6240e 100644 (file)
@@ -5,10 +5,8 @@ import lejos.robotics.subsumption.Behavior;
 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;
@@ -19,75 +17,80 @@ public abstract class BasicBehaviour implements Behavior{
                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(){