#include "precomp.h"
#include "Entity.h"
#include "ManagerEntityEngine.h"
#include "IProperty.h"
#include "Component.h"

using namespace EntityEngine;

Entity::Entity() 
{ 
}

Entity::~Entity()
{
	while(!components.empty())
	{
		std::map<std::string, Component*>::iterator it = components.begin();
		EntityEngine::Manager::Instance().GetComponentFactory().RemoveComponent(it->first, it->second->GetId());
		components.erase(it);
	}
//	EntityEngine::Manager::Instance().GetPropertyFactory().RemoveProperties(this);
}

void Entity::AddComponent(std::string compType)
{
	std::map<std::string, Component*>::iterator it = components.find(compType);
	if(it != components.end())
		return;

	Component* comp = EntityEngine::Manager::Instance().GetComponentFactory().CreateComponent(this, compType);
	if(comp)
		components[compType] = comp;
}

void Entity::UpdateComponents(float deltaTime)
{
	std::map<std::string, Component*>::iterator it;
	for(it = components.begin(); it != components.end(); ++it)
		it->second->Update(deltaTime);
}

void Entity::ExecuteCommandOnComponents(const CL_String &command, CL_NetGameConnection *specificPlayerConnection)
{
	std::map<std::string, Component*>::iterator it;
	for(it = components.begin(); it != components.end(); ++it)
		it->second->ExecuteCommand(command, specificPlayerConnection);
}
