/// \brief Processeur de message OSC
///
///
///
/// \param command const string& La commande OSC
/// \param m const ofxOscMessage& La(es) valeur(s) associée(s) à la commande
/// \return void
///
///
void Core::processOscCommand(const string& command, const ofxOscMessage& m)
{
    if(isMatch(command, "exit"))
    {
        if(validateOscSignature("([TFif])", m))
        {
            if(getArgAsBoolUnchecked(m, 0))
            {
                exit();
            }
        }
    }
    else if(isMatch(command, "debug"))
    {
        if(validateOscSignature("([TFif])", m))
        {
            bDebug = getArgAsBoolUnchecked(m, 0);
        }
    }
    else if(isMatch(command, "switchToScene"))
    {
        if(validateOscSignature("([i])", m))
        {
            sceneManager->goToScene(getArgAsIntUnchecked(m, 0));
        }
    }
    else if(isMatch(command, "blackout"))
    {
        if(validateOscSignature("([TFif])", m))
        {
            bBlackOut = getArgAsBoolUnchecked(m, 0);
            Annabelle.Dessinable(!bBlackOut);
            Florence.Dessinable(!bBlackOut);
        }
    }
}
void Perpendiculaire::processOscCommand(const string& command, const ofxOscMessage& m)
{
    if(isMatch(command, "showSymbole"))
    {
        if(validateOscSignature("([TFif])", m))
        {
            showSymbole = getArgAsBoolUnchecked(m, 0);
        }
    }
    else if(isMatch(command, "positionRelative"))
    {
        if(validateOscSignature("([f])", m))
        {
            positionRelative = getArgAsFloatUnchecked(m, 0);
        }
    }
    else
    {
        Element::processOscCommand(command, m);
    }
}
/// \brief Processeur de message OSC
///
/// Le processeur s'attend à ce que la command soit :
///     'position [i][i]?', 'position [f][f]?' ou 'taille [if]'
///
/// \param command const string& La commande OSC
/// \param m const ofxOscMessage& La(es) valeur(s) associée(s) à la commande
/// \return void
///
///
void Danseur::processOscCommand(const string& command, const ofxOscMessage& m)
{
    if(isMatch(command, "position"))
    {
        if(validateOscSignature("([i][i]?)", m)) /**< Position absolue en pixel sur l'écran */
        {
            if(m.getNumArgs() == 1)
            {
                ofVec2f::set(getArgAsIntUnchecked(m, 0)); /**< Défini la position avec X=Y */
            }
            else
            {
                ofVec2f::set(getArgAsIntUnchecked(m, 0), getArgAsIntUnchecked(m, 1)); /**< Défini la position par les attributs OSC */
            }
        }
        else if(validateOscSignature("([if][if]?)", m)) /**< Position proportionnelle à la taille de l'écran */
        {
            if(m.getNumArgs() == 1)
            {
                ofVec2f::set(getArgAsFloatUnchecked(m, 0)); /**< Défini la position avec X=Y */
            }
            else
            {
                ofVec2f::set(getArgAsFloatUnchecked(m, 0) * ofGetWidth(), getArgAsFloatUnchecked(m, 1) * ofGetHeight()); /**< Défini la position par les attributs OSC */
            }
        }
    }
    else if(isMatch(command, "dessinable"))
    {
        if(validateOscSignature("([TFif])", m))
        {
            Dessinable(getArgAsBoolUnchecked(m, 0));
        }
    }
    else if(isMatch(command, "animable"))
    {
        if(validateOscSignature("([TFif])", m))
        {
            Animable(getArgAsBoolUnchecked(m, 0));
        }
    }
    else if(isMatch(command, "apparait"))
    {
        if(validateOscSignature("([TFif][if]?[if]?)", m))
        {
            if(getArgAsBoolUnchecked(m, 0))
            {
                if(m.getNumArgs() >= 2)
                {
                    if(m.getNumArgs() == 3)
                    {
                        _alpha.setDuration(getArgAsFloatUnchecked(m, 2));
                    }

                    apparait(getArgAsFloatUnchecked(m, 1));
                }
                else
                {
                    apparait();
                }
            }
            else
            {
                if(m.getNumArgs() == 2)
                {
                    _alpha.setDuration(getArgAsFloatUnchecked(m, 1));
                }

                disparait();
            }
        }
    }
    else if(isMatch(command, "disparait"))
    {
        if(validateOscSignature("([TFif])", m))
        {
            if(getArgAsBoolUnchecked(m, 0))
            {
                disparait();
            }
        }
    }
    else if(isMatch(command, "alpha"))
    {
        if(validateOscSignature("([if])", m))
        {
            Alpha(getArgAsFloatUnchecked(m, 0));
        }
    }
    else if(isMatch(command, "duration"))
    {
        if(validateOscSignature("([if])", m))
        {
            _alpha.setDuration(getArgAsFloatUnchecked(m, 0));
        }
    }
    else if(isMatch(command, "offset"))
    {
        if(validateOscSignature("([if])", m))
        {
            offset(getArgAsIntUnchecked(m, 0));
        }
    }
    else if(isMatch(command, "grand"))
    {
        if(validateOscSignature("([TFif])", m))
        {
            bHugeText = getArgAsBoolUnchecked(m, 0);
        }
    }
    else if(isMatch(command, "afficherTemps"))
    {
        if(validateOscSignature("([TFif])", m))
        {
            if(getArgAsBoolUnchecked(m, 0))
            {
                toBeDrawn |= DANSEUR_TIME;
            }
            else
            {
                toBeDrawn &= ~DANSEUR_TIME;
            }
        }
    }
    else if(isMatch(command, "afficherXPos"))
    {
        if(validateOscSignature("([TFif])", m))
        {
            if(getArgAsBoolUnchecked(m, 0))
            {
                toBeDrawn |= DANSEUR_XPOS;
            }
            else
            {
                toBeDrawn &= ~DANSEUR_XPOS;
            }
        }
    }
    else if(isMatch(command, "afficherYPos"))
    {
        if(validateOscSignature("([TFif])", m))
        {
            if(getArgAsBoolUnchecked(m, 0))
            {
                toBeDrawn |= DANSEUR_YPOS;
            }
            else
            {
                toBeDrawn &= ~DANSEUR_YPOS;
            }
        }
    }
    else if(isMatch(command, "afficherAngle"))
    {
        if(validateOscSignature("([TFif])", m))
        {
            if(getArgAsBoolUnchecked(m, 0))
            {
                toBeDrawn |= DANSEUR_ANGLE;
            }
            else
            {
                toBeDrawn &= ~DANSEUR_ANGLE;
            }
        }
    }
    else if(isMatch(command, "afficherConstante"))
    {
        if(validateOscSignature("([TFif])", m))
        {
            if(getArgAsBoolUnchecked(m, 0))
            {
                toBeDrawn |= DANSEUR_CONSTANTE;
            }
            else
            {
                toBeDrawn &= ~DANSEUR_CONSTANTE;
            }
        }
    }
    else if(isMatch(command, "afficherAll"))
    {
        if(validateOscSignature("([TFif])", m))
        {
            if(getArgAsBoolUnchecked(m, 0))
            {
                toBeDrawn = DANSEUR_ALL;
            }
            else
            {
                toBeDrawn = DANSEUR_TIME;
            }
        }
    }
    else if(isMatch(command, "stopCounter"))
    {
        if(validateOscSignature("([TFif])", m))
        {
            bStopCounter = getArgAsBoolUnchecked(m, 0);
        }
    }
    else if(isMatch(command, "vitesseRotation"))
    {
        if(validateOscSignature("([if])", m))
        {
            _coteAngle.setDuration(getArgAsFloatUnchecked(m, 0));
        }
    }
}
//--------------------------------------------------------------
void PlayerAsset::processOscCommand(const string& command, const ofxOscMessage& m) {
    
    if(isMatch(command,"load")) {
        if(validateOscSignature("s", m)) {
            string assetAlias = getArgAsStringUnchecked(m, 0);
            
            if(hasAssetManager()) {
                BaseMediaAsset* asset = getAssetManager()->getAsset(assetAlias);
                
                if(asset != NULL) {
                    if(asset->isPlayable()) {
                        PlayableAsset* playableAsset = dynamic_cast<PlayableAsset*>(asset);
                        if(playableAsset != NULL) {
                            load(playableAsset);
                        } else {
                            ofLogError("PlayerAsset") << assetAlias << " could not be cast to a playable asset.";
                        }
                        
                    } else {
                        ofLogError("PlayerAsset") << assetAlias << " is not a playable asset.";
                    }
                } else {
                    ofLogError("PlayerAsset") << "no asset called " << assetAlias << " exists.";
                }
            }
            
            
            
        }
    } else if(isMatch(command,"start")) {
        player->start();
    } else if(isMatch(command,"stop")) {
        player->stop();
    } else if(isMatch(command,"pause")) {
        if(validateOscSignature("[sfi]", m)) {
            player->setPaused(getArgAsBoolUnchecked(m,0));
        }
    } else if(isMatch(command,"loopmode")) {
        if(validateOscSignature("s", m)) {
            string loopMode = getArgAsStringUnchecked(m,0);
            if(isMatch(loopMode,"NONE")) {
                player->setLoopType(OF_LOOP_NONE);
            } else if(isMatch(loopMode,"LOOP")) {
                player->setLoopType(OF_LOOP_NORMAL);
            } else if(isMatch(loopMode,"PALINDROME")) {
                player->setLoopType(OF_LOOP_PALINDROME);
            } else {
                ofLog(OF_LOG_WARNING, "FrameBufferPlayer: Unknown loop mode: " + loopMode);
            }
        }
    } else if(isMatch(command,"looppoints")) {
        if(validateOscSignature("[fi][fi]", m)) {
            player->setLoopPoints(getArgAsFloatUnchecked(m,0),getArgAsFloatUnchecked(m,1));
        }
    } else if(isMatch(command,"looppointstart")) {
        if(validateOscSignature("[fi]", m)) {
            player->setLoopPointStart(getArgAsFloatUnchecked(m,0));
        }
    } else if(isMatch(command,"looppointend")) {
        if(validateOscSignature("[fi]", m)) {
            player->setLoopPointStart(getArgAsFloatUnchecked(m,0));
        }
    } else if(isMatch(command,"looppointsn")) {
        if(validateOscSignature("[fi][fi]", m)) {
            player->setLoopPointsNorm(getArgAsFloatUnchecked(m,0),getArgAsFloatUnchecked(m,1));
        }
    } else if(isMatch(command,"looppointstartn")) {
        if(validateOscSignature("[fi]", m)) {
            player->setLoopPointStartNorm(getArgAsFloatUnchecked(m,0));
        }
    } else if(isMatch(command,"looppointendn")) {
        if(validateOscSignature("[fi]", m)) {
            player->setLoopPointStartNorm(getArgAsFloatUnchecked(m,0));
        }
    } else if(isMatch(command,"frame")) {
        if(validateOscSignature("[fi]", m)) {
            player->setFrame(getArgAsFloatUnchecked(m,0));
        }
    } else if(isMatch(command,"framen")) {
        if(validateOscSignature("[fi]", m)) {
            player->setFrameNorm(getArgAsFloatUnchecked(m,0));
        }
    } else if(isMatch(command,"speed")) {
        if(validateOscSignature("[fi]", m)) {
            player->setSpeed(getArgAsFloatUnchecked(m,0));
        }
    } else if(isMatch(command,"dump")) {
        dump();
    } else {
        // unknown command
    }
}
//--------------------------------------------------------------
void LayerTransform::processOscCommand(const string& command, const ofxOscMessage& m) {
    
    if(isMatch(command,"position") || isMatch(command,"p")) {
        if(validateOscSignature("([if][if]?[if]?)|([s][if])", m)) {
            if(m.getArgType(0) == OFXOSC_TYPE_STRING) {
                char c = tolower(getArgAsStringUnchecked(m,0)[0]);
                
                if(c == 'x') {
                    setPositionX(getArgAsFloatUnchecked(m,1));
                } else if(c == 'y') {
                    setPositionY(getArgAsFloatUnchecked(m,1));
                } else if(c == 'z') {
                    setPositionZ(getArgAsFloatUnchecked(m,1));
                } else if(c == 'n') {
                    setPositionNormalized(getArgAsBoolUnchecked(m,1));
                } else {
                    ofLogError("LayerTransform") << "invalid arg type: " << c << " " << command << ".";
                }
                
            } else {
                setPositionX(getArgAsFloatUnchecked(m,0));
                if(m.getNumArgs() > 1) {
                    setPositionY(getArgAsFloatUnchecked(m,1));
                    if(m.getNumArgs() > 2) {
                        setPositionZ(getArgAsFloatUnchecked(m,2));
                    }
                }
            }
        }
        
    } else if(isMatch(command,"anchorpoint") || isMatch(command,"a")) {

        if(validateOscSignature("([if][if]?[if]?)|([s][if])", m)) {
            if(m.getArgType(0) == OFXOSC_TYPE_STRING) {
                
                char c = tolower(getArgAsStringUnchecked(m,0)[0]);
                
                if(c == 'x') {
                    setAnchorPointX(getArgAsFloatUnchecked(m,1));
                } else if(c == 'y') {
                    setAnchorPointY(getArgAsFloatUnchecked(m,1));
                } else if(c == 'z') {
                    setAnchorPointZ(getArgAsFloatUnchecked(m,1));
                } else if(c == 'n') {
                    setAnchorPointNormalized(getArgAsBoolUnchecked(m,1));
                } else {
                    ofLog(OF_LOG_ERROR, "LayerTransform: invalid arg type: " + ofToString(c) + " " + command);
                }
                
                
            } else {
                
                setAnchorPointX(getArgAsFloatUnchecked(m,0));
                if(m.getNumArgs() > 1) {
                    setAnchorPointY(getArgAsFloatUnchecked(m,1));
                    if(m.getNumArgs() > 2) {
                        setAnchorPointZ(getArgAsFloatUnchecked(m,2));
                    }
                }
            }
        }
        
    } else if(isMatch(command,"rotate") || isMatch(command,"r")) {
        if(validateOscSignature("([if][if]?[if]?)|([s][if][if]?[if]?)", m)) {
            
            if(m.getArgType(0) == OFXOSC_TYPE_STRING) {
                
                char c = tolower(getArgAsStringUnchecked(m,0)[0]);

                if(c == 'x') {
                    setRotationX(getArgAsFloatUnchecked(m,1));
                } else if(c == 'y') {
                    setRotationY(getArgAsFloatUnchecked(m,1));
                } else if(c == 'z') {
                    setRotationZ(getArgAsFloatUnchecked(m,1));
                } else if(c == 'd') {
                    setRotation(getArgsAsPoint(m, 1));
                } else if(c == 'n') {
                    setRotationNormalized(getArgAsBoolUnchecked(m,1));
                } else {
                    ofLog(OF_LOG_ERROR, "LayerTransform: invalid arg type: " + ofToString(c) + " " + command);
                }
                
                
            } else {
                setRotationX(getArgAsFloatUnchecked(m,0));
                if(m.getNumArgs() > 1) {
                    setRotationY(getArgAsFloatUnchecked(m,1));
                    if(m.getNumArgs() > 2) {
                        setRotationZ(getArgAsFloatUnchecked(m,2));
                    }
                }
            }
        }
    } else if(isMatch(command,"scale") || isMatch(command,"s")) {
        if(validateOscSignature("([f][f]?[f]?)|([s][f])", m)) {
            if(m.getArgType(0) == OFXOSC_TYPE_STRING) {
                
                char  c = tolower(getArgAsStringUnchecked(m,0)[0]);
                float val = getArgAsFloatUnchecked(m,1);
                
                if(c == 'x') {
                    setScaleX(val);
                } else if(c == 'y') {
                    setScaleY(val);
                } else if(c == 'z') {
                    setScaleZ(val);
                } else {
                    ofLog(OF_LOG_ERROR, "LayerTransform: invalid arg type: " + ofToString(c) + " " + command);
                }
                
            } else {
                setScaleX(getArgAsFloatUnchecked(m,0));
                if(m.getNumArgs() > 1) {
                    setScaleY(getArgAsFloatUnchecked(m,1));
                    if(m.getNumArgs() > 2) {
                        setScaleZ(getArgAsFloatUnchecked(m,2));
                    }
                }
            }
        }
        
    } else if(isMatch(command,"opacity") || isMatch(command,"o")) {
        if(validateOscSignature("[if]", m)) {
            setOpacity(getArgAsFloatUnchecked(m,0));
        }
    } else if(isMatch(command,"opacityn") || isMatch(command,"on")) {
        if(validateOscSignature("[if]", m)) {
            setOpacityNormalized(getArgAsFloatUnchecked(m,0));
        }
    } else if(isMatch(command,"size") || isMatch(command, "sz")) {
        if(validateOscSignature("[if][if]", m)) {
            setSize(getArgAsFloatUnchecked(m,0),getArgAsFloatUnchecked(m,1));
        }
    } else if(isMatch(command,"width") || isMatch(command, "w")) {
        if(validateOscSignature("[if]", m)) {
            setWidth(getArgAsFloatUnchecked(m,0));
        }
    } else if(isMatch(command,"height") || isMatch(command, "h")) {
        if(validateOscSignature("[if]", m)) {
            setHeight(getArgAsFloatUnchecked(m,0));
        }
    }
    
}