Fichier source en cours : FW - BoundingVolumeTrigger.cpp






Voici le code source cpp :




	#include "Framework.h"

using namespace fw;

BoundingVolumeTrigger::BoundingVolumeTrigger(AABB* pBV)
{
	m_pTestedAABB = pBV;
}

BoundingVolumeTrigger::BoundingVolumeTrigger(Sphere* pBV)
{
	m_pTestedSphere = pBV;
}

BoundingVolumeTrigger::~BoundingVolumeTrigger()
{
}

void BoundingVolumeTrigger::RegisterMainCheckedBV(AABB* pBV)
{
	m_pTestedAABB = pBV;
}

void BoundingVolumeTrigger::RegisterMainCheckedBV(Sphere* pBV)
{
	m_pTestedSphere = pBV;
}

void BoundingVolumeTrigger::RegisterBoundingBox(AABB* pBV)
{
	m_boundingBoxesToTest.push_back(pBV);
}

void BoundingVolumeTrigger::RegisterBoundingSphere(Sphere* pBV)
{
	m_boundingSpheresToTest.push_back(pBV);
}

/*
void BoundingVolumeTrigger::RegisterEvent(Event* pEvent)
{
	m_pCollisionEvents.push_back(pEvent);
}
*/

void BoundingVolumeTrigger::Update()
{
	bool bColision = CheckCollision();

	// Invoque tous les events associés à la collision
	if (bColision)
	{
		/*
		for (uint32 i = 0; i < m_pCollisionEvents.size(); i++)
		{
			Event* pEvent = m_pCollisionEvents[i];
			
			pEvent->Trigger();
		}
		*/
	}
}

bool BoundingVolumeTrigger::CheckCollision()
{
	bool collided = false;

	// AABB à tester
	for (uint32 i = 0; i < m_boundingBoxesToTest.size(); i++)
	{
		if (m_pTestedAABB->Contains(*m_boundingBoxesToTest[i]) 
			|| m_pTestedSphere->Intersects(*m_boundingBoxesToTest[i]))
		{
			collided = true;
		}

		if (m_pTestedAABB->Contains(*m_boundingBoxesToTest[i]) 
			|| m_pTestedSphere->Intersects(*m_boundingBoxesToTest[i]))
		{
			collided = true;
		}
	}

	// Sphere à tester
	for (uint32 i = 0; i < m_boundingSpheresToTest.size(); i++)
	{
		if (m_boundingSpheresToTest[i]->Intersects(*m_pTestedAABB)
			|| m_pTestedSphere->Intersects(*m_boundingSpheresToTest[i]))
		{
			collided = true;
		}
	}

	return collided;
}