From 6c1a9e5341202166f04b2a123bbb1868b4ec05fc Mon Sep 17 00:00:00 2001 From: Mark Slee Date: Sat, 17 Aug 2013 14:42:45 -0700 Subject: [PATCH] Add a toggle to autorotate patterns every minute --- TestPatterns.pde | 23 ++++++++++++++-------- _Overlay.pde | 51 ++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 64 insertions(+), 10 deletions(-) diff --git a/TestPatterns.pde b/TestPatterns.pde index 38ea229..14572a2 100644 --- a/TestPatterns.pde +++ b/TestPatterns.pde @@ -1,8 +1,15 @@ +abstract class TestPattern extends SCPattern { + public TestPattern(GLucose glucose) { + super(glucose); + setEligible(false); + } +} + /** * Simplest demonstration of using the rotating master hue. * All pixels are full-on the same color. */ -class TestHuePattern extends SCPattern { +class TestHuePattern extends TestPattern { public TestHuePattern(GLucose glucose) { super(glucose); } @@ -19,7 +26,7 @@ class TestHuePattern extends SCPattern { /** * Test of a wave moving across the X axis. */ -class TestXPattern extends SCPattern { +class TestXPattern extends TestPattern { private final SinLFO xPos = new SinLFO(0, model.xMax, 4000); public TestXPattern(GLucose glucose) { super(glucose); @@ -41,7 +48,7 @@ class TestXPattern extends SCPattern { /** * Test of a wave on the Y axis. */ -class TestYPattern extends SCPattern { +class TestYPattern extends TestPattern { private final SinLFO yPos = new SinLFO(0, model.yMax, 4000); public TestYPattern(GLucose glucose) { super(glucose); @@ -59,7 +66,7 @@ class TestYPattern extends SCPattern { /** * Test of a wave on the Z axis. */ -class TestZPattern extends SCPattern { +class TestZPattern extends TestPattern { private final SinLFO zPos = new SinLFO(0, model.zMax, 4000); public TestZPattern(GLucose glucose) { super(glucose); @@ -77,7 +84,7 @@ class TestZPattern extends SCPattern { /** * This shows how to iterate over towers, enumerated in the model. */ -class TestTowerPattern extends SCPattern { +class TestTowerPattern extends TestPattern { private final SawLFO towerIndex = new SawLFO(0, model.towers.size(), 1000*model.towers.size()); public TestTowerPattern(GLucose glucose) { @@ -119,7 +126,7 @@ class TestTowerPattern extends SCPattern { * of sparse, non-uniformly spaced pixels. Mutating the structure would move * things to a space where there are no pixels in 99% of the cases. */ -class TestProjectionPattern extends SCPattern { +class TestProjectionPattern extends TestPattern { private final Projection projection; private final SawLFO angle = new SawLFO(0, TWO_PI, 9000); @@ -161,7 +168,7 @@ class TestProjectionPattern extends SCPattern { } } -class TestCubePattern extends SCPattern { +class TestCubePattern extends TestPattern { private SawLFO index = new SawLFO(0, Cube.POINTS_PER_CUBE, Cube.POINTS_PER_CUBE*60); @@ -185,7 +192,7 @@ class TestCubePattern extends SCPattern { } } -class MappingTool extends SCPattern { +class MappingTool extends TestPattern { private int cubeIndex = 0; private int stripIndex = 0; diff --git a/_Overlay.pde b/_Overlay.pde index 29e2353..3b01715 100644 --- a/_Overlay.pde +++ b/_Overlay.pde @@ -33,6 +33,7 @@ abstract class OverlayUI { protected final int scrollWidth = 14; protected final color lightBlue = #666699; protected final color lightGreen = #669966; + protected final int toggleButtonSize = 10; private PImage logo; @@ -45,6 +46,8 @@ abstract class OverlayUI { protected final int pandaHeight = 13; protected final int pandaTop = height-16; + protected int eligibleLeft; + protected OverlayUI() { leftPos = width - w; leftTextPos = leftPos + 4; @@ -110,6 +113,17 @@ abstract class OverlayUI { return drawObjectList(yPos, title, items, names, stateMethod, sz, 0); } + protected void drawToggleButton(float x, float y, boolean eligible, color textColor) { + noFill(); + stroke(textColor); + rect(x, y, toggleButtonSize, toggleButtonSize); + if (eligible) { + noStroke(); + fill(textColor); + rect(x + 2, y + 2, toggleButtonSize - 4, toggleButtonSize - 4); + } + } + protected int drawObjectList(int yPos, String title, Object[] items, String[] names, Method stateMethod, int scrollLength, int scrollPos) { noStroke(); fill(titleColor); @@ -117,6 +131,7 @@ abstract class OverlayUI { textAlign(LEFT); text(title, leftTextPos, yPos += lineHeight); if (items != null) { + boolean hasScroll = (scrollPos > 0) || (scrollLength < items.length); textFont(itemFont); color textColor; boolean even = true; @@ -143,12 +158,18 @@ abstract class OverlayUI { fill(even ? #666666 : #777777); break; } + noStroke(); rect(leftPos, yPos+6, w, lineHeight); fill(textColor); text(names[i], leftTextPos, yPos += lineHeight); + if (lx.isAutoTransitionEnabled() && items[i] instanceof LXPattern) { + boolean eligible = ((LXPattern)items[i]).isEligible(); + eligibleLeft = leftPos + w - (hasScroll ? scrollWidth : 0) - 15; + drawToggleButton(eligibleLeft, yPos-8, eligible, textColor); + } even = !even; } - if ((scrollPos > 0) || (scrollLength < items.length)) { + if (hasScroll) { int yHere = yPos+6; noStroke(); fill(color(0, 0, 0, 50)); @@ -214,6 +235,9 @@ class ControlUI extends OverlayUI { private int firstEffectY; private int firstEffectKnobY; + private int autoRotateX; + private int autoRotateY; + private final int PATTERN_LIST_LENGTH = 8; private int patternScrollPos = 0; @@ -240,6 +264,11 @@ class ControlUI extends OverlayUI { public void draw() { drawLogoAndBackground(); int yPos = 0; + autoRotateX = leftPos + w - 29; + autoRotateY = yPos + 12; + drawToggleButton(autoRotateX, autoRotateY, lx.isAutoTransitionEnabled(), #999999); + fill(lx.isAutoTransitionEnabled() ? #222222: #999999); + text("A", autoRotateX + 2, autoRotateY + 9); firstPatternY = yPos + lineHeight + 6; yPos = drawObjectList(yPos, "PATTERN", patterns, patternNames, patternStateMethod, PATTERN_LIST_LENGTH, patternScrollPos); yPos += controlSpacing; @@ -396,6 +425,20 @@ class ControlUI extends OverlayUI { return; } + if ((mouseX >= autoRotateX) && + (mouseX < autoRotateX + toggleButtonSize) && + (mouseY >= autoRotateY) && + (mouseY < autoRotateY + toggleButtonSize)) { + if (lx.isAutoTransitionEnabled()) { + lx.disableAutoTransition(); + println("Auto pattern transition disabled"); + } else { + lx.enableAutoTransition(60000); + println("Auto pattern transition enabled"); + } + return; + } + if (mouseY > tempoY) { if (mouseY - tempoY < tempoHeight) { lx.tempo.tap(); @@ -430,7 +473,11 @@ class ControlUI extends OverlayUI { } else { int patternIndex = objectClickIndex(firstPatternY); if (patternIndex < patterns.length) { - lx.goIndex(patternIndex + patternScrollPos); + if (mouseX > eligibleLeft) { + patterns[patternIndex + patternScrollPos].toggleEligible(); + } else { + lx.goIndex(patternIndex + patternScrollPos); + } } } } -- 2.34.1