// OBJECT UPDATED ////////////////////////////////////////////////////// // ogni volta che una oggetto viene modificato sulla superficie di gioco void testApp::objectUpdated(ofxTuioObject & tuioObject) { int posX; int session_id = tuioObject.getSessionId(); int fiducial_id = tuioObject.getFiducialId(); int piano; angolo = tuioObject.getAngle() * (-1); // passo anche il (-1) perchè da reactivision, l'angolo è invertito rot_vel = tuioObject.getRotationSpeed() * (-1); // passo anche il (-1) perchè da reactivision, l'angolo è invertito pos.x = wQuadro * tuioObject.getX(); pos.y = hQuadro * tuioObject.getY(); switch(fiducial_id) { case KICK: { posX = tuioObject.getX() * 8; piano=1; matrice.update_table(posX, piano, session_id); for (list<Fid_Round*>::iterator it=rnd_list.begin(); it !=rnd_list.end(); ++it) { if ( (*it)->get_s_id() == session_id) { (*it)->update_interrupt(&pos, ¢ro, angolo, rot_vel); break; } } break; } case SNARE: { posX = tuioObject.getX() * 8; piano=2; matrice.update_table(posX, piano, session_id); for (list<Fid_Sqr*>::iterator it=sqr_list.begin(); it !=sqr_list.end(); ++it) { if ( (*it)->get_s_id() == session_id) { (*it)->update_interrupt(&pos, ¢ro, angolo, rot_vel); break; } } break; } case HIHAT: { posX = tuioObject.getX() * 8; piano=3; matrice.update_table(posX, piano, session_id); for (list<Fid_Sqr*>::iterator it=sqr_list.begin(); it !=sqr_list.end(); ++it) { if ( (*it)->get_s_id() == session_id) { (*it)->update_interrupt(&pos, ¢ro, angolo, rot_vel); break; } } break; } case BPM: { for (list<Fid_Rot*>::iterator it=rot_list.begin(); it !=rot_list.end(); ++it) { if ( (*it)->get_s_id() == session_id) { (*it)->update_interrupt(&pos, ¢ro, angolo, rot_vel); // aggiorno la mamoria dell'angolo per poterlo riutilizzare la porssima creazione di uno stsso tipo d'oggetto memoria_bpm_angle = rot_list.back()->get_lim_angle(); break; } } bpm = ofMap(memoria_bpm_angle, -FIDUCIAL_MER, FIDUCIAL_MER, 30, 260, true); digit.set_bpm(bpm); break; } case BASS: { //posX = tuioObject.getX() * 8; //piano=1; //matrice.update_table(posX, piano, session_id); for (list<Fid_Bass*>::iterator it=bass_list.begin(); it !=bass_list.end(); ++it) { if ( (*it)->get_s_id() == session_id) { (*it)->update_interrupt(&pos, ¢ro, angolo, rot_vel); break; } } break; } case CHORD_0: case CHORD_1: case CHORD_2: case CHORD_3: case CHORD_4: case CHORD_5: { for (list<Fid_Chords*>::iterator it=chords_list.begin(); it !=chords_list.end(); ++it) { if ( (*it)->get_s_id() == session_id) { (*it)->update_interrupt(&pos, ¢ro, angolo, rot_vel); // aggiorno la mamoria dell'angolo per poterlo riutilizzare la porssima creazione di uno stsso tipo d'oggetto //memoria_bpm_angle = rot_list.back()->get_lim_angle(); break; } } //bpm = ofMap(memoria_bpm_angle, -FIDUCIAL_MER, FIDUCIAL_MER, 30, 260, true); //digit.set_bpm(bpm); break; } case PADS: { //posX = tuioObject.getX() * 8; //piano=2; //matrice.update_table(posX, piano, session_id); for (list<Fid_Synth*>::iterator it=sint_list.begin(); it !=sint_list.end(); ++it) { if ( (*it)->get_s_id() == session_id) { (*it)->update_interrupt(&pos, ¢ro, angolo, rot_vel); break; } } break; } default: { cout << "Fiducial ID non valido.\n"; break; } } }
// OBJECT ADDED //////////////////////////////////////////////////////// // ogni volta che una oggetto viene aggiunto sulla superficie di gioco void testApp::objectAdded(ofxTuioObject & tuioObject) { int posX; // variabile di appoggio per identificare la posizione relativa del fiducial dentro alla matrice int session_id = tuioObject.getSessionId(); int fiducial_id = tuioObject.getFiducialId(); int piano; angolo = tuioObject.getAngle() * (-1); // passo anche il (-1) perchè da reactivision, l'angolo è invertito rot_vel = tuioObject.getRotationSpeed() * (-1); // passo anche il (-1) perchè da reactivision, l'angolo è invertito // calcolo la posizione del fiducial per disegnarla graficamente pos.x = wQuadro * tuioObject.getX(); // i valori tuioObject.getX() e tuioObject.getY() variano tra 0 e 1 pos.y = hQuadro * tuioObject.getY(); switch(fiducial_id) { case KICK: { posX = tuioObject.getX() * 8; //in che croma siamo? piano=1; matrice.add_to_table(posX, piano, session_id); rotondo = new Fid_Round(fiducial_id, session_id); rnd_list.push_back(rotondo); rnd_list.back()->setup(&pos, ¢ro, angolo, color_kick); rnd_list.back()->added(); break; } case SNARE: { posX = tuioObject.getX() * 8; piano=2; matrice.add_to_table(posX, piano, session_id); quadrato = new Fid_Sqr(fiducial_id, session_id); sqr_list.push_back(quadrato); sqr_list.back()->setup(&pos, ¢ro, angolo, color_snare); sqr_list.back()->added(); break; } case HIHAT: { posX = tuioObject.getX() * 8; piano=3; matrice.add_to_table(posX, piano, session_id); quadrato = new Fid_Sqr(fiducial_id, session_id); sqr_list.push_back(quadrato); sqr_list.back()->setup(&pos, ¢ro, angolo, color_hihat); sqr_list.back()->added(); break; } case BPM: { rotativo = new Fid_Rot(fiducial_id, session_id); rot_list.push_back(rotativo); rot_list.back()->setup(&pos, ¢ro, angolo, memoria_bpm_angle, color_bpm, color_bpm_corona); rot_list.back()->added(); rot_list.back()->update_interrupt(&pos, ¢ro, angolo, rot_vel); //commentarlo? // aggiorno la mamoria dell'angolo per poterlo riutilizzare la prossima creazione di uno stsso tipo d'oggetto memoria_bpm_angle = rot_list.back()->get_lim_angle(); digit.set_bpm(bpm); break; } case BASS: { core.send_float("bass", 1.0); //posX = tuioObject.getX() * 8; //in che croma siamo? //piano=1; //matrice.add_to_table(posX, piano, session_id); basso = new Fid_Bass(fiducial_id, session_id); bass_list.push_back(basso); bass_list.back()->setup(&pos, ¢ro, angolo, color_bass); bass_list.back()->added(); break; } case PADS: { core.send_float("pads", 1.0); //posX = tuioObject.getX() * 8; //piano=3; //matrice.add_to_table(posX, piano, session_id); pads = new Fid_Synth(fiducial_id, session_id); sint_list.push_back(pads); sint_list.back()->setup(&pos, ¢ro, angolo, color_pads); sint_list.back()->added(); break; } case CHORD_0: { chord_number=0; core.send_float("chords", chord_number); accordo = new Fid_Chords(fiducial_id, session_id); chords_list.push_back(accordo); chords_list.back()->setup(&pos, ¢ro, angolo, color_accordo_0); chords_list.back()->added(); chords_list.back()->update_interrupt(&pos, ¢ro, angolo, rot_vel); //commentarlo? break; } case CHORD_1: { chord_number=1; core.send_float("chords", chord_number); accordo = new Fid_Chords(fiducial_id, session_id); chords_list.push_back(accordo); chords_list.back()->setup(&pos, ¢ro, angolo, color_accordo_1); chords_list.back()->added(); chords_list.back()->update_interrupt(&pos, ¢ro, angolo, rot_vel); break; } case CHORD_2: { chord_number=2; core.send_float("chords", chord_number); accordo = new Fid_Chords(fiducial_id, session_id); chords_list.push_back(accordo); chords_list.back()->setup(&pos, ¢ro, angolo, color_accordo_2); chords_list.back()->added(); chords_list.back()->update_interrupt(&pos, ¢ro, angolo, rot_vel); break; } case CHORD_3: { chord_number=3; core.send_float("chords", chord_number); accordo = new Fid_Chords(fiducial_id, session_id); chords_list.push_back(accordo); chords_list.back()->setup(&pos, ¢ro, angolo, color_accordo_3); chords_list.back()->added(); chords_list.back()->update_interrupt(&pos, ¢ro, angolo, rot_vel); break; } case CHORD_4: { chord_number=4; core.send_float("chords", chord_number); accordo = new Fid_Chords(fiducial_id, session_id); chords_list.push_back(accordo); chords_list.back()->setup(&pos, ¢ro, angolo, color_accordo_4); chords_list.back()->added(); chords_list.back()->update_interrupt(&pos, ¢ro, angolo, rot_vel); break; } case CHORD_5: { chord_number=5; core.send_float("chords", chord_number); accordo = new Fid_Chords(fiducial_id, session_id); chords_list.push_back(accordo); chords_list.back()->setup(&pos, ¢ro, angolo, color_accordo_5); chords_list.back()->added(); chords_list.back()->update_interrupt(&pos, ¢ro, angolo, rot_vel); break; } default: { cout << "Fiducial ID non valido.\n"; break; } } }
// OBJECT REMOVED ////////////////////////////////////////////////////// // ogni volta che una oggetto viene rimosso dalla superficie di gioco void testApp::objectRemoved(ofxTuioObject & tuioObject) { int session_id = tuioObject.getSessionId(); int fiducial_id = tuioObject.getFiducialId(); int piano; switch(fiducial_id) { case KICK: { piano=1; // forse è superfluo passare il "piano" alla funzione "matrice.remove_from_table" matrice.remove_from_table(piano, session_id); list<Fid_Round*>::iterator it; for (it=rnd_list.begin(); it !=rnd_list.end(); ++it) { if ( (*it)->get_s_id() == session_id) { (*it)->removed(); break; } } rnd_list.erase(it); break; } case SNARE: { piano=2; matrice.remove_from_table(piano, session_id); list<Fid_Sqr*>::iterator it; for (it=sqr_list.begin(); it !=sqr_list.end(); ++it) { if ( (*it)->get_s_id() == session_id) { (*it)->removed(); break; } } sqr_list.erase(it); break; } case HIHAT: { piano=3; matrice.remove_from_table(piano, session_id); list<Fid_Sqr*>::iterator it; for (it=sqr_list.begin(); it !=sqr_list.end(); ++it) { if ( (*it)->get_s_id() == session_id) { (*it)->removed(); break; } } sqr_list.erase(it); break; } case BPM: { list<Fid_Rot*>::iterator it; for (it=rot_list.begin(); it !=rot_list.end(); ++it) { if ( (*it)->get_s_id() == session_id) { (*it)->removed(); break; } } rot_list.erase(it); break; } case BASS: { core.send_float("bass", 0.0); //piano=1; // forse è superfluo passare il "piano" alla funzione "matrice.remove_from_table" //matrice.remove_from_table(piano, session_id); list<Fid_Bass*>::iterator it; for (it=bass_list.begin(); it !=bass_list.end(); ++it) { if ( (*it)->get_s_id() == session_id) { (*it)->removed(); break; } } bass_list.erase(it); break; } case PADS: { core.send_float("pads", 0.0); //piano=3; //matrice.remove_from_table(piano, session_id); list<Fid_Synth*>::iterator it; for (it=sint_list.begin(); it !=sint_list.end(); ++it) { if ( (*it)->get_s_id() == session_id) { (*it)->removed(); break; } } sint_list.erase(it); break; } case CHORD_0: case CHORD_1: case CHORD_2: case CHORD_3: case CHORD_4: case CHORD_5: { list<Fid_Chords*>::iterator it; for (it=chords_list.begin(); it !=chords_list.end(); ++it) { if ( (*it)->get_s_id() == session_id) { (*it)->removed(); break; } } chords_list.erase(it); break; } default: { cout << "Fiducial ID non valido.\n"; break; } } }