view ExpMessageOrganiser.mm @ 28:953db6518738

leap version more or less there, needs btter results feedback but thats detail. "no movement" bit is stupid cos peopel can move their hand. light flash not work.
author Robert Tubb <rt300@eecs.qmul.ac.uk>
date Thu, 30 Oct 2014 18:35:00 +0000
parents 27cdf475aa4b
children 75202498bee9
line wrap: on
line source
//
//  expMessageOrganiser.cpp
//  riftathon
//
//  Created by Robert Tubb on 21/10/2014.
//
//

#include "ExpMessageOrganiser.h"

void ExpMessageOrganiser::init( PDSynthWrapper& cs, PDSynthWrapper& ts){
    numParamsToUse = TOTAL_NUM_PARAMS;
    MessageOrganiser::init(cs,ts);
    
}
void ExpMessageOrganiser::setup(controlPanelType whichInterfaceAreWeUsing){

    
    setupDefaultMapping(whichInterfaceAreWeUsing);
    expPresetManager.goToFirstEmptySlot();
    showCurrentSlot();
    instructionPanel->setLabel("Find a sound\n that expresses:");
    instructionPanel->show();
    bottomPanel->show();
    controlPanel->show();
    controlPanel->showHint(false);
    controlPanel->showValueIndicators(true);
    
    okToGetMidi = true;
}


vector<int> ExpMessageOrganiser::getMappingIDsFromSynths(){
    vector<int> index;
    for(int i = 0; i < numParamsToUse; i++){
        index.push_back(i);
    }
    vector<int> mids = candidateSynth.getMappingIDForIndices(index);
    
    return mids;
}

void ExpMessageOrganiser::showCurrentSlot(){

    if(expPresetManager.getCurrentPresetSlot() == NULL){
        // hide next button
        return;
    }
    presetIconPanel->setTextAndImage(expPresetManager.getCurrentPresetSlot()->name, expPresetManager.getCurrentPresetSlot()->getImage(),expPresetManager.getCurrentPresetSlot()->isFilled);
    
    controlPanel->setIndicatorTexture(expPresetManager.getCurrentPresetSlot()->getImage());
    
    if(expPresetManager.getCurrentPresetSlot()->isFilled){
        // show this preset on sliders
        loadPreset(expPresetManager.getCurrentPresetSlot()->name);
    }else{
        // show default slidervals
        loadDefaultSound();
        
    }
}

void ExpMessageOrganiser::loadPreset(string pname){
    
    vector<int> values = expPresetManager.getPresetValuesForName(pname);
    if (values.size()){
        candidateSynth.setAllParams(values);
        setAllSlidersToValues(values);
    }else{
        cout << "ERROR, no preset found" << endl;
    }
}
void ExpMessageOrganiser::loadDefaultSound(){
    vector<int> values;
    for(int i = 0; i < TOTAL_NUM_PARAMS; i++){
        values.push_back(0);
    }

    candidateSynth.setAllParams(values);
    setAllSlidersToValues(values);

}


//-----------------------------------------------------------------------------

void ExpMessageOrganiser::buttonPressCallback(int mappingID, int value){
    
    
    if (mappingID == TRIGGER_CANDIDATE_ID){
        triggerCandidateSound();
        
        return;
    }
    if(mappingID == SAVE_PRESET_HIT){
        
        bool finished = expPresetManager.writeValuesToSlot(candidateSynth.getAllParamValues());
        if(finished){
            instructionPanel->setLabel("ALL PRESETS MADE");
            controlPanel->hide();
            
        }else{
            showCurrentSlot();
        }
        
        return;
    }
    
}

void ExpMessageOrganiser::midiFromLeap(int ctl_num, int ctl_val){


    if (!okToGetMidi){
        return;
    }
    vector<int> mids = candidateSynth.getAllMappingIDs();
    if (ctl_num >= mids.size() || ctl_num < 0) return;
    
    candidateSynth.paramChangeCallback(mids[ctl_num], ctl_val);
    
    setUIToParam(ctl_num, ctl_val);
    
    vector<int> evtData;
    evtData.push_back(mids[ctl_num]); // or just index?
    evtData.push_back(ctl_val);
    
    eventLogger.logEvent(CANDIDATE_PARAM_ADJUSTED, evtData);
    
}