bool zoneManager::getIsRuleMet(ofPtr<zone> z, zoneRule r) { if(r.ruleType == "MIN_OCCUPANTS") { return(z->getCaptureNodes().size() >= r.gtOccupants); } else if(r.ruleType == "MAX_OCCUPANTS") { if(z->getCaptureNodes().size() > 0 && z->getCaptureNodes().size() <= r.ltOccupants)return true; } else if(r.ruleType == "RANGE_OCCUPANTS") { if(z->getCaptureNodes().size() >= r.gtOccupants && z->getCaptureNodes().size() <= r.ltOccupants)return true; } else { return false; } return false; }
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"]); } }