Пример #1
0
	virtual bool needsCollision(btBroadphaseProxy* proxy0) const
   {
		if ( proxy0->m_clientObject == mMe )
			return false;

		//.logicking >> behavior of Physical Zone as invisible wall
		btCollisionObject* colObj = (btCollisionObject*)(proxy0->m_clientObject);
		SceneObject* sceneObj = PhysicsUserData::getObject(colObj->getUserPointer());
		if (sceneObj && (sceneObj->getTypeMask() & PhysicalZoneObjectType))
		{
			SceneObject* playerObject = PhysicsUserData::getObject(mMe->getUserPointer());
			PhysicalZone* pZone = static_cast<PhysicalZone*>(sceneObj);
			if (pZone->isActive() && pZone->isInvisibleWall(playerObject))
				return true;
		}
		
		if ( !colObj->hasContactResponse() )
			return false;
		//.logicking <<
      return Parent::needsCollision( proxy0 );
   }