rt300@8
|
1 //
|
rt300@8
|
2 // TrainingMessageOrganiser.h
|
rt300@8
|
3 // riftathon
|
rt300@8
|
4 //
|
rt300@8
|
5 // Created by Robert Tubb on 17/10/2014.
|
rt300@8
|
6 //
|
rt300@8
|
7 //
|
rt300@8
|
8
|
rt300@8
|
9 #ifndef __riftathon__TrainingMessageOrganiser__
|
rt300@8
|
10 #define __riftathon__TrainingMessageOrganiser__
|
rt300@8
|
11
|
rt300@8
|
12 #include <iostream>
|
rt300@9
|
13 #include "trainingTestController.h"
|
rt300@9
|
14 #include "MessageOrganiser.h"
|
rt300@10
|
15 #include "SequenceController.h"
|
rt300@10
|
16
|
rt300@10
|
17 extern ExplorePresetManager expPresetManager;
|
rt300@10
|
18
|
rt300@9
|
19 class TrainingMessageOrganiser : public MessageOrganiser {
|
rt300@9
|
20 public:
|
rt300@9
|
21 void init( PDSynthWrapper& cs, PDSynthWrapper& ts){
|
rt300@9
|
22
|
rt300@9
|
23 trainingTestController = new TrainingTestController;
|
rt300@9
|
24
|
rt300@9
|
25 MessageOrganiser::init(cs,ts);
|
rt300@8
|
26
|
rt300@9
|
27 }
|
rt300@8
|
28
|
rt300@9
|
29 void setupDefaultMapping(){
|
rt300@9
|
30 vector<int> mappingIDsForChangeableParams = getMappingIDsFromSynths();
|
rt300@9
|
31
|
rt300@9
|
32 controlPanelType cpt = REVISITABLE;
|
rt300@9
|
33 vector<controllerType> elemList;
|
rt300@9
|
34 for(int i = 0; i < 8; i++){
|
rt300@9
|
35 elemList.push_back(SLIDER);
|
rt300@9
|
36 }
|
rt300@9
|
37
|
rt300@9
|
38 vector<UIElement*> UIElemHandles = panel->generateControls(elemList, cpt);
|
rt300@9
|
39
|
rt300@9
|
40 mapSlidersToParams(UIElemHandles, mappingIDsForChangeableParams);
|
rt300@9
|
41
|
rt300@9
|
42 bottomPanel->show();
|
rt300@9
|
43 }
|
rt300@9
|
44
|
rt300@9
|
45 vector<int> getMappingIDsFromSynths(){
|
rt300@9
|
46 vector<int> index;
|
rt300@9
|
47 for(int i = 0; i < 8; i++){
|
rt300@9
|
48 index.push_back(i);
|
rt300@9
|
49 }
|
rt300@9
|
50 vector<int> mids = candidateSynth.getMappingIDForIndices(index);
|
rt300@9
|
51
|
rt300@9
|
52 return mids;
|
rt300@9
|
53 }
|
rt300@9
|
54
|
rt300@9
|
55 void setupNewTest(){
|
rt300@9
|
56
|
rt300@9
|
57
|
rt300@9
|
58 };
|
rt300@10
|
59
|
rt300@10
|
60 void onNextTick(int tickNumber){
|
rt300@10
|
61 if ( tickNumber % 2){
|
rt300@10
|
62 // load next target preset
|
rt300@10
|
63 int i = sequenceController.getNextPresetIndex();
|
rt300@10
|
64
|
rt300@10
|
65 currentTargetPreset = expPresetManager.getPreset(i);
|
rt300@10
|
66
|
rt300@10
|
67 if (sequencePreview){
|
rt300@10
|
68 // show next target preset
|
rt300@10
|
69
|
rt300@10
|
70 // show image
|
rt300@10
|
71 // show name
|
rt300@10
|
72 // show controllersettings
|
rt300@10
|
73
|
rt300@10
|
74
|
rt300@10
|
75 }else{ // the user is matching it
|
rt300@10
|
76 // show image
|
rt300@10
|
77 // show name
|
rt300@10
|
78
|
rt300@10
|
79 // if guided
|
rt300@10
|
80 // show controller guide
|
rt300@10
|
81 }
|
rt300@10
|
82
|
rt300@10
|
83
|
rt300@10
|
84 }else{ // we're plying the sound
|
rt300@10
|
85
|
rt300@10
|
86 //
|
rt300@10
|
87 if (sequencePreview){
|
rt300@10
|
88 // send target values again
|
rt300@10
|
89 targetSynth.setAllParams(currentTargetPreset->getValues());
|
rt300@10
|
90 targetSynth.trigger();
|
rt300@10
|
91
|
rt300@10
|
92 // flash the interface?
|
rt300@10
|
93 }else{
|
rt300@10
|
94 // else the user should be hitting the play button
|
rt300@10
|
95
|
rt300@10
|
96 }
|
rt300@10
|
97 }
|
rt300@10
|
98 }
|
rt300@10
|
99
|
rt300@9
|
100
|
rt300@9
|
101 protected:
|
rt300@10
|
102
|
rt300@10
|
103 void loadPreset(string pname){
|
rt300@10
|
104
|
rt300@10
|
105 vector<int> values = expPresetManager.recallPreset(pname);
|
rt300@10
|
106 if (values.size()){
|
rt300@10
|
107 candidateSynth.setAllParams(values);
|
rt300@10
|
108 setAllSlidersToValues(values);
|
rt300@10
|
109 }else{
|
rt300@10
|
110 cout << "ERROR, no preset found" << endl;
|
rt300@10
|
111 }
|
rt300@10
|
112 }
|
rt300@10
|
113
|
rt300@10
|
114
|
rt300@10
|
115 void showATargetPresetWithGuide(Preset * p){ // this is when demoing the sequence to the user
|
rt300@10
|
116 // p.show icon
|
rt300@10
|
117 vector<int> values = p->getValues();
|
rt300@10
|
118 if (values.size()){
|
rt300@10
|
119 candidateSynth.setAllParams(values);
|
rt300@10
|
120 setAllSlidersToValues(values);
|
rt300@10
|
121 }else{
|
rt300@10
|
122 cout << "WARNING, preset to show had no values" << endl;
|
rt300@10
|
123 }
|
rt300@10
|
124 }
|
rt300@10
|
125
|
rt300@9
|
126 void mapSlidersToParams(vector<UIElement*> elems, vector<int> mids){
|
rt300@9
|
127
|
rt300@9
|
128 vector<UIElement*>::iterator elit;
|
rt300@9
|
129 vector<int> typeListLog;
|
rt300@9
|
130 int i = 0;
|
rt300@9
|
131 for(elit=elems.begin(); elit<elems.end();elit++){
|
rt300@9
|
132 if ( (*elit)->getType() == SLIDER){
|
rt300@9
|
133 if(i >= mids.size()){
|
rt300@9
|
134
|
rt300@9
|
135 cout << "ERROR ERROR: too many controls for mapping IDs: " << mids.size() << endl;
|
rt300@9
|
136 }
|
rt300@9
|
137
|
rt300@9
|
138 ButtronSlider* theSlider = (ButtronSlider*)(*elit);
|
rt300@9
|
139 mapControlToParam((*elit), mids[i]);
|
rt300@9
|
140 theSlider->setValueAndScale(candidateSynth.getParamValueForID(mids[i]));
|
rt300@9
|
141 cout << "Hint Value " << targetSynth.getParamValueFromName(candidateSynth.getNameForMappingID(mids[i])) << endl;
|
rt300@9
|
142 theSlider->setHintValue(targetSynth.getParamValueFromName(candidateSynth.getNameForMappingID(mids[i])));
|
rt300@9
|
143 i++;
|
rt300@9
|
144 typeListLog.push_back(int(SLIDER));
|
rt300@9
|
145
|
rt300@9
|
146 }else{
|
rt300@9
|
147 cout << "ERROR ERROR: ui type not handled my mapping function !" << endl;
|
rt300@9
|
148 }
|
rt300@9
|
149 }
|
rt300@9
|
150
|
rt300@9
|
151 eventLogger.logEvent(CONTROL_LIST,typeListLog);
|
rt300@9
|
152 };
|
rt300@9
|
153
|
rt300@9
|
154 void buttonPressCallback(int mappingID, int value){
|
rt300@9
|
155 if(mappingID == VOLUME_CHANGE_ID){
|
rt300@9
|
156 targetSynth.sendVolume(value);
|
rt300@9
|
157 candidateSynth.sendVolume(value);
|
rt300@10
|
158 return;
|
rt300@9
|
159 }
|
rt300@9
|
160
|
rt300@9
|
161 if (mappingID == TRIGGER_CANDIDATE_ID){
|
rt300@9
|
162 triggerCandidateSound();
|
rt300@10
|
163 // compare to target
|
rt300@10
|
164 return;
|
rt300@10
|
165 }
|
rt300@10
|
166 if(mappingID == SAVE_PRESET_HIT){
|
rt300@10
|
167 expPresetManager.savePreset("blah", candidateSynth.getAllParamValues());
|
rt300@10
|
168 return;
|
rt300@10
|
169 }
|
rt300@10
|
170 if(mappingID == RECALL_PRESET_HIT){
|
rt300@10
|
171
|
rt300@10
|
172 loadPreset("blah");
|
rt300@9
|
173 return;
|
rt300@9
|
174 }
|
rt300@9
|
175 }
|
rt300@10
|
176 SequenceController sequenceController;
|
rt300@9
|
177 TrainingTestController* trainingTestController;
|
rt300@10
|
178 bool sequencePreview;
|
rt300@10
|
179 Preset * currentTargetPreset;
|
rt300@8
|
180 };
|
rt300@8
|
181 #endif /* defined(__riftathon__TrainingMessageOrganiser__) */
|