Simplest possible 16 param animation for dan's input devices
[SugarCubes.git] / _Mappings.pde
index e42f6d7063341c6609c674e00dfd172f72ee902a..3932f0b9fecf53581ed524bd13d0f9d81facc19c 100644 (file)
 
 public Model buildModel() {
 
-  final float BASS_FLOOR = BassBox.EDGE_HEIGHT + BoothFloor.PLEXI_WIDTH;
   
   // Shorthand helpers for specifying wiring more quickly
   final Cube.Wiring WFL = Cube.Wiring.FRONT_LEFT;
   final Cube.Wiring WFR = Cube.Wiring.FRONT_RIGHT;
   final Cube.Wiring WRL = Cube.Wiring.REAR_LEFT;
   final Cube.Wiring WRR = Cube.Wiring.REAR_RIGHT;
+  
+  // Utility value if you need the height of a cube shorthand
+  final float CH = Cube.EDGE_HEIGHT;
+  
+  // Positions for the bass box
+  final float BBY = BassBox.EDGE_HEIGHT + BoothFloor.PLEXI_WIDTH;
+  final float BBX = 56;
+  final float BBZ = 2;
+
 
   // The model is represented as an array of towers. The cubes in the tower
   // are represenented relatively. Each tower has an x, y, z reference position,
@@ -38,9 +46,27 @@ public Model buildModel() {
   // The cubes automatically increment their y-position by Cube.EDGE_HEIGHT.
   TowerMapping[] towerCubes = new TowerMapping[] {
     
-    new TowerMapping(50, 0, 80, new CubeMapping[] {
-      new CubeMapping(0, 0, WFL),
+    // DJ booth, from left to right
+    new TowerMapping(BBX, BBY, BBZ, new CubeMapping[] {
+      new CubeMapping(-7.25, 7.5, -25, WFR),
+      new CubeMapping(7.5, -15.75, 12, WRL),
+    }),
+    new TowerMapping(BBX, BBY, BBZ, new CubeMapping[] {
+      new CubeMapping(19.625, 5.375, -22, WFR),
+      new CubeMapping(8, -14.5, 10, WRR),
     }),
+    new TowerMapping(BBX, BBY, BBZ, new CubeMapping[] {
+      new CubeMapping(48, 4.75, -35, WRL),
+      new CubeMapping(8, -15, 10, WRR),
+    }),
+    new TowerMapping(BBX, BBY, BBZ, new CubeMapping[] {
+      new CubeMapping(78.75, 3.75, -28, WRR),
+      new CubeMapping(8, -15, 10, WRR),
+    }),
+    new TowerMapping(BBX, BBY, BBZ, new CubeMapping[] {
+      new CubeMapping(104.75, 0, -27, WRL),
+      new CubeMapping(8, -15, 10, WFL),      
+    }),    
     
   };
   
@@ -50,14 +76,19 @@ public Model buildModel() {
   };
 
   // The bass box!
-  BassBox bassBox = new BassBox(56, 0, 2);
+  BassBox bassBox = new BassBox(BBX, 0, BBZ);
 
   // The speakers!
   List<Speaker> speakers = Arrays.asList(new Speaker[] {
+    // each speaker parameter is x, y, z, rotation, the left speaker comes first
     new Speaker(-12, 6, 0, 15),
-    new Speaker(TRAILER_WIDTH - Speaker.EDGE_WIDTH, 6, 6, -15)
+    new Speaker(TRAILER_WIDTH - Speaker.EDGE_WIDTH + 8, 6, 3, -15)
   });
 
+  //////////////////////////////////////////////////////////////////////
+  //      BENEATH HERE SHOULD NOT REQUIRE ANY MODIFICATION!!!!        //
+  //////////////////////////////////////////////////////////////////////
+
   // These guts just convert the shorthand mappings into usable objects
   ArrayList<Tower> towerList = new ArrayList<Tower>();
   ArrayList<Cube> tower;
@@ -82,40 +113,53 @@ public Model buildModel() {
   return new Model(towerList, cubes, bassBox, speakers);
 }
 
+/**
+ * This function maps the panda boards. We have an array of them, each has
+ * an IP address and a list of channels.
+ */
 public PandaMapping[] buildPandaList() {
+  final int LEFT_SPEAKER = 0;
+  final int RIGHT_SPEAKER = 1;
+  
   return new PandaMapping[] {
     new PandaMapping(
-      "10.200.1.28", new ChannelMapping[] {
+      "10.200.1.29", new ChannelMapping[] {
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 1, 2, 3, 4 }),
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 1, 2, 3, 4 }),
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 1, 2, 3, 4 }),
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 1, 2, 3, 4 }),
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 1, 2, 3, 4 }),
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 1, 2, 3, 4 }),
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 1, 2, 3, 4 }),
         new ChannelMapping(ChannelMapping.MODE_BASS),
-        new ChannelMapping(ChannelMapping.MODE_FLOOR),
-        new ChannelMapping(ChannelMapping.MODE_SPEAKER, 0),
-        new ChannelMapping(ChannelMapping.MODE_SPEAKER, 1),
-        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 1 }),
-        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),
-        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),
-        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),
-        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),
-        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),
-        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),
-        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),
-        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),
+        new ChannelMapping(ChannelMapping.MODE_STRUTS_AND_FLOOR),
+        new ChannelMapping(ChannelMapping.MODE_SPEAKER, LEFT_SPEAKER),
+        new ChannelMapping(ChannelMapping.MODE_SPEAKER, RIGHT_SPEAKER),
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 1, 2, 3, 4 }),
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 1, 2, 3, 4 }),
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 1, 2, 3, 4 }),
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 1, 2, 3, 4 }),
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 1, 2, 3, 4 }),
     }),
 
     new PandaMapping(
-      "10.200.1.29", new ChannelMapping[] {
-        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),
-        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),
-        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),
-        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),
-        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),
-        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),
-        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),
-        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),
-        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),
-        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),
-        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),
-        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),        
-        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { }),
+      "10.200.1.28", new ChannelMapping[] {
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 1, 2, 3, 4 }),
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 1, 2, 3, 4 }),
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 1, 2, 3, 4 }),
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 1, 2, 3, 4 }),
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 1, 2, 3, 4 }),
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 1, 2, 3, 4 }),
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 1, 2, 3, 4 }),
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 1, 2, 3, 4 }),
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 1, 2, 3, 4 }),
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 1, 2, 3, 4 }),
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 1, 2, 3, 4 }),
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 1, 2, 3, 4 }),
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 1, 2, 3, 4 }),
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 1, 2, 3, 4 }),
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 1, 2, 3, 4 }),
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 1, 2, 3, 4 }),
     }),
   };
 }
@@ -160,7 +204,7 @@ class CubeMapping {
 class PandaMapping {
   
   // How many channels are on the panda board
-  public final static int CHANNELS_PER_BOARD = 13;
+  public final static int CHANNELS_PER_BOARD = 16;
   
   // How many total pixels on the whole board
   public final static int PIXELS_PER_BOARD = ChannelMapping.PIXELS_PER_CHANNEL * CHANNELS_PER_BOARD;
@@ -203,7 +247,7 @@ class ChannelMapping {
   public static final int MODE_CUBES = 1;
   public static final int MODE_BASS = 2;
   public static final int MODE_SPEAKER = 3;
-  public static final int MODE_FLOOR = 4;
+  public static final int MODE_STRUTS_AND_FLOOR = 4;
   public static final int MODE_INVALID = 5;
   
   public static final int NO_OBJECT = -1;
@@ -235,7 +279,7 @@ class ChannelMapping {
       if (speakerIndex < 0 || speakerIndex >= glucose.model.speakers.size()) {
         throw new RuntimeException("Invalid speaker channel mapping: " + speakerIndex);
       }
-    } else if ((mode == MODE_FLOOR) || (mode == MODE_BASS) || (mode == MODE_NULL)) {
+    } else if ((mode == MODE_STRUTS_AND_FLOOR) || (mode == MODE_BASS) || (mode == MODE_NULL)) {
       if (rawObjectIndices.length > 0) {
         throw new RuntimeException("Bass/floor/null mappings cannot specify object indices");
       }