#include "Salamander.h"
#include "IVisualManager.h"

namespace Salamander
{

defineUniqueId(IVisualManager);
IVisualManager::IVisualManager()
{
	visuals_.clear();
}

IVisualManager::~IVisualManager()
{

}

bool IVisualManager::preCache(Visual& visual)
{
	// Return false if the visual already exists
	std::vector<Visual*>::iterator index = std::find(visuals_.begin(), visuals_.end(), &visual);
	if(index != visuals_.end())
		return false;

	// add the visual
	visuals_.push_back(&visual);
	return true;
}

bool IVisualManager::postCache(Visual& visual)
{
	// Return false if the visual does not exist
	std::vector<Visual*>::iterator index = std::find(visuals_.begin(), visuals_.end(), &visual);
	if(index == visuals_.end())
		return false;

	// remove the visual
	visuals_.erase(index);
	return true;
}

void IVisualManager::frame()
{
	preRender();

	for(unsigned int i = 0; i < visuals_.size(); i++)
	{
		render(*visuals_[i]);
	}

	postRender();
}

}
