瀏覽代碼

Add attribute accessor in Physics2D classes..

aster2013 11 年之前
父節點
當前提交
a3c79a67d5

+ 13 - 3
Source/Engine/Urho2D/CollisionShape2D.cpp

@@ -54,6 +54,16 @@ CollisionShape2D::~CollisionShape2D()
 void CollisionShape2D::RegisterObject(Context* context)
 {
     context->RegisterFactory<CollisionShape2D>(URHO2D_CATEGORY);
+
+    ACCESSOR_ATTRIBUTE(CollisionShape2D, VAR_BOOL, "Sensor", IsSensor, SetSensor, bool, false, AM_DEFAULT);
+    ACCESSOR_ATTRIBUTE(CollisionShape2D, VAR_INT, "Category Bits", GetCategoryBits, SetCategoryBits, int, 0, AM_DEFAULT);
+    ACCESSOR_ATTRIBUTE(CollisionShape2D, VAR_INT, "Mask Bits", GetMaskBits, SetMaskBits, int, 0, AM_DEFAULT);
+    ACCESSOR_ATTRIBUTE(CollisionShape2D, VAR_INT, "Group Index", GetGroupIndex, SetGroupIndex, int, 0, AM_DEFAULT);
+    ACCESSOR_ATTRIBUTE(CollisionShape2D, VAR_FLOAT, "Density", GetDensity, SetDensity, float, 0.0f, AM_DEFAULT);
+    ACCESSOR_ATTRIBUTE(CollisionShape2D, VAR_FLOAT, "Friction", GetFriction, SetFriction, float, 0.2f, AM_DEFAULT);
+    ACCESSOR_ATTRIBUTE(CollisionShape2D, VAR_FLOAT, "Restitution", GetRestitution, SetRestitution, float, 0.0f, AM_DEFAULT);
+
+    COPY_BASE_ATTRIBUTES(CollisionShape2D, Component);
 }
 
 void CollisionShape2D::OnSetEnabled()
@@ -87,7 +97,7 @@ void CollisionShape2D::SetSensor(bool sensor)
     MarkNetworkUpdate();
 }
 
-void CollisionShape2D::SetCategoryBits(unsigned short categoryBits)
+void CollisionShape2D::SetCategoryBits(int categoryBits)
 {
     if (fixtureDef_.filter.categoryBits == categoryBits)
         return;
@@ -102,7 +112,7 @@ void CollisionShape2D::SetCategoryBits(unsigned short categoryBits)
     MarkNetworkUpdate();
 }
 
-void CollisionShape2D::SetMaskBits(unsigned short maskBits)
+void CollisionShape2D::SetMaskBits(int maskBits)
 {
     if (fixtureDef_.filter.maskBits == maskBits)
         return;
@@ -117,7 +127,7 @@ void CollisionShape2D::SetMaskBits(unsigned short maskBits)
     MarkNetworkUpdate();
 }
 
-void CollisionShape2D::SetGroupIndex(short groupIndex)
+void CollisionShape2D::SetGroupIndex(int groupIndex)
 {
     if (fixtureDef_.filter.groupIndex == groupIndex)
         return;

+ 6 - 6
Source/Engine/Urho2D/CollisionShape2D.h

@@ -49,11 +49,11 @@ public:
     /// Set sensor (trigger).
     void SetSensor(bool sensor);
     /// Set filter category bits.
-    void SetCategoryBits(unsigned short categoryBits);
+    void SetCategoryBits(int categoryBits);
     /// Set filter mask bits.
-    void SetMaskBits(unsigned short maskBits);
+    void SetMaskBits(int maskBits);
     /// Set filter group index.
-    void SetGroupIndex(short groupIndex);
+    void SetGroupIndex(int groupIndex);
     /// Set density.
     void SetDensity(float density);
     /// Set friction.
@@ -84,11 +84,11 @@ public:
     /// Return sensor (trigger).
     bool IsSensor() const { return fixtureDef_.isSensor; }
     /// Return filter category bits.
-    unsigned short GetCategoryBits() const { return fixtureDef_.filter.categoryBits; }
+    int GetCategoryBits() const { return fixtureDef_.filter.categoryBits; }
     /// Return filter mask bits.
-    unsigned short GetMaskBits() const { return fixtureDef_.filter.maskBits; }
+    int GetMaskBits() const { return fixtureDef_.filter.maskBits; }
     /// Return filter group index.
-    short GetGroupIndex() const { return fixtureDef_.filter.groupIndex; }
+    int GetGroupIndex() const { return fixtureDef_.filter.groupIndex; }
     /// Return density.
     float GetDensity() const { return fixtureDef_.density; }
     /// Return friction.

+ 21 - 4
Source/Engine/Urho2D/PhysicsWorld2D.cpp

@@ -37,10 +37,11 @@ namespace Urho3D
 {
 
 extern const char* SUBSYSTEM_CATEGORY;
+static const Vector2 DEFAULT_GRAVITY(0.0f, -9.81f);
 
 PhysicsWorld2D::PhysicsWorld2D(Context* context) : Component(context),
     world_(0),
-    gravity_(0.0f, -9.81f),
+    gravity_(DEFAULT_GRAVITY),
     velocityIterations_(8),
     positionIterations_(3),
     debugRenderer_(0),
@@ -74,6 +75,22 @@ PhysicsWorld2D::~PhysicsWorld2D()
 void PhysicsWorld2D::RegisterObject(Context* context)
 {
     context->RegisterFactory<PhysicsWorld2D>(SUBSYSTEM_CATEGORY);
+
+    ACCESSOR_ATTRIBUTE(PhysicsWorld2D, VAR_BOOL, "Draw Shape", GetDrawShape, SetDrawShape, bool, false, AM_DEFAULT);
+    ACCESSOR_ATTRIBUTE(PhysicsWorld2D, VAR_BOOL, "Draw Joint", GetDrawJoint, SetDrawJoint, bool, false, AM_DEFAULT);
+    ACCESSOR_ATTRIBUTE(PhysicsWorld2D, VAR_BOOL, "Draw Aabb", GetDrawAabb, SetDrawAabb, bool, false, AM_DEFAULT);
+    ACCESSOR_ATTRIBUTE(PhysicsWorld2D, VAR_BOOL, "Draw Pair", GetDrawPair, SetDrawPair, bool, false, AM_DEFAULT);
+    ACCESSOR_ATTRIBUTE(PhysicsWorld2D, VAR_BOOL, "Draw CenterOfMass", GetDrawCenterOfMass, SetDrawCenterOfMass, bool, false, AM_DEFAULT);
+    ACCESSOR_ATTRIBUTE(PhysicsWorld2D, VAR_BOOL, "Allow Sleeping", GetAllowSleeping, SetAllowSleeping, bool, false, AM_DEFAULT);
+    ACCESSOR_ATTRIBUTE(PhysicsWorld2D, VAR_BOOL, "Warm Starting", GetWarmStarting, SetWarmStarting, bool, false, AM_DEFAULT);
+    ACCESSOR_ATTRIBUTE(PhysicsWorld2D, VAR_BOOL, "Continuous Physics", GetContinuousPhysics, SetContinuousPhysics, bool, false, AM_DEFAULT);
+    ACCESSOR_ATTRIBUTE(PhysicsWorld2D, VAR_BOOL, "Sub Stepping", GetSubStepping, SetSubStepping, bool, false, AM_DEFAULT);
+    ACCESSOR_ATTRIBUTE(PhysicsWorld2D, VAR_VECTOR2, "Gravity", GetGravity, SetGravity, Vector2, DEFAULT_GRAVITY, AM_DEFAULT);
+    ACCESSOR_ATTRIBUTE(PhysicsWorld2D, VAR_BOOL, "Auto Clear Forces", GetAutoClearForces, SetAutoClearForces, bool, false, AM_DEFAULT);
+    ACCESSOR_ATTRIBUTE(PhysicsWorld2D, VAR_INT, "Velocity Iterations", GetVelocityIterations, SetVelocityIterations, int, false, AM_DEFAULT);
+    ACCESSOR_ATTRIBUTE(PhysicsWorld2D, VAR_INT, "Position Iterations", GetPositionIterations, SetPositionIterations, int, false, AM_DEFAULT);
+
+    COPY_BASE_ATTRIBUTES(PhysicsWorld2D, Component);
 }
 
 void PhysicsWorld2D::DrawDebugGeometry(DebugRenderer* debug, bool depthTest)
@@ -275,7 +292,7 @@ void PhysicsWorld2D::SetSubStepping(bool enable)
     world_->SetSubStepping(enable);
 }
 
-void PhysicsWorld2D::SetGravity(const Vector2& gravity)
+void PhysicsWorld2D::SetGravity(Vector2 gravity)
 {
     gravity_ = gravity;
 
@@ -287,12 +304,12 @@ void PhysicsWorld2D::SetAutoClearForces(bool enable)
     world_->SetAutoClearForces(enable);
 }
 
-void PhysicsWorld2D::SetVelocityIterations(unsigned velocityIterations)
+void PhysicsWorld2D::SetVelocityIterations(int velocityIterations)
 {
     velocityIterations_ = velocityIterations;
 }
 
-void PhysicsWorld2D::SetPositionIterations(unsigned positionIterations)
+void PhysicsWorld2D::SetPositionIterations(int positionIterations)
 {
     positionIterations_ = positionIterations;
 }

+ 8 - 8
Source/Engine/Urho2D/PhysicsWorld2D.h

@@ -86,13 +86,13 @@ public:
     /// Set sub stepping.
     void SetSubStepping(bool enable);
     /// Set gravity.
-    void SetGravity(const Vector2& gravity);
+    void SetGravity(Vector2 gravity);
     /// Set auto clear forces.
     void SetAutoClearForces(bool enable);
     /// Set velocity iterations.
-    void SetVelocityIterations(unsigned velocityIterations);
+    void SetVelocityIterations(int velocityIterations);
     /// Set position iterations.
-    void SetPositionIterations(unsigned positionIterations);
+    void SetPositionIterations(int positionIterations);
     /// Add rigid body.
     void AddRigidBody(RigidBody2D* rigidBody);
     /// Remove rigid body.
@@ -128,11 +128,11 @@ public:
     /// Return auto clear forces.
     bool GetAutoClearForces() const;
     /// Return gravity.
-    const Vector2& GetGravity() const { return gravity_; }
+    Vector2 GetGravity() const { return gravity_; }
     /// Return velocity iterations.
-    unsigned GetVelocityIterations() const { return velocityIterations_; }
+    int GetVelocityIterations() const { return velocityIterations_; }
     /// Return position iterations.
-    unsigned GetPositionIterations() const { return positionIterations_; }
+    int GetPositionIterations() const { return positionIterations_; }
 
     /// Return the Box2D physics world.
     b2World* GetWorld() { return world_; }
@@ -154,9 +154,9 @@ private:
     /// Gravity.
     Vector2 gravity_;
     /// Velocity iterations.
-    unsigned velocityIterations_;
+    int velocityIterations_;
     /// Position iterations.
-    unsigned positionIterations_;
+    int positionIterations_;
 
     /// Extra weak pointer to scene to allow for cleanup in case the world is destroyed before other components.
     WeakPtr<Scene> scene_;

+ 14 - 2
Source/Engine/Urho2D/RigidBody2D.cpp

@@ -58,8 +58,20 @@ RigidBody2D::~RigidBody2D()
 void RigidBody2D::RegisterObject(Context* context)
 {
     context->RegisterFactory<RigidBody2D>(URHO2D_CATEGORY);
+
+    ACCESSOR_ATTRIBUTE(RigidBody2D, VAR_VECTOR2, "Mass Center", GetMassCenter, SetMassCenter, Vector2, Vector2::ZERO, AM_DEFAULT);
+    ACCESSOR_ATTRIBUTE(RigidBody2D, VAR_BOOL, "Use Fixture Mass", GetUseFixtureMass, SetUseFixtureMass, bool, false, AM_DEFAULT);
+    ACCESSOR_ATTRIBUTE(RigidBody2D, VAR_FLOAT, "Linear Damping", GetLinearDamping, SetLinearDamping, float, 0.0f, AM_DEFAULT);
+    ACCESSOR_ATTRIBUTE(RigidBody2D, VAR_FLOAT, "Angular Damping", GetAngularDamping, SetAngularDamping, float, 0.0f, AM_DEFAULT);
+    ACCESSOR_ATTRIBUTE(RigidBody2D, VAR_BOOL, "Fixed Rotation", IsFixedRotation, SetFixedRotation, bool, false, AM_DEFAULT);
+    ACCESSOR_ATTRIBUTE(RigidBody2D, VAR_FLOAT, "Gravity Scale", GetGravityScale, SetGravityScale, float, 1.0f, AM_DEFAULT);
+    ACCESSOR_ATTRIBUTE(RigidBody2D, VAR_VECTOR2, "Linear Velocity", GetLinearVelocity, SetLinearVelocity, Vector2, Vector2::ZERO, AM_DEFAULT);
+    ACCESSOR_ATTRIBUTE(RigidBody2D, VAR_FLOAT, "Angular Velocity", GetAngularVelocity, SetAngularVelocity, float, 0.0f, AM_DEFAULT);
+
+    COPY_BASE_ATTRIBUTES(RigidBody2D, Component);
 }
 
+
 void RigidBody2D::OnSetEnabled()
 {
     bool enabled = IsEnabledEffective();
@@ -128,7 +140,7 @@ void RigidBody2D::SetInertia(float inertia)
     MarkNetworkUpdate();
 }
 
-void RigidBody2D::SetMassCenter(const Vector2& center)
+void RigidBody2D::SetMassCenter(Vector2 center)
 {
     b2Vec2 b2Center = ToB2Vec2(center);
     if (massData_.center == b2Center)
@@ -270,7 +282,7 @@ void RigidBody2D::SetAwake(bool awake)
     MarkNetworkUpdate();
 }
 
-void RigidBody2D::SetLinearVelocity(const Vector2& linearVelocity)
+void RigidBody2D::SetLinearVelocity(Vector2 linearVelocity)
 {
     b2Vec2 b2linearVelocity = ToB2Vec2(linearVelocity);
     if (bodyDef_.linearVelocity == b2linearVelocity)

+ 2 - 2
Source/Engine/Urho2D/RigidBody2D.h

@@ -62,7 +62,7 @@ public:
     /// Set inertia.
     void SetInertia(float inertia);
     /// Set mass center.
-    void SetMassCenter(const Vector2& center);
+    void SetMassCenter(Vector2 center);
     /// Use fixture mass (default is true).
     void SetUseFixtureMass(bool useFixtureMass);
     /// Set linear damping.
@@ -80,7 +80,7 @@ public:
     /// Set awake.
     void SetAwake(bool awake);
     /// Set linear velocity.
-    void SetLinearVelocity(const Vector2& linearVelocity);
+    void SetLinearVelocity(Vector2 linearVelocity);
     /// Set angular velocity.
     void SetAngularVelocity(float angularVelocity);
     /// Apply force.