Browse Source

Merge remote-tracking branch 'remotes/szamq/master'

Lasse Öörni 12 years ago
parent
commit
efaf7d28f0

+ 3 - 0
Source/Engine/LuaScript/pkgs/Physics/RigidBody.pkg

@@ -22,6 +22,7 @@ class RigidBody : public Component
     void SetAngularRestThreshold(float threshold);
     void SetAngularDamping(float factor);
     void SetFriction(float friction);
+    void SetAnisotropicFriction(Vector3 friction);
     void SetRollingFriction(float friction);
     void SetRestitution(float restitution);
     void SetContactProcessingThreshold(float threshold);
@@ -60,6 +61,7 @@ class RigidBody : public Component
     float GetAngularRestThreshold() const;
     float GetAngularDamping() const;
     float GetFriction() const;
+    Vector3 GetAnisotropicFriction() const;
     float GetRollingFriction() const;
     float GetRestitution() const;
     float GetContactProcessingThreshold() const;
@@ -95,6 +97,7 @@ class RigidBody : public Component
     tolua_property__get_set float angularRestThreshold;
     tolua_property__get_set float angularDamping;
     tolua_property__get_set float friction;
+    tolua_property__get_set Vector3 anisotropicFriction;
     tolua_property__get_set float rollingFriction;
     tolua_property__get_set float restitution;
     tolua_property__get_set float contactProcessingThreshold;

+ 15 - 0
Source/Engine/Physics/RigidBody.cpp

@@ -106,6 +106,7 @@ void RigidBody::RegisterObject(Context* context)
     ACCESSOR_ATTRIBUTE(RigidBody, VAR_VECTOR3, "Physics Position", GetPosition, SetPosition, Vector3, Vector3::ZERO, AM_FILE | AM_NOEDIT);
     ATTRIBUTE(RigidBody, VAR_FLOAT, "Mass", mass_, DEFAULT_MASS, AM_DEFAULT);
     ACCESSOR_ATTRIBUTE(RigidBody, VAR_FLOAT, "Friction", GetFriction, SetFriction, float, DEFAULT_FRICTION, AM_DEFAULT);
+    ACCESSOR_ATTRIBUTE(RigidBody, VAR_VECTOR3, "Anisotropic Friction", GetAnisotropicFriction, SetAnisotropicFriction, Vector3, Vector3::ONE, AM_DEFAULT);
     ACCESSOR_ATTRIBUTE(RigidBody, VAR_FLOAT, "Rolling Friction", GetRollingFriction, SetRollingFriction, float, DEFAULT_ROLLING_FRICTION, AM_DEFAULT);
     ACCESSOR_ATTRIBUTE(RigidBody, VAR_FLOAT, "Restitution", GetRestitution, SetRestitution, float, DEFAULT_RESTITUTION, AM_DEFAULT);
     ACCESSOR_ATTRIBUTE(RigidBody, VAR_VECTOR3, "Linear Velocity", GetLinearVelocity, SetLinearVelocity, Vector3, Vector3::ZERO, AM_DEFAULT | AM_LATESTDATA);
@@ -371,6 +372,15 @@ void RigidBody::SetFriction(float friction)
     }
 }
 
+void RigidBody::SetAnisotropicFriction(Vector3 friction)
+{
+    if (body_)
+    {
+        body_->setAnisotropicFriction(ToBtVector3(friction));
+        MarkNetworkUpdate();
+    }
+}
+
 void RigidBody::SetRollingFriction(float friction)
 {
     if (body_)
@@ -633,6 +643,11 @@ float RigidBody::GetFriction() const
     return body_ ? body_->getFriction() : 0.0f;
 }
 
+Vector3 RigidBody::GetAnisotropicFriction() const
+{
+	return body_ ? ToVector3(body_->getAnisotropicFriction()) : Vector3::ZERO;
+}
+
 float RigidBody::GetRollingFriction() const
 {
     return body_ ? body_->getRollingFriction() : 0.0f;

+ 4 - 0
Source/Engine/Physics/RigidBody.h

@@ -98,6 +98,8 @@ public:
     void SetAngularDamping(float factor);
     /// Set friction coefficient.
     void SetFriction(float friction);
+    /// Set anisotropic friction.
+    void SetAnisotropicFriction(Vector3 friction);
     /// Set rolling friction coefficient.
     void SetRollingFriction(float friction);
     /// Set restitution coefficient.
@@ -175,6 +177,8 @@ public:
     float GetAngularDamping() const;
     /// Return friction coefficient.
     float GetFriction() const;
+    /// Return anisotropic friction.
+    Vector3 GetAnisotropicFriction() const;
     /// Return rolling friction coefficient.
     float GetRollingFriction() const;
     /// Return restitution coefficient.

+ 2 - 0
Source/Engine/Script/PhysicsAPI.cpp

@@ -153,6 +153,8 @@ static void RegisterRigidBody(asIScriptEngine* engine)
     engine->RegisterObjectMethod("RigidBody", "float get_angularDamping() const", asMETHOD(RigidBody, GetAngularDamping), asCALL_THISCALL);
     engine->RegisterObjectMethod("RigidBody", "void set_friction(float)", asMETHOD(RigidBody, SetFriction), asCALL_THISCALL);
     engine->RegisterObjectMethod("RigidBody", "float get_friction() const", asMETHOD(RigidBody, GetFriction), asCALL_THISCALL);
+    engine->RegisterObjectMethod("RigidBody", "void set_anisotropicFriction(Vector3)", asMETHOD(RigidBody, SetAnisotropicFriction), asCALL_THISCALL);
+    engine->RegisterObjectMethod("RigidBody", "Vector3 get_anisotropicFriction() const", asMETHOD(RigidBody, GetAnisotropicFriction), asCALL_THISCALL);
     engine->RegisterObjectMethod("RigidBody", "void set_rollingFriction(float)", asMETHOD(RigidBody, SetRollingFriction), asCALL_THISCALL);
     engine->RegisterObjectMethod("RigidBody", "float get_rollingFriction() const", asMETHOD(RigidBody, GetRollingFriction), asCALL_THISCALL);
     engine->RegisterObjectMethod("RigidBody", "void set_restitution(float)", asMETHOD(RigidBody, SetRestitution), asCALL_THISCALL);