void CannonBall::HandleCollision(IEntity* pOther)
{


	if (pOther->GetType() == ENT_TILES)
	{
		DestroyActorMessage* destroy = new DestroyActorMessage{ this };
		destroy->QueueMessage();
		destroy = nullptr;

	}

	if (pOther->GetType() == ENT_FATHER)
	{
		dynamic_cast<Father*>(pOther)->SetAlive(false);

		SGD::Event* CannonBallHit = new SGD::Event("Death", nullptr, this);
		CannonBallHit->QueueEvent(pOther);
		DestroyActorMessage* destroy = new DestroyActorMessage{ this };
		destroy->QueueMessage();
		destroy = nullptr;

	}


}
void Zombie::Update(float dt)
{
	if (isAlive)
	{
		if (currBehavior != nullptr)
			currBehavior->Update(dt, this, m_pTarget->GetPosition());

		// possible turret target
		SGD::Event event = { "ASSESS_THREAT", nullptr, this };
		event.SendEventNow(nullptr);


		// death animation
		int		numframes	= AnimationManager::GetInstance()->GetAnimation(this->animation.m_strCurrAnimation)->GetFrames().size();
		numframes--;
		float	deathdur	= AnimationManager::GetInstance()->GetAnimation(this->animation.m_strCurrAnimation)->GetFrames()[numframes]->GetDuration();
		string	deathanim	= this->animation.m_strCurrAnimation;

		if (deathanim.find("Death") != string::npos && this->animation.m_nCurrFrame == numframes && this->animation.m_fCurrDuration >= deathdur)
			isAlive = false;
	}
	else
	{
		DestroyObjectMessage* dMsg = new DestroyObjectMessage{ this };
		dMsg->QueueMessage();
		dMsg = nullptr;

		SpawnManager::GetInstance()->SetEnemiesKilled(SpawnManager::GetInstance()->GetEnemiesKilled() + 1);
	}

	MovingObject::Update(dt);
	
}
void CheckPoint::HandleCollision(IEntity* pOther)
{

	if (pOther->GetType() == ENT_FATHER)
	{
		dynamic_cast<Father*>(pOther)->SetCheckPoint(GetPosition());
		SGD::Event* event = new SGD::Event("Walking", nullptr, this);
		event->QueueEvent();
	}
}
void AnimationSystem::Update(int _ElaspedTime, AnimationTimestamp& _info)
{
	if (m_Loaded[_info.GetCurrAnim()].GetFrames().size() > (unsigned int)_info.GetCurrFrame())
	{
		if (m_Loaded[_info.GetCurrAnim()].GetFrames()[_info.GetCurrFrame()].GetTriggerType() == "Event" && m_Loaded[_info.GetCurrAnim()].GetFrames()[_info.GetCurrFrame()].GetTriggerName() != "None")
		{
			SGD::Event* tempevent = new SGD::Event(m_Loaded[_info.GetCurrAnim()].GetFrames()[_info.GetCurrFrame()].GetTriggerName().c_str(), nullptr, this);
			tempevent->SendEventNow();
			delete tempevent;
			tempevent = nullptr;
		}
	}
}