Browse Source

Merge pull request #73244 from vonagam/fix-int-in-float-typed-array

GDScript: Fix usage of ints with typed array of floats
Rémi Verschelde 2 years ago
parent
commit
02a9a31b1b

+ 4 - 1
core/variant/container_type_validate.h

@@ -73,7 +73,7 @@ struct ContainerTypeValidate {
 		return type != p_type.type || class_name != p_type.class_name || script != p_type.script;
 	}
 
-	// Coerces String and StringName into each other when needed.
+	// Coerces String and StringName into each other and int into float when needed.
 	_FORCE_INLINE_ bool validate(Variant &inout_variant, const char *p_operation = "use") const {
 		if (type == Variant::NIL) {
 			return true;
@@ -89,6 +89,9 @@ struct ContainerTypeValidate {
 			} else if (type == Variant::STRING_NAME && inout_variant.get_type() == Variant::STRING) {
 				inout_variant = StringName(inout_variant);
 				return true;
+			} else if (type == Variant::FLOAT && inout_variant.get_type() == Variant::INT) {
+				inout_variant = (float)inout_variant;
+				return true;
 			}
 
 			ERR_FAIL_V_MSG(false, "Attempted to " + String(p_operation) + " a variable of type '" + Variant::get_type_name(inout_variant.get_type()) + "' into a " + where + " of type '" + Variant::get_type_name(type) + "'.");

+ 2 - 1
modules/gdscript/tests/scripts/analyzer/features/typed_array_usage.gd

@@ -86,7 +86,8 @@ func test():
 
 	var typed_int := 556
 	var converted_floats: Array[float] = [typed_int]
-	assert(str(converted_floats) == '[556]')
+	converted_floats.push_back(498)
+	assert(str(converted_floats) == '[556, 498]')
 	assert(converted_floats.get_typed_builtin() == TYPE_FLOAT)