From f1a0aaccd703e5073a63b1cb05a35d827a9c47e9 Mon Sep 17 00:00:00 2001 From: somebody_master Date: Fri, 14 Apr 2023 12:01:06 +0200 Subject: [PATCH] Export variables with gdextension Signed-off-by: somebody_master --- Test.gd | 2 +- gdextension/include/test.hpp | 26 +++++++++++++-- gdextension/src/test.cpp | 64 ++++++++++++++++++++++++++---------- 3 files changed, 71 insertions(+), 21 deletions(-) diff --git a/Test.gd b/Test.gd index 2dac99c..e6dd2df 100644 --- a/Test.gd +++ b/Test.gd @@ -2,7 +2,7 @@ extends Test # Called when the node enters the scene tree for the first time. func _ready() -> void: - start_test(); + pass # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(_delta: float) -> void: diff --git a/gdextension/include/test.hpp b/gdextension/include/test.hpp index 221a8b9..59993e4 100644 --- a/gdextension/include/test.hpp +++ b/gdextension/include/test.hpp @@ -1,17 +1,37 @@ #ifndef TEST_HPP #define TEST_HPP +#include #include +#include + using namespace godot; class Test : public Node3D { GDCLASS(Test, Node3D); -public: - void start_test(); - protected: static void _bind_methods(); + +private: + int i_value = 0; + float f_value = 0.0; + String s_value = "Hello"; + Ref tex_value; + +public: + int get_i_value(); + void set_i_value(int input); + + float get_f_value(); + void set_f_value(float input); + + String get_s_value(); + void set_s_value(String s); + + Ref get_tex_value(); + void set_tex_value(Ref tex); }; + #endif diff --git a/gdextension/src/test.cpp b/gdextension/src/test.cpp index f6ce678..7cdf7f9 100644 --- a/gdextension/src/test.cpp +++ b/gdextension/src/test.cpp @@ -5,22 +5,52 @@ #include -void Test::start_test() { - Ref tex(memnew(ImageTexture)); - - auto format = tex->get_format(); - UtilityFunctions::print(tex->get_reference_count()); - - Ref tex2 = tex; - UtilityFunctions::print(tex->get_reference_count()); - - tex2.unref(); - UtilityFunctions::print(tex->get_reference_count()); - - tex.unref(); -} - void Test::_bind_methods() { -ClassDB: - ClassDB::bind_method(D_METHOD("start_test"), &Test::start_test); + ClassDB::bind_method(D_METHOD("get_i_value"), &Test::get_i_value); + ClassDB::bind_method(D_METHOD("set_i_value", "i_val"), &Test::set_i_value); + ADD_PROPERTY(PropertyInfo(Variant::INT, "i_value"), "set_i_value", "get_i_value"); + + ClassDB::bind_method(D_METHOD("get_f_value"), &Test::get_f_value); + ClassDB::bind_method(D_METHOD("set_f_value", "f_val"), &Test::set_f_value); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "f_value"), "set_f_value", "get_f_value"); + + ClassDB::bind_method(D_METHOD("get_s_value"), &Test::get_s_value); + ClassDB::bind_method(D_METHOD("set_s_value", "s_val"), &Test::set_s_value); + ADD_PROPERTY(PropertyInfo(Variant::STRING, "s_value"), "set_s_value", "get_s_value"); + + ClassDB::bind_method(D_METHOD("get_tex_value"), &Test::get_tex_value); + ClassDB::bind_method(D_METHOD("set_tex_value", "tex"), &Test::set_tex_value); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "tex_value", PROPERTY_HINT_RESOURCE_TYPE, "Texture2D"), "set_tex_value", "get_tex_value"); +} + +int Test::get_i_value() { + return i_value; +} + +void Test::set_i_value(int input) { + i_value = input; +} + +float Test::get_f_value() { + return f_value; +} + +void Test::set_f_value(float input) { + f_value = input; +} + +String Test::get_s_value() { + return s_value; +} + +void Test::set_s_value(String s) { + s_value = s; +} + +Ref Test::get_tex_value() { + return tex_value; +} + +void Test::set_tex_value(Ref tex) { + tex_value = tex; }