Пример #1
0
void afxEA_PhysicalZone::ea_set_scope_status(bool in_scope)
{
  if (physical_zone)
  {
    if (in_scope && !physical_zone->isActive())
      physical_zone->activate();
    else if (!in_scope && physical_zone->isActive())
      physical_zone->deactivate();
  }
}
Пример #2
0
void physicalZoneFind(SceneObject* obj, void *key)
{    
   PROFILE_SCOPE( physicalZoneFind );

   ContainerQueryInfo *info = static_cast<ContainerQueryInfo*>(key);
   PhysicalZone* pz = dynamic_cast<PhysicalZone*>(obj);
   AssertFatal(pz != NULL, "Error, not a physical zone!");
   if (pz == NULL || pz->testBox(info->box) == false)
      return;

   if (pz->isActive()) {
      info->gravityScale *= pz->getGravityMod();
	  info->airResistanceScale *= pz->getAirResistanceMod();
      info->appliedForce += pz->getForce();
   }
}
Пример #3
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 );
   }
void physicalZoneFind(SceneObject* obj, void *key)
{    
   PROFILE_SCOPE( physicalZoneFind );

   ContainerQueryInfo *info = static_cast<ContainerQueryInfo*>(key);
   PhysicalZone* pz = dynamic_cast<PhysicalZone*>(obj);
   AssertFatal(pz != NULL, "Error, not a physical zone!");
   if (pz == NULL || pz->testBox(info->box) == false)
      return;

   if (pz->isActive()) {
      info->gravityScale *= pz->getGravityMod();
      // AFX CODE BLOCK (enhanced-physical-zone) <<
      Point3F center; 
      info->box.getCenter(&center);
      info->appliedForce += pz->getForce(&center);
      /* ORIGINAL CODE
      info->appliedForce += pz->getForce();
      */
      // AFX CODE BLOCK (enhanced-physical-zone) >>
   }
}