//-------------------------------------------------- //-------------------------------------------------- XML::Node* GetFirstChildElement(const XML::Node* in_node, const std::string& in_name) { const s8* nameData = nullptr; u32 nameSize = in_name.length(); if (nameSize > 0) { nameData = in_name.c_str(); } XML::Node* child = in_node->first_node(nameData, nameSize); if (child != nullptr && child->type() == rapidxml::node_type::node_element) { return child; } else if (child != nullptr) { XML::Node* sibling = child; do { sibling = sibling->next_sibling(nameData, nameSize); } while(sibling != nullptr && sibling->type() != rapidxml::node_type::node_element); return sibling; } return nullptr; }
FaerieAnimation::FaerieAnimation(Xml::Node* element) { _name = Xml::GetStringAttribute(element, "name"); _time = Xml::GetFloatAttribute(element, "time"); Xml::Node* keyFrameXml = element->first_node("keyFrame"); while (keyFrameXml != NULL) { _keyFrames.push_back(FaerieFrame(keyFrameXml)); keyFrameXml = keyFrameXml->next_sibling("keyFrame"); } CreateAnimationSplines(); }
void FaerieAnimationsCollection::Reread() { Clear(); Xml::ReadDocument doc(_filename); Xml::Node* rootNode = doc.first_node(); assert(rootNode != NULL); Xml::Node* animationNode = rootNode->first_node("animation"); while (animationNode != NULL) { FaerieAnimation* animation = new FaerieAnimation(animationNode); std::string animationName = animation->GetName(); assert(_mapAnimations.find(animationName) == _mapAnimations.end()); _mapAnimations[animationName] = animation; animationNode = animationNode->next_sibling("animation"); } }
//-------------------------------------------------- //-------------------------------------------------- XML::Node* GetNextSiblingElement(const XML::Node* in_node, const std::string& in_name) { const s8* nameData = nullptr; u32 nameSize = in_name.length(); if (nameSize > 0) { nameData = in_name.c_str(); } XML::Node* sibling = in_node->next_sibling(nameData, nameSize); while (sibling != nullptr && sibling->type() != rapidxml::node_type::node_element) { sibling = sibling->next_sibling(nameData, nameSize); } return sibling; }