rt300@6: // rt300@6: // ExplorePresetManager.mm rt300@6: // riftathon rt300@6: // rt300@6: // Created by Robert Tubb on 16/10/2014. rt300@6: // rt300@6: // rt300@6: rt300@6: #include "ExplorePresetManager.h" rt300@6: ExplorePresetManager expPresetManager; rt300@18: rt300@18: //----------------------------------------------------------------------------- rt300@18: rt300@18: void ExplorePresetManager::onAppLoad(){ rt300@18: // check for already saved stuff rt300@18: startLoadAll(); rt300@19: initPresetSlots(); rt300@19: rt300@18: rt300@31: makeNeutralPreset(); rt300@31: rt300@18: } rt300@18: rt300@18: //---------------------------------------------------------------------------- rt300@18: void ExplorePresetManager::goToFirstEmptySlot(){ rt300@18: currentPresetSlotIndex = 0; rt300@18: rt300@18: // loop thru slots, find first empty slot rt300@18: } rt300@18: //---------------------------------------------------------------------------- rt300@18: bool ExplorePresetManager::writeValuesToSlot(vector values){ rt300@18: getPresetSlotAtIndex(currentPresetSlotIndex)->setValues(values); rt300@18: rt300@18: // now put it into a real preset, so it will be saved to file rt300@18: savePreset(getPresetSlotAtIndex(currentPresetSlotIndex)); rt300@18: rt300@44: if (!getPresetSlotAtIndex(currentPresetSlotIndex)->isFilled){ rt300@44: filledSlots++; rt300@44: } rt300@44: rt300@18: if(filledSlots == MAX_PRESETS){ rt300@18: cout << "FINISHED EXP STAGE!" << endl; rt300@19: currentPresetSlotIndex = 0; rt300@18: return true; rt300@18: } rt300@18: return false; rt300@18: } rt300@18: //-------------------------------------------------------------------------------- rt300@44: void ExplorePresetManager::nextSlot(){ rt300@44: currentPresetSlotIndex++; rt300@44: if (currentPresetSlotIndex >= thePresetSlots.size()){ rt300@44: currentPresetSlotIndex = 0; rt300@44: } rt300@44: } rt300@44: rt300@44: //-------------------------------------------------------------------------------- rt300@19: PresetSlot* ExplorePresetManager::getCurrentPresetSlot(){ rt300@18: rt300@18: return getPresetSlotAtIndex(currentPresetSlotIndex); rt300@18: } rt300@18: //---------------------------------------------------------------------------- rt300@18: rt300@18: PresetSlot* ExplorePresetManager::getPresetSlotAtIndex(int index){ rt300@18: rt300@18: if (index >= thePresetSlots.size()){ rt300@18: cout << "ERROR: index " << index << " exceeds number of presetslots " << thePresets.size() << endl; rt300@42: return thePresetSlots.back(); rt300@18: return NULL; rt300@18: }else{ rt300@18: return thePresetSlots[index]; rt300@18: rt300@18: } rt300@18: }; rt300@18: //--------------------------------------------------------------------------- rt300@18: void ExplorePresetManager::initPresetSlots(){ rt300@18: rt300@18: presetSlotFilename = ofFilePath::getAbsolutePath(ofToDataPath("presetSlots.json")); rt300@18: rt300@18: // set up preset slots with names and images rt300@18: Json::Value root; rt300@18: Json::Reader reader; rt300@18: rt300@18: rt300@18: ifstream theFile(presetSlotFilename.c_str()); rt300@18: stringstream fileText; rt300@18: string line; rt300@18: if(!theFile){ rt300@18: cout<<"can't find presetSlot file \n"; rt300@18: return; rt300@18: }else{ rt300@18: rt300@18: while(theFile){ rt300@18: theFile >> line; rt300@18: // cout << line << "\n"; // lots? rt300@18: fileText << line; rt300@18: rt300@18: } rt300@18: rt300@18: theFile.close(); rt300@18: } rt300@18: rt300@18: bool parsingSuccessful = reader.parse( fileText.str(), root ); rt300@18: rt300@18: if ( !parsingSuccessful ) rt300@18: { rt300@18: // report to the user the failure and their locations in the document. rt300@18: std::cout << "Failed to parse preset slot JSON: \n" rt300@18: << reader.getFormattedErrorMessages(); rt300@18: return; rt300@18: } rt300@18: rt300@18: // now put into variables rt300@18: const Json::Value jv = root["presetSlots"]; rt300@18: rt300@18: for ( int index = 0; index < jv.size(); ++index ){ rt300@18: string name = jv[index]["name"].asString(); rt300@18: string imageFileName = jv[index]["imageFileName"].asString(); rt300@18: vector empty; rt300@18: generatePresetSlot(name, imageFileName); rt300@18: } rt300@18: rt300@18: // now look at existing presets to see if slots are filled rt300@18: fillSlotsWithLoadedPresets(); rt300@18: rt300@18: filledSlots = 0; rt300@18: } rt300@18: //----------------------------------------------------------------------------- rt300@32: vector drumPresetNames(){ rt300@32: vector vs; rt300@32: rt300@32: vs.push_back("boom kick"); rt300@32: vs.push_back("punch kick"); rt300@32: vs.push_back("snare"); rt300@32: vs.push_back("clap"); rt300@32: rt300@32: vs.push_back("closed hihat"); rt300@32: vs.push_back("open hihat"); rt300@32: vs.push_back("cowbell"); rt300@32: vs.push_back("bongo"); rt300@32: rt300@32: rt300@32: } rt300@32: //----------------------------------------------------------------------------- rt300@18: rt300@18: void ExplorePresetManager::fillSlotsWithLoadedPresets(){ rt300@18: for(auto pi = thePresets.begin(); pi < thePresets.end(); pi++){ rt300@18: string presetName = (*pi)->name; rt300@18: rt300@18: for(auto psi = thePresetSlots.begin(); psi < thePresetSlots.end(); psi++){ rt300@18: string slotName = (*psi)->name; rt300@18: if (slotName == presetName){ rt300@18: fillSlotFromLoadedPreset(psi, pi); rt300@18: } rt300@18: } rt300@18: } rt300@18: } rt300@18: //----------------------------------------------------------------------------- rt300@18: rt300@19: void ExplorePresetManager::fillSlotFromLoadedPreset(vector::iterator slotToFill, vector::iterator preset){ rt300@19: (*slotToFill)->setValues((*preset)->CCValues); rt300@19: (*slotToFill)->isFilled = true; rt300@19: filledSlots++; rt300@19: rt300@19: if(filledSlots == MAX_PRESETS){ rt300@19: cout << "ALL SLOTS ARE FILLED!" << endl; rt300@19: } rt300@19: rt300@19: rt300@18: } rt300@18: //----------------------------------------------------------------------------- rt300@18: void ExplorePresetManager::generatePresetSlot(const string name, const string imagefn){ rt300@18: vector values = makeVector8(int(rand() % 128),int(rand() % 128),int(rand() % 128),int(rand() % 128),int(rand() % 128),0,0,0); // empty rt300@18: thePresetSlots.push_back(new PresetSlot(values, name, nextID, eventLogger.userName, eventLogger.deviceID, imagefn)); rt300@18: rt300@18: }