+boolean simulationOn = true;
+boolean diagnosticsOn = false;
+LXPattern restoreToPattern = null;
+PImage logo;
+float[] hsb = new float[3];
+
+// Handles to UI objects
+UIPatternDeck uiPatternA;
+UICrossfader uiCrossfader;
+UIMidi uiMidi;
+UIMapping uiMapping;
+UIDebugText uiDebugText;
+UISpeed uiSpeed;
+
+/**
+ * Engine construction and initialization.
+ */
+
+LXTransition _transition(LX lx) {
+ return new DissolveTransition(lx).setDuration(1000);
+}
+
+LXPattern[] _leftPatterns(LX lx) {
+ LXPattern[] patterns = patterns(lx);
+ for (LXPattern p : patterns) {
+ p.setTransition(_transition(lx));
+ }
+ return patterns;
+}
+
+LXPattern[] _rightPatterns(LX lx) {
+ LXPattern[] patterns = _leftPatterns(lx);
+ LXPattern[] rightPatterns = new LXPattern[patterns.length+1];
+ int i = 0;
+ rightPatterns[i++] = new BlankPattern(lx).setTransition(_transition(lx));
+ for (LXPattern p : patterns) {
+ rightPatterns[i++] = p;
+ }
+ 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[]{});
+}