Browse Source

Enhance and cleanup stringify for Vector

mashumafi 3 years ago
parent
commit
575d4e00b6

+ 27 - 79
core/variant/variant.cpp

@@ -1624,6 +1624,19 @@ Variant::operator String() const {
 	return stringify(stack);
 }
 
+template <class T>
+String stringify_vector(const T &vec, List<const void *> &stack) {
+	String str("[");
+	for (int i = 0; i < vec.size(); i++) {
+		if (i > 0) {
+			str += ", ";
+		}
+		str = str + Variant(vec[i]).stringify(stack);
+	}
+	str += "]";
+	return str;
+}
+
 String Variant::stringify(List<const void *> &stack) const {
 	switch (type) {
 		case NIL:
@@ -1703,88 +1716,31 @@ String Variant::stringify(List<const void *> &stack) const {
 			return str;
 		} break;
 		case PACKED_VECTOR2_ARRAY: {
-			Vector<Vector2> vec = operator Vector<Vector2>();
-			String str("[");
-			for (int i = 0; i < vec.size(); i++) {
-				if (i > 0) {
-					str += ", ";
-				}
-				str = str + Variant(vec[i]);
-			}
-			str += "]";
-			return str;
+			return stringify_vector(operator Vector<Vector2>(), stack);
 		} break;
 		case PACKED_VECTOR3_ARRAY: {
-			Vector<Vector3> vec = operator Vector<Vector3>();
-			String str("[");
-			for (int i = 0; i < vec.size(); i++) {
-				if (i > 0) {
-					str += ", ";
-				}
-				str = str + Variant(vec[i]);
-			}
-			str += "]";
-			return str;
+			return stringify_vector(operator Vector<Vector3>(), stack);
+		} break;
+		case PACKED_COLOR_ARRAY: {
+			return stringify_vector(operator Vector<Color>(), stack);
 		} break;
 		case PACKED_STRING_ARRAY: {
-			Vector<String> vec = operator Vector<String>();
-			String str("[");
-			for (int i = 0; i < vec.size(); i++) {
-				if (i > 0) {
-					str += ", ";
-				}
-				str = str + vec[i];
-			}
-			str += "]";
-			return str;
+			return stringify_vector(operator Vector<String>(), stack);
+		} break;
+		case PACKED_BYTE_ARRAY: {
+			return stringify_vector(operator Vector<uint8_t>(), stack);
 		} break;
 		case PACKED_INT32_ARRAY: {
-			Vector<int32_t> vec = operator Vector<int32_t>();
-			String str("[");
-			for (int i = 0; i < vec.size(); i++) {
-				if (i > 0) {
-					str += ", ";
-				}
-				str = str + itos(vec[i]);
-			}
-			str += "]";
-			return str;
+			return stringify_vector(operator Vector<int32_t>(), stack);
 		} break;
 		case PACKED_INT64_ARRAY: {
-			Vector<int64_t> vec = operator Vector<int64_t>();
-			String str("[");
-			for (int i = 0; i < vec.size(); i++) {
-				if (i > 0) {
-					str += ", ";
-				}
-				str = str + itos(vec[i]);
-			}
-			str += "]";
-			return str;
+			return stringify_vector(operator Vector<int64_t>(), stack);
 		} break;
 		case PACKED_FLOAT32_ARRAY: {
-			Vector<float> vec = operator Vector<float>();
-			String str("[");
-			for (int i = 0; i < vec.size(); i++) {
-				if (i > 0) {
-					str += ", ";
-				}
-				str = str + rtos(vec[i]);
-			}
-			str += "]";
-			return str;
+			return stringify_vector(operator Vector<float>(), stack);
 		} break;
 		case PACKED_FLOAT64_ARRAY: {
-			Vector<double> vec = operator Vector<double>();
-			String str("[");
-			for (int i = 0; i < vec.size(); i++) {
-				if (i > 0) {
-					str += ", ";
-				}
-				str = str + rtos(vec[i]);
-			}
-			str += "]";
-			return str;
+			return stringify_vector(operator Vector<double>(), stack);
 		} break;
 		case ARRAY: {
 			Array arr = operator Array();
@@ -1793,16 +1749,8 @@ String Variant::stringify(List<const void *> &stack) const {
 			}
 			stack.push_back(arr.id());
 
-			String str("[");
-			for (int i = 0; i < arr.size(); i++) {
-				if (i) {
-					str += ", ";
-				}
-
-				str += arr[i].stringify(stack);
-			}
+			String str = stringify_vector(arr, stack);
 
-			str += "]";
 			stack.erase(arr.id());
 			return str;
 

+ 42 - 0
modules/gdscript/tests/scripts/runtime/features/stringify.gd

@@ -0,0 +1,42 @@
+func test():
+	print(true, false)
+	print(-1, 0, 1)
+	print(-1.25, 0.25, 1.25)
+	print("hello world")
+
+	print(Vector2(0.25, 0.25))
+	print(Vector2i(0, 0))
+
+	print(Rect2(0.25, 0.25, 0.5, 0.5))
+	print(Rect2i(0, 0, 0, 0))
+
+	print(Vector3(0.25, 0.25, 0.25))
+	print(Vector3i(0, 0, 0))
+
+	print(Transform2D.IDENTITY)
+	print(Plane(1, 2, 3, 4))
+	print(Quaternion(1, 2, 3, 4))
+	print(AABB(Vector3.ZERO, Vector3.ONE))
+	print(Basis(Vector3(0, 0, 0)))
+	print(Transform3D.IDENTITY)
+
+	print(Color(1, 2, 3, 4))
+	print(StringName("hello"))
+	print(NodePath("hello/world"))
+	var node := Node.new()
+	print(RID(node))
+	print(node.get_name)
+	print(node.property_list_changed)
+	node.free()
+	print({"hello":123})
+	print(["hello", 123])
+
+	print(PackedByteArray([-1, 0, 1]))
+	print(PackedInt32Array([-1, 0, 1]))
+	print(PackedInt64Array([-1, 0, 1]))
+	print(PackedFloat32Array([-1, 0, 1]))
+	print(PackedFloat64Array([-1, 0, 1]))
+	print(PackedStringArray(["hello", "world"]))
+	print(PackedVector2Array([Vector2.ONE, Vector2.ZERO]))
+	print(PackedVector3Array([Vector3.ONE, Vector3.ZERO]))
+	print(PackedColorArray([Color.RED, Color.BLUE, Color.GREEN]))

+ 34 - 0
modules/gdscript/tests/scripts/runtime/features/stringify.out

@@ -0,0 +1,34 @@
+GDTEST_OK
+truefalse
+-101
+-1.250.251.25
+hello world
+(0.25, 0.25)
+(0, 0)
+[P: (0.25, 0.25), S: (0.5, 0.5)]
+[P: (0, 0), S: (0, 0)]
+(0.25, 0.25, 0.25)
+(0, 0, 0)
+[X: (1, 0), Y: (0, 1), O: (0, 0)]
+[N: (1, 2, 3), D: 4]
+(1, 2, 3, 4)
+[P: (0, 0, 0), S: (1, 1, 1)]
+[X: (1, 0, 0), Y: (0, 1, 0), Z: (0, 0, 1)]
+[X: (1, 0, 0), Y: (0, 1, 0), Z: (0, 0, 1), O: (0, 0, 0)]
+(1, 2, 3, 4)
+hello
+hello/world
+RID(0)
+Node::get_name
+Node::[signal]property_list_changed
+{hello:123}
+[hello, 123]
+[255, 0, 1]
+[-1, 0, 1]
+[-1, 0, 1]
+[-1, 0, 1]
+[-1, 0, 1]
+[hello, world]
+[(1, 1), (0, 0)]
+[(1, 1, 1), (0, 0, 0)]
+[(1, 0, 0, 1), (0, 0, 1, 1), (0, 1, 0, 1)]