diff --git a/core/variant/container_type_validate.h b/core/variant/container_type_validate.h index ad679db9d05..ffe1dc90a39 100644 --- a/core/variant/container_type_validate.h +++ b/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) + "'."); diff --git a/modules/gdscript/tests/scripts/analyzer/features/typed_array_usage.gd b/modules/gdscript/tests/scripts/analyzer/features/typed_array_usage.gd index 092ae49d001..7416ecd87ae 100644 --- a/modules/gdscript/tests/scripts/analyzer/features/typed_array_usage.gd +++ b/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)