rt300@8: // rt300@8: // SequenceController.h rt300@8: // riftathon rt300@8: // rt300@8: // Created by Robert Tubb on 17/10/2014. rt300@8: // rt300@8: // rt300@8: rt300@8: #ifndef __riftathon__SequenceController__ rt300@8: #define __riftathon__SequenceController__ rt300@8: rt300@8: #include rt300@8: #include "presetManager.h" rt300@8: rt300@10: #define MAX_TARGETS_IN_SEQUENCE 8 rt300@10: #define MIN_TEMPO 80 rt300@10: #define MAX_TEMPO 200 rt300@10: #define NUM_TEMPO_STEPS 8 rt300@10: #define NUM_PRESETS 16 rt300@10: rt300@10: rt300@8: class Sequence{ rt300@8: int tempo; rt300@8: vector presetSequence; rt300@8: rt300@8: rt300@8: }; rt300@8: rt300@10: class SequenceController{ rt300@10: public: rt300@10: SequenceController(){ rt300@10: makeSequences(); rt300@10: }; rt300@10: SequenceController(const vector& presets) rt300@10: : thePresets(presets) rt300@8: rt300@10: { rt300@10: rt300@10: makeSequences(); rt300@10: }; rt300@10: Sequence getNextSequence(); rt300@10: int getNextPresetIndex(){ rt300@10: rt300@10: // if end of sequence return something else so we can do something rt300@10: // if end of tempo ramp return something else rt300@10: rt300@10: }; rt300@10: protected: rt300@10: void makeSequences(){ rt300@10: rt300@10: rt300@10: for(int numInSequence = 1; numInSequence < MAX_TARGETS_IN_SEQUENCE; numInSequence++){ rt300@10: for(int tempoLevel = 0; tempoLevel < NUM_TEMPO_STEPS; tempoLevel++){ rt300@10: rt300@10: vector indexSequence; rt300@10: rt300@10: // repeat the same tests for xtra practice? rt300@10: for(int n=0; n < numInSequence; n++){ rt300@10: int next = getRandomButNot(NUM_PRESETS,indexSequence); rt300@10: indexSequence.push_back(next); rt300@10: rt300@10: cout << next << ","; rt300@10: } rt300@10: cout << endl; rt300@10: } rt300@10: cout << "---" << endl; rt300@10: } rt300@10: }; rt300@8: rt300@10: int getRandomButNot(int max, vector notThese){ rt300@10: rt300@10: bool there = true; rt300@10: uint randomInt = rand() % max; rt300@10: rt300@10: if (notThese.size()){ rt300@10: while(there){ rt300@10: randomInt = rand() % max; rt300@10: vector::iterator result = std::find(notThese.begin(), notThese.end(), randomInt); rt300@10: there = (result != notThese.end()); rt300@10: } rt300@10: } rt300@10: return randomInt; rt300@10: rt300@10: }; rt300@8: rt300@8: rt300@8: private: rt300@10: const vector thePresets; rt300@8: vector theSequences; rt300@8: }; rt300@8: rt300@8: #endif /* defined(__riftathon__SequenceController__) */