Fixed shutdown behaviour and added print expression
[des2015.git] / dsl / xtend / src / robots / missions / generator / TaskDSLGenerator.xtend
index 06f9654..0e85304 100644 (file)
@@ -9,7 +9,9 @@ import org.eclipse.xtext.generator.IFileSystemAccess
 import org.eclipse.xtext.generator.IGenerator
 import robots.missions.taskDSL.Behaviour
 import robots.missions.taskDSL.Mission
+import robots.missions.taskDSL.OperatorE
 import robots.missions.taskDSL.Robot
+import robots.missions.taskDSL.StoppingExpression
 
 /**
  * Generates code from your model files on save.
@@ -71,7 +73,7 @@ public class Behaviours{
                }
                «IF b.tc != null»
                @Override public boolean takeControl(){
-                       return ;
+                       return «printExpression(b.tc)»;
                }
                «ENDIF»
                
@@ -99,7 +101,6 @@ public class Behaviours{
        «ENDFOR»
 }
        '''
-
        
        def CharSequence makeConstants(Robot robot)'''
 package nl.ru.des;
@@ -109,4 +110,23 @@ public class Constants{
        public final static int acceleration = «robot.acc»;
 }'''
        
+       def CharSequence printExpression(StoppingExpression e)'''
+       «IF e.scond != null»
+               «IF !e.scond.colors.nullOrEmpty»
+               sensors.collected(new int[]{«FOR c : e.scond.colors SEPARATOR ","»«c.d.ordinal»«ENDFOR»})
+               «ELSEIF e.scond.touch != null»
+               sensors.«e.scond.touch.d.toString()»Touch()
+               «ELSEIF e.scond.dist != null»
+               sensors.distance() «e.scond.dist.d.toString()» «e.scond.dist»
+               «ELSEIF e.scond.color != null»
+               sensors.color() == «e.scond.color.d.ordinal»
+               «ENDIF»
+       «ELSE»
+               «IF e.op.d.equals(OperatorE.AND)»
+                       «FOR ex : e.s BEFORE "(" SEPARATOR "&&" AFTER ")"»«printExpression(ex)»«ENDFOR»
+               «ELSE»
+                       «FOR ex : e.s BEFORE "(" SEPARATOR "&&" AFTER ")"»«printExpression(ex)»«ENDFOR»
+               «ENDIF»       
+       «ENDIF»
+       '''
 }
\ No newline at end of file