GUI: add nibble mode to randomize

This commit is contained in:
tildearrow 2022-03-12 03:40:56 -05:00
parent de604bdf01
commit 7971b7323b
2 changed files with 37 additions and 8 deletions

View file

@ -3226,7 +3226,7 @@ void FurnaceGUI::doScale(float top) {
makeUndo(GUI_UNDO_PATTERN_SCALE); makeUndo(GUI_UNDO_PATTERN_SCALE);
} }
void FurnaceGUI::doRandomize(int bottom, int top) { void FurnaceGUI::doRandomize(int bottom, int top, bool mode) {
finishSelection(); finishSelection();
prepareUndo(GUI_UNDO_PATTERN_RANDOMIZE); prepareUndo(GUI_UNDO_PATTERN_RANDOMIZE);
@ -3247,10 +3247,21 @@ void FurnaceGUI::doRandomize(int bottom, int top) {
absoluteTop=e->getMaxVolumeChan(iCoarse); absoluteTop=e->getMaxVolumeChan(iCoarse);
} }
for (int j=selStart.y; j<=selEnd.y; j++) { for (int j=selStart.y; j<=selEnd.y; j++) {
int value=0;
int value2=0;
if (top-bottom<=0) { if (top-bottom<=0) {
pat->data[j][iFine+1]=MIN(absoluteTop,bottom); value=MIN(absoluteTop,bottom);
value2=MIN(absoluteTop,bottom);
} else { } else {
pat->data[j][iFine+1]=MIN(absoluteTop,bottom+(rand()%(top-bottom))); value=MIN(absoluteTop,bottom+(rand()%(top-bottom+1)));
value2=MIN(absoluteTop,bottom+(rand()%(top-bottom+1)));
}
if (mode) {
value&=15;
value2&=15;
pat->data[j][iFine+1]=value|(value2<<4);
} else {
pat->data[j][iFine+1]=value;
} }
} }
} }
@ -4883,17 +4894,34 @@ void FurnaceGUI::editOptions(bool topMenu) {
if (ImGui::BeginMenu("randomize...")) { if (ImGui::BeginMenu("randomize...")) {
if (ImGui::InputInt("Minimum",&randomizeMin,1,1)) { if (ImGui::InputInt("Minimum",&randomizeMin,1,1)) {
if (randomizeMin<0) randomizeMin=0; if (randomizeMin<0) randomizeMin=0;
if (randomizeMin>255) randomizeMin=255; if (randomMode) {
if (randomizeMin>15) randomizeMin=15;
} else {
if (randomizeMin>255) randomizeMin=255;
}
if (randomizeMin>randomizeMax) randomizeMin=randomizeMax; if (randomizeMin>randomizeMax) randomizeMin=randomizeMax;
} }
if (ImGui::InputInt("Maximum",&randomizeMax,1,1)) { if (ImGui::InputInt("Maximum",&randomizeMax,1,1)) {
if (randomizeMax<0) randomizeMax=0; if (randomizeMax<0) randomizeMax=0;
if (randomizeMax<randomizeMin) randomizeMax=randomizeMin; if (randomizeMax<randomizeMin) randomizeMax=randomizeMin;
if (randomizeMax>255) randomizeMax=255; if (randomMode) {
if (randomizeMax>15) randomizeMax=15;
} else {
if (randomizeMax>255) randomizeMax=255;
}
}
if (ImGui::Checkbox("Nibble mode",&randomMode)) {
if (randomMode) {
if (randomizeMin>15) randomizeMin=15;
if (randomizeMax>15) randomizeMax=15;
} else {
if (randomizeMin>255) randomizeMin=255;
if (randomizeMax>255) randomizeMax=255;
}
} }
// TODO: add an option to set effect to specific value? // TODO: add an option to set effect to specific value?
if (ImGui::Button("Randomize")) { if (ImGui::Button("Randomize")) {
doRandomize(randomizeMin,randomizeMax); doRandomize(randomizeMin,randomizeMax,randomMode);
ImGui::CloseCurrentPopup(); ImGui::CloseCurrentPopup();
} }
ImGui::EndMenu(); ImGui::EndMenu();
@ -6717,6 +6745,7 @@ FurnaceGUI::FurnaceGUI():
fadeMax(255), fadeMax(255),
scaleMax(100.0f), scaleMax(100.0f),
fadeMode(false), fadeMode(false),
randomMode(false),
oldOrdersLen(0) { oldOrdersLen(0) {
// octave 1 // octave 1

View file

@ -691,7 +691,7 @@ class FurnaceGUI {
int dummyRows, demandX; int dummyRows, demandX;
int transposeAmount, randomizeMin, randomizeMax, fadeMin, fadeMax; int transposeAmount, randomizeMin, randomizeMax, fadeMin, fadeMax;
float scaleMax; float scaleMax;
bool fadeMode; bool fadeMode, randomMode;
int oldOrdersLen; int oldOrdersLen;
DivOrders oldOrders; DivOrders oldOrders;
@ -766,7 +766,7 @@ class FurnaceGUI {
void doFade(int p0, int p1, bool mode); void doFade(int p0, int p1, bool mode);
void doInvertValues(); void doInvertValues();
void doScale(float top); void doScale(float top);
void doRandomize(int bottom, int top); void doRandomize(int bottom, int top, bool mode);
void doFlip(); void doFlip();
void doCollapse(int divider); void doCollapse(int divider);
void doExpand(int multiplier); void doExpand(int multiplier);