Browse Source

PhysicsWorld2D: use correct type for collisionMask, fix warnings

1vanK 3 years ago
parent
commit
13ce50391b

+ 6 - 0
Source/Urho3D/AngelScript/Generated_GlobalVariables.cpp

@@ -346,6 +346,9 @@ void ASRegisterGeneratedGlobalVariables(asIScriptEngine* engine)
     // constexpr float M_HALF_PI | File: ../Math/MathDefs.h
     engine->RegisterGlobalProperty("const float M_HALF_PI", (void*)&M_HALF_PI);
 
+    // constexpr i16 M_I16_MASK_ALL_BITS | File: ../Math/MathDefs.h
+    engine->RegisterGlobalProperty("const int16 M_I16_MASK_ALL_BITS", (void*)&M_I16_MASK_ALL_BITS);
+
     // constexpr i32 M_I32_MASK_ALL_BITS | File: ../Math/MathDefs.h
     engine->RegisterGlobalProperty("const int M_I32_MASK_ALL_BITS", (void*)&M_I32_MASK_ALL_BITS);
 
@@ -382,6 +385,9 @@ void ASRegisterGeneratedGlobalVariables(asIScriptEngine* engine)
     // constexpr float M_RADTODEG | File: ../Math/MathDefs.h
     engine->RegisterGlobalProperty("const float M_RADTODEG", (void*)&M_RADTODEG);
 
+    // constexpr u16 M_U16_MASK_ALL_BITS | File: ../Math/MathDefs.h
+    engine->RegisterGlobalProperty("const uint16 M_U16_MASK_ALL_BITS", (void*)&M_U16_MASK_ALL_BITS);
+
     // constexpr u32 M_U32_MASK_ALL_BITS | File: ../Math/MathDefs.h
     engine->RegisterGlobalProperty("const uint M_U32_MASK_ALL_BITS", (void*)&M_U32_MASK_ALL_BITS);
 

+ 8 - 8
Source/Urho3D/AngelScript/Generated_Members.h

@@ -21123,13 +21123,13 @@ template <class T> void RegisterMembers_PhysicsWorld2D(asIScriptEngine* engine,
     // Error: type "const b2Transform&" can not automatically bind
     // void PhysicsWorld2D::EndContact(b2Contact* contact) override
     // Error: type "b2Contact*" can not automatically bind
-    // void PhysicsWorld2D::GetRigidBodies(Vector<RigidBody2D*>& results, const Rect& aabb, unsigned collisionMask = M_MAX_UNSIGNED)
+    // void PhysicsWorld2D::GetRigidBodies(Vector<RigidBody2D*>& results, const Rect& aabb, u16 collisionMask = M_U16_MASK_ALL_BITS)
     // Error: type "Vector<RigidBody2D*>&" can not automatically bind
     // b2World* PhysicsWorld2D::GetWorld()
     // Error: type "b2World*" can not automatically bind
     // void PhysicsWorld2D::PreSolve(b2Contact* contact, const b2Manifold* oldManifold) override
     // Error: type "b2Contact*" can not automatically bind
-    // void PhysicsWorld2D::Raycast(Vector<PhysicsRaycastResult2D>& results, const Vector2& startPoint, const Vector2& endPoint, unsigned collisionMask = M_MAX_UNSIGNED)
+    // void PhysicsWorld2D::Raycast(Vector<PhysicsRaycastResult2D>& results, const Vector2& startPoint, const Vector2& endPoint, u16 collisionMask = M_U16_MASK_ALL_BITS)
     // Error: type "Vector<PhysicsRaycastResult2D>&" can not automatically bind
 
     // void PhysicsWorld2D::AddDelayedWorldTransform(const DelayedWorldTransform2D& transform)
@@ -21184,11 +21184,11 @@ template <class T> void RegisterMembers_PhysicsWorld2D(asIScriptEngine* engine,
     engine->RegisterObjectMethod(className, "int GetPositionIterations() const", AS_METHODPR(T, GetPositionIterations, () const, int), AS_CALL_THISCALL);
     engine->RegisterObjectMethod(className, "int get_positionIterations() const", AS_METHODPR(T, GetPositionIterations, () const, int), AS_CALL_THISCALL);
 
-    // RigidBody2D* PhysicsWorld2D::GetRigidBody(const Vector2& point, unsigned collisionMask = M_MAX_UNSIGNED)
-    engine->RegisterObjectMethod(className, "RigidBody2D@+ GetRigidBody(const Vector2&in, uint = M_MAX_UNSIGNED)", AS_METHODPR(T, GetRigidBody, (const Vector2&, unsigned), RigidBody2D*), AS_CALL_THISCALL);
+    // RigidBody2D* PhysicsWorld2D::GetRigidBody(const Vector2& point, u16 collisionMask = M_U16_MASK_ALL_BITS)
+    engine->RegisterObjectMethod(className, "RigidBody2D@+ GetRigidBody(const Vector2&in, uint16 = M_U16_MASK_ALL_BITS)", AS_METHODPR(T, GetRigidBody, (const Vector2&, u16), RigidBody2D*), AS_CALL_THISCALL);
 
-    // RigidBody2D* PhysicsWorld2D::GetRigidBody(int screenX, int screenY, unsigned collisionMask = M_MAX_UNSIGNED)
-    engine->RegisterObjectMethod(className, "RigidBody2D@+ GetRigidBody(int, int, uint = M_MAX_UNSIGNED)", AS_METHODPR(T, GetRigidBody, (int, int, unsigned), RigidBody2D*), AS_CALL_THISCALL);
+    // RigidBody2D* PhysicsWorld2D::GetRigidBody(int screenX, int screenY, u16 collisionMask = M_U16_MASK_ALL_BITS)
+    engine->RegisterObjectMethod(className, "RigidBody2D@+ GetRigidBody(int, int, uint16 = M_U16_MASK_ALL_BITS)", AS_METHODPR(T, GetRigidBody, (int, int, u16), RigidBody2D*), AS_CALL_THISCALL);
 
     // bool PhysicsWorld2D::GetSubStepping() const
     engine->RegisterObjectMethod(className, "bool GetSubStepping() const", AS_METHODPR(T, GetSubStepping, () const, bool), AS_CALL_THISCALL);
@@ -21209,8 +21209,8 @@ template <class T> void RegisterMembers_PhysicsWorld2D(asIScriptEngine* engine,
     engine->RegisterObjectMethod(className, "bool IsUpdateEnabled() const", AS_METHODPR(T, IsUpdateEnabled, () const, bool), AS_CALL_THISCALL);
     engine->RegisterObjectMethod(className, "bool get_updateEnabled() const", AS_METHODPR(T, IsUpdateEnabled, () const, bool), AS_CALL_THISCALL);
 
-    // void PhysicsWorld2D::RaycastSingle(PhysicsRaycastResult2D& result, const Vector2& startPoint, const Vector2& endPoint, unsigned collisionMask = M_MAX_UNSIGNED)
-    engine->RegisterObjectMethod(className, "void RaycastSingle(PhysicsRaycastResult2D&, const Vector2&in, const Vector2&in, uint = M_MAX_UNSIGNED)", AS_METHODPR(T, RaycastSingle, (PhysicsRaycastResult2D&, const Vector2&, const Vector2&, unsigned), void), AS_CALL_THISCALL);
+    // void PhysicsWorld2D::RaycastSingle(PhysicsRaycastResult2D& result, const Vector2& startPoint, const Vector2& endPoint, u16 collisionMask = M_U16_MASK_ALL_BITS)
+    engine->RegisterObjectMethod(className, "void RaycastSingle(PhysicsRaycastResult2D&, const Vector2&in, const Vector2&in, uint16 = M_U16_MASK_ALL_BITS)", AS_METHODPR(T, RaycastSingle, (PhysicsRaycastResult2D&, const Vector2&, const Vector2&, u16), void), AS_CALL_THISCALL);
 
     // void PhysicsWorld2D::RemoveRigidBody(RigidBody2D* rigidBody)
     engine->RegisterObjectMethod(className, "void RemoveRigidBody(RigidBody2D@+)", AS_METHODPR(T, RemoveRigidBody, (RigidBody2D*), void), AS_CALL_THISCALL);

+ 3 - 0
Source/Urho3D/Math/MathDefs.h

@@ -28,6 +28,9 @@ inline constexpr i32 M_MIN_INT = 0x80000000;
 inline constexpr i32 M_MAX_INT = 0x7fffffff;
 inline constexpr u32 M_MIN_UNSIGNED = 0x00000000;
 inline constexpr u32 M_MAX_UNSIGNED = 0xffffffff;
+
+inline constexpr u16 M_U16_MASK_ALL_BITS = 0xFFFF;
+inline constexpr i16 M_I16_MASK_ALL_BITS = -1;
 inline constexpr u32 M_U32_MASK_ALL_BITS = M_MAX_UNSIGNED;
 inline constexpr i32 M_I32_MASK_ALL_BITS = -1;
 

+ 21 - 21
Source/Urho3D/Physics2D/PhysicsWorld2D.cpp

@@ -48,9 +48,11 @@ PhysicsWorld2D::PhysicsWorld2D(Context* context) :
 
 PhysicsWorld2D::~PhysicsWorld2D()
 {
-    for (unsigned i = 0; i < rigidBodies_.Size(); ++i)
-        if (rigidBodies_[i])
-            rigidBodies_[i]->ReleaseBody();
+    for (const WeakPtr<RigidBody2D>& rigidBody : rigidBodies_)
+    {
+        if (rigidBody)
+            rigidBody->ReleaseBody();
+    }
 }
 
 void PhysicsWorld2D::RegisterObject(Context* context)
@@ -275,7 +277,7 @@ void PhysicsWorld2D::Update(float timeStep)
     physicsStepping_ = false;
 
     // Apply world transforms. Unparented transforms first
-    for (unsigned i = 0; i < rigidBodies_.Size();)
+    for (i32 i = 0; i < rigidBodies_.Size();)
     {
         if (rigidBodies_[i])
         {
@@ -441,7 +443,7 @@ class RayCastCallback : public b2RayCastCallback
 {
 public:
     // Construct.
-    RayCastCallback(Vector<PhysicsRaycastResult2D>& results, const Vector2& startPoint, unsigned collisionMask) :
+    RayCastCallback(Vector<PhysicsRaycastResult2D>& results, const Vector2& startPoint, u16 collisionMask) :
         results_(results),
         startPoint_(startPoint),
         collisionMask_(collisionMask)
@@ -474,11 +476,11 @@ protected:
     // Start point.
     Vector2 startPoint_;
     // Collision mask.
-    unsigned collisionMask_;
+    u16 collisionMask_;
 };
 
 void PhysicsWorld2D::Raycast(Vector<PhysicsRaycastResult2D>& results, const Vector2& startPoint, const Vector2& endPoint,
-    unsigned collisionMask)
+    u16 collisionMask/* = M_U16_MASK_ALL_BITS*/)
 {
     results.Clear();
 
@@ -491,7 +493,7 @@ class SingleRayCastCallback : public b2RayCastCallback
 {
 public:
     // Construct.
-    SingleRayCastCallback(PhysicsRaycastResult2D& result, const Vector2& startPoint, unsigned collisionMask) :
+    SingleRayCastCallback(PhysicsRaycastResult2D& result, const Vector2& startPoint, u16 collisionMask) :
         result_(result),
         startPoint_(startPoint),
         collisionMask_(collisionMask),
@@ -529,13 +531,13 @@ private:
     // Start point.
     Vector2 startPoint_;
     // Collision mask.
-    unsigned collisionMask_;
+    u16 collisionMask_;
     // Minimum distance.
     float minDistance_;
 };
 
 void PhysicsWorld2D::RaycastSingle(PhysicsRaycastResult2D& result, const Vector2& startPoint, const Vector2& endPoint,
-    unsigned collisionMask)
+    u16 collisionMask/* = M_U16_MASK_ALL_BITS*/)
 {
     result.body_ = nullptr;
 
@@ -548,7 +550,7 @@ class PointQueryCallback : public b2QueryCallback
 {
 public:
     // Construct.
-    PointQueryCallback(const b2Vec2& point, unsigned collisionMask) :   // NOLINT(modernize-pass-by-value)
+    PointQueryCallback(const b2Vec2& point, u16 collisionMask) :   // NOLINT(modernize-pass-by-value)
         point_(point),
         collisionMask_(collisionMask),
         rigidBody_(nullptr)
@@ -581,12 +583,12 @@ private:
     // Point.
     b2Vec2 point_;
     // Collision mask.
-    unsigned collisionMask_;
+    u16 collisionMask_;
     // Rigid body.
     RigidBody2D* rigidBody_;
 };
 
-RigidBody2D* PhysicsWorld2D::GetRigidBody(const Vector2& point, unsigned collisionMask)
+RigidBody2D* PhysicsWorld2D::GetRigidBody(const Vector2& point, u16 collisionMask/* = M_U16_MASK_ALL_BITS*/)
 {
     PointQueryCallback callback(ToB2Vec2(point), collisionMask);
 
@@ -599,7 +601,7 @@ RigidBody2D* PhysicsWorld2D::GetRigidBody(const Vector2& point, unsigned collisi
     return callback.GetRigidBody();
 }
 
-RigidBody2D* PhysicsWorld2D::GetRigidBody(int screenX, int screenY, unsigned collisionMask)
+RigidBody2D* PhysicsWorld2D::GetRigidBody(int screenX, int screenY, u16 collisionMask/* = M_U16_MASK_ALL_BITS*/)
 {
     auto* renderer = GetSubsystem<Renderer>();
     for (unsigned i = 0; i < renderer->GetNumViewports(); ++i)
@@ -621,7 +623,7 @@ class AabbQueryCallback : public b2QueryCallback
 {
 public:
     // Construct.
-    AabbQueryCallback(Vector<RigidBody2D*>& results, unsigned collisionMask) :
+    AabbQueryCallback(Vector<RigidBody2D*>& results, u16 collisionMask) :
         results_(results),
         collisionMask_(collisionMask)
     {
@@ -645,10 +647,10 @@ private:
     // Results.
     Vector<RigidBody2D*>& results_;
     // Collision mask.
-    unsigned collisionMask_;
+    u16 collisionMask_;
 };
 
-void PhysicsWorld2D::GetRigidBodies(Vector<RigidBody2D*>& results, const Rect& aabb, unsigned collisionMask)
+void PhysicsWorld2D::GetRigidBodies(Vector<RigidBody2D*>& results, const Rect& aabb, u16 collisionMask/* = M_U16_MASK_ALL_BITS*/)
 {
     AabbQueryCallback callback(results, collisionMask);
 
@@ -713,9 +715,8 @@ void PhysicsWorld2D::SendBeginContactEvents()
     VariantMap nodeEventData;
     eventData[P_WORLD] = this;
 
-    for (unsigned i = 0; i < beginContactInfos_.Size(); ++i)
+    for (const ContactInfo& contactInfo : beginContactInfos_)
     {
-        ContactInfo& contactInfo = beginContactInfos_[i];
         eventData[P_BODYA] = contactInfo.bodyA_.Get();
         eventData[P_BODYB] = contactInfo.bodyB_.Get();
         eventData[P_NODEA] = contactInfo.nodeA_.Get();
@@ -764,9 +765,8 @@ void PhysicsWorld2D::SendEndContactEvents()
     VariantMap nodeEventData;
     eventData[P_WORLD] = this;
 
-    for (unsigned i = 0; i < endContactInfos_.Size(); ++i)
+    for (const ContactInfo& contactInfo : endContactInfos_)
     {
-        ContactInfo& contactInfo = endContactInfos_[i];
         eventData[P_BODYA] = contactInfo.bodyA_.Get();
         eventData[P_BODYB] = contactInfo.bodyB_.Get();
         eventData[P_NODEA] = contactInfo.nodeA_.Get();

+ 5 - 5
Source/Urho3D/Physics2D/PhysicsWorld2D.h

@@ -145,16 +145,16 @@ public:
 
     /// Perform a physics world raycast and return all hits.
     void Raycast(Vector<PhysicsRaycastResult2D>& results, const Vector2& startPoint, const Vector2& endPoint,
-        unsigned collisionMask = M_MAX_UNSIGNED);
+        u16 collisionMask = M_U16_MASK_ALL_BITS);
     /// Perform a physics world raycast and return the closest hit.
     void RaycastSingle(PhysicsRaycastResult2D& result, const Vector2& startPoint, const Vector2& endPoint,
-        unsigned collisionMask = M_MAX_UNSIGNED);
+        u16 collisionMask = M_U16_MASK_ALL_BITS);
     /// Return rigid body at point.
-    RigidBody2D* GetRigidBody(const Vector2& point, unsigned collisionMask = M_MAX_UNSIGNED);
+    RigidBody2D* GetRigidBody(const Vector2& point, u16 collisionMask = M_U16_MASK_ALL_BITS);
     /// Return rigid body at screen point.
-    RigidBody2D* GetRigidBody(int screenX, int screenY, unsigned collisionMask = M_MAX_UNSIGNED);
+    RigidBody2D* GetRigidBody(int screenX, int screenY, u16 collisionMask = M_U16_MASK_ALL_BITS);
     /// Return rigid bodies by a box query.
-    void GetRigidBodies(Vector<RigidBody2D*>& results, const Rect& aabb, unsigned collisionMask = M_MAX_UNSIGNED);
+    void GetRigidBodies(Vector<RigidBody2D*>& results, const Rect& aabb, u16 collisionMask = M_U16_MASK_ALL_BITS);
 
     /// Return whether physics world will automatically simulate during scene update.
     /// @property

+ 2 - 2
bin/Data/Scripts/32_Physics2DConstraints.as

@@ -374,7 +374,7 @@ void HandlePostRenderUpdate(StringHash eventType, VariantMap& eventData)
 void HandleMouseButtonDown(StringHash eventType, VariantMap& eventData)
 {
     PhysicsWorld2D@ physicsWorld = scene_.GetComponent("PhysicsWorld2D");
-    RigidBody2D@ rigidBody = physicsWorld.GetRigidBody(input.mousePosition.x, input.mousePosition.y, M_MAX_UNSIGNED); // Raycast for RigidBody2Ds to pick
+    RigidBody2D@ rigidBody = physicsWorld.GetRigidBody(input.mousePosition.x, input.mousePosition.y); // Raycast for RigidBody2Ds to pick
     if (rigidBody !is null)
     {
         pickedNode = rigidBody.node;
@@ -426,7 +426,7 @@ void HandleMouseMove(StringHash eventType, VariantMap& eventData)
 void HandleTouchBegin3(StringHash eventType, VariantMap& eventData)
 {
     PhysicsWorld2D@ physicsWorld = scene_.GetComponent("PhysicsWorld2D");
-    RigidBody2D@ rigidBody = physicsWorld.GetRigidBody(eventData["X"].GetInt(), eventData["Y"].GetInt(), M_MAX_UNSIGNED); // Raycast for RigidBody2Ds to pick
+    RigidBody2D@ rigidBody = physicsWorld.GetRigidBody(eventData["X"].GetInt(), eventData["Y"].GetInt()); // Raycast for RigidBody2Ds to pick
     if (rigidBody !is null)
     {
         pickedNode = rigidBody.node;