Change mapping and debug tools to be generic, panda mappings totally generic
[SugarCubes.git] / _Internals.pde
index 7dcf1757e8e9b138969df17d62dfe44fe5e5123f..82feb2d2b2e9509d78074e2d910523aacc133ac5 100644 (file)
@@ -47,6 +47,7 @@ final float BASS_Z = (TRAILER_DEPTH - BASS_DEPTH) / 2.;
 int targetFramerate = 60;
 
 int startMillis, lastMillis;
+SCMapping mapping;
 GLucose glucose;
 HeronLX lx;
 MappingTool mappingTool;
@@ -56,12 +57,8 @@ LXEffect[] effects;
 OverlayUI ui;
 ControlUI controlUI;
 MappingUI mappingUI;
-PandaDriver pandaFront;
-PandaDriver pandaRear;
+PandaDriver[] pandaBoards;
 boolean mappingMode = false;
-
-boolean pandaBoardsEnabled = false;
-
 boolean debugMode = false;
 DebugUI debugUI;
 
@@ -79,7 +76,8 @@ void setup() {
   logTime("Created viewport");
 
   // Create the GLucose engine to run the cubes
-  glucose = new GLucose(this, new SCMapping());
+  mapping = new SCMapping();
+  glucose = new GLucose(this, mapping);
   lx = glucose.lx;
   lx.enableKeyboardTempo();
   logTime("Built GLucose engine");
@@ -93,18 +91,19 @@ void setup() {
   logTime("Built transitions");
     
   // Build output driver
-  int[][] frontChannels = glucose.mapping.buildFrontChannelList();
-  int[][] rearChannels = glucose.mapping.buildRearChannelList();
-  int[][] flippedRGB = glucose.mapping.buildFlippedRGBList();
-  mappingTool = new MappingTool(glucose, frontChannels, rearChannels);
-  pandaFront = new PandaDriver(new NetAddress("192.168.1.28", 9001), glucose.model, frontChannels, flippedRGB);
-  pandaRear = new PandaDriver(new NetAddress("192.168.1.29", 9001), glucose.model, rearChannels, flippedRGB);
-  logTime("Build PandaDriver");
+  PandaMapping[] pandaMappings = mapping.buildPandaList();
+  pandaBoards = new PandaDriver[pandaMappings.length];
+  int pbi = 0;
+  for (PandaMapping pm : pandaMappings) {
+    pandaBoards[pbi++] = new PandaDriver(pm.ip, glucose.model, pm.channelList);
+  }
+  mappingTool = new MappingTool(glucose, pandaMappings);
+  logTime("Built PandaDriver");
   
   // Build overlay UI
   ui = controlUI = new ControlUI();
   mappingUI = new MappingUI(mappingTool);
-  debugUI = new DebugUI(frontChannels, rearChannels);
+  debugUI = new DebugUI(pandaMappings);
   logTime("Built overlay UI");
     
   // MIDI devices
@@ -213,14 +212,14 @@ void draw() {
   }
   
   // TODO(mcslee): move into GLucose engine
-  if (pandaBoardsEnabled) {
-    pandaFront.send(colors);
-    pandaRear.send(colors);
+  for (PandaDriver p : pandaBoards) {
+    p.send(colors);
   }
 }
 
 void drawCube(Cube c) {
-  drawBox(c.x, c.y, c.z, c.rx, c.ry, c.rz, Cube.EDGE_WIDTH, Cube.EDGE_HEIGHT, Cube.EDGE_WIDTH, Cube.CHANNEL_WIDTH);
+  float in = .15;
+  drawBox(c.x+in, c.y+in, c.z+in, c.rx, c.ry, c.rz, Cube.EDGE_WIDTH-in*2, Cube.EDGE_HEIGHT-in*2, Cube.EDGE_WIDTH-in*2, Cube.CHANNEL_WIDTH-in);
 }
 
 void drawBox(float x, float y, float z, float rx, float ry, float rz, float xd, float yd, float zd, float sw) {
@@ -303,8 +302,9 @@ void keyPressed() {
       }
       break;
     case 'p':
-      pandaBoardsEnabled = !pandaBoardsEnabled;
-      println("PandaBoard Output: " + (pandaBoardsEnabled ? "ON" : "OFF"));
+      for (PandaDriver p : pandaBoards) {
+        p.toggle();
+      }
       break;
     case 'u':
       uiOn = !uiOn;
@@ -313,11 +313,9 @@ void keyPressed() {
 }
 
 int mx, my;
-
 void mousePressed() {
-  if (mouseX > ui.leftPos) {
-    ui.mousePressed();
-  } else {
+  ui.mousePressed();
+  if (mouseX < ui.leftPos) {
     if (debugMode) {
       debugUI.mousePressed();
     }    
@@ -342,14 +340,16 @@ void mouseDragged() {
 }
 
 void mouseReleased() {
-  if (mouseX > ui.leftPos) {
-    ui.mouseReleased();
-  }
+  ui.mouseReleased();
 }
  
 void mouseWheel(int delta) {
-  eyeR = constrain(eyeR - delta, -500, -80);
-  eyeX = midX + eyeR*sin(eyeA);
-  eyeZ = midZ + eyeR*cos(eyeA);
+  if (mouseX > ui.leftPos) {
+    ui.mouseWheel(delta);
+  } else {
+    eyeR = constrain(eyeR - delta, -500, -80);
+    eyeX = midX + eyeR*sin(eyeA);
+    eyeZ = midZ + eyeR*cos(eyeA);
+  }
 }