Пример #1
0
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();
	}
}
Пример #2
0
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;
}