annotate TrainingMessageOrganiser.mm @ 52:89944ab3e129 tip

fix oF linker errors ios8
author Robert Tubb <rt300@eecs.qmul.ac.uk>
date Tue, 03 Feb 2015 13:18:23 +0000
parents d0f6c5293d6a
children
rev   line source
rt300@8 1 //
rt300@8 2 // TrainingMessageOrganiser.mm
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 #include "TrainingMessageOrganiser.h"
rt300@21 10
rt300@45 11 void TrainingMessageOrganiser::init( PDSynthWrapper& cs, PDSynthWrapper& ts, bool soundOnlyMode, controlPanelType whichInterfaceAreWeUsing, bool demoMode ){
rt300@21 12
rt300@21 13 MessageOrganiser::init(cs,ts);
rt300@21 14
rt300@21 15 TickListenerFunction callback;
rt300@27 16 callback = boost::bind(&TrainingMessageOrganiser::onNextTickAnim, this, _1);
rt300@21 17 candidateSynth.registerForTicks(callback);
rt300@21 18
rt300@21 19 numParamsToUse = TOTAL_NUM_PARAMS;
rt300@42 20
rt300@49 21 sequenceController = new SequenceController();
rt300@49 22 sequenceController->init(soundOnlyMode,whichInterfaceAreWeUsing, demoMode);
rt300@42 23
rt300@43 24 setup(whichInterfaceAreWeUsing);
rt300@21 25 }
rt300@21 26
rt300@27 27 void TrainingMessageOrganiser::setup(controlPanelType whichInterfaceAreWeUsing){
rt300@27 28
rt300@27 29 setupDefaultMapping(whichInterfaceAreWeUsing);
rt300@27 30
rt300@39 31 candidateSynth.setAllParams(expPresetManager.getNeutralPreset()->getValues());
rt300@36 32
rt300@36 33 doHand(true);
rt300@42 34 doGuides(false,expPresetManager.getNeutralPreset());
rt300@42 35 bottomPanel->showAllElements();
rt300@43 36
rt300@27 37 }
rt300@43 38
rt300@38 39 void TrainingMessageOrganiser::setForgotButton(Buttron* butt){
rt300@38 40 forgotButton = butt;
rt300@38 41 }
rt300@27 42 //----------------------------------------------------------------------------------------
rt300@22 43 void TrainingMessageOrganiser::showMyPanels(){
rt300@22 44 presetIconPanel->show();
rt300@22 45 instructionPanel->show();
rt300@22 46 bottomPanel->show();
rt300@27 47 controlPanel->show();
rt300@37 48 if (panelType == LEAP6DOF){
rt300@37 49 okToGetMidi = true; // allow midi input to thing
rt300@37 50 }else{
rt300@37 51 okToGetMidi = false;
rt300@37 52 }
rt300@22 53 }
rt300@21 54
rt300@21 55 //-----------------------------------------------------------------------
rt300@27 56 void TrainingMessageOrganiser::displayInstructions(string text){
rt300@42 57
rt300@28 58 instructionPanel->setText(text);
rt300@27 59 instructionPanel->show();
rt300@42 60
rt300@21 61 }
rt300@21 62
rt300@21 63 //-----------------------------------------------------------------------
rt300@21 64
rt300@21 65 void TrainingMessageOrganiser::showUserHowTheyDid(){
rt300@21 66 // colour flash
rt300@21 67 // distance ?
rt300@21 68 // score
rt300@21 69
rt300@21 70 }
rt300@21 71
rt300@32 72
rt300@43 73
rt300@21 74 //-----------------------------------------------------------------------------
rt300@21 75
rt300@21 76 void TrainingMessageOrganiser::buttonPressCallback(int mappingID, int value){
rt300@21 77 if(mappingID == VOLUME_CHANGE_ID){
rt300@21 78 targetSynth.sendVolume(value);
rt300@21 79 candidateSynth.sendVolume(value);
rt300@21 80 return;
rt300@21 81 }
rt300@21 82
rt300@29 83 if (mappingID == START_TRAINING_SEQUENCE_ID){
rt300@38 84 // start next run
rt300@38 85 if (candidateSynth.isMetronomeRunning()){
rt300@38 86 // skip to next run?
rt300@38 87 eventLogger.logEvent(RUN_SKIPPED);
rt300@38 88 }else{
rt300@49 89 candidateSynth.setMetroTime(sequenceController->getStartIntervalTime()/4.);
rt300@42 90 candidateSynth.startMetronome();
rt300@47 91 candidateSynth.playDownbeatBlip();
rt300@42 92 bottomPanel->hide();
rt300@42 93
rt300@42 94 vector<int> details;
rt300@42 95 details.push_back(panelType);
rt300@43 96 // TODO sequence length
rt300@42 97
rt300@42 98 eventLogger.logEvent(START_NEW_RUN, details);
rt300@38 99 }
rt300@21 100 return;
rt300@21 101 }
rt300@21 102
rt300@37 103 if(mappingID == TO_MENU_ID){
rt300@37 104 // tell testapp to start again?
rt300@49 105 // candidateSynth.stopMetronome();
rt300@49 106 // controlPanel->hide();
rt300@49 107 // controlPanel->setColor(ofColor::black);
rt300@49 108 // sequenceController->clearAll();
rt300@49 109 // seqNumPanel->hide();
rt300@49 110 // eventLogger.logEvent(RUN_SKIPPED);
rt300@49 111 // eventLogger.saveSessionToFile();
rt300@49 112 reset();
rt300@38 113 }
rt300@37 114
rt300@38 115 if(mappingID == FORGOT_SEQ_ID){
rt300@38 116 //
rt300@38 117 eventLogger.logEvent(FORGOT_SEQ);
rt300@38 118 cout << "FORGOT" << endl;
rt300@37 119 }
rt300@43 120 if(mappingID == SKIP_RUN_ID){
rt300@49 121 sequenceController->skipRun();
rt300@49 122 int r = sequenceController->getCurrentRunNumber();
rt300@43 123 stringstream s;
rt300@49 124 s << ">> " << r+1;
rt300@43 125 skipButton->setLabel(s.str());
rt300@43 126
rt300@43 127
rt300@43 128 }
rt300@37 129
rt300@21 130 }
rt300@21 131 //-----------------------------------------------------------------------------
rt300@27 132
rt300@27 133 //-----------------------------------------------------------------------
rt300@27 134 void TrainingMessageOrganiser::onNextTick(int tickNumber){
rt300@27 135 static int showingCountdown = false;
rt300@42 136
rt300@27 137 downCounter = 4 - tickNumber % 4;
rt300@27 138
rt300@27 139 if (showingCountdown){
rt300@27 140 middlePanel->setText(ofToString(downCounter));
rt300@27 141 }
rt300@27 142
rt300@27 143 // only first beat in bar is active one
rt300@27 144 if ( tickNumber % 4 != 0){
rt300@27 145
rt300@27 146 return;
rt300@27 147 }
rt300@27 148
rt300@27 149 }
rt300@32 150 void TrainingMessageOrganiser::lastOfRun(int which){
rt300@27 151 candidateSynth.stopMetronome();
rt300@32 152 stringstream s;
rt300@32 153
rt300@49 154 s << "FINISHED RUN " << which << " OF " << sequenceController->getTotNumRuns() << endl;
rt300@50 155
rt300@50 156 if ((which % 3) == 0){
rt300@50 157 s << "sequence will be 1 sound long";
rt300@50 158 }
rt300@50 159 if ((which % 3) == 1){
rt300@50 160 s << "sequence will be 2 sounds long";
rt300@50 161 }
rt300@50 162 if ((which % 3) == 2){
rt300@50 163 s << "sequence will be 3 sounds long";
rt300@50 164 }
rt300@27 165 controlPanel->hide();
rt300@36 166 controlPanel->setColor(ofColor::black);
rt300@36 167 middlePanel->setText(s.str());
rt300@27 168 middlePanel->show();
rt300@32 169 //playCandidateButton->setLabel("NEXT");
rt300@44 170 s.str("");
rt300@50 171 s << "skp" << which+1;
rt300@43 172 skipButton->setLabel(s.str());
rt300@43 173
rt300@29 174 bottomPanel->show();
rt300@32 175 seqNumPanel->hide();
rt300@42 176 forgotButton->hide();
rt300@49 177 instructionPanel->setText("");
rt300@33 178 eventLogger.logEvent(FINISHED_RUN);
rt300@34 179 eventLogger.saveSessionToFile();
rt300@43 180 // TODO keep track of how far we are into experiment
rt300@27 181 }
rt300@27 182 void TrainingMessageOrganiser::lastOfAll(){
rt300@27 183 candidateSynth.stopMetronome();
rt300@29 184 cout << "FINISHED BLOCK" << endl;
rt300@27 185 controlPanel->hide();
rt300@36 186 controlPanel->setColor(ofColor::black);
rt300@43 187 middlePanel->setText("CONGRATULATIONS.\n FINISHED BLOCK!");
rt300@27 188 middlePanel->show();
rt300@50 189 //bottomPanel->showOnlyElementNamed("MENU");
rt300@29 190 bottomPanel->show();
rt300@35 191 seqNumPanel->hide();
rt300@42 192 forgotButton->hide();
rt300@50 193 eventLogger.logEvent(FINISHED_RUN);
rt300@34 194 eventLogger.saveSessionToFile();
rt300@27 195 }
rt300@32 196
rt300@42 197 void TrainingMessageOrganiser::logNewStep(AnimStep newStep, vector<int> targetVals){
rt300@32 198
rt300@32 199 vector<int> details;
rt300@32 200 details.push_back(int(newStep.type));
rt300@32 201 details.push_back(newStep.whichInSequence);
rt300@32 202 details.push_back(newStep.showsGuides);
rt300@32 203 details.push_back(newStep.showsIcons);
rt300@32 204 details.push_back(newStep.presetIndex);
rt300@32 205 details.push_back(newStep.tempo);
rt300@42 206 details.insert(details.end(),targetVals.begin(), targetVals.end());
rt300@32 207 eventLogger.logEvent(NEW_STEP, details);
rt300@32 208
rt300@32 209 }
rt300@32 210
rt300@27 211 //-----------------------------------------------------------------------------
rt300@27 212 void TrainingMessageOrganiser::onNextTickAnim(int tickNumber){
rt300@31 213 static AnimStep oldStep;
rt300@35 214 static vector<int> lastPosition = zeros<int>(TOTAL_NUM_PARAMS);
rt300@27 215
rt300@35 216 //cout << "TICK " << tickNumber << endl;
rt300@27 217
rt300@50 218 // HALF METRO
rt300@50 219 bool halfMetro = false;
rt300@50 220
rt300@50 221 if ( halfMetro){
rt300@50 222 downCounter = 2 - tickNumber % 2;
rt300@50 223
rt300@50 224 if ( tickNumber % 2 != 0) {
rt300@50 225 if (tickNumber % 2 == 1){
rt300@50 226 targetSynth.sendAllParams();
rt300@50 227 }
rt300@50 228 return;
rt300@50 229 };
rt300@50 230 }else{
rt300@50 231 downCounter = 4 - tickNumber % 4;
rt300@50 232
rt300@50 233 updateCountdown(downCounter);
rt300@50 234 // only first beat in bar is active one (at the moment)
rt300@50 235 // send next target values 1 step before them play
rt300@50 236 if ( tickNumber % 4 != 0) {
rt300@50 237 if (tickNumber % 4 == 3){
rt300@50 238 targetSynth.sendAllParams();
rt300@50 239 }
rt300@50 240 return;
rt300@50 241 };
rt300@50 242 }
rt300@27 243
rt300@27 244
rt300@31 245 Preset* previousTargetPreset;
rt300@31 246 vector<int> curCandidateSettings = candidateSynth.getAllParamValues();
rt300@31 247 if (oldStep.showsResultsAtEnd){
rt300@42 248 // this if should be in getpreset
rt300@31 249 if(oldStep.presetIndex == -1){
rt300@31 250 previousTargetPreset = expPresetManager.getNeutralPreset();
rt300@31 251 cout << "SHOULDNT SCORE NEUTRAL??" << endl;
rt300@31 252 }else{
rt300@31 253
rt300@31 254 previousTargetPreset = expPresetManager.getPresetAtIndex(oldStep.presetIndex);
rt300@31 255 }
rt300@33 256
rt300@33 257 eventLogger.logEvent(FINISH_POS, curCandidateSettings);
rt300@31 258 TrainingTestResult result = doResults(oldStep,
rt300@31 259 previousTargetPreset,
rt300@31 260 lastPosition,
rt300@31 261 curCandidateSettings);
rt300@31 262
rt300@31 263 flashResult(result);
rt300@31 264 }
rt300@31 265
rt300@49 266 AnimStep newStep = sequenceController->getNextStep(); // ADVANCES COUNTS
rt300@27 267
rt300@42 268
rt300@32 269
rt300@27 270 if(newStep.isLastOfAll){
rt300@49 271 oldStep = newStep;
rt300@27 272 lastOfAll();
rt300@27 273 return;
rt300@27 274 }
rt300@27 275 if(newStep.isLastOfRun){
rt300@49 276 oldStep = newStep;
rt300@32 277 lastOfRun(newStep.runNumber);
rt300@27 278 return;
rt300@27 279 }
rt300@50 280 if(halfMetro){
rt300@50 281 candidateSynth.setMetroTime(newStep.getTimeBetweenTicks()*2);
rt300@50 282 }else{
rt300@50 283 candidateSynth.setMetroTime(newStep.getTimeBetweenTicks());
rt300@50 284 }
rt300@35 285 Preset * currentTargetPreset;
rt300@35 286 if(newStep.presetIndex == -1){
rt300@35 287 currentTargetPreset = expPresetManager.getNeutralPreset();
rt300@37 288
rt300@35 289 }else{
rt300@35 290
rt300@35 291 currentTargetPreset = expPresetManager.getPresetAtIndex(newStep.presetIndex);
rt300@35 292 if (currentTargetPreset == NULL){
rt300@50 293 displayInstructions("No stored preset!\n please restert and choose EXP");
rt300@43 294
rt300@43 295 bottomPanel->show();
rt300@50 296 //bottomPanel->showOnlyElementNamed("MENU");
rt300@35 297 candidateSynth.stopMetronome();
rt300@35 298 return;
rt300@35 299 }
rt300@35 300 }
rt300@27 301
rt300@27 302 switch (newStep.type){
rt300@27 303 case AnimStep::PREVIEW_NEUTRAL_COUNT :
rt300@35 304 previewNeutralCount(newStep,currentTargetPreset);
rt300@27 305 break;
rt300@27 306 case AnimStep::PREVIEW_MOVE :
rt300@35 307 previewMove(newStep,currentTargetPreset);
rt300@27 308 break;
rt300@35 309 case AnimStep::PREVIEW_LAST :
rt300@35 310 previewLast( newStep,currentTargetPreset);
rt300@27 311 break;
rt300@27 312 case AnimStep::MATCHING_NEUTRAL_COUNT :
rt300@35 313 //matchingNeutralCount( newStep,currentTargetPreset);
rt300@27 314 break;
rt300@27 315 case AnimStep::MATCHING_MOVE :
rt300@35 316 matchingMove( newStep,currentTargetPreset);
rt300@27 317 break;
rt300@35 318 case AnimStep::MATCHING_LAST :
rt300@35 319 matchingLast( newStep,currentTargetPreset);
rt300@27 320 break;
rt300@31 321 case AnimStep::GUIDED_MOVE :
rt300@35 322 //guidedMove( newStep);
rt300@31 323 break;
rt300@31 324
rt300@31 325 case AnimStep::GUIDED_HIT :
rt300@35 326 //guidedHit( newStep);
rt300@31 327 break;
rt300@31 328 default:
rt300@31 329 break;
rt300@27 330 }
rt300@42 331 logNewStep(newStep, currentTargetPreset->getValues());
rt300@31 332 oldStep = newStep;
rt300@31 333 lastPosition = curCandidateSettings;
rt300@31 334
rt300@27 335 }
rt300@27 336 //-----------------------------------------------------------------------------
rt300@27 337 void TrainingMessageOrganiser::updateCountdown(int n){
rt300@27 338
rt300@27 339 }
rt300@27 340 //-----------------------------------------------------------------------------
rt300@35 341 void TrainingMessageOrganiser::previewNeutralCount(AnimStep newStep, Preset * currentTargetPreset){
rt300@32 342 okToGetMidi = false;
rt300@37 343 candidateSynth.playDownbeatBlip();
rt300@28 344 middlePanel->hide();
rt300@42 345
rt300@27 346 // your 'hand' is hidden
rt300@27 347 controlPanel->showValueIndicators(false);
rt300@27 348
rt300@27 349
rt300@27 350 // guide is set to neutral values
rt300@27 351 currentTargetPreset = expPresetManager.getNeutralPreset();
rt300@27 352 vector<int> newTargetValues = currentTargetPreset->getValues();
rt300@35 353 controlPanel->setValues(newTargetValues);
rt300@27 354 presetIconPanel->setTextAndImage(currentTargetPreset->name, currentTargetPreset->getImage(), false);
rt300@27 355 presetIconPanel->show();
rt300@42 356
rt300@27 357 controlPanel->setAndShowHint(newTargetValues, currentTargetPreset->getImage());
rt300@36 358 doHand(false);
rt300@36 359 controlPanel->show();
rt300@27 360
rt300@27 361 targetSynth.setAllParams(newTargetValues);
rt300@36 362 //candidateSynth.setAllParams(newTargetValues);
rt300@27 363
rt300@50 364 displayInstructions("Prepare for next \n sequence preview");
rt300@32 365 seqNumPanel->hide();
rt300@49 366
rt300@36 367 controlPanel->setColor(ofColor::black);
rt300@27 368 }
rt300@27 369 //-----------------------------------------------------------------------------
rt300@35 370 void TrainingMessageOrganiser::previewMove(AnimStep newStep, Preset * currentTargetPreset){
rt300@42 371
rt300@35 372 targetSynth.trigger(); // PLAYS LAST TARGET
rt300@42 373
rt300@42 374
rt300@27 375 vector<int> newTargetValues = currentTargetPreset->getValues();
rt300@42 376
rt300@31 377 targetSynth.setAllParamsWithoutSend(newTargetValues);
rt300@27 378
rt300@35 379 doGuides(newStep.showsGuides, currentTargetPreset);
rt300@42 380
rt300@35 381 doHand(false, newStep.showsGuides, newStep.getTimeBetweenTicks()*4, newTargetValues);
rt300@32 382
rt300@35 383 doIcons(newStep.showsIcons, currentTargetPreset);
rt300@42 384
rt300@42 385
rt300@27 386 controlPanel->show();
rt300@42 387
rt300@35 388 displayInstructions("PREVIEW");
rt300@48 389 if(newStep.showsGuides){
rt300@48 390 showSeqNum(newStep.whichInSequence);
rt300@48 391 }else{
rt300@48 392 showSeqNum(-1);
rt300@48 393 }
rt300@36 394
rt300@36 395 controlPanel->setColor(ofColor::black);
rt300@39 396 bottomPanel->hide();
rt300@38 397 forgotButton->hide();
rt300@38 398 forgotButton->turnOff();
rt300@27 399 }
rt300@35 400
rt300@35 401
rt300@27 402 //-----------------------------------------------------------------------------
rt300@32 403 // lest setep of preview seq - plays moves back to neutral pos?
rt300@35 404 void TrainingMessageOrganiser::previewLast(AnimStep newStep, Preset * currentTargetPreset){
rt300@35 405 targetSynth.trigger();
rt300@42 406
rt300@35 407 // wrong?
rt300@35 408 targetSynth.setAllParamsWithoutSend(currentTargetPreset->getValues());
rt300@27 409
rt300@35 410 // your hand shows, we dont bother animating back to neutral!?
rt300@35 411 doHand(true);
rt300@42 412
rt300@35 413 doIcons(newStep.showsIcons,currentTargetPreset);
rt300@27 414
rt300@35 415 doGuides(newStep.showsGuides, currentTargetPreset);
rt300@42 416
rt300@35 417 showSeqNum(newStep.whichInSequence);
rt300@43 418 displayInstructions("PREVIEW FINISHED");
rt300@39 419 // set candidate and sliders to neutral
rt300@39 420 candidateSynth.setAllParams(expPresetManager.getNeutralPreset()->getValues());
rt300@36 421 controlPanel->setColor(ofColor::darkMagenta);
rt300@27 422 }
rt300@31 423
rt300@31 424 //-----------------------------------------------------------------------------
rt300@35 425 void TrainingMessageOrganiser::matchingMove(AnimStep newStep, Preset * currentTargetPreset){
rt300@42 426
rt300@31 427
rt300@28 428 middlePanel->hide();
rt300@42 429
rt300@27 430 vector<int> newTargetValues = currentTargetPreset->getValues();
rt300@33 431 eventLogger.logEvent(NEW_TARGET, newTargetValues);
rt300@35 432 targetSynth.setAllParamsWithoutSend(newTargetValues);
rt300@42 433
rt300@31 434 // if showing guides show the hint hand
rt300@35 435 doGuides(newStep.showsGuides, currentTargetPreset);
rt300@27 436
rt300@35 437 doIcons(newStep.showsIcons, currentTargetPreset);
rt300@27 438
rt300@35 439 doHand(true);
rt300@35 440
rt300@42 441 if (newStep.showsGuides){
rt300@42 442 displayInstructions("MATCH THE GUIDES");
rt300@43 443 // trigger "guide sound"?
rt300@43 444 triggerCandidateSound();
rt300@42 445 }else{
rt300@42 446 displayInstructions("MATCH WITHOUT GUIDES");
rt300@42 447 }
rt300@35 448 showSeqNum(newStep.whichInSequence);
rt300@31 449 // trigger where we're at at the moment
rt300@29 450 triggerCandidateSound();
rt300@42 451
rt300@49 452
rt300@41 453 if (!newStep.showsGuides || !newStep.showsIcons){
rt300@41 454 controlPanel->setColor(ofColor::red);
rt300@41 455 // set sliders to default texture
rt300@41 456 controlPanel->setIndicatorTexture(NULL);
rt300@39 457 forgotButton->show();
rt300@41 458 }else{
rt300@42 459
rt300@41 460 controlPanel->setColor(ofColor::darkMagenta);
rt300@42 461
rt300@42 462
rt300@36 463 }
rt300@27 464 }
rt300@27 465 //-----------------------------------------------------------------------------
rt300@35 466 void TrainingMessageOrganiser::matchingLast(AnimStep newStep, Preset * currentTargetPreset){
rt300@35 467 // why is this different from match it?
rt300@35 468
rt300@27 469 vector<int> newTargetValues = currentTargetPreset->getValues();
rt300@33 470 eventLogger.logEvent(NEW_TARGET, newTargetValues);
rt300@35 471 targetSynth.setAllParamsWithoutSend(newTargetValues);
rt300@27 472
rt300@35 473 doGuides(newStep.showsGuides, currentTargetPreset);
rt300@27 474
rt300@35 475 doIcons(newStep.showsIcons, currentTargetPreset);
rt300@32 476
rt300@35 477 doHand(true);
rt300@35 478
rt300@37 479 //displayInstructions("MATCHING FINISHED");
rt300@35 480 showSeqNum(newStep.whichInSequence);
rt300@42 481
rt300@33 482 triggerCandidateSound();
rt300@49 483
rt300@41 484 if (!newStep.showsGuides || !newStep.showsIcons){
rt300@41 485 controlPanel->setColor(ofColor::red);
rt300@41 486 // set sliders to default texture
rt300@41 487 controlPanel->setIndicatorTexture(NULL);
rt300@41 488 forgotButton->show();
rt300@36 489 }else{
rt300@41 490
rt300@41 491 controlPanel->setColor(ofColor::darkMagenta);
rt300@41 492
rt300@41 493
rt300@36 494 }
rt300@31 495 }
rt300@31 496 //-----------------------------------------------------------------------------
rt300@31 497
rt300@35 498 TrainingTestResult TrainingMessageOrganiser::doResults(AnimStep step,
rt300@31 499 Preset * targetPreset,
rt300@31 500 vector<int> startingPosition,
rt300@31 501 vector<int> currentPosition){
rt300@34 502 // targetParams, startPosition, answer, timeAllowed
rt300@28 503 TrainingTestResult result =
rt300@34 504
rt300@34 505 trainingScoreManager.getScoreForAnswer(targetPreset->getValues(),
rt300@31 506 startingPosition,
rt300@34 507 currentPosition,
rt300@36 508 step.getTimeAllowed(),
rt300@36 509 step.difficulty,
rt300@36 510 step.whichInSequence,
rt300@36 511 step.presetIndex,
rt300@36 512 step.tempoLevel,
rt300@43 513 step.totalLengthOfSeq);
rt300@28 514
rt300@49 515 sequenceController->saveResultForCurrentStep(result);
rt300@31 516 instructionPanel->setColor(result.colorBand);
rt300@42 517
rt300@42 518
rt300@31 519 displayInstructions(result.displayText);
rt300@28 520
rt300@32 521 showScoreNum(trainingScoreManager.getScore());
rt300@32 522
rt300@31 523 return result;
rt300@27 524 }
rt300@27 525
rt300@31 526 void TrainingMessageOrganiser::flashResult(TrainingTestResult r){
rt300@31 527
rt300@31 528 // stick a colored number over target position
rt300@39 529 controlPanel->flashResultLight(r.colorBand, r.timeAllowed*ofGetFrameRate()/6000.);
rt300@42 530
rt300@31 531
rt300@31 532 }
rt300@35 533
rt300@35 534
rt300@35 535 //------------------------------------------------------------------------------------
rt300@35 536 void TrainingMessageOrganiser::doIcons(bool showIcons, Preset * currentTargetPreset){
rt300@35 537
rt300@35 538 if (showIcons){
rt300@35 539 presetIconPanel->setTextAndImage(currentTargetPreset->name, currentTargetPreset->getImage(), false);
rt300@35 540 presetIconPanel->show();
rt300@35 541 }else{
rt300@35 542 presetIconPanel->hide();
rt300@35 543 }
rt300@35 544 }
rt300@35 545 //------------------------------------------------------------------------------------
rt300@35 546 void TrainingMessageOrganiser::doGuides(bool showGuides, Preset * currentTargetPreset){
rt300@35 547
rt300@35 548 // show icon and guides
rt300@35 549 if (showGuides){ // always show neutral one
rt300@35 550
rt300@35 551 // show where we're going
rt300@35 552 controlPanel->setAndShowHint(currentTargetPreset->getValues(), currentTargetPreset->getImage());
rt300@38 553 if (panelType == LEAP6DOF) distanceSlider->show();
rt300@35 554
rt300@35 555 }else{
rt300@35 556 controlPanel->showHint(false);
rt300@38 557 distanceSlider->hide();
rt300@35 558 }
rt300@41 559 // special case - always show guide for neutral position
rt300@39 560 if(currentTargetPreset->name == "Neutral"){
rt300@39 561 controlPanel->setAndShowHint(currentTargetPreset->getValues(), currentTargetPreset->getImage());
rt300@39 562 }
rt300@35 563
rt300@35 564 }
rt300@35 565 //-----------------------------------------------------------------------------
rt300@35 566 void TrainingMessageOrganiser::doHand(bool showControllableHand, bool showAnimatedHand, float animTime, vector<int> newTargetValues)
rt300@35 567 {
rt300@35 568 // show how to get there
rt300@35 569 if (showAnimatedHand){
rt300@44 570 //if (panelType == LEAP6DOF){
rt300@35 571 controlPanel->animateToNewValues(newTargetValues, animTime);
rt300@35 572 controlPanel->showValueIndicators(true); // for animation
rt300@35 573 controlPanel->setActive(false);
rt300@44 574 //}
rt300@35 575
rt300@35 576 }else if(showControllableHand){
rt300@35 577 controlPanel->showValueIndicators(true); // for animation
rt300@35 578 controlPanel->setActive(true); // allow user control
rt300@37 579 if (panelType == LEAP6DOF){
rt300@37 580 okToGetMidi = true; // allow midi input to thing
rt300@37 581 }else{
rt300@37 582 okToGetMidi = false;
rt300@38 583 setSlidersToCandidate(); // cos hand won't be controlling them
rt300@37 584 }
rt300@35 585
rt300@35 586 }else{
rt300@35 587 controlPanel->showValueIndicators(false); // hand/ slider bars invisible
rt300@35 588 controlPanel->setActive(false); // cant control it
rt300@35 589 }
rt300@35 590
rt300@35 591 }
rt300@48 592 //-----------------------------------------------------------------------------
rt300@48 593
rt300@43 594 void TrainingMessageOrganiser::forgotByMidi(){
rt300@43 595 forgotButton->turnOn();
rt300@43 596 buttonPressCallback(FORGOT_SEQ_ID, 1);
rt300@48 597 }
rt300@48 598 //-----------------------------------------------------------------------------
rt300@48 599
rt300@48 600 void TrainingMessageOrganiser::reset(){
rt300@50 601 // DONT CALL THIS!
rt300@48 602 // tell testapp to start again?
rt300@48 603 candidateSynth.stopMetronome();
rt300@48 604 controlPanel->hide();
rt300@48 605 controlPanel->setColor(ofColor::black);
rt300@49 606 sequenceController->clearAll();
rt300@49 607 trainingScoreManager.reset();
rt300@48 608 seqNumPanel->hide();
rt300@50 609 //eventLogger.saveSessionToFile(); //?
rt300@48 610
rt300@48 611 }
rt300@48 612 //-----------------------------------------------------------------------------