#ifndef IASSET_H
#define IASSET_H

namespace Salamander
{

/*
** Abstract Base Class for assets. Anything that is tracked or loaded by the AssetManager should be
** derived from this class. This allows easy databasing and asset management for user objects.
*/

class IAsset
{
	friend class AssetManager;

public:
	/*
	** Destructor.
	*/
	virtual ~IAsset();

	/*
	** All assets must call 'registerAsset()' to be accepted by Salamander.
	*/
	registerInterfaceUniqueId();

protected:
	/*
	** IAsset cannot be instantiated. Data classes should implement IAsset.
	*/
	IAsset();

	/*
	** When an asset is loaded by the AssetManager, the asset implementation
	** handles all the loading, simply returning whether or not it was successful.
	*/
	virtual bool load(const std::string& name) = 0;

private:

};

}

#endif // IASSET_H