void nodeManager::setNode(ofPtr<clamourNode> target, clamourNode &temp) { target->endEvents(); target->endSound(); target->setSoundData(temp.getSoundData()); target->setChanged(CLAMOUR_SOUND); target->setDrawData(temp.getDrawData()); target->setEnvType(temp.getEnvType()); target->setAttSecs(temp.getAttSecs()); target->setDecSecs(temp.getDecSecs()); target->setCanSleep(temp.getCanSleep()); target->setIsRotate(temp.getIsRotate()); target->setShiftAmount(temp.getShiftAmount()); target->setEvents(temp.getEvents()); target->setReactions(temp.getReactions()); target->setSounds(temp.getSounds()); target->setIsCollidable(temp.getIsCollidable()); target->setIsDistributable(temp.getIsDistributable()); target->init(); target->reconcileSlaves(); //now create an edgeTemplate if(target->getDrawData().getName() != "none") { ofPath p; pathFactory::createPath(p, target->getDrawData().getShapeType(), 1.0,1.0, target->getDrawData().getParameter("size").abs_val); target->setEdgeTemplate(p); } target->setIsSleeping(target->getCanSleep()); //wake up the node }
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 } }