void BottlesGame :: setup(ofRectangle rect, LaserManager * lm) { BaseGame:: setup(rect, lm); shotsPerGame = 6; name = "Green Bottles"; for (int i = 0; i<6; i++) { bottles.push_back(Bottle()); Bottle & bottle = bottles[i]; bottle.pos.set(ofMap(i,0,5,gameRect.getLeft() + gameRect.getWidth() * 0.2, gameRect.getRight() - gameRect.getWidth() * 0.2), gameRect.getTop() + gameRect.getHeight()*0.4); } }
void AllostaticController::configureAllostatic(yarp::os::ResourceFinder &rf) { //The homeostatic module should be running in parallel, independent from this, so the objective of //this config would be to have a proper list and connect to each port homeo_name = "homeostasis"; string homeo_rpc_name = "/" + homeo_name + "/rpc"; string to_h_rpc_name="/"+moduleName+"/toHomeoRPC:o"; to_homeo_rpc.open(to_h_rpc_name); while(!Network::connect(to_h_rpc_name,homeo_rpc_name)) { yDebug()<<"Trying to connect to homeostasis..."; yDebug() << "from " << to_h_rpc_name << " to " << homeo_rpc_name; yarp::os::Time::delay(0.2); } yInfo() << "Initializing drives...";//<<endl; Bottle grpAllostatic = rf.findGroup("ALLOSTATIC"); drivesList = *grpAllostatic.find("drives").asList(); Bottle cmd; priority_sum = 0.; double priority; for (int d = 0; d<drivesList.size(); d++) { cmd.clear(); string driveName = drivesList.get(d).asString(); yInfo() << ("Initializing drive " + driveName); cmd.addString("add"); cmd.addString("conf"); Bottle drv; drv.clear(); Bottle aux; aux.clear(); aux.addString("name"); aux.addString(driveName); drv.addList()=aux; aux.clear(); drv.addList()=grpAllostatic; cmd.addList()=drv; Bottle rply; rply.clear(); rply.get(0).asString(); to_homeo_rpc.write(cmd,rply); AllostaticDrive alloDrive; alloDrive.name = driveName; Value cmds = grpAllostatic.check((driveName + "-sensation-on"), Value("None")); alloDrive.sensationOnCmd = *cmds.asList(); cmds = grpAllostatic.check((driveName + "-sensation-off"), Value("None")); alloDrive.sensationOffCmd = *cmds.asList(); cmds = grpAllostatic.check((driveName + "-before-trigger"), Value("None")); if (!(cmds.isString() && cmds.asString() == "None")) { alloDrive.beforeTriggerCmd = *cmds.asList(); } cmds = grpAllostatic.check((driveName + "-after-trigger"), Value("None")); if (!(cmds.isString() && cmds.asString() == "None")) { alloDrive.afterTriggerCmd = *cmds.asList(); } alloDrive.homeoPort = &to_homeo_rpc; alloDrive.inputSensationPort = new BufferedPort<Bottle>; string portName = "/" + moduleName + "/" + driveName + "/sensation:i"; alloDrive.inputSensationPort->open(portName); openPorts(driveName); string sensationPort = grpAllostatic.check((driveName + "-sensation-port"), Value("None")).asString(); string pn = "/" + moduleName + "/" + driveName + "/sensation:i"; while(!Network::connect(sensationPort, pn)) { yDebug()<<"Connecting " << sensationPort << " to " << pn; yarp::os::Time::delay(0.5); } // set drive priorities. Default to 1. priority = grpAllostatic.check((driveName + "-priority"), Value(1.)).asDouble(); priority_sum += priority; drivePriorities.push_back(priority); //Under effects string under_port_name = grpAllostatic.check((driveName + "-under-behavior-port"), Value("None")).asString(); string under_cmd_name = grpAllostatic.check((driveName + "-under-behavior"), Value("None")).asString(); bool active = false; if (under_port_name != "None" && under_cmd_name != "None") { active = true; string out_port_name = "/" + moduleName + "/" + driveName + "/under_action:o"; alloDrive.behaviorUnderPort = new Port(); alloDrive.behaviorUnderPort->open(out_port_name); yDebug() << "trying to connect to" << under_port_name; while(!Network::connect(out_port_name,under_port_name)) { yarp::os::Time::delay(0.5); } alloDrive.behaviorUnderCmd = Bottle(under_cmd_name); }else{ yInfo() << "No port name for" << driveName << "under-behavior-port"; } //Over effects string over_port_name = grpAllostatic.check((driveName + "-over-behavior-port"), Value("None")).asString(); string over_cmd_name = grpAllostatic.check((driveName + "-over-behavior"), Value("None")).asString(); if (over_port_name != "None" && over_cmd_name != "None") { active=true; string out_port_name = "/" + moduleName + "/" + driveName + "/over_action:o"; alloDrive.behaviorOverPort = new Port(); alloDrive.behaviorOverPort->open(out_port_name); yDebug() << "trying to connect to" << over_port_name; while(!Network::connect(out_port_name, over_port_name)) { yarp::os::Time::delay(0.5); } alloDrive.behaviorOverCmd = Bottle(over_cmd_name); } else { yInfo() << "No port name for" << driveName << "over-behavior-port"; } alloDrive.active = active; allostaticDrives[driveName] = alloDrive; } if (! Normalize(drivePriorities)) yDebug() << "Error: Drive priorities sum up to 0."; yInfo() << "done."; }