Browse Source

Use forward declares for vector math types

Adds operators to convert from int vector types to float vector types
as done in the upstream engine implementations.
Rémi Verschelde 3 years ago
parent
commit
7e3321d1b2

+ 3 - 0
include/godot_cpp/variant/rect2.hpp

@@ -37,6 +37,8 @@
 
 namespace godot {
 
+class Rect2i;
+class String;
 class Transform2D;
 
 class Rect2 {
@@ -326,6 +328,7 @@ public:
 	}
 
 	operator String() const;
+	operator Rect2i() const;
 
 	Rect2() {}
 	Rect2(real_t p_x, real_t p_y, real_t p_width, real_t p_height) :

+ 7 - 8
include/godot_cpp/variant/rect2i.hpp

@@ -31,11 +31,15 @@
 #ifndef GODOT_RECT2I_HPP
 #define GODOT_RECT2I_HPP
 
-#include <godot_cpp/variant/rect2.hpp>
+#include <godot_cpp/classes/global_constants.hpp>
+#include <godot_cpp/core/math.hpp>
 #include <godot_cpp/variant/vector2i.hpp>
 
 namespace godot {
 
+class Rect2;
+class String;
+
 class Rect2i {
 	_FORCE_INLINE_ GDNativeTypePtr _native_ptr() const { return (void *)this; }
 
@@ -206,15 +210,10 @@ public:
 		return position + size;
 	}
 
-	operator String() const { return String(position) + ", " + String(size); }
-
-	operator Rect2() const { return Rect2(position, size); }
+	operator String() const;
+	operator Rect2() const;
 
 	Rect2i() {}
-	Rect2i(const Rect2 &p_r2) :
-			position(p_r2.position),
-			size(p_r2.size) {
-	}
 	Rect2i(int p_x, int p_y, int p_width, int p_height) :
 			position(Point2i(p_x, p_y)),
 			size(Size2i(p_width, p_height)) {

+ 1 - 1
include/godot_cpp/variant/vector2.hpp

@@ -32,10 +32,10 @@
 #define GODOT_VECTOR2_HPP
 
 #include <godot_cpp/core/math.hpp>
-#include <godot_cpp/variant/string.hpp>
 
 namespace godot {
 
+class String;
 class Vector2i;
 
 class Vector2 {

+ 4 - 8
include/godot_cpp/variant/vector2i.hpp

@@ -32,11 +32,12 @@
 #define GODOT_VECTOR2I_HPP
 
 #include <godot_cpp/core/math.hpp>
-#include <godot_cpp/variant/string.hpp>
-#include <godot_cpp/variant/vector2.hpp>
 
 namespace godot {
 
+class String;
+class Vector2;
+
 class Vector2i {
 	_FORCE_INLINE_ GDNativeTypePtr _native_ptr() const { return (void *)this; }
 
@@ -96,14 +97,9 @@ public:
 	Vector2i abs() const { return Vector2i(Math::abs(x), Math::abs(y)); }
 
 	operator String() const;
-
-	operator Vector2() const { return Vector2((real_t)x, (real_t)y); }
+	operator Vector2() const;
 
 	inline Vector2i() {}
-	inline Vector2i(const Vector2 &p_vec2) {
-		x = (int32_t)p_vec2.x;
-		y = (int32_t)p_vec2.y;
-	}
 	inline Vector2i(int32_t p_x, int32_t p_y) {
 		x = p_x;
 		y = p_y;

+ 1 - 2
include/godot_cpp/variant/vector3.hpp

@@ -32,11 +32,11 @@
 #define GODOT_VECTOR3_HPP
 
 #include <godot_cpp/core/math.hpp>
-#include <godot_cpp/variant/string.hpp>
 
 namespace godot {
 
 class Basis;
+class String;
 class Vector3i;
 
 class Vector3 {
@@ -159,7 +159,6 @@ public:
 		y = p_y;
 		z = p_z;
 	}
-	Vector3(const Vector3i &p_ivec);
 };
 
 Vector3 Vector3::cross(const Vector3 &p_b) const {

+ 4 - 1
include/godot_cpp/variant/vector3i.hpp

@@ -32,10 +32,12 @@
 #define GODOT_VECTOR3I_HPP
 
 #include <godot_cpp/core/math.hpp>
-#include <godot_cpp/variant/string.hpp>
 
 namespace godot {
 
+class String;
+class Vector3;
+
 class Vector3i {
 	_FORCE_INLINE_ GDNativeTypePtr _native_ptr() const { return (void *)this; }
 
@@ -107,6 +109,7 @@ public:
 	inline bool operator>=(const Vector3i &p_v) const;
 
 	operator String() const;
+	operator Vector3() const;
 
 	inline Vector3i() {}
 	inline Vector3i(int32_t p_x, int32_t p_y, int32_t p_z) {

+ 10 - 0
src/variant/rect2.cpp

@@ -30,6 +30,8 @@
 
 #include <godot_cpp/variant/rect2.hpp>
 
+#include <godot_cpp/variant/rect2i.hpp>
+#include <godot_cpp/variant/string.hpp>
 #include <godot_cpp/variant/transform2d.hpp>
 
 namespace godot {
@@ -268,4 +270,12 @@ next4:
 	return true;
 }
 
+Rect2::operator String() const {
+	return String(position) + ", " + String(size);
+}
+
+Rect2::operator Rect2i() const {
+	return Rect2i(position, size);
+}
+
 } // namespace godot

+ 14 - 1
src/variant/rect2i.cpp

@@ -30,4 +30,17 @@
 
 #include <godot_cpp/variant/rect2i.hpp>
 
-// No implementation left. This is here to add the header as a compiled unit.
+#include <godot_cpp/variant/rect2.hpp>
+#include <godot_cpp/variant/string.hpp>
+
+namespace godot {
+
+Rect2i::operator String() const {
+	return String(position) + ", " + String(size);
+}
+
+Rect2i::operator Rect2() const {
+	return Rect2(position, size);
+}
+
+} // namespace godot

+ 10 - 9
src/variant/vector2.cpp

@@ -28,21 +28,14 @@
 /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.                */
 /*************************************************************************/
 
+#include <godot_cpp/variant/vector2.hpp>
+
 #include <godot_cpp/core/error_macros.hpp>
 #include <godot_cpp/variant/string.hpp>
-#include <godot_cpp/variant/vector2.hpp>
 #include <godot_cpp/variant/vector2i.hpp>
 
 namespace godot {
 
-Vector2::operator String() const {
-	return String::num(x, 5) + ", " + String::num(y, 5);
-}
-
-Vector2::operator Vector2i() const {
-	return Vector2i(x, y);
-}
-
 real_t Vector2::angle() const {
 	return Math::atan2(y, x);
 }
@@ -200,4 +193,12 @@ bool Vector2::is_equal_approx(const Vector2 &p_v) const {
 	return Math::is_equal_approx(x, p_v.x) && Math::is_equal_approx(y, p_v.y);
 }
 
+Vector2::operator String() const {
+	return String::num(x, 5) + ", " + String::num(y, 5);
+}
+
+Vector2::operator Vector2i() const {
+	return Vector2i(x, y);
+}
+
 } // namespace godot

+ 11 - 5
src/variant/vector2i.cpp

@@ -28,16 +28,14 @@
 /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.                */
 /*************************************************************************/
 
+#include <godot_cpp/variant/vector2i.hpp>
+
 #include <godot_cpp/core/error_macros.hpp>
 #include <godot_cpp/variant/string.hpp>
-#include <godot_cpp/variant/vector2i.hpp>
+#include <godot_cpp/variant/vector2.hpp>
 
 namespace godot {
 
-Vector2i::operator String() const {
-	return String::num(x, 0) + ", " + String::num(y, 0);
-}
-
 Vector2i Vector2i::operator+(const Vector2i &p_v) const {
 	return Vector2i(x + p_v.x, y + p_v.y);
 }
@@ -107,4 +105,12 @@ bool Vector2i::operator!=(const Vector2i &p_vec2) const {
 	return x != p_vec2.x || y != p_vec2.y;
 }
 
+Vector2i::operator String() const {
+	return String::num(x, 0) + ", " + String::num(y, 0);
+}
+
+Vector2i::operator Vector2() const {
+	return Vector2((real_t)x, (real_t)y);
+}
+
 } // namespace godot

+ 2 - 1
src/variant/vector3.cpp

@@ -28,9 +28,10 @@
 /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.                */
 /*************************************************************************/
 
+#include <godot_cpp/variant/vector3.hpp>
+
 #include <godot_cpp/core/error_macros.hpp>
 #include <godot_cpp/variant/basis.hpp>
-#include <godot_cpp/variant/vector3.hpp>
 #include <godot_cpp/variant/vector3i.hpp>
 
 namespace godot {

+ 7 - 1
src/variant/vector3i.cpp

@@ -28,9 +28,11 @@
 /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.                */
 /*************************************************************************/
 
+#include <godot_cpp/variant/vector3i.hpp>
+
 #include <godot_cpp/core/error_macros.hpp>
 #include <godot_cpp/variant/string.hpp>
-#include <godot_cpp/variant/vector3i.hpp>
+#include <godot_cpp/variant/vector3.hpp>
 
 namespace godot {
 
@@ -56,4 +58,8 @@ Vector3i::operator String() const {
 	return (String::num(x, 0) + ", " + String::num(y, 0) + ", " + String::num(z, 5));
 }
 
+Vector3i::operator Vector3() const {
+	return Vector3((real_t)x, (real_t)y, (real_t)z);
+}
+
 } // namespace godot