Example #1
0
		BP_Proxy::BP_Proxy(void *object, BP_Scene& scene, 
			const Ogre::Vector3& min,
			const Ogre::Vector3& max) : 
		m_object(object),
			m_scene(scene)
		{
			int i;
			for (i = 0; i < 3; ++i) {
				new (&m_min[i]) BP_Endpoint(min[i], BP_Endpoint::MINIMUM, 
					this, scene.getLists()[i]);
				new (&m_max[i]) BP_Endpoint(max[i], BP_Endpoint::MAXIMUM,
					this, scene.getLists()[i]);
			}
		}
Example #2
0
		void encounters(const BP_Endpoint& a, const BP_Endpoint& b,
			BP_Scene& scene,	T_Overlap overlap)
		{
			assert(a.m_proxy != b.m_proxy);

			if ((a.m_type != b.m_type) && overlap(*a.m_proxy, *b.m_proxy)) {
				if (a.m_type == BP_Endpoint::MAXIMUM) {
					scene.callBeginOverlap(a.m_proxy->getObject(), 
						b.m_proxy->getObject());
				}
				else {
					scene.callEndOverlap(a.m_proxy->getObject(), 
						b.m_proxy->getObject());
				}
			}
		}
Example #3
0
void BP_EndpointList::encounters(const BP_Endpoint& a, const BP_Endpoint& b,
								 BP_Scene& scene, T_Overlap overlap)
{
	assert(a.getProxy() != b.getProxy());
	
	if (a.getType() != b.getType()) 
	{
		if (a.getType() == BP_Endpoint::MAXIMUM) 
		{
			if (overlap(*a.getProxy(), *b.getProxy())) 
			{
				scene.callBeginOverlap(a.getProxy()->getObject(), 
									   b.getProxy()->getObject());
			}
			++a.getCount();
			++b.getCount();
		}
		else 
		{
			if (overlap(*a.getProxy(), *b.getProxy())) 
			{
				scene.callEndOverlap(a.getProxy()->getObject(), 
									 b.getProxy()->getObject());
			}
			--a.getCount();
			--b.getCount();
		}
	}
	else 
	{
		if (a.getType() == BP_Endpoint::MAXIMUM) 
		{
			--a.getCount();
			++b.getCount();
		}
		else 
		{
			++a.getCount();
			--b.getCount();
		}
	}
}