Changeset 3339

Show
Ignore:
Timestamp:
01/31/10 13:03:15 (5 weeks ago)
Author:
Azaezel
Message:

elevates the damping get/set pairs as well as setActivationState(bool) to the interface, and adds a setSleepingThresholds method for tracking when to shut down adding more motion (prevents whats commonly referred to as 'jitter')
also: stepSimulation for bullet, and a destroyPhysicsActor callback for zones in newton (already added for bullet a while back)

Location:
plugins/branches/0185_GEN_PHYSICS_REFACTOR_2
Files:
8 modified

Legend:

Unmodified
Added
Removed
  • plugins/branches/0185_GEN_PHYSICS_REFACTOR_2/ZBullet/src/PhysicsActor.cpp

    r3329 r3339  
    202202//-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~ 
    203203void 
    204 PhysicsActor::setAutoFreeze(bool _bFreeze) 
    205 { 
    206     btRigidBodySetAutoFreeze(m_pActor, _bFreeze ? 1 : 0); 
    207     setActivationState(true); 
    208     m_activationState = 1; 
    209 } 
    210  
     204PhysicsActor::setSleepingThresholds(float _minLinearMotion, float _minAngularMotion) 
     205{ 
     206    m_pActor->setSleepingThresholds(_minLinearMotion, _minAngularMotion); 
     207} 
    211208//-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~ 
    212209const Math::Real 
  • plugins/branches/0185_GEN_PHYSICS_REFACTOR_2/ZBullet/src/PhysicsActor.hpp

    r3326 r3339  
    8787    virtual const Math::Vector3 getAngularVelocity() const; 
    8888    virtual void setAngularVelocity(const Math::Vector3& _omega); 
     89 
    8990    virtual const Math::Vector3 getAngularDamping() const; 
    9091    virtual void setAngularDamping(const Math::Vector3& _damping); 
     
    9293    virtual void setLinearDamping(float _damping); 
    9394    virtual void setAutoFreeze(bool _bFreeze); 
     95    virtual void setSleepingThresholds(float _minLinearMotion, float _minAngularMotion); 
     96    virtual void setActivationState(unsigned _state); 
    9497 
    9598    virtual void setAdvancedCollisionPrediction(bool _mode); 
     
    104107        virtual void setGameObject(pOwningObject_type _pOwner); 
    105108        virtual pOwningObject_type getGameObject(); 
    106     bool attachBody(pCollisionShape_type _collision); 
     109   bool attachBody(pCollisionShape_type _collision); 
    107110 
    108111    /// @} 
     
    114117    void applyForce(const Math::Vector3& _force); 
    115118    void applyTorque(const Math::Vector3& _torque); 
    116  
    117     void setActivationState(unsigned _state); 
    118119    /// @} 
    119120public: 
  • plugins/branches/0185_GEN_PHYSICS_REFACTOR_2/ZBullet/src/PhysicsMaterial.cpp

    r3329 r3339  
    172172    m_bCollidable = _collide; 
    173173//todo: handle via collisiongroups 
     174} 
    174175 
    175176//-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~ 
  • plugins/branches/0185_GEN_PHYSICS_REFACTOR_2/ZBullet/src/PhysicsService.cpp

    r3329 r3339  
    3030#include <exception> 
    3131#include <iostream> 
    32 #include <btManifoldResult.h> 
     32#include <btBulletDynamicsCommon.h> 
    3333 
    3434extern ContactAddedCallback             gContactAddedCallback; 
     
    4141    //gContactAddedCallback usage can be found under btManifoldResult::addContactPoint 
    4242    //it is an explicitly defined global method handle called during btManifoldResult::addContactPoint 
    43     gContactAddedCallback = CustomMaterialCombinerCallback; 
     43    gContactAddedCallback = Zen::ZBullet::CustomMaterialCombinerCallback; 
    4444} 
    4545 
     
    7373    for (std::set<pPhysicsZone_type>::iterator iter = m_zoneSet.begin(); iter != m_zoneSet.end(); iter++) 
    7474    { 
    75         NewtonUpdate(dynamic_cast<PhysicsZone*>(iter->get())->getZonePtr(), (Zen::Math::Real)_elapsedTime); 
     75        dynamic_cast<PhysicsZone*>(iter->get())->getZonePtr()->stepSimulation((Zen::Math::Real)_elapsedTime); 
    7676    } 
    7777} 
  • plugins/branches/0185_GEN_PHYSICS_REFACTOR_2/ZNewton/src/PhysicsActor.cpp

    r3301 r3339  
    211211    m_activationState = 1; 
    212212} 
     213// http://newtondynamics.com/wiki/index.php5?title=NewtonBodySetFreezeTreshold 
     214//-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~ 
     215void 
     216PhysicsActor::setSleepingThresholds(float _minLinearMotion, float _minAngularMotion) 
     217{ 
     218    //we'll stick with a default of 10 frames of motion since it's simpler to track distance/angle for most folks (that, and theres no equivalents in other engines I've found) -BJR 
     219    NewtonBodySetFreezeTreshold(m_pActor,_minLinearMotion,_minAngularMotion, 10); 
     220} 
    213221 
    214222//-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~ 
  • plugins/branches/0185_GEN_PHYSICS_REFACTOR_2/ZNewton/src/PhysicsActor.hpp

    r3294 r3339  
    9191    virtual void setLinearDamping(float _damping); 
    9292    virtual void setAutoFreeze(bool _bFreeze); 
     93    virtual void setSleepingThresholds(float _minLinearMotion, float _minAngularMotion); 
     94    void setActivationState(unsigned _state); 
    9395 
    9496    virtual void setAdvancedCollisionPrediction(bool _mode); 
     
    116118    void applyForce(const Math::Vector3& _force); 
    117119    void applyTorque(const Math::Vector3& _torque); 
    118  
    119     void setActivationState(unsigned _state); 
    120120    /// @} 
    121121public: 
     
    270270        virtual void setContactFrictionState(int _state, bool _primary = true) 
    271271        { 
     272            //http://www.newtondynamics.com/wiki/index.php5?title=NewtonMaterialSetContactFrictionState 
    272273            NewtonMaterialSetContactFrictionState(m_pMaterial, _state, _primary ? 0 : 1); 
    273274        } 
  • plugins/branches/0185_GEN_PHYSICS_REFACTOR_2/ZNewton/src/PhysicsZone.cpp

    r3294 r3339  
    562562//-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~ 
    563563void 
     564PhysicsZone::destroyPhysicsActor(wpPhysicsActor_type _wpPhysicsActor) 
     565{ 
     566    // TODO - remove appropriate entry from m_zoneSet 
     567    //m_zoneSet.erase(iter); 
     568 
     569    /// Fire the PhysicsZone's onDestroyEvent 
     570    _wpPhysicsActor->onDestroyEvent(_wpPhysicsActor); 
     571     
     572    /// delete the PhysicsZone pointer 
     573    PhysicsActor* pPhysicsActor = dynamic_cast<PhysicsActor*>(_wpPhysicsActor.get()); 
     574 
     575    if (pPhysicsActor) 
     576    { 
     577        delete pPhysicsActor; 
     578    } 
     579    else 
     580    { 
     581        throw Zen::Utility::runtime_exception("Zen::ZBullet::PhysicsZone::destroyPhysicsActor() : _wpPhysicsActor is an invalid PhysicsActor."); 
     582    } 
     583} 
     584 
     585//-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~ 
     586void 
    564587PhysicsZone::stepSimulation(double _elapsedTime) 
    565588{ 
  • plugins/branches/0185_GEN_PHYSICS_REFACTOR_2/ZNewton/src/PhysicsZone.hpp

    r3294 r3339  
    9797 
    9898    void destroyCollisionShape(wpCollisionShape_type _wpCollisionShape); 
     99    void destroyPhysicsActor(wpPhysicsActor_type _wpPhysicsActor); 
    99100 
    100101    void stepSimulation(double _elapsedTime);