//Wirtualna metoda ³aduj¹ca dane z xml wywo³ywana przez implementacje klas potomnych bool CPhysicalTemplate::Load(CXml &xml) { //nazwa pliku xml m_templ_filename = xml.GetFilename(); //typ obiektu if (xml_node<> *node = xml.GetRootNode()) m_templ_type = xml.GetString(node, "type"); //nazwa "gatunku" obiektu (np. robot, human, gun, etc.) if (xml_node<> *node = xml.GetChild(xml.GetRootNode(), "genre")) m_templ_genre = xml.GetWString(node, "genre"); //zakres promienia detekcji kolizji if (xml_node<> *node = xml.GetChild(xml.GetRootNode(), "radius")) { m_templ_circle_radius = xml.GetFloat(node, "circle_radius"); } //wektor przechowuj¹cy rozmiar obszaru prostok¹tnego if (xml_node<> *node = xml.GetChild(xml.GetRootNode(), "rect_size")) { m_templ_rect_size.x = xml.GetFloat(node, "rect_size_x"); m_templ_rect_size.y = xml.GetFloat(node, "rect_size_y"); } //skala obiektu (body and head) if (xml_node<> *node = xml.GetChild(xml.GetRootNode(), "scale")) { m_templ_scale_body = xml.GetFloat(node, "scale_body"); m_templ_scale_head = xml.GetFloat(node, "scale_head"); } //wartoœæ pu³apu obiektu wzglêdem pod³o¿a if (xml_node<> *node = xml.GetChild(xml.GetRootNode(), "altitude")) { m_templ_altitude = xml.GetFloat(node, "altitude"); } //pola konfiguracyjne - potrzebne przy podejmowaniu decyzji - wygl¹d obiektu if (xml_node<> *node = xml.GetChild(xml.GetRootNode(), "physical_config")) { m_templ_use_displayable_body = xml.GetBool(node, "use_displayable_body"); m_templ_use_shadow_body = xml.GetBool(node, "use_shadow_body"); m_templ_use_displayable_head = xml.GetBool(node, "use_displayable_head"); m_templ_use_shadow_head = xml.GetBool(node, "use_shadow_head"); } //nazwy dla animacji (body i head) - (docelowo ³adowane s¹ ca³e zestawy - tu tylko do testów) if (xml_node<> *node = xml.GetChild(xml.GetRootNode(), "unit_animation")) { m_templ_animation_name_body = xml.GetString(node, "animation_body"); m_templ_animation_name_head = xml.GetString(node, "animation_head"); } //wszystkie podklasy sprawdzaj¹, czy xml jest poprawny return true; }
//Metoda ³aduj¹ca dane bool CBulletTemplate::Load(CXml &xml) { if (!CPhysicalTemplate::Load(xml)) return false; //sprawdzamy, czy xml zawiera informacjê, ¿e jest to bullet if (xml.GetString(xml.GetRootNode(), "type") != "bullet") return false; //plik xml pocisku przypomina plik physical'a //ewentualne ³adowanie danych generycznych pocisku... //if (xml_node<>* node = xml.GetChild(xml.GetRootNode(), "zabawa z pociskiem...")) //mMinDamage = xml.GetFloat( "damage", "min" ); //mMaxDamage = xml.GetFloat( "damage", "max" ); //node = xml.GetChild(0, "anim"); //if (node) // mAnimation = gAnimationManager.GetAnimation(xml.GetString(node,"name")); //for (node=xml.GetChild(0,"image"); node; node=xml.GetSibl(node,"image") ) // mImages.push_back( xml.GetString(node,"filename") ); //for (node=xml.GetChild(0,"effect"); node; node=xml.GetSibl(node,"effect") ) // mEffects.push_back( xml.GetString(node,"name") ); //for (node=xml.GetChild(0,"destroyEffect"); node; node=xml.GetSibl(node,"destroyEffect") ) // mDestroyEffects.push_back( xml.GetString(node,"name") ); return true; }
//Wirtualna metoda ³aduj¹ca dane z xml ³aduje cechy CMonster bool CMonsterTemplate::Load(CXml &xml) { //sprawdzamy, czy xml zawiera informacjê, ¿e jest potwór if (xml.GetString(xml.GetRootNode(), "type") != "monster") return false; //sprawdzamy, czy mo¿na za³adowaæ dane z klasy bazowej if (!CActorTemplate::Load(xml)) return false; //gdyby w klasie CMonster by³y jakieœ pola //to tutaj, w klasie jej fabryki //nale¿a³oby wczytaæ te pola z pliku xml, //aby fabryka by³a kompletna return true; }