X-Git-Url: https://git.piment-noir.org/?p=SugarCubes.git;a=blobdiff_plain;f=_Internals.pde;h=100607a97d4cecee33689184b736ed26efbee064;hp=1b313ccbad5620ec1f16e71e283874ba3b8125d5;hb=dde759833df1c0190d9d3a982a90c0a4f8d76a26;hpb=4749563ed0cc35bde6bdd13eecdfc6e361d5320b diff --git a/_Internals.pde b/_Internals.pde index 1b313cc..100607a 100644 --- a/_Internals.pde +++ b/_Internals.pde @@ -77,23 +77,23 @@ UISpeed uiSpeed; * Engine construction and initialization. */ -LXTransition _transition(GLucose glucose) { - return new DissolveTransition(glucose.lx).setDuration(1000); +LXTransition _transition(LX lx) { + return new DissolveTransition(lx).setDuration(1000); } -LXPattern[] _leftPatterns(GLucose glucose) { - LXPattern[] patterns = patterns(glucose); +LXPattern[] _leftPatterns(LX lx) { + LXPattern[] patterns = patterns(lx); for (LXPattern p : patterns) { - p.setTransition(_transition(glucose)); + p.setTransition(_transition(lx)); } return patterns; } -LXPattern[] _rightPatterns(GLucose glucose) { - LXPattern[] patterns = _leftPatterns(glucose); +LXPattern[] _rightPatterns(LX lx) { + LXPattern[] patterns = _leftPatterns(lx); LXPattern[] rightPatterns = new LXPattern[patterns.length+1]; int i = 0; - rightPatterns[i++] = new BlankPattern(glucose).setTransition(_transition(glucose)); + rightPatterns[i++] = new BlankPattern(lx).setTransition(_transition(lx)); for (LXPattern p : patterns) { rightPatterns[i++] = p; } @@ -137,10 +137,10 @@ void setup() { // Set the patterns LXEngine engine = lx.engine; - engine.setPatterns(patterns = _leftPatterns(glucose)); - engine.addDeck(_rightPatterns(glucose)); + engine.setPatterns(patterns = _leftPatterns(lx)); + engine.addDeck(_rightPatterns(lx)); logTime("Built patterns"); - glucose.setTransitions(transitions(glucose)); + glucose.setTransitions(transitions(lx)); logTime("Built transitions"); glucose.lx.addEffects(_effectsArray(effects = new Effects())); logTime("Built effects"); @@ -166,7 +166,7 @@ void setup() { logTime("Built Grizzly Outputs"); // Mapping tools - mappingTool = new MappingTool(glucose); + mappingTool = new MappingTool(lx); // Build overlay UI UILayer[] layers = new UILayer[] { @@ -208,6 +208,92 @@ void setup() { println("Hit the 'o' key to toggle live output"); } +public SCPattern getPattern() { + return (SCPattern) lx.getPattern(); +} + +/** + * Subclass of LXPattern specific to sugar cubes. These patterns + * get access to the glucose state and geometry, and have some + * little helpers for interacting with the model. + */ +public static abstract class SCPattern extends LXPattern { + + protected SCPattern(LX lx) { + super(lx); + } + + /** + * Reset this pattern to its default state. + */ + public final void reset() { + for (LXParameter parameter : getParameters()) { + parameter.reset(); + } + onReset(); + } + + /** + * Subclasses may override to add additional reset functionality. + */ + protected /*abstract*/ void onReset() {} + + /** + * Invoked by the engine when a grid controller button press occurs + * + * @param row Row index on the gird + * @param col Column index on the grid + * @return True if the event was consumed, false otherwise + */ + public boolean gridPressed(int row, int col) { + return false; + } + + /** + * Invoked by the engine when a grid controller button release occurs + * + * @param row Row index on the gird + * @param col Column index on the grid + * @return True if the event was consumed, false otherwise + */ + public boolean gridReleased(int row, int col) { + return false; + } + + /** + * Invoked by engine when this pattern is focused an a midi note is received. + * + * @param note + * @return True if the pattern has consumed this note, false if the top-level + * may handle it + */ + public boolean noteOn(rwmidi.Note note) { + return false; + } + + /** + * Invoked by engine when this pattern is focused an a midi note off is received. + * + * @param note + * @return True if the pattern has consumed this note, false if the top-level + * may handle it + */ + public boolean noteOff(rwmidi.Note note) { + return false; + } + + /** + * Invoked by engine when this pattern is focused an a controller is received + * + * @param note + * @return True if the pattern has consumed this controller, false if the top-level + * may handle it + */ + public boolean controllerChange(rwmidi.Controller controller) { + return false; + } +} + long simulationNanos = 0; /**