(*i1)->update();
std::list<PlantItem *>::iterator i2;
- for(i2=items.begin(); i2!=items.end(); i2++)
+ for(i2=items.begin(); i2!=items.end(); i2++) {
(*i2)->update();
+ (*i2)->update_color();
+ }
for(i2=items.begin(); i2!=items.end(); i2++)
(*i2)->simulate();
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) {
+ } else if (xmlStrcmp(nodo->name, BAD_CAST"color") == 0) {
color = loadRGB(nodo->children);
}
}
// bien, es a la entrada!, obtengo el item al cual lo tengo que conectar
to_connect = find((char *)XML_GET_CONTENT(conector3->children));
// y lo conecto
- if (!current_item->connect(to_connect, IConector::IN)) {
- std::cout << s << " Error al conectar " << std::endl;
- }
+ current_item->connect(to_connect, IConector::IN);
} else if (xmlStrcmp(conector3->name, BAD_CAST"salida") == 0) {
// Era a salida, es casi lo mismo que arriba
to_connect = find((char *)XML_GET_CONTENT(conector3->children));
- if (!current_item->connect(to_connect, IConector::OUT)) {
- std::cout << s << " Error al conectar " << std::endl;
- }
+ current_item->connect(to_connect, IConector::OUT);
}
}
nodo = nodo->next;
for(i2=items.begin(); i2!=items.end(); i2++)
(*i2)->get_state_as_xml(out);
+ std::list<LogicControl *>::iterator i3;
+ for(i3=control_lst.begin(); i3!=control_lst.end(); i3++)
+ (*i3)->get_state_as_xml(out);
out << "</plantstatus>";
return out.str();;
}
RGB Simulator::loadRGB(xmlNodePtr nodo)
{
- unsigned r,g,b;
+ unsigned long r,g,b;
while (nodo != NULL) {
if (nodo->type == XML_ELEMENT_NODE) {
if (xmlStrcmp(nodo->name, BAD_CAST"rojo")==0)
}
nodo = nodo->next;
}
+ r = static_cast<unsigned long>(255 * (r / 65535.0f));
+ g = static_cast<unsigned long>(255 * (g / 65535.0f));
+ b = static_cast<unsigned long>(255 * (b / 65535.0f));
+
return RGB(r,g,b);
}
continue;
}
// obtengo el items actual por su nombre
- if (xmlStrcmp(nodo->name, BAD_CAST"and") == 0) {
+ if ((xmlStrcmp(nodo->name, BAD_CAST"and") == 0) || (xmlStrcmp(nodo->name, BAD_CAST"not") == 0) || (xmlStrcmp(nodo->name, BAD_CAST"or") == 0)) {
std::string s = (char *)xmlGetProp(nodo, BAD_CAST"nombre");
current = find_logic((char *)xmlGetProp(nodo, BAD_CAST"nombre"));
connect_logic(current, nodo->children);
if (xmlStrcmp(nodo->name, BAD_CAST"entrada") == 0) {
item = dynamic_cast<Control *>(find((char *)XML_GET_CONTENT(nodo->children)));
if (item != NULL) {
- current->connect( item->get_logic_output(), IConector::IN );
+ if (dynamic_cast<Tank *>(item)) {
+ std::string donde = (char *)xmlGetProp(nodo, BAD_CAST"id");
+ if (donde == "inferior") {
+ current->connect( item->get_logic_output(), IConector::IN );
+ } else {
+ current->connect( item->get_logic_input(), IConector::IN );
+ }
+ } else {
+ current->connect( item->get_logic_output(), IConector::IN );
+ }
} else {
- std::cout << "ERROR : Item no es tipo Control!!" << std::endl;
+ LogicControl *logic = dynamic_cast<LogicControl *>(find_logic((char *)XML_GET_CONTENT(nodo->children)));
+ /* Bien, si no era un control, debe ser una compuerta */
+ if (logic != NULL) {
+ current->connect(logic, IConector::IN);
+ } else {
+ std::cout << "ERROR : Item no es tipo Control ni tipo LogicControl ... esto si que esta todo malllll!!" << std::endl;
+ }
}
} else if (xmlStrcmp(nodo->name, BAD_CAST"salida") == 0) {
item = dynamic_cast<Control *>(find((char *)XML_GET_CONTENT(nodo->children)));
if (item != NULL) {
item->get_logic_input()->connect( current, IConector::IN );
} else {
- std::cout << "ERROR : Item no es tipo Control!!" << std::endl;
+ LogicControl *logic = dynamic_cast<LogicControl *>(find_logic((char *)XML_GET_CONTENT(nodo->children)));
+ /* Bien, si no era un control, debe ser una compuerta */
+ if (logic != NULL) {
+ logic->connect(current, IConector::IN);
+ } else {
+ std::cout << "ERROR : Item no es tipo Control ni tipo LogicControl ... esto si que esta todo malllll!!" << std::endl;
+ }
}
}