/* * ParseSprite.cpp * * Created on: Dec 1, 2016 * Author: tibi */ #include #include namespace farmlands { namespace storage { template <> base::Frame* parse (boost::property_tree::ptree& root) { // Ensure we are on the scene node (property tree seems to add root of its own) if (root.front().first == "Frame") root = root.front().second; base::Frame* frame = new base::Frame(); // Obtine tile set id std::string tileSetPath = root.get(".tileSet"); frame->tileSetId = resources::ResourceManager::instance().getId(tileSetPath); // Set properties frame->tileSetCell = root.get(".cell"); frame->width = root.get(".w", 1u); frame->height = root.get(".h", 1u); frame->duration = root.get(".duration"); return frame; } template <> base::SpriteState* parse (boost::property_tree::ptree& root) { // Ensure we are on the scene node (property tree seems to add root of its own) if (root.front().first == "SpriteState") root = root.front().second; base::SpriteState* spriteState = new base::SpriteState(); spriteState->name = root.get(".name"); for (auto child : root) { if (child.first == "Frame") { base::Frame* frame = parse(child.second); spriteState->frames.push_back(*frame); delete frame; } } return spriteState; } template <> base::Sprite* parse (boost::property_tree::ptree& root) { // Ensure we are on the scene node (property tree seems to add root of its own) if (root.front().first == "Sprite") root = root.front().second; base::Sprite* sprite = new base::Sprite(); sprite->anchorX = root.get(".anchorX"); sprite->anchorY = root.get(".anchorY"); for (auto child : root) { if (child.first == "State") { base::SpriteState* state = parse(child.second); sprite->addState(*state); delete state; } } return sprite; } } }