X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=_Overlay.pde;h=a02aa12fc653111915f22c6d93673ec21d91fc41;hb=9b893d9614672cc7ec0e9ed8e9e67388737a3c17;hp=971ffde49ded2f1724da5a162d8097f7d6761e9b;hpb=79ae8245d084fe7901933b22a44b404f9d68b925;p=SugarCubes.git diff --git a/_Overlay.pde b/_Overlay.pde index 971ffde..a02aa12 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 (lx.isAutoTransitionEnabled() && (mouseX > eligibleLeft)) { + patterns[patternIndex + patternScrollPos].toggleEligible(); + } else { + lx.goIndex(patternIndex + patternScrollPos); + } } } } @@ -712,14 +759,14 @@ class DebugUI { final int DEBUG_STATE_WHITE = 1; final int DEBUG_STATE_OFF = 2; - DebugUI(int[][] frontChannels, int[][] rearChannels) { - channelList = new int[frontChannels.length + rearChannels.length][]; + DebugUI(PandaMapping[] pandaMappings) { + int totalChannels = pandaMappings.length * PandaMapping.CHANNELS_PER_BOARD; + channelList = new int[totalChannels][]; int channelIndex = 0; - for (int[] channel : frontChannels) { - channelList[channelIndex++] = channel; - } - for (int[] channel : rearChannels) { - channelList[channelIndex++] = channel; + for (PandaMapping pm : pandaMappings) { + for (int[] channel : pm.channelList) { + channelList[channelIndex++] = channel; + } } for (int i = 0; i < debugState.length; ++i) { for (int j = 0; j < debugState[i].length; ++j) { @@ -728,7 +775,7 @@ class DebugUI { } } - void draw() { + void draw() { noStroke(); int xBase = debugX; int yPos = debugY; @@ -744,7 +791,7 @@ class DebugUI { boolean first = true; int cubeNum = 0; for (int cube : channel) { - if (cube == 0) { + if (cube <= 0) { break; } xPos += debugXSpacing;