X-Git-Url: https://git.llucax.com/z.facultad/75.42/plaqui.git/blobdiff_plain/63715b9ec8f3b126b4e495a4c4485cd68fd6973a..325f784cbf310091cb5749842a52cf7e1ad64b1b:/Model/src/simulator.cpp?ds=sidebyside diff --git a/Model/src/simulator.cpp b/Model/src/simulator.cpp index 2d763fe..2fe6f6e 100644 --- a/Model/src/simulator.cpp +++ b/Model/src/simulator.cpp @@ -78,6 +78,7 @@ void Simulator::add_conduct(const std::string &name, float flujo) { Conduct *p = new Conduct(name); // FIXME no va!! + std::cout << flujo << std::endl; p->set_max_flow(flujo); conduct_lst.push_back(p); items.push_back(p); @@ -158,17 +159,27 @@ IConector *Simulator::find(const std::string &name) return NULL; } -bool Simulator::pump_deactivate(const std::string &name) +bool Simulator::set_open(const std::string &name, bool open) { // Busco el elemento, usando RTTI :-( - Pump *pump = dynamic_cast(find(name)); - - if (!pump) { - // Ups!, "name" no era un Pump!!! + IConector *tmp = find(name); + Pump *p; + Exclusa *e; + if ((p = dynamic_cast(tmp))) { + if (open) { + p->activate(); + } else { + p->deactivate(); + } + } else if ((e = dynamic_cast(tmp))) { + if (open) { + e->open(); + } else { + e->close(); + } + } else { return false; } - pump->deactivate(); - return true; } void Simulator::loadBomba(xmlNodePtr nodo) @@ -190,8 +201,7 @@ void Simulator::loadBomba(xmlNodePtr nodo) } else if (xmlStrcmp(nodo->name, BAD_CAST"entrega") == 0) { flujo = atof( (char *)XML_GET_CONTENT(nodo->children) ); } else if (xmlStrcmp(nodo->name, BAD_CAST"color") == 0) { - // FIXME ! - color = RGB(); + color = loadRGB(nodo->children); } } nodo = nodo->next; @@ -259,7 +269,7 @@ void Simulator::loadTank(xmlNodePtr nodo) std::string name = (char *)xmlGetProp(nodo, BAD_CAST"nombre"); int orientacion=0, x, y; float capacidad, inicial; - RGB color; // TODO + RGB color; nodo = nodo->children; while (nodo != NULL) { @@ -274,6 +284,8 @@ void Simulator::loadTank(xmlNodePtr nodo) capacidad = atoi( (char *)XML_GET_CONTENT(nodo->children) ); } else if (xmlStrcmp(nodo->name, BAD_CAST"inicial") == 0) { inicial = atof( (char *)XML_GET_CONTENT(nodo->children) ); + } else if (xmlStrcmp(nodo->name, BAD_CAST"") == 0) { + color = loadRGB(nodo->children); } } nodo = nodo->next; @@ -432,3 +444,20 @@ std::string Simulator::get_state_as_xml() return out.str();; } +RGB Simulator::loadRGB(xmlNodePtr nodo) +{ + unsigned r,g,b; + while (nodo != NULL) { + if (nodo->type == XML_ELEMENT_NODE) { + if (xmlStrcmp(nodo->name, BAD_CAST"rojo")==0) + r = atoi( (char *)XML_GET_CONTENT(nodo->children) ); + if (xmlStrcmp(nodo->name, BAD_CAST"verde")==0) + g = atoi( (char *)XML_GET_CONTENT(nodo->children) ); + if (xmlStrcmp(nodo->name, BAD_CAST"azul")==0) + b = atoi( (char *)XML_GET_CONTENT(nodo->children) ); + } + nodo = nodo->next; + } + return RGB(r,g,b); +} +