summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--binding_generator.py15
-rw-r--r--test/project/main.gd1
-rw-r--r--test/src/example.cpp10
-rw-r--r--test/src/example.h1
4 files changed, 27 insertions, 0 deletions
diff --git a/binding_generator.py b/binding_generator.py
index 9dd0ed7..ed91fa3 100644
--- a/binding_generator.py
+++ b/binding_generator.py
@@ -542,6 +542,10 @@ def generate_builtin_class_header(builtin_api, size, used_classes, fully_used_cl
if class_name == "PackedVector3Array":
result.append("#include <godot_cpp/variant/vector3.hpp>")
+ if is_packed_array(class_name):
+ result.append("#include <godot_cpp/core/error_macros.hpp>")
+ result.append("#include <initializer_list>")
+
if class_name == "Array":
result.append("#include <godot_cpp/variant/array_helpers.hpp>")
@@ -869,6 +873,17 @@ def generate_builtin_class_header(builtin_api, size, used_classes, fully_used_cl
}
"""
result.append(iterators.replace("$TYPE", return_type))
+ init_list = """
+ _FORCE_INLINE_ $CLASS(std::initializer_list<$TYPE> p_init) {
+ ERR_FAIL_COND(resize(p_init.size()) != 0);
+
+ size_t i = 0;
+ for (const $TYPE &element : p_init) {
+ set(i++, element);
+ }
+ }
+"""
+ result.append(init_list.replace("$TYPE", return_type).replace("$CLASS", class_name))
if class_name == "Array":
result.append("\tconst Variant &operator[](int64_t p_index) const;")
diff --git a/test/project/main.gd b/test/project/main.gd
index 5b1139a..c6bff50 100644
--- a/test/project/main.gd
+++ b/test/project/main.gd
@@ -154,6 +154,7 @@ func _ready():
# PackedArray iterators
assert_equal(example.test_vector_ops(), 105)
+ assert_equal(example.test_vector_init_list(), 105)
# Properties.
assert_equal(example.group_subgroup_custom_position, Vector2(0, 0))
diff --git a/test/src/example.cpp b/test/src/example.cpp
index ede39ec..e51672f 100644
--- a/test/src/example.cpp
+++ b/test/src/example.cpp
@@ -197,6 +197,7 @@ void Example::_bind_methods() {
ClassDB::bind_method(D_METHOD("test_string_is_fourty_two"), &Example::test_string_is_fourty_two);
ClassDB::bind_method(D_METHOD("test_string_resize"), &Example::test_string_resize);
ClassDB::bind_method(D_METHOD("test_vector_ops"), &Example::test_vector_ops);
+ ClassDB::bind_method(D_METHOD("test_vector_init_list"), &Example::test_vector_init_list);
ClassDB::bind_method(D_METHOD("test_object_cast_to_node", "object"), &Example::test_object_cast_to_node);
ClassDB::bind_method(D_METHOD("test_object_cast_to_control", "object"), &Example::test_object_cast_to_control);
@@ -411,6 +412,15 @@ int Example::test_vector_ops() const {
return ret;
}
+int Example::test_vector_init_list() const {
+ PackedInt32Array arr = { 10, 20, 30, 45 };
+ int ret = 0;
+ for (const int32_t &E : arr) {
+ ret += E;
+ }
+ return ret;
+}
+
Callable Example::test_callable_mp() {
return callable_mp(this, &Example::unbound_method1);
}
diff --git a/test/src/example.h b/test/src/example.h
index c66ee96..0ad9493 100644
--- a/test/src/example.h
+++ b/test/src/example.h
@@ -130,6 +130,7 @@ public:
bool test_string_is_fourty_two(const String &p_str) const;
String test_string_resize(String p_original) const;
int test_vector_ops() const;
+ int test_vector_init_list() const;
bool test_object_cast_to_node(Object *p_object) const;
bool test_object_cast_to_control(Object *p_object) const;