working multiple missions
[des2015.git] / dsl / runtime / src / nl / ru / des / BasicBehaviour.java
index e55558d..8fd1fd3 100644 (file)
@@ -8,7 +8,7 @@ public abstract class BasicBehaviour implements Behavior{
        protected enum SuppressedState {
                IDLE, IN_ACTION, SUPPRESSED;
        }
-       protected SuppressedState suppressed;
+       private SuppressedState suppressed;
        protected RegulatedMotor leftMotor, rightMotor, measMotor;
        protected SensorCollector sensors;
        protected long time;
@@ -28,16 +28,20 @@ public abstract class BasicBehaviour implements Behavior{
                leftMotor.setAcceleration(Constants.acceleration);
                rightMotor.stop(true);
                leftMotor.stop(true);
-               suppressed = SuppressedState.IDLE;
+               setSuppressed(SuppressedState.IDLE);
+               long time = System.currentTimeMillis();
+               while(System.currentTimeMillis()-time > 250){
+                       Thread.yield();
+               }
        }
 
        protected void measure(){
                measMotor.backward();
-               while(suppressed == SuppressedState.IN_ACTION && !measMotor.isStalled()){
+               while(getSuppressed() == SuppressedState.IN_ACTION && !measMotor.isStalled()){
                        Thread.yield();
                }
                measMotor.forward();
-               while(suppressed == SuppressedState.IN_ACTION && !measMotor.isStalled()){
+               while(getSuppressed() == SuppressedState.IN_ACTION && !measMotor.isStalled()){
                        Thread.yield();
                }
                measMotor.stop(true);
@@ -50,7 +54,7 @@ public abstract class BasicBehaviour implements Behavior{
                sensors.resetGyro();
                rightMotor.backward();
                leftMotor.forward();
-               while(suppressed == SuppressedState.IN_ACTION && Math.abs(sensors.gyro()) < angle){
+               while(getSuppressed() == SuppressedState.IN_ACTION && Math.abs(sensors.gyro()) < angle){
                        Thread.yield();
                }
                LCDPrinter.print(Float.toString(sensors.gyro()));
@@ -62,20 +66,28 @@ public abstract class BasicBehaviour implements Behavior{
                sensors.resetGyro();
                leftMotor.backward();
                rightMotor.forward();
-               while(suppressed == SuppressedState.IN_ACTION && Math.abs(sensors.gyro()) < angle){
+               while(getSuppressed() == SuppressedState.IN_ACTION && Math.abs(sensors.gyro()) < angle){
                        Thread.yield();
                }
                LCDPrinter.print(Float.toString(sensors.gyro()));
        }
        
+       protected synchronized void setSuppressed(SuppressedState sup){
+               suppressed = sup;
+       }
+       
+       protected SuppressedState getSuppressed(){
+               return suppressed;
+       }
+       
        @Override
        public void action() {
-               suppressed = SuppressedState.IN_ACTION;
+               setSuppressed(SuppressedState.IN_ACTION);
        }
 
        @Override
        public void suppress() {
-               suppressed = SuppressedState.SUPPRESSED;
+               setSuppressed(SuppressedState.SUPPRESSED);
        }
        
        @Override public boolean takeControl(){