OPM import: Fix reset read procedural flow

This commit is contained in:
James Alan Nguyen 2022-04-23 20:20:29 +10:00
parent f716ac262d
commit 3550ad512a
3 changed files with 7 additions and 5 deletions

View file

@ -829,12 +829,15 @@ void DivEngine::loadOPM(SafeReader& reader, std::vector<DivInstrument*>& ret, St
c1Read = false,
m2Read = false,
c2Read = false;
DivInstrument* newPatch = nullptr;
auto completePatchRead = [&]() {
return patchNameRead && lfoRead && characteristicRead && m1Read && c1Read && m2Read && c2Read;
};
auto resetPatchRead = [&]() {
patchNameRead = lfoRead = characteristicRead = m1Read = c1Read = m2Read = c2Read = false;
newPatch = nullptr;
};
auto readOpmOperator = [](SafeReader& reader, DivInstrumentFM::Operator& op) {
op.ar = atoi(reader.readString_Token().c_str());
@ -850,8 +853,6 @@ void DivEngine::loadOPM(SafeReader& reader, std::vector<DivInstrument*>& ret, St
op.ssgEnv = atoi(reader.readString_Token().c_str());
};
DivInstrument* newPatch = nullptr;
try {
reader.seek(0, SEEK_SET);
while (!reader.isEOF()) {
@ -922,7 +923,7 @@ void DivEngine::loadOPM(SafeReader& reader, std::vector<DivInstrument*>& ret, St
if (completePatchRead()) {
insList.push_back(newPatch);
newPatch = nullptr;
resetPatchRead();
++readCount;
}
}