void XMLResourceDocument::destroy_resource(const std::string &resource_id) { std::map<std::string, XMLResourceNode>::iterator it; it = impl->resources.find(resource_id); if (it == impl->resources.end()) return; DomNode cur = it->second.get_element(); impl->resources.erase(it); DomNode parent = cur.get_parent_node(); while (!parent.is_null()) { parent.remove_child(cur); if (parent.has_child_nodes()) break; cur = parent; parent = parent.get_parent_node(); } }
ResourceItem *TexturePacker::load_resource(Canvas &canvas, std::string &resource_id, Resource &resource, ResourceManager &resources) { ResourceItem *item = 0; try { std::string type = resource.get_type(); if(type == "sprite") { item = load_sprite(canvas, resource_id, resource, resources); } else if(type == "image") { item = load_image(canvas, resource_id, resource, resources); } else { throw Exception(string_format("Resourcetype %1 is not supported", type)); } } catch(Exception ex) { item = new NotSupportedResourceItem(resource, ex.message); } // Find resource path by traversing parents DomElement &dom_element = resource.get_element(); DomNode parent = dom_element.get_parent_node(); while (!parent.is_null()) { DomElement parent_element = parent.to_element(); std::string parent_name = parent_element.get_attribute("name"); if(parent_name.length() > 0) item->resource_path = string_format("%1/%2", parent_name, item->resource_path); parent = parent.get_parent_node(); } return item; }