mirror of
https://github.com/tildearrow/furnace.git
synced 2024-11-23 21:15:11 +00:00
GUI: improvements to OPL ins edit
This commit is contained in:
parent
7711069a66
commit
ad19a69f27
1 changed files with 40 additions and 6 deletions
|
@ -84,6 +84,10 @@ const char* opllInsNames[17]={
|
||||||
"Drums"
|
"Drums"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const char* oplWaveforms[8]={
|
||||||
|
"Sine", "Half Sine", "Absolute Sine", "Quarter Sine", "Squished Sine", "Squished AbsSine", "Square", "Derived Square"
|
||||||
|
};
|
||||||
|
|
||||||
enum FMParams {
|
enum FMParams {
|
||||||
FM_ALG=0,
|
FM_ALG=0,
|
||||||
FM_FB=1,
|
FM_FB=1,
|
||||||
|
@ -819,13 +823,19 @@ void FurnaceGUI::drawInsEdit() {
|
||||||
break;
|
break;
|
||||||
case DIV_INS_OPL: {
|
case DIV_INS_OPL: {
|
||||||
bool fourOp=(ins->fm.ops==4);
|
bool fourOp=(ins->fm.ops==4);
|
||||||
|
bool drums=ins->fm.opllPreset==16;
|
||||||
|
int algMax=fourOp?3:1;
|
||||||
ImGui::TableNextColumn();
|
ImGui::TableNextColumn();
|
||||||
|
ins->fm.alg&=algMax;
|
||||||
P(ImGui::SliderScalar(FM_NAME(FM_FB),ImGuiDataType_U8,&ins->fm.fb,&_ZERO,&_SEVEN)); rightClickable
|
P(ImGui::SliderScalar(FM_NAME(FM_FB),ImGuiDataType_U8,&ins->fm.fb,&_ZERO,&_SEVEN)); rightClickable
|
||||||
if (ImGui::Checkbox("4-op",&fourOp)) { PARAMETER
|
if (ImGui::Checkbox("4-op",&fourOp)) { PARAMETER
|
||||||
ins->fm.ops=fourOp?4:2;
|
ins->fm.ops=fourOp?4:2;
|
||||||
}
|
}
|
||||||
ImGui::TableNextColumn();
|
ImGui::TableNextColumn();
|
||||||
P(ImGui::SliderScalar(FM_NAME(FM_ALG),ImGuiDataType_U8,&ins->fm.alg,&_ZERO,&_SEVEN)); rightClickable
|
P(ImGui::SliderScalar(FM_NAME(FM_ALG),ImGuiDataType_U8,&ins->fm.alg,&_ZERO,&algMax)); rightClickable
|
||||||
|
if (ImGui::Checkbox("Drums",&drums)) { PARAMETER
|
||||||
|
ins->fm.opllPreset=drums?16:0;
|
||||||
|
}
|
||||||
ImGui::TableNextColumn();
|
ImGui::TableNextColumn();
|
||||||
drawAlgorithm(ins->fm.alg&1,FM_ALGS_2OP_OPL,ImVec2(ImGui::GetContentRegionAvail().x,48.0*dpiScale));
|
drawAlgorithm(ins->fm.alg&1,FM_ALGS_2OP_OPL,ImVec2(ImGui::GetContentRegionAvail().x,48.0*dpiScale));
|
||||||
break;
|
break;
|
||||||
|
@ -977,13 +987,18 @@ void FurnaceGUI::drawInsEdit() {
|
||||||
maxTl=63;
|
maxTl=63;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (ins->type==DIV_INS_OPL) {
|
||||||
|
maxTl=63;
|
||||||
|
}
|
||||||
int maxArDr=(ins->type==DIV_INS_FM || ins->type==DIV_INS_OPZ)?31:15;
|
int maxArDr=(ins->type==DIV_INS_FM || ins->type==DIV_INS_OPZ)?31:15;
|
||||||
|
|
||||||
bool ssgOn=op.ssgEnv&8;
|
bool ssgOn=op.ssgEnv&8;
|
||||||
bool ksrOn=op.ksr;
|
bool ksrOn=op.ksr;
|
||||||
bool vibOn=op.vib;
|
bool vibOn=op.vib;
|
||||||
|
bool susOn=op.sus; // don't you make fun of this one
|
||||||
unsigned char ssgEnv=op.ssgEnv&7;
|
unsigned char ssgEnv=op.ssgEnv&7;
|
||||||
if (ImGui::Checkbox((ins->type==DIV_INS_OPL || ins->type==DIV_INS_OPLL)?FM_NAME(FM_EGS):"SSG On",&ssgOn)) { PARAMETER
|
if (ins->type!=DIV_INS_OPL && ins->type!=DIV_INS_OPZ) {
|
||||||
|
if (ImGui::Checkbox((ins->type==DIV_INS_OPLL)?FM_NAME(FM_EGS):"SSG On",&ssgOn)) { PARAMETER
|
||||||
op.ssgEnv=(op.ssgEnv&7)|(ssgOn<<3);
|
op.ssgEnv=(op.ssgEnv&7)|(ssgOn<<3);
|
||||||
}
|
}
|
||||||
if (ins->type==DIV_INS_FM) {
|
if (ins->type==DIV_INS_FM) {
|
||||||
|
@ -991,6 +1006,13 @@ void FurnaceGUI::drawInsEdit() {
|
||||||
ImGui::SetTooltip("Only for Genesis and Neo Geo systems");
|
ImGui::SetTooltip("Only for Genesis and Neo Geo systems");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ins->type==DIV_INS_OPL) {
|
||||||
|
if (ImGui::Checkbox(FM_NAME(FM_SUS),&susOn)) { PARAMETER
|
||||||
|
op.sus=susOn;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//52.0 controls vert scaling; default 96
|
//52.0 controls vert scaling; default 96
|
||||||
drawFMEnv(op.tl&maxTl,op.ar&maxArDr,op.dr&maxArDr,(ins->type==DIV_INS_OPL || ins->type==DIV_INS_OPLL)?((op.rr&15)*2):op.d2r&31,op.rr&15,op.sl&15,maxTl,maxArDr,ImVec2(ImGui::GetContentRegionAvail().x,52.0*dpiScale));
|
drawFMEnv(op.tl&maxTl,op.ar&maxArDr,op.dr&maxArDr,(ins->type==DIV_INS_OPL || ins->type==DIV_INS_OPLL)?((op.rr&15)*2):op.d2r&31,op.rr&15,op.sl&15,maxTl,maxArDr,ImVec2(ImGui::GetContentRegionAvail().x,52.0*dpiScale));
|
||||||
|
@ -1103,6 +1125,18 @@ void FurnaceGUI::drawInsEdit() {
|
||||||
ImGui::Text("%s",FM_NAME(FM_SSG));
|
ImGui::Text("%s",FM_NAME(FM_SSG));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ins->type==DIV_INS_OPL) {
|
||||||
|
ImGui::TableNextRow();
|
||||||
|
ImGui::TableNextColumn();
|
||||||
|
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
|
||||||
|
P(ImGui::SliderScalar("##WS",ImGuiDataType_U8,&op.ws,&_ZERO,&_SEVEN,oplWaveforms[op.ws&7])); rightClickable
|
||||||
|
if (ImGui::IsItemHovered()) {
|
||||||
|
ImGui::SetTooltip("OPL2/3 only (last 4 waveforms are OPL3 only)");
|
||||||
|
}
|
||||||
|
ImGui::TableNextColumn();
|
||||||
|
ImGui::Text("%s",FM_NAME(FM_WS));
|
||||||
|
}
|
||||||
|
|
||||||
ImGui::EndTable();
|
ImGui::EndTable();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue