Implement index operators for Arrays
parent
271e33658d
commit
c2b690439f
|
@ -444,6 +444,10 @@ def generate_builtin_class_header(builtin_api, size, used_classes, fully_used_cl
|
||||||
result.append(f"\tconst " + return_type + f" &operator[](int p_index) const;")
|
result.append(f"\tconst " + return_type + f" &operator[](int p_index) const;")
|
||||||
result.append(f"\t" + return_type + f" &operator[](int p_index);")
|
result.append(f"\t" + return_type + f" &operator[](int p_index);")
|
||||||
|
|
||||||
|
if class_name == "Array":
|
||||||
|
result.append(f"\tconst Variant &operator[](int p_index) const;")
|
||||||
|
result.append(f"\tVariant &operator[](int p_index);")
|
||||||
|
|
||||||
result.append("};")
|
result.append("};")
|
||||||
|
|
||||||
if class_name == "String":
|
if class_name == "String":
|
||||||
|
|
|
@ -32,6 +32,7 @@
|
||||||
|
|
||||||
#include <godot_cpp/godot.hpp>
|
#include <godot_cpp/godot.hpp>
|
||||||
|
|
||||||
|
#include <godot_cpp/variant/array.hpp>
|
||||||
#include <godot_cpp/variant/packed_byte_array.hpp>
|
#include <godot_cpp/variant/packed_byte_array.hpp>
|
||||||
#include <godot_cpp/variant/packed_color_array.hpp>
|
#include <godot_cpp/variant/packed_color_array.hpp>
|
||||||
#include <godot_cpp/variant/packed_float32_array.hpp>
|
#include <godot_cpp/variant/packed_float32_array.hpp>
|
||||||
|
@ -124,4 +125,14 @@ Vector3 &PackedVector3Array::operator[](int p_index) {
|
||||||
return *vec;
|
return *vec;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const Variant &Array::operator[](int p_index) const {
|
||||||
|
const Variant *var = (const Variant *)internal::gdn_interface->array_operator_index_const((GDNativeTypePtr *)this, p_index);
|
||||||
|
return *var;
|
||||||
|
}
|
||||||
|
|
||||||
|
Variant &Array::operator[](int p_index) {
|
||||||
|
Variant *var = (Variant *)internal::gdn_interface->array_operator_index((GDNativeTypePtr *)this, p_index);
|
||||||
|
return *var;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace godot
|
} // namespace godot
|
||||||
|
|
|
@ -13,6 +13,7 @@ func _ready():
|
||||||
var ref = ExampleRef.new()
|
var ref = ExampleRef.new()
|
||||||
prints("sending ref: ", ref.get_instance_id(), "returned ref: ", $Example.extended_ref_checks(ref).get_instance_id())
|
prints("sending ref: ", ref.get_instance_id(), "returned ref: ", $Example.extended_ref_checks(ref).get_instance_id())
|
||||||
prints("vararg args", $Example.varargs_func("some", "arguments", "to", "test"))
|
prints("vararg args", $Example.varargs_func("some", "arguments", "to", "test"))
|
||||||
|
prints("test array", $Example.test_array())
|
||||||
|
|
||||||
# Use properties.
|
# Use properties.
|
||||||
prints("custom position is", $Example.group_subgroup_custom_position)
|
prints("custom position is", $Example.group_subgroup_custom_position)
|
||||||
|
|
|
@ -54,6 +54,7 @@ void Example::_bind_methods() {
|
||||||
ClassDB::bind_method(D_METHOD("return_something_const"), &Example::return_something_const);
|
ClassDB::bind_method(D_METHOD("return_something_const"), &Example::return_something_const);
|
||||||
ClassDB::bind_method(D_METHOD("return_extended_ref"), &Example::return_extended_ref);
|
ClassDB::bind_method(D_METHOD("return_extended_ref"), &Example::return_extended_ref);
|
||||||
ClassDB::bind_method(D_METHOD("extended_ref_checks"), &Example::extended_ref_checks);
|
ClassDB::bind_method(D_METHOD("extended_ref_checks"), &Example::extended_ref_checks);
|
||||||
|
ClassDB::bind_method(D_METHOD("test_array"), &Example::test_array);
|
||||||
|
|
||||||
{
|
{
|
||||||
MethodInfo mi;
|
MethodInfo mi;
|
||||||
|
@ -81,6 +82,14 @@ void Example::_bind_methods() {
|
||||||
BIND_CONSTANT(CONSTANT_WITHOUT_ENUM);
|
BIND_CONSTANT(CONSTANT_WITHOUT_ENUM);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Example::Example() {
|
||||||
|
UtilityFunctions::print("Constructor.");
|
||||||
|
}
|
||||||
|
|
||||||
|
Example::~Example() {
|
||||||
|
UtilityFunctions::print("Destructor.");
|
||||||
|
}
|
||||||
|
|
||||||
// Methods.
|
// Methods.
|
||||||
void Example::simple_func() {
|
void Example::simple_func() {
|
||||||
UtilityFunctions::print("Simple func called.");
|
UtilityFunctions::print("Simple func called.");
|
||||||
|
@ -126,6 +135,16 @@ void Example::emit_custom_signal(const String &name, int value) {
|
||||||
emit_signal("custom_signal", name, value);
|
emit_signal("custom_signal", name, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Array Example::test_array() const {
|
||||||
|
Array arr;
|
||||||
|
|
||||||
|
arr.resize(2);
|
||||||
|
arr[0] = Variant(1);
|
||||||
|
arr[1] = Variant(2);
|
||||||
|
|
||||||
|
return arr;
|
||||||
|
}
|
||||||
|
|
||||||
// Properties.
|
// Properties.
|
||||||
void Example::set_custom_position(const Vector2 &pos) {
|
void Example::set_custom_position(const Vector2 &pos) {
|
||||||
custom_position = pos;
|
custom_position = pos;
|
||||||
|
|
|
@ -76,6 +76,9 @@ public:
|
||||||
CONSTANT_WITHOUT_ENUM = 314,
|
CONSTANT_WITHOUT_ENUM = 314,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Example();
|
||||||
|
~Example();
|
||||||
|
|
||||||
// Functions.
|
// Functions.
|
||||||
void simple_func();
|
void simple_func();
|
||||||
void simple_const_func() const;
|
void simple_const_func() const;
|
||||||
|
@ -85,6 +88,7 @@ public:
|
||||||
Ref<ExampleRef> extended_ref_checks(Ref<ExampleRef> p_ref) const;
|
Ref<ExampleRef> extended_ref_checks(Ref<ExampleRef> p_ref) const;
|
||||||
Variant varargs_func(const Variant **args, GDNativeInt arg_count, GDNativeCallError &error);
|
Variant varargs_func(const Variant **args, GDNativeInt arg_count, GDNativeCallError &error);
|
||||||
void emit_custom_signal(const String &name, int value);
|
void emit_custom_signal(const String &name, int value);
|
||||||
|
Array test_array() const;
|
||||||
|
|
||||||
// Property.
|
// Property.
|
||||||
void set_custom_position(const Vector2 &pos);
|
void set_custom_position(const Vector2 &pos);
|
||||||
|
|
Loading…
Reference in New Issue