Browse Source

Merge pull request #2098 from Modanung/IntVector-operators

Added operator overloads for multiplying IntVectors
Eugene Kozlov 8 years ago
parent
commit
e56ff1b0c6

+ 8 - 0
Source/Urho3D/AngelScript/MathAPI.cpp

@@ -190,12 +190,16 @@ static void RegisterIntVector2(asIScriptEngine* engine)
     engine->RegisterObjectMethod("IntVector2", "IntVector2& opSubAssign(const IntVector2&in)", asMETHOD(IntVector2, operator -=), asCALL_THISCALL);
     engine->RegisterObjectMethod("IntVector2", "IntVector2& opMulAssign(int)", asMETHODPR(IntVector2, operator *=, (int), IntVector2&), asCALL_THISCALL);
     engine->RegisterObjectMethod("IntVector2", "IntVector2& opDivAssign(int)", asMETHODPR(IntVector2, operator /=, (int), IntVector2&), asCALL_THISCALL);
+    engine->RegisterObjectMethod("IntVector2", "IntVector2& opMulAssign(const IntVector2&in)", asMETHODPR(IntVector2, operator *=, (const IntVector2&), IntVector2&), asCALL_THISCALL);
+    engine->RegisterObjectMethod("IntVector2", "IntVector2& opDivAssign(const IntVector2&in)", asMETHODPR(IntVector2, operator /=, (const IntVector2&), IntVector2&), asCALL_THISCALL);
     engine->RegisterObjectMethod("IntVector2", "bool opEquals(const IntVector2&in) const", asMETHOD(IntVector2, operator ==), asCALL_THISCALL);
     engine->RegisterObjectMethod("IntVector2", "IntVector2 opNeg() const", asMETHODPR(IntVector2, operator -, () const, IntVector2), asCALL_THISCALL);
     engine->RegisterObjectMethod("IntVector2", "IntVector2 opAdd(const IntVector2&in) const", asMETHOD(IntVector2, operator +), asCALL_THISCALL);
     engine->RegisterObjectMethod("IntVector2", "IntVector2 opSub(const IntVector2&in) const", asMETHODPR(IntVector2, operator -, (const IntVector2&) const, IntVector2), asCALL_THISCALL);
     engine->RegisterObjectMethod("IntVector2", "IntVector2 opMul(int) const", asMETHODPR(IntVector2, operator *, (int) const, IntVector2), asCALL_THISCALL);
     engine->RegisterObjectMethod("IntVector2", "IntVector2 opDiv(int) const", asMETHODPR(IntVector2, operator /, (int) const, IntVector2), asCALL_THISCALL);
+    engine->RegisterObjectMethod("IntVector2", "IntVector2 opMul(const IntVector2&in) const", asMETHODPR(IntVector2, operator *, (const IntVector2&) const, IntVector2), asCALL_THISCALL);
+    engine->RegisterObjectMethod("IntVector2", "IntVector2 opDiv(const IntVector2&in) const", asMETHODPR(IntVector2, operator /, (const IntVector2&) const, IntVector2), asCALL_THISCALL);
     engine->RegisterObjectMethod("IntVector2", "String ToString() const", asMETHOD(IntVector2, ToString), asCALL_THISCALL);
     engine->RegisterObjectMethod("IntVector2", "uint ToHash() const", asMETHOD(IntVector2, ToHash), asCALL_THISCALL);
     engine->RegisterObjectMethod("IntVector2", "float Length() const", asMETHOD(IntVector2, Length), asCALL_THISCALL);
@@ -252,12 +256,16 @@ static void RegisterIntVector3(asIScriptEngine* engine)
     engine->RegisterObjectMethod("IntVector3", "IntVector3& opSubAssign(const IntVector3&in)", asMETHOD(IntVector3, operator -=), asCALL_THISCALL);
     engine->RegisterObjectMethod("IntVector3", "IntVector3& opMulAssign(int)", asMETHODPR(IntVector3, operator *=, (int), IntVector3&), asCALL_THISCALL);
     engine->RegisterObjectMethod("IntVector3", "IntVector3& opDivAssign(int)", asMETHODPR(IntVector3, operator /=, (int), IntVector3&), asCALL_THISCALL);
+    engine->RegisterObjectMethod("IntVector3", "IntVector3& opMulAssign(const IntVector3&in)", asMETHODPR(IntVector3, operator *=, (const IntVector3&), IntVector3&), asCALL_THISCALL);
+    engine->RegisterObjectMethod("IntVector3", "IntVector3& opDivAssign(const IntVector3&in)", asMETHODPR(IntVector3, operator /=, (const IntVector3&), IntVector3&), asCALL_THISCALL);
     engine->RegisterObjectMethod("IntVector3", "bool opEquals(const IntVector3&in) const", asMETHOD(IntVector3, operator ==), asCALL_THISCALL);
     engine->RegisterObjectMethod("IntVector3", "IntVector3 opNeg() const", asMETHODPR(IntVector3, operator -, () const, IntVector3), asCALL_THISCALL);
     engine->RegisterObjectMethod("IntVector3", "IntVector3 opAdd(const IntVector3&in) const", asMETHOD(IntVector3, operator +), asCALL_THISCALL);
     engine->RegisterObjectMethod("IntVector3", "IntVector3 opSub(const IntVector3&in) const", asMETHODPR(IntVector3, operator -, (const IntVector3&) const, IntVector3), asCALL_THISCALL);
     engine->RegisterObjectMethod("IntVector3", "IntVector3 opMul(int) const", asMETHODPR(IntVector3, operator *, (int) const, IntVector3), asCALL_THISCALL);
     engine->RegisterObjectMethod("IntVector3", "IntVector3 opDiv(int) const", asMETHODPR(IntVector3, operator /, (int) const, IntVector3), asCALL_THISCALL);
+    engine->RegisterObjectMethod("IntVector3", "IntVector3 opMul(const IntVector3&in) const", asMETHODPR(IntVector3, operator *, (const IntVector3&) const, IntVector3), asCALL_THISCALL);
+    engine->RegisterObjectMethod("IntVector3", "IntVector3 opDiv(const IntVector3&in) const", asMETHODPR(IntVector3, operator /, (const IntVector3&) const, IntVector3), asCALL_THISCALL);
     engine->RegisterObjectMethod("IntVector3", "String ToString() const", asMETHOD(IntVector3, ToString), asCALL_THISCALL);
     engine->RegisterObjectMethod("IntVector3", "uint ToHash() const", asMETHOD(IntVector3, ToHash), asCALL_THISCALL);
     engine->RegisterObjectMethod("IntVector3", "float Length() const", asMETHOD(IntVector3, Length), asCALL_THISCALL);

+ 7 - 2
Source/Urho3D/LuaScript/pkgs/Math/Vector2.pkg

@@ -16,7 +16,6 @@ class Vector2
     Vector2 operator * (const Vector2& rhs) const;
     Vector2 operator / (float rhs) const;
     Vector2 operator / (const Vector2& rhs) const;
-    Vector2 operator / (const Vector2& rhs) const;
 
     void Normalize();
     float Length() const;
@@ -29,7 +28,6 @@ class Vector2
     Vector2 Lerp(const Vector2& rhs, float t) const;
     bool Equals(const Vector2& rhs) const;
     bool IsNaN() const;
-
     Vector2 Normalized() const;
 
     String ToString() const;
@@ -57,7 +55,9 @@ class IntVector2
     IntVector2 operator - () const;
     IntVector2 operator - (const IntVector2& rhs) const;
     IntVector2 operator * (int rhs) const;
+    IntVector2 operator * (const IntVector2& rhs) const;
     IntVector2 operator / (int rhs) const;
+    IntVector2 operator / (const IntVector2& rhs) const;
 
     String ToString() const;
     unsigned ToHash() const;
@@ -67,6 +67,11 @@ class IntVector2
     int y_ @ y;
 
     static const IntVector2 ZERO;
+    static const IntVector2 LEFT;
+    static const IntVector2 RIGHT;
+    static const IntVector2 UP;
+    static const IntVector2 DOWN;
+    static const IntVector2 ONE;
 };
 
 Vector2 VectorLerp(const Vector2& lhs, const Vector2& rhs, const Vector2& t);

+ 3 - 0
Source/Urho3D/LuaScript/pkgs/Math/Vector3.pkg

@@ -19,6 +19,7 @@ class Vector3
     Vector3 operator * (const Vector3& rhs) const;
     Vector3 operator / (float rhs) const;
     Vector3 operator / (const Vector3& rhs) const;
+
     void Normalize();
     float Length() const;
     float LengthSquared() const;
@@ -62,7 +63,9 @@ class IntVector3
     IntVector3 operator - () const;
     IntVector3 operator - (const IntVector3& rhs) const;
     IntVector3 operator * (int rhs) const;
+    IntVector3 operator * (const IntVector3& rhs) const;
     IntVector3 operator / (int rhs) const;
+    IntVector3 operator / (const IntVector3& rhs) const;
 
     String ToString() const;
     unsigned ToHash() const;

+ 22 - 0
Source/Urho3D/Math/Vector2.h

@@ -86,9 +86,15 @@ public:
     /// Multiply with a scalar.
     IntVector2 operator *(int rhs) const { return IntVector2(x_ * rhs, y_ * rhs); }
 
+    /// Multiply with a vector.
+    IntVector2 operator *(const IntVector2& rhs) const { return IntVector2(x_ * rhs.x_, y_ * rhs.y_); }
+
     /// Divide by a scalar.
     IntVector2 operator /(int rhs) const { return IntVector2(x_ / rhs, y_ / rhs); }
 
+    /// Divide by a vector.
+    IntVector2 operator /(const IntVector2& rhs) const { return IntVector2(x_ / rhs.x_, y_ / rhs.y_); }
+
     /// Add-assign a vector.
     IntVector2& operator +=(const IntVector2& rhs)
     {
@@ -113,6 +119,14 @@ public:
         return *this;
     }
 
+    /// Multiply-assign a vector.
+    IntVector2& operator *=(const IntVector2& rhs)
+    {
+        x_ *= rhs.x_;
+        y_ *= rhs.y_;
+        return *this;
+    }
+
     /// Divide-assign a scalar.
     IntVector2& operator /=(int rhs)
     {
@@ -121,6 +135,14 @@ public:
         return *this;
     }
 
+    /// Divide-assign a vector.
+    IntVector2& operator /=(const IntVector2& rhs)
+    {
+        x_ /= rhs.x_;
+        y_ /= rhs.y_;
+        return *this;
+    }
+
     /// Return integer data.
     const int* Data() const { return &x_; }
 

+ 24 - 0
Source/Urho3D/Math/Vector3.h

@@ -91,9 +91,15 @@ public:
     /// Multiply with a scalar.
     IntVector3 operator *(int rhs) const { return IntVector3(x_ * rhs, y_ * rhs, z_ * rhs); }
 
+    /// Multiply with a vector.
+    IntVector3 operator *(const IntVector3& rhs) const { return IntVector3(x_ * rhs.x_, y_ * rhs.y_, z_ * rhs.z_); }
+
     /// Divide by a scalar.
     IntVector3 operator /(int rhs) const { return IntVector3(x_ / rhs, y_ / rhs, z_ / rhs); }
 
+    /// Divide by a vector.
+    IntVector3 operator /(const IntVector3& rhs) const { return IntVector3(x_ / rhs.x_, y_ / rhs.y_, z_ / rhs.z_); }
+
     /// Add-assign a vector.
     IntVector3& operator +=(const IntVector3& rhs)
     {
@@ -121,6 +127,15 @@ public:
         return *this;
     }
 
+    /// Multiply-assign a vector.
+    IntVector3& operator *=(const IntVector3& rhs)
+    {
+        x_ *= rhs.x_;
+        y_ *= rhs.y_;
+        z_ *= rhs.z_;
+        return *this;
+    }
+
     /// Divide-assign a scalar.
     IntVector3& operator /=(int rhs)
     {
@@ -130,6 +145,15 @@ public:
         return *this;
     }
 
+    /// Divide-assign a vector.
+    IntVector3& operator /=(const IntVector3& rhs)
+    {
+        x_ /= rhs.x_;
+        y_ /= rhs.y_;
+        z_ /= rhs.z_;
+        return *this;
+    }
+
     /// Return integer data.
     const int* Data() const { return &x_; }