chip flags rewrite, part 5 - DO NOT USE

after fixing the GUI the last thing to do is upgrade all the presets to
the new format
but that will be SO boring
This commit is contained in:
tildearrow 2022-09-30 00:26:54 -05:00
parent 48db9a1d0c
commit 468f434b66
12 changed files with 204 additions and 158 deletions

View file

@ -3438,7 +3438,7 @@ bool FurnaceGUI::loop() {
if (ImGui::BeginMenu("configure chip...")) {
for (int i=0; i<e->song.systemLen; i++) {
if (ImGui::TreeNode(fmt::sprintf("%d. %s##_SYSP%d",i+1,getSystemName(e->song.system[i]),i).c_str())) {
drawSysConf(i,e->song.system[i],e->song.systemFlagsOld[i],true);
drawSysConf(i,e->song.system[i],e->song.systemFlags[i],true);
ImGui::TreePop();
}
}

View file

@ -1211,7 +1211,7 @@ class FurnaceGUI {
String macroRelLabel;
String emptyLabel;
String emptyLabel2;
std::vector<int> initialSys;
DivConfig initialSys;
Settings():
mainFontSize(18),
@ -1619,7 +1619,7 @@ class FurnaceGUI {
void drawAlgorithm(unsigned char alg, FurnaceGUIFMAlgs algType, const ImVec2& size);
void drawFMEnv(unsigned char tl, unsigned char ar, unsigned char dr, unsigned char d2r, unsigned char rr, unsigned char sl, unsigned char sus, unsigned char egt, unsigned char algOrGlobalSus, float maxTl, float maxArDr, float maxRr, const ImVec2& size, unsigned short instType);
void drawGBEnv(unsigned char vol, unsigned char len, unsigned char sLen, bool dir, const ImVec2& size);
void drawSysConf(int chan, DivSystem type, unsigned int& flags, bool modifyOnChange);
void drawSysConf(int chan, DivSystem type, DivConfig& flags, bool modifyOnChange);
void kvsConfig(DivInstrument* ins);
// these ones offer ctrl-wheel fine value changes.

View file

@ -1904,7 +1904,7 @@ void FurnaceGUI::drawInsEdit() {
if (e->song.system[i]==DIV_SYSTEM_VRC7) {
isPresent[3]=true;
} else if (e->song.system[i]==DIV_SYSTEM_OPLL || e->song.system[i]==DIV_SYSTEM_OPLL_DRUMS) {
isPresent[(e->song.systemFlagsOld[i]>>4)&3]=true;
isPresent[(e->song.systemFlags[i].getInt("patchSet",0))&3]=true;
}
}
if (!isPresent[0] && !isPresent[1] && !isPresent[2] && !isPresent[3]) {

View file

@ -19,6 +19,7 @@
#include "gui.h"
#include "misc/cpp/imgui_stdlib.h"
#include <fmt/printf.h>
#include <algorithm>
void FurnaceGUI::drawNewSong() {
@ -140,7 +141,16 @@ void FurnaceGUI::drawNewSong() {
}
if (accepted) {
e->createNew(nextDesc,nextDescName);
// TODO: remove after porting all presets to new format
String oldDescFormat;
for (const int* i=nextDesc; *i; i+=4) {
oldDescFormat+=fmt::sprintf("%d ",e->systemToFileFur((DivSystem)i[0]));
oldDescFormat+=fmt::sprintf("%d ",i[1]);
oldDescFormat+=fmt::sprintf("%d ",i[2]);
oldDescFormat+=fmt::sprintf("%d ",i[3]);
}
String oldDesc=e->decodeSysDesc(oldDescFormat.c_str());
e->createNew(oldDesc.c_str(),nextDescName);
undoHist.clear();
redoHist.clear();
curFileName="";

View file

@ -270,10 +270,10 @@ void FurnaceGUI::drawSettings() {
if (ImGui::Button("Current system")) {
settings.initialSys.clear();
for (int i=0; i<e->song.systemLen; i++) {
settings.initialSys.push_back(e->song.system[i]);
settings.initialSys.push_back(e->song.systemVol[i]);
settings.initialSys.push_back(e->song.systemPan[i]);
settings.initialSys.push_back(e->song.systemFlagsOld[i]);
settings.initialSys.set(fmt::sprintf("id%d",i),e->getSystemDef(e->song.system[i])->id);
settings.initialSys.set(fmt::sprintf("vol%d",i),(int)e->song.systemVol[i]);
settings.initialSys.set(fmt::sprintf("pan%d",i),(int)e->song.systemPan[i]);
settings.initialSys.set(fmt::sprintf("flags%d",i),e->song.systemFlags[i].toBase64());
}
settings.initialSysName=e->song.systemName;
}
@ -285,19 +285,24 @@ void FurnaceGUI::drawSettings() {
for (totalAvailSys=0; availableSystems[totalAvailSys]; totalAvailSys++);
if (totalAvailSys>0) {
for (int i=0; i<howMany; i++) {
/*
settings.initialSys.push_back(availableSystems[rand()%totalAvailSys]);
settings.initialSys.push_back(64);
settings.initialSys.push_back(0);
settings.initialSys.push_back(0);
*/
}
} else {
/*
settings.initialSys.push_back(DIV_SYSTEM_DUMMY);
settings.initialSys.push_back(64);
settings.initialSys.push_back(0);
settings.initialSys.push_back(0);
*/
}
// randomize system name
std::vector<String> wordPool[6];
/*
for (size_t i=0; i<settings.initialSys.size()/4; i++) {
int wpPos=0;
String sName=e->getSystemName((DivSystem)settings.initialSys[i*4]);
@ -321,18 +326,19 @@ void FurnaceGUI::drawSettings() {
settings.initialSysName+=wordPool[i][rand()%wordPool[i].size()];
settings.initialSysName+=" ";
}
*/
}
ImGui::SameLine();
if (ImGui::Button("Reset to defaults")) {
settings.initialSys.clear();
settings.initialSys.push_back(DIV_SYSTEM_YM2612);
settings.initialSys.push_back(64);
settings.initialSys.push_back(0);
settings.initialSys.push_back(0);
settings.initialSys.push_back(DIV_SYSTEM_SMS);
settings.initialSys.push_back(32);
settings.initialSys.push_back(0);
settings.initialSys.push_back(0);
settings.initialSys.set("id0",e->getSystemDef(DIV_SYSTEM_YM2612)->id);
settings.initialSys.set("vol0",64);
settings.initialSys.set("pan0",0);
settings.initialSys.set("flags0","");
settings.initialSys.set("id1",e->getSystemDef(DIV_SYSTEM_SMS)->id);
settings.initialSys.set("vol1",64);
settings.initialSys.set("pan1",0);
settings.initialSys.set("flags1","");
settings.initialSysName="Sega Genesis/Mega Drive";
}
@ -341,18 +347,22 @@ void FurnaceGUI::drawSettings() {
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
ImGui::InputText("##InitSysName",&settings.initialSysName);
for (size_t i=0; i<settings.initialSys.size(); i+=4) {
bool doRemove=false;
bool doInvert=settings.initialSys[i+1]&128;
signed char vol=settings.initialSys[i+1]&127;
for (size_t i=0; settings.initialSys.getInt(fmt::sprintf("id%d",i),0); i++) {
DivSystem sysID=e->systemFromFileFur(settings.initialSys.getInt(fmt::sprintf("id%d",i),0));
signed char sysVol=settings.initialSys.getInt(fmt::sprintf("vol%d",i),0);
signed char sysPan=settings.initialSys.getInt(fmt::sprintf("pan%d",i),0);
//bool doRemove=false;
bool doInvert=sysVol&128;
signed char vol=sysVol&127;
ImGui::PushID(i);
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x-ImGui::CalcTextSize("Invert").x-ImGui::GetFrameHeightWithSpacing()*2.0-ImGui::GetStyle().ItemSpacing.x);
if (ImGui::BeginCombo("##System",getSystemName((DivSystem)settings.initialSys[i]))) {
if (ImGui::BeginCombo("##System",getSystemName(sysID))) {
for (int j=0; availableSystems[j]; j++) {
if (ImGui::Selectable(getSystemName((DivSystem)availableSystems[j]),settings.initialSys[i]==availableSystems[j])) {
settings.initialSys[i]=availableSystems[j];
settings.initialSys[i+3]=0;
if (ImGui::Selectable(getSystemName((DivSystem)availableSystems[j]),sysID==availableSystems[j])) {
sysID=(DivSystem)availableSystems[j];
settings.initialSys.set(fmt::sprintf("flags%d",i),"");
}
}
ImGui::EndCombo();
@ -360,39 +370,42 @@ void FurnaceGUI::drawSettings() {
ImGui::SameLine();
if (ImGui::Checkbox("Invert",&doInvert)) {
settings.initialSys[i+1]^=128;
sysVol^=128;
}
ImGui::SameLine();
ImGui::BeginDisabled(settings.initialSys.size()<=4);
//ImGui::BeginDisabled(settings.initialSys.size()<=4);
if (ImGui::Button(ICON_FA_MINUS "##InitSysRemove")) {
doRemove=true;
//doRemove=true;
}
ImGui::EndDisabled();
//ImGui::EndDisabled();
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x-(50.0f*dpiScale));
if (CWSliderScalar("Volume",ImGuiDataType_S8,&vol,&_ZERO,&_ONE_HUNDRED_TWENTY_SEVEN)) {
settings.initialSys[i+1]=(settings.initialSys[i+1]&128)|vol;
sysVol=(sysVol&128)|vol;
} rightClickable
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x-(50.0f*dpiScale));
CWSliderScalar("Panning",ImGuiDataType_S8,&settings.initialSys[i+2],&_MINUS_ONE_HUNDRED_TWENTY_SEVEN,&_ONE_HUNDRED_TWENTY_SEVEN); rightClickable
CWSliderScalar("Panning",ImGuiDataType_S8,&sysPan,&_MINUS_ONE_HUNDRED_TWENTY_SEVEN,&_ONE_HUNDRED_TWENTY_SEVEN); rightClickable
// oh please MSVC don't cry
if (ImGui::TreeNode("Configure")) {
drawSysConf(-1,(DivSystem)settings.initialSys[i],(unsigned int&)settings.initialSys[i+3],false);
String sysFlagsS=settings.initialSys.getString(fmt::sprintf("flags%d",i),"");
DivConfig sysFlags;
sysFlags.loadFromBase64(sysFlagsS.c_str());
drawSysConf(-1,sysID,sysFlags,false);
ImGui::TreePop();
}
ImGui::PopID();
if (doRemove && settings.initialSys.size()>=8) {
/*if (doRemove && settings.initialSys.size()>=8) {
settings.initialSys.erase(settings.initialSys.begin()+i,settings.initialSys.begin()+i+4);
i-=4;
}
}*/
}
if (ImGui::Button(ICON_FA_PLUS "##InitSysAdd")) {
settings.initialSys.push_back(DIV_SYSTEM_YM2612);
/*settings.initialSys.push_back(DIV_SYSTEM_YM2612);
settings.initialSys.push_back(64);
settings.initialSys.push_back(0);
settings.initialSys.push_back(0);
settings.initialSys.push_back(0);*/
}
ImGui::Separator();
@ -2440,17 +2453,22 @@ void FurnaceGUI::syncSettings() {
clampSetting(settings.midiOutClock,0,1);
clampSetting(settings.midiOutMode,0,2);
settings.initialSys=e->decodeSysDesc(e->getConfString("initialSys",""));
if (settings.initialSys.size()<4) {
String initialSys2=e->getConfString("initialSys2","");
if (initialSys2.empty()) {
initialSys2=e->decodeSysDesc(e->getConfString("initialSys",""));
}
settings.initialSys.clear();
settings.initialSys.loadFromBase64(initialSys2.c_str());
if (settings.initialSys.getInt("id0",0)==0) {
settings.initialSys.clear();
settings.initialSys.push_back(DIV_SYSTEM_YM2612);
settings.initialSys.push_back(64);
settings.initialSys.push_back(0);
settings.initialSys.push_back(0);
settings.initialSys.push_back(DIV_SYSTEM_SMS);
settings.initialSys.push_back(32);
settings.initialSys.push_back(0);
settings.initialSys.push_back(0);
settings.initialSys.set("id0",e->getSystemDef(DIV_SYSTEM_YM2612)->id);
settings.initialSys.set("vol0",64);
settings.initialSys.set("pan0",0);
settings.initialSys.set("flags0","");
settings.initialSys.set("id1",e->getSystemDef(DIV_SYSTEM_SMS)->id);
settings.initialSys.set("vol1",64);
settings.initialSys.set("pan1",0);
settings.initialSys.set("flags1","");
}
// keybinds
@ -2564,7 +2582,7 @@ void FurnaceGUI::commitSettings() {
e->setConf("eventDelay",settings.eventDelay);
e->setConf("moveWindowTitle",settings.moveWindowTitle);
e->setConf("hiddenSystems",settings.hiddenSystems);
e->setConf("initialSys",e->encodeSysDesc(settings.initialSys));
e->setConf("initialSys2",settings.initialSys.toBase64());
e->setConf("initialSysName",settings.initialSysName);
e->setConf("horizontalDataView",settings.horizontalDataView);
e->setConf("noMultiSystem",settings.noMultiSystem);

View file

@ -19,7 +19,7 @@
#include "gui.h"
void FurnaceGUI::drawSysConf(int chan, DivSystem type, unsigned int& flags, bool modifyOnChange) {
void FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool modifyOnChange) {
ImGui::Text("temporarily unavailable!");
return;
/*

View file

@ -70,7 +70,7 @@ void FurnaceGUI::drawSysManager() {
}
ImGui::TableNextColumn();
if (ImGui::TreeNode(fmt::sprintf("%d. %s##_SYSM%d",i+1,getSystemName(e->song.system[i]),i).c_str())) {
drawSysConf(i,e->song.system[i],e->song.systemFlagsOld[i],true);
drawSysConf(i,e->song.system[i],e->song.systemFlags[i],true);
ImGui::TreePop();
}
ImGui::TableNextColumn();