#pragma once

namespace crepe {

class ResourceManager;
class Asset;
class Mediator;

/**
 * \brief Resource interface
 *
 * Resource is an interface class used to represent a (deserialized) game resource (e.g.
 * textures, sounds). Resources are always created from \ref Asset "assets" by ResourceManager.
 *
 * The game programmer has the ability to use the ResourceManager to keep instances of concrete
 * resources between scenes, preventing them from being reinstantiated during a scene
 * transition.
 */
class Resource {
public:
	Resource(const Asset & src, Mediator & mediator);
	virtual ~Resource() = default;

	Resource(const Resource &) = delete;
	Resource(Resource &&) = delete;
	Resource & operator=(const Resource &) = delete;
	Resource & operator=(Resource &&) = delete;
};

} // namespace crepe