void nodeManager::implementReaction(reaction & r, ofPtr<clamourNode> t, bool isOn) { if(r.rType == "sleep") { appReactions[t->getName()] = "resetControl"; killNode(t->getName()); } else if(r.rType == "transform") { clamourNode temp = presetStore::nodePresets[r.stringParams["PRESET"]]; //load the node into the reaction for easier variation setNode(t, temp); } else if(r.rType == "scaleNode") { parameter p = t->getDrawData().getParameter("size"); p.abs_val *= r.floatParams["SCALE"]; p.abs_val = min(1.0f, p.abs_val); t->setDrawParameter(p); ofPath pt = t->getEdgeTemplate(); pt.scale(r.floatParams["SCALE"], r.floatParams["SCALE"]); t->setEdgeTemplate(pt); t->updatePath(); } else if(r.rType == "scaleShift") { float shift = t->getShiftAmount() * r.floatParams["SCALE"]; t->setShiftAmount(shift); } else if(r.rType == "scaleAttack") { float att = t->getAttSecs() * r.floatParams["SCALE"]; t->setAttSecs(att); } else if(r.rType == "event") { t->triggerEvent(r.intParams["ENV_INDEX"]); } else if(r.rType == "eventOff") { t->endEvent(r.intParams["ENV_INDEX"]); // not sure this one is necessary } }
void zoneManager::implementReaction(reaction &r, ofPtr<zone> z, bool isReverse) { map<string, ofPtr<clamourNode> > cap = z->getCaptureNodes(); if(r.rType == "closeInZone") { z->setIsClosedIn(!isReverse); } else if(r.rType == "openInZone") { z->setIsClosedIn(isReverse); } else if(r.rType == "closeOutZone") { z->setIsClosedOut(!isReverse); } else if(r.rType == "openOutZone") { z->setIsClosedOut(isReverse); } else if(r.rType == "incrementStage") { appReactions.push_back("incrementStage"); } else if(r.rType == "repeatStage") { appReactions.push_back("repeatStage"); } else if(r.rType == "decrementStage") { appReactions.push_back("decrementStage"); } else if(r.rType == "muteSynths") { appReactions.push_back("muteSynths"); } else if(r.rType == "transformNode") { //potentially could need on/off for data storage map<string, ofPtr<clamourNode> >::iterator c_it = cap.begin(); clamourNode temp; if(!r.tempNode){ temp = presetStore::nodePresets[r.stringParams["PRESET"]]; //load the node into the reaction for easier variation }else{ temp = *r.tempNode; } while(c_it != cap.end()) { nodeManager::setNode(c_it->second, temp); ++ c_it; } } else if(r.rType == "scaleNode") { map<string, ofPtr<clamourNode> >::iterator c_it = cap.begin(); while(c_it != cap.end()) { parameter p = c_it->second->getDrawData().getParameter("size"); p.abs_val *= r.floatParams["SCALE"]; if((p.abs_val < 0.8 && r.floatParams["SCALE"] > 1 )|| ( p.abs_val > 0.02 && r.floatParams["SCALE"] < 1 )){ c_it->second->setDrawParameter(p); ofPath pt = c_it->second->getEdgeTemplate(); pt.scale(r.floatParams["SCALE"], r.floatParams["SCALE"]); c_it->second->setEdgeTemplate(pt); c_it->second->updatePath(); } ++ c_it; } } else if(r.rType == "scaleShift") { map<string, ofPtr<clamourNode> >::iterator c_it = cap.begin(); while(c_it != cap.end()) { float shift = c_it->second->getShiftAmount() * r.floatParams["SCALE"]; c_it->second->setShiftAmount(shift); ++c_it; } } else if(r.rType == "scaleAttack") { map<string, ofPtr<clamourNode> >::iterator c_it = cap.begin(); while(c_it != cap.end()) { float att = c_it->second->getAttSecs(); att *= r.floatParams["SCALE"]; if((att > 0.2 && r.floatParams["SCALE"] < 1 )|| ( att < 1 && r.floatParams["SCALE"] > 1 )){ c_it->second->setAttSecs(att); } ++c_it; } } else if(r.rType == "event") { if(!isReverse){ z->triggerEvent(r.intParams["ENV_INDEX"]); }else{ z->endEvent(r.intParams["ENV_INDEX"]); } } else if(r.rType == "eventOff") { z->endEvent(r.intParams["ENV_INDEX"]); } }