From 1ecdb44ad45fb86834e9dfcadce6cbff751ad484 Mon Sep 17 00:00:00 2001 From: Mark Slee Date: Tue, 11 Jun 2013 18:02:15 -0700 Subject: [PATCH] Restore mappings data to sugarcubes sketch. Called back from GLucose library. Will make it much easier for Trip to modify. --- _Internals.pde | 13 +++++- _Mappings.pde | 101 +++++++++++++++++++++++++++++++++++++++++++++++ _Overlay.pde | 9 +++++ code/GLucose.jar | Bin 15328 -> 14492 bytes 4 files changed, 121 insertions(+), 2 deletions(-) create mode 100644 _Mappings.pde diff --git a/_Internals.pde b/_Internals.pde index 7fe3209..a103f13 100644 --- a/_Internals.pde +++ b/_Internals.pde @@ -1,4 +1,13 @@ /** + * DOUBLE BLACK DIAMOND DOUBLE BLACK DIAMOND + * + * //\\ //\\ //\\ //\\ + * ///\\\ ///\\\ ///\\\ ///\\\ + * \\\/// \\\/// \\\/// \\\/// + * \\// \\// \\// \\// + * + * EXPERTS ONLY!! EXPERTS ONLY!! + * * If you are an artist, you may ignore this file! It just sets * up the framework to run the patterns. Should not need modification * for general animation work. @@ -46,7 +55,7 @@ void setup() { logTime("Created viewport"); // Create the GLucose engine to run the cubes - glucose = new GLucose(this); + glucose = new GLucose(this, new SCMapping()); lx = glucose.lx; logTime("Built GLucose engine"); @@ -61,7 +70,7 @@ void setup() { // Build overlay UI ui = new OverlayUI(); logTime("Built overlay UI"); - + // MIDI devices SCMidiDevices.initializeStandardDevices(glucose, ui.patternKnobs, ui.transitionKnobs, ui.effectKnobs); logTime("Setup MIDI devices"); diff --git a/_Mappings.pde b/_Mappings.pde new file mode 100644 index 0000000..8137050 --- /dev/null +++ b/_Mappings.pde @@ -0,0 +1,101 @@ +/** + * DOUBLE BLACK DIAMOND DOUBLE BLACK DIAMOND + * + * //\\ //\\ //\\ //\\ + * ///\\\ ///\\\ ///\\\ ///\\\ + * \\\/// \\\/// \\\/// \\\/// + * \\// \\// \\// \\// + * + * EXPERTS ONLY!! EXPERTS ONLY!! + * + * This class implements the mapping functions needed to lay out the physical + * cubes and the output ports on the panda board. It should only be modified + * when physical changes or tuning is being done to the structure. + */ +class SCMapping implements GLucose.Mapping { + public Cube[] buildCubeArray() { + // TODO(mcslee): find a cleaner way of representing this data, probably + // serialized in some more neutral form. also figure out what's going on + // with the indexing starting at 1 and some indices missing. + Cube[] cubes = new Cube[79]; + cubes[1] = new Cube(17.25, 0, 0, 0, 0, 80, true, 2, 3); + cubes[2] = new Cube(50.625, -1.5, 0, 0, 0, 55, false, 4, 0); + cubes[3] = new Cube(70.75, 12.375, 0, 0, 0, 55, false, 4, 0); + cubes[4] = new Cube(49.75, 24.375, 0, 0, 0, 48, false, 0, 0);//dnw + cubes[5] = new Cube(14.25, 32, 0, 0, 0, 80, false, 2, 1); + cubes[6] = new Cube(50.375, 44.375, 0, 0, 0, 0, false, 0, 0);//dnw + cubes[7] = new Cube(67.5, 64.25, 0, 27, 0, 0, false, 0, 0);//dnw + cubes[8] = new Cube(44, 136, 0, 0, 0, 0, false, 1, 2); + cubes[9] = new Cube(39, 162, 0, 0, 0, 0, false, 1, 0); + cubes[10] = new Cube(58, 182, -4, 12, 0, 0, false, 3, 3); + cubes[11] = new Cube(28, 182, -4, 12, 0, 0, false, 0, 0); + cubes[12] = new Cube(0, 182, -4, 12, 0, 0, false, 0, 2); + cubes[13] = new Cube(18.75, 162, 0, 0, 0, 0, false, 0, 0); + cubes[14] = new Cube(13.5, 136, 0, 0, 0, 0, false, 1, 1); + cubes[15] = new Cube(6.5, -8.25, 20, 0, 0, 25, false, 5, 3); + cubes[16] = new Cube(42, 15, 20, 0, 0, 4, true, 2, 2); + cubes[17] = new Cube(67, 24, 20, 0, 0, 25); + cubes[18] = new Cube(56, 41, 20, 0, 0, 30, false, 3, 1); + cubes[19] = new Cube(24, 2, 20, 0, 0, 25, true, 0, 3); + cubes[20] = new Cube(26, 26, 20, 0, 0, 70, true, 2, 3); + cubes[21] = new Cube(3.5, 10.5, 20, 0, 0, 35, true, 1, 0); + cubes[22] = new Cube(63, 133, 20, 0, 0, 80, false, 0, 2); + cubes[23] = new Cube(56, 159, 20, 0, 0, 65); + cubes[24] = new Cube(68, 194, 20, 0, -45, 0); + cubes[25] = new Cube(34, 194, 20, 20, 0, 35 ); + cubes[26] = new Cube(10, 194, 20, 0, -45, 0 ); // wired a bit funky + cubes[27] = new Cube(28, 162, 20, 0, 0, 65); + cubes[28] = new Cube(15.5, 134, 20, 0, 0, 20); + cubes[29] = new Cube(13, 29, 40, 0, 0, 0, true, 0, 0); + cubes[30] = new Cube(55, 15, 40, 0, 0, 50, false, 0, 2); + cubes[31] = new Cube(78, 9, 40, 0, 0, 60, true, 5, 2); + cubes[32] = new Cube(80, 39, 40, 0, 0, 80, false, 0, 3); + cubes[33] = new Cube(34, 134, 40, 0, 0, 50, false, 0, 3); + cubes[34] = new Cube(42, 177, 40, 0, 0, 0); + cubes[35] = new Cube(41, 202, 40, 20, 0, 80); + cubes[36] = new Cube(21, 178, 40, 0, 0, 35); + cubes[37] = new Cube(18, 32, 60, 0, 0, 65, true, 0, 1); + cubes[38] = new Cube(44, 20, 60, 0, 0, 20); //front power cube + cubes[39] = new Cube(39, 149, 60, 0, 0, 15); + cubes[40] = new Cube(60, 186, 60, 0, 0, 45); + cubes[41] = new Cube(48, 213, 56, 20, 0, 25); + cubes[42] = new Cube(22, 222, 60, 10, 10, 15, false, 0, 3); + cubes[43] = new Cube(28, 198, 60, 20, 0, 20, true, 5, 0); + cubes[44] = new Cube(12, 178, 60, 0, 0, 50, false, 4, 1); + cubes[45] = new Cube(18, 156, 60, 0, 0, 40); + cubes[46] = new Cube(30, 135, 60, 0, 0, 45); + cubes[47] = new Cube(10, 42, 80, 0, 0, 17, true, 0, 2); + cubes[48] = new Cube(34, 23, 80, 0, 0, 45, false, 0, 1); + cubes[49] = new Cube(77, 28, 80, 0, 0, 45); + cubes[50] = new Cube(53, 22, 80, 0, 0, 45); + cubes[51] = new Cube(48, 175, 80, 0, 0, 45); + cubes[52] = new Cube(66, 172, 80, 0, 0, 355, true, 5, 1);// _,195,_ originally + cubes[53] = new Cube(33, 202, 80, 25, 0, 85, false, 1, 3); + cubes[54] = new Cube(32, 176, 100, 0, 0, 20, false, 0, 2); + cubes[55] = new Cube(5.75, 69.5, 0, 0, 0, 80); + cubes[56] = new Cube(1, 53, 0, 40, 70, 70); + cubes[57] = new Cube(-15, 24, 0, 15, 0, 0); + //cubes[58] what the heck happened here? never noticed before 4/8/2013 + //cubes[59] what the heck happened here? never noticed before 4/8/2013 + cubes[60] = new Cube(40, 164, 120, 0, 0, 12.5, false, 4, 3); + cubes[61] = new Cube(32, 148, 100, 0, 0, 3, false, 4, 2); + cubes[62] = new Cube(30, 132, 90, 10, 350, 5); + cubes[63] = new Cube(22, 112, 100, 0, 20, 0, false, 4, 0); + cubes[64] = new Cube(35, 70, 95, 15, 345, 20); + cubes[65] = new Cube(38, 112, 98, 25, 0, 0, false, 4, 3); + cubes[66] = new Cube(70, 164, 100, 0, 0, 22); + cubes[68] = new Cube(29, 94, 105, 15, 20, 10, false, 4, 0); + cubes[69] = new Cube(30, 77, 100, 15, 345, 20, false, 2, 1); + cubes[70] = new Cube(38, 96, 95, 30, 0, 355); + //cubes[71]= new Cube(38,96,95,30,0,355); + cubes[72] = new Cube(44, 20, 100, 0, 0, 345); + cubes[73] = new Cube(28, 24, 100, 0, 0, 13, true, 5, 1); + cubes[74] = new Cube(8, 38, 100, 10, 0, 0, true, 5, 1); + cubes[75] = new Cube(20, 58, 100, 0, 0, 355, false, 2, 3); + cubes[76] = new Cube(22, 32, 120, 15, 327, 345, false, 4, 0); + cubes[77] = new Cube(50, 132, 80, 0, 0, 0, false, 0, 2); + cubes[78] = new Cube(20, 140, 80, 0, 0, 0, false, 0, 3); + return cubes; + } +} + diff --git a/_Overlay.pde b/_Overlay.pde index 5bd90d3..c08e185 100644 --- a/_Overlay.pde +++ b/_Overlay.pde @@ -1,4 +1,13 @@ /** + * DOUBLE BLACK DIAMOND DOUBLE BLACK DIAMOND + * + * //\\ //\\ //\\ //\\ + * ///\\\ ///\\\ ///\\\ ///\\\ + * \\\/// \\\/// \\\/// \\\/// + * \\// \\// \\// \\// + * + * EXPERTS ONLY!! EXPERTS ONLY!! + * * Overlay UI that indicates pattern control, etc. This will be moved * into the Processing library once it is stabilized and need not be * regularly modified. diff --git a/code/GLucose.jar b/code/GLucose.jar index d39d6d4e1e9fe1d95e84592bf6b6b69cef412ef2..321f2a024daf58afa90f76d126ba1faf02ae471b 100644 GIT binary patch delta 4908 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 Hep~+ooXCEV -- 2.34.1