From 0b4be7bbfaf9ba7def310b4b01e4c7786ff19099 Mon Sep 17 00:00:00 2001 From: Florian Jung Date: Fri, 12 Apr 2019 13:50:20 +0200 Subject: [PATCH] Fix registering properties of reference-types by applying bruvzg's patch bruvzg's original comment with the patch is here: https://github.com/GodotNativeTools/godot-cpp/issues/237#issuecomment-465170294 Fixes #237. --- include/core/Godot.hpp | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/include/core/Godot.hpp b/include/core/Godot.hpp index 4ed48ed1..8b1c2aab 100644 --- a/include/core/Godot.hpp +++ b/include/core/Godot.hpp @@ -326,8 +326,13 @@ void register_property(const char *name, P(T::*var), P default_value, godot_meth godot_string *_hint_string = (godot_string *)&hint_string; godot_property_attributes attr = {}; - attr.type = def_val.get_type(); - attr.default_value = *(godot_variant *)&def_val; + if (def_val.get_type() == Variant::NIL) { + attr.type = Variant::OBJECT; + } else { + attr.type = def_val.get_type(); + attr.default_value = *(godot_variant *)&def_val; + } + attr.hint = hint; attr.rset_type = rpc_mode; attr.usage = usage; @@ -356,12 +361,19 @@ template void register_property(const char *name, void (T::*setter)(P), P (T::*getter)(), P default_value, godot_method_rpc_mode rpc_mode = GODOT_METHOD_RPC_MODE_DISABLED, godot_property_usage_flags usage = GODOT_PROPERTY_USAGE_DEFAULT, godot_property_hint hint = GODOT_PROPERTY_HINT_NONE, String hint_string = "") { Variant def_val = default_value; + godot_string *_hint_string = (godot_string *)&hint_string; + godot_property_attributes attr = {}; - attr.type = def_val.get_type(); - attr.default_value = *(godot_variant *)&def_val; + if (def_val.get_type() == Variant::NIL) { + attr.type = Variant::OBJECT; + } else { + attr.type = def_val.get_type(); + attr.default_value = *(godot_variant *)&def_val; + } attr.hint = hint; attr.rset_type = rpc_mode; attr.usage = usage; + attr.hint_string = *_hint_string; _PropertySetFunc *wrapped_set = (_PropertySetFunc *)godot::api->godot_alloc(sizeof(_PropertySetFunc)); wrapped_set->f = setter;