checkpoint
[slipway.git] / src / edu / berkeley / slipway / gui / GuiCell.java
index cd8ef07..ebd3044 100644 (file)
@@ -50,11 +50,15 @@ public class GuiCell {
 
     private void drawBody(G g, R r) {
         if (xgate == null && ygate == null) return;
+
+        int N = 7;
+        int TSIZE   = 10;
+        double TSQR = TSIZE / Math.sqrt(2.0);
+
         R body = r;
         g.color(BODY_COLOR);
         R xgater = null;
         R ygater = null;
-        int N = 7;
         R gateArea = body.plus(12+N, 12+N, -(4+N), -(4+N));
         if      (xgate==null) ygater = gateArea;
         else if (ygate==null) xgater = gateArea;
@@ -64,63 +68,42 @@ public class GuiCell {
             ygater = gateArea.plus(factor, 0, 0, -factor);
         }
 
-        R xring = gateArea.plus(4, 4, -4, -4);
-        R yring = gateArea.plus(6, 6, -6, -6);
-
-        int rot = 0;
-        switch (fpslicCell.yi()) {
-            case NORTH: rot = 2; break;
-            case SOUTH: rot = 0; break;
-            case WEST:  rot = 3; break;
-            case EAST:  rot = 1; break;
-            default:    rot = 0;
-        }
+        R xring = gateArea.plus(-4, -4, 4, 4);
+        R yring = gateArea.plus(-6, -6, 6, 6);
         if (xgate != null) {
-            xgate.rotation = rot;
+            xgate.rotation(fpslicCell.yi());
             xgate.gateArea = gateArea;
+            xgate.r = xgater;
         }
         if (ygate != null) {
-            ygate.rotation = rot;
+            ygate.rotation(fpslicCell.yi());
             ygate.gateArea = gateArea;
+            ygate.r = ygater;
         }
 
-        int TSIZE   = 10;
-        double TSQR = TSIZE / Math.sqrt(2.0);
         g.color(XGATE_COLOR);
-        P p = null;
-        switch (fpslicCell.xi()) {
-            case SW: p = new P(r.minx(), r.miny()); break;
-            case SE: p = new P(r.maxx(), r.miny()); break;
-            case NW: p = new P(r.minx(), r.maxy()); break;
-            case NE: p = new P(r.maxx(), r.maxy()); break;
-        }
+        P p = r.corner(fpslicCell.xi());
         if (p!=null) {
             if (ygate != null) {
-                g.route(p, xring, ygate.getInput(1, ygater));
-                g.line(ygate.getInput(1, ygater), ygate.getInputDest(1, ygater));
+                g.route(p, xring, ygate.getInput(1));
+                g.line(ygate.getInput(1), ygate.getInputDest(1));
             }
             if (xgate != null) {
-                g.route(p, xring, xgate.getInput(0, xgater));
-                g.line(xgate.getInput(0, xgater), xgate.getInputDest(0, xgater));
+                g.route(p, xring, xgate.getInput(0));
+                g.line(xgate.getInput(0), xgate.getInputDest(0));
             }
         }
 
-        p = null;
+        p = r.corner(fpslicCell.yi());
         g.color(YGATE_COLOR);
-        switch (fpslicCell.yi()) {
-            case NORTH: p = new P(r.cx(), r.maxy()); break;
-            case SOUTH: p = new P(r.cx(), r.miny()); break;
-            case WEST:  p = new P(r.minx(), r.cy()); break;
-            case EAST:  p = new P(r.maxx(), r.cy()); break;
-        }
         if (p!=null) {
             if (ygate != null) {
-                g.route(p, yring, ygate.getInput(0, ygater));
-                g.line(ygate.getInput(0, ygater), ygate.getInputDest(0, ygater));
+                g.route(p, yring, ygate.getInput(0));
+                g.line(ygate.getInput(0), ygate.getInputDest(0));
             }
             if (xgate != null) {
-                g.route(p, yring, xgate.getInput(1, xgater));
-                g.line(xgate.getInput(1, xgater), xgate.getInputDest(1, xgater));
+                g.route(p, yring, xgate.getInput(1));
+                g.line(xgate.getInput(1), xgate.getInputDest(1));
             }
         }
 
@@ -132,7 +115,7 @@ public class GuiCell {
                 P p2 = new P(r.minx()+2*(layer+1), r.miny()+2*(layer+1));
                 R r2 = new R(r.minx()+2*(layer+1), r.miny()+2*(layer+1),
                              r.maxx()-2*(layer+1), r.maxy()-2*(layer+1));
-                g.route(p2, r2, xgate.getInput(3, xgater));
+                g.route(p2, r2, xgate.getInput(3));
             }
             */
             if (fpslicCell.wi() != NONE) {
@@ -141,10 +124,10 @@ public class GuiCell {
                 P p2 = new P(r.minx()+2*(layer+1), r.miny()+2*(layer+1));
                 R r2 = new R(r.minx()+2*(layer+1), r.miny()+2*(layer+1),
                              r.maxx()-2*(layer+1), r.maxy()-2*(layer+1));
-                g.route(p2, r2, xgate.getInput(2, xgater));
-                g.line(xgate.getInput(2, xgater), xgate.getInputDest(2, xgater));
+                g.route(p2, r2, xgate.getInput(2));
+                g.line(xgate.getInput(2), xgate.getInputDest(2));
             }
-            xgate.draw(g, xgater, XGATE_COLOR);
+            xgate.draw(g, XGATE_COLOR);
         }
         if (ygater != null) {
             /*
@@ -154,7 +137,7 @@ public class GuiCell {
                 P p2 = new P(r.minx()+2*(layer+1), r.miny()+2*(layer+1));
                 R r2 = new R(r.minx()+2*(layer+1), r.miny()+2*(layer+1),
                              r.maxx()-2*(layer+1), r.maxy()-2*(layer+1));
-                g.route(p2, r2, ygate.getInput(3, ygater));
+                g.route(p2, r2, ygate.getInput(3));
             }
             */
             if (fpslicCell.wi() != NONE) {
@@ -163,10 +146,10 @@ public class GuiCell {
                 P p2 = new P(r.minx()+2*(layer+1), r.miny()+2*(layer+1));
                 R r2 = new R(r.minx()+2*(layer+1), r.miny()+2*(layer+1),
                              r.maxx()-2*(layer+1), r.maxy()-2*(layer+1));
-                g.route(p2, r2, ygate.getInput(2, ygater));
-                g.line(ygate.getInput(2, ygater), ygate.getInputDest(2, ygater));
+                g.route(p2, r2, ygate.getInput(2));
+                g.line(ygate.getInput(2), ygate.getInputDest(2));
             }
-            ygate.draw(g, ygater, YGATE_COLOR);
+            ygate.draw(g, YGATE_COLOR);
         }
     }
 }
\ No newline at end of file