From 40e153300f60ef1f093f00b313d6990118fc1ea1 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 12 Mar 2023 04:10:46 -0500 Subject: [PATCH] prepare to add asset directories --- src/engine/engine.cpp | 43 +++++++++++++++++++++++++++++++++++++++++++ src/engine/engine.h | 3 +++ src/engine/song.h | 14 ++++++++++++++ 3 files changed, 60 insertions(+) diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp index 2dcd8c9b..04469b63 100644 --- a/src/engine/engine.cpp +++ b/src/engine/engine.cpp @@ -1567,6 +1567,49 @@ void DivEngine::changeSong(size_t songIndex) { prevRow=0; } +void DivEngine::checkAssetDir(std::vector& dir, size_t entries) { + bool* inAssetDir=new bool[entries]; + memset(inAssetDir,0,entries*sizeof(bool)); + + for (DivAssetDir& i: dir) { + for (size_t j=0; j=(int)entries) { + i.entries.erase(i.entries.begin()+j); + j--; + continue; + } + + // mark entry as present + inAssetDir[j]=true; + } + } + + // get unsorted directory + DivAssetDir* unsortedDir=NULL; + for (DivAssetDir& i: dir) { + if (i.name=="Unsorted") { + unsortedDir=&i; + break; + } + } + + // create unsorted directory if it doesn't exist + if (unsortedDir==NULL) { + dir.push_back(DivAssetDir("Unsorted")); + unsortedDir=&(*dir.rbegin()); + } + + // add missing items to unsorted directory + for (size_t i=0; ientries.push_back(i); + } + } + + delete[] inAssetDir; +} + void DivEngine::swapChannelsP(int src, int dest) { if (src<0 || src>=chans) return; if (dest<0 || dest>=chans) return; diff --git a/src/engine/engine.h b/src/engine/engine.h index 0c57e2d8..f1e5e91f 100644 --- a/src/engine/engine.h +++ b/src/engine/engine.h @@ -490,6 +490,9 @@ class DivEngine { // change song (UNSAFE) void changeSong(size_t songIndex); + // check whether an asset directory is complete + void checkAssetDir(std::vector& dir, size_t entries); + public: DivSong song; DivOrders* curOrders; diff --git a/src/engine/song.h b/src/engine/song.h index cb838f24..8b6da13b 100644 --- a/src/engine/song.h +++ b/src/engine/song.h @@ -181,6 +181,16 @@ struct DivSubSong { } }; +struct DivAssetDir { + String name; + std::vector entries; + + DivAssetDir(): + name("New Directory") {} + DivAssetDir(String n): + name(n) {} +}; + struct DivSong { // version number used for saving the song. // Furnace will save using the latest possible version, @@ -351,6 +361,10 @@ struct DivSong { std::vector patchbay; std::vector grooves; + std::vector insDir; + std::vector waveDir; + std::vector sampleDir; + DivInstrument nullIns, nullInsOPLL, nullInsOPL, nullInsOPLDrums, nullInsQSound; DivWavetable nullWave; DivSample nullSample;