vt100: include pgmspace.h as we use PROGMEM macro
[aversive.git] / projects / microb2010 / mainboard / display.py
index 297dbce..ff5bb02 100644 (file)
@@ -9,6 +9,7 @@ AREA_Y = 2100.
 
 ROBOT_HEIGHT=5 # 350
 CORN_HEIGHT=5  # 150
+BALL_CYLINDER=1 # 0
 
 ROBOT_WIDTH=320
 ROBOT_LENGTH=250
@@ -26,6 +27,8 @@ robot = box(color=(0.4, 0.4, 0.4))
 lspickle = box(color=(0.4, 0.4, 0.4))
 rspickle = box(color=(0.4, 0.4, 0.4))
 
+opp = box(color=(0.7, 0.2, 0.2))
+
 last_pos = (0.,0.,0.)
 hcenter_line = curve()
 hcenter_line.pos = [(-AREA_X/2, 0., 0.3), (AREA_X/2, 0., 0.3)]
@@ -166,10 +169,12 @@ def init_waypoints():
                 continue
 
             # balls
-            if (i & 1) == 0 and j > 3:
+            if (i & 1) == 0 and j > 3 and \
+                    (not (i == 0 and j == WAYPOINTS_NBY-1)) and \
+                    (not (i == WAYPOINTS_NBX-1 and j == WAYPOINTS_NBY-1)):
                 waypoints[i][j] = TYPE_BALL
                 continue
-            if (i == 0 or i == WAYPOINTS_NBX-1) and j > 2:
+            if (i == 0 or i == WAYPOINTS_NBX-1) and j > 2 and j < 7:
                 waypoints[i][j] = TYPE_BALL
                 continue
 
@@ -236,8 +241,15 @@ def toggle_obj_disp():
                                  pos=(x-AREA_X/2,y-AREA_Y/2,CORN_HEIGHT/2))
                     area_objects.append(c)
                 elif waypoints[i][j] == TYPE_BALL:
-                    c = sphere(radius=50, color=(1., 0.,0.),
-                               pos=(x-AREA_X/2,y-AREA_Y/2,50))
+                    if BALL_CYLINDER == 1:
+                        c = cylinder(axis=(0,0,1), radius=50,
+                                     length=CORN_HEIGHT,
+                                     color=(1., 0.,0.),
+                                     pos=(x-AREA_X/2,y-AREA_Y/2,CORN_HEIGHT/2))
+                    else:
+                        c = sphere(radius=50, color=(1., 0.,0.),
+                                   pos=(x-AREA_X/2,y-AREA_Y/2,50))
+
                     area_objects.append(c)
                 else:
                     c = sphere(radius=5, color=(0., 0.,1.),
@@ -262,6 +274,10 @@ def toggle_color():
     else:
         color = YELLOW
 
+def set_opp(x, y):
+    opp.size = (300, 300, ROBOT_HEIGHT)
+    opp.pos = (x, y, ROBOT_HEIGHT/2)
+
 def set_robot():
     global robot, last_pos, robot_trail, robot_trail_list
     global save_pos, robot_x, robot_y, robot_a
@@ -289,7 +305,7 @@ def set_robot():
     lspickle.axis = axis
     lspickle.size = (20, ROBOT_WIDTH, 5)
     if robot_lspickle_autoharvest:
-        lspickle.color = (1, 0, 0)
+        lspickle.color = (0.2, 0.2, 1)
     else:
         lspickle.color = (0.4, 0.4, 0.4)
 
@@ -299,7 +315,7 @@ def set_robot():
     rspickle.axis = axis
     rspickle.size = (20, ROBOT_WIDTH, 5)
     if robot_rspickle_autoharvest:
-        rspickle.color = (1, 0, 0)
+        rspickle.color = (0.2, 0.2, 1)
     else:
         rspickle.color = (0.4, 0.4, 0.4)
 
@@ -367,13 +383,24 @@ while True:
                     print "cobboard: %x,%x"%(int(m.groups()[0]),int(m.groups()[1]))
                     side = int(m.groups()[0])
                     flags = int(m.groups()[1])
-                    if side == 0:
+                    if (side == 0 and color == YELLOW) or (side == 1 and color == BLUE):
                         robot_lspickle_deployed = ((flags & 1) * 2)
                         robot_lspickle_autoharvest = ((flags & 2) != 0)
                     else:
                         robot_rspickle_deployed = ((flags & 1) * 2)
                         robot_rspickle_autoharvest = ((flags & 2) != 0)
 
+            if scene.mouse.events != 0:
+                oppx, oppy, oppz = scene.mouse.getevent().project(normal=(0,0,1))
+                set_opp(oppx, oppy)
+                try:
+                    if color == YELLOW:
+                        fw.write("opp %d %d"%(int(oppx + 1500), int(oppy + 1050)))
+                    else:
+                        fw.write("opp %d %d"%(int(1500 - oppx), int(1050 - oppy)))
+                except:
+                    print "not connected"
+
             if scene.kb.keys == 0:
                 continue
 
@@ -391,6 +418,8 @@ while True:
                 fw.write("l")
             elif k == "r":
                 fw.write("r")
+            elif k == "b":
+                fw.write("b")
             elif k == "c":
                 robot_trail_list = []
             elif k == "x":
@@ -403,6 +432,8 @@ while True:
                 toggle_obj_disp()
             elif k == "i":
                 toggle_color()
+            else:
+                print k
 
             # EOF
             if l == "":