import ddf.minim.analysis.*;
import processing.opengl.*;
import rwmidi.*;
+import java.lang.reflect.*;
final int VIEWPORT_WIDTH = 900;
final int VIEWPORT_HEIGHT = 700;
final float TRAILER_DEPTH = 97;
final float TRAILER_HEIGHT = 33;
-final int MaxCubeHeight = 7;
-final int NumBackTowers = 9;
+final int MaxCubeHeight = 5;
+final int NumBackTowers = 11;
int targetFramerate = 60;
int startMillis, lastMillis;
GLucose glucose;
HeronLX lx;
LXPattern[] patterns;
+Effects effects;
MappingTool mappingTool;
PandaDriver[] pandaBoards;
+PresetManager presetManager;
MidiEngine midiEngine;
-GridController gridController;
// Display configuration mode
boolean mappingMode = false;
return rightPatterns;
}
+LXEffect[] _effectsArray(Effects effects) {
+ List<LXEffect> effectList = new ArrayList<LXEffect>();
+ for (Field f : effects.getClass().getDeclaredFields()) {
+ try {
+ Object val = f.get(effects);
+ if (val instanceof LXEffect) {
+ effectList.add((LXEffect)val);
+ }
+ } catch (IllegalAccessException iax) {}
+ }
+ return effectList.toArray(new LXEffect[]{});
+}
+
void logTime(String evt) {
int now = millis();
println(evt + ": " + (now - lastMillis) + "ms");
logTime("Built GLucose engine");
// Set the patterns
- Engine engine = lx.engine;
+ LXEngine engine = lx.engine;
engine.setPatterns(patterns = _leftPatterns(glucose));
engine.addDeck(_rightPatterns(glucose));
logTime("Built patterns");
glucose.setTransitions(transitions(glucose));
logTime("Built transitions");
- glucose.lx.addEffects(effects(glucose));
+ glucose.lx.addEffects(_effectsArray(effects = new Effects()));
logTime("Built effects");
+ // Preset manager
+ presetManager = new PresetManager();
+ logTime("Loaded presets");
+
// MIDI devices
midiEngine = new MidiEngine();
logTime("Setup MIDI devices");
// Build overlay UI
debugUI = new DebugUI(pandaMappings);
overlays = new UIContext[] {
- uiPatternA = new UIPatternDeck(lx.engine.getDeck(0), "PATTERN A", 4, 4, 140, 324),
+ uiPatternA = new UIPatternDeck(lx.engine.getDeck(GLucose.LEFT_DECK), "PATTERN A", 4, 4, 140, 324),
new UIBlendMode(4, 332, 140, 86),
new UIEffects(4, 422, 140, 144),
new UITempo(4, 570, 140, 50),
new UISpeed(4, 624, 140, 50),
- new UIPatternDeck(lx.engine.getDeck(1), "PATTERN B", width-144, 4, 140, 324),
+ new UIPatternDeck(lx.engine.getDeck(GLucose.RIGHT_DECK), "PATTERN B", width-144, 4, 140, 324),
uiMidi = new UIMidi(midiEngine, width-144, 332, 140, 158),
new UIOutput(width-144, 494, 140, 106),
simulationColors = sendColors = glucose.getColors();
String displayMode = uiCrossfader.getDisplayMode();
if (displayMode == "A") {
- simulationColors = lx.engine.getDeck(0).getColors();
+ simulationColors = lx.engine.getDeck(GLucose.LEFT_DECK).getColors();
} else if (displayMode == "B") {
- simulationColors = lx.engine.getDeck(1).getColors();
+ simulationColors = lx.engine.getDeck(GLucose.RIGHT_DECK).getColors();
}
if (debugMode) {
debugUI.maskColors(simulationColors);
mappingTool.keyPressed(uiMapping);
}
switch (key) {
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ if (!midiEngine.isQwertyEnabled()) {
+ presetManager.select(midiEngine.getFocusedDeck(), key - '1');
+ }
+ break;
+
+ case '!':
+ if (!midiEngine.isQwertyEnabled()) presetManager.store(midiEngine.getFocusedDeck(), 0);
+ break;
+ case '@':
+ if (!midiEngine.isQwertyEnabled()) presetManager.store(midiEngine.getFocusedDeck(), 1);
+ break;
+ case '#':
+ if (!midiEngine.isQwertyEnabled()) presetManager.store(midiEngine.getFocusedDeck(), 2);
+ break;
+ case '$':
+ if (!midiEngine.isQwertyEnabled()) presetManager.store(midiEngine.getFocusedDeck(), 3);
+ break;
+ case '%':
+ if (!midiEngine.isQwertyEnabled()) presetManager.store(midiEngine.getFocusedDeck(), 4);
+ break;
+ case '^':
+ if (!midiEngine.isQwertyEnabled()) presetManager.store(midiEngine.getFocusedDeck(), 5);
+ break;
+ case '&':
+ if (!midiEngine.isQwertyEnabled()) presetManager.store(midiEngine.getFocusedDeck(), 6);
+ break;
+ case '*':
+ if (!midiEngine.isQwertyEnabled()) presetManager.store(midiEngine.getFocusedDeck(), 7);
+ break;
+
case '-':
case '_':
frameRate(--targetFramerate);
frameRate(++targetFramerate);
break;
case 'b':
- EFF_boom.trigger();
+ effects.boom.trigger();
break;
case 'd':
if (!midiEngine.isQwertyEnabled()) {