Fix for bugs: 1788 (forces) and 1799 (python delattr on game objects)
[blender.git] / source / gameengine / Physics / Sumo / Fuzzics / include / SM_Object.h
index 571e1cf71ccd16e5ceecc1747b7d5f14922ecd02..b37e1a5466b0d4848ed7572c933d614176272331 100644 (file)
@@ -66,6 +66,14 @@ struct SM_MaterialProps {
        bool      m_fh_normal;             ///< Should the object slide off slopes?
 };
 
+class SM_ClientObject
+{
+public:
+       SM_ClientObject() {}
+       virtual ~SM_ClientObject() {}
+       
+       virtual bool hasCollisionCallback() = 0;
+};
 
 /**
  * SM_Object is an internal part of the Sumo physics engine.
@@ -136,7 +144,6 @@ public:
        void setOrientation(const MT_Quaternion& orn);
        void setScaling(const MT_Vector3& scaling);
        
-
        /**
         * set an external velocity. This velocity complements
         * the physics velocity. So setting it does not override the
@@ -254,22 +261,14 @@ public:
        );
        
        
-       void *getClientObject() { return m_client_object; }
-       void setClientObject(void *client_object) { m_client_object = client_object; }
+       SM_ClientObject *getClientObject() { return m_client_object; }
+       void setClientObject(SM_ClientObject *client_object) { m_client_object = client_object; }
        
        void relax();
        
-       void backup() {
-               m_pos = m_prev_state.getPosition();
-               m_orn = m_prev_state.getOrientation();
-               m_xform = m_prev_xform;
-       }
 private:
-
        // Tweak parameters
-       static const MT_Scalar ImpulseThreshold = -10.;
-       static const MT_Scalar FixThreshold = 0.01;
-       static const MT_Scalar FixVelocity = 0.01;
+       static MT_Scalar ImpulseThreshold;
 
        // return the actual linear_velocity of this object this 
        // is the addition of m_combined_lin_vel and m_lin_vel.
@@ -302,7 +301,7 @@ private:
     // as the collision callback now has only information
        // on an SM_Object, there must be a way that the SM_Object client
        // can identify it's clientdata after a collision
-       void                   *m_client_object;
+       SM_ClientObject        *m_client_object;
 
        DT_ShapeHandle          m_shape;                 // Shape for collision detection