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(); } }
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(); } }
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(¢er); info->appliedForce += pz->getForce(¢er); /* ORIGINAL CODE info->appliedForce += pz->getForce(); */ // AFX CODE BLOCK (enhanced-physical-zone) >> } }