From d45323cadee9044d8536f7eb9827a43b36e4bdff Mon Sep 17 00:00:00 2001 From: Robert Clarke Date: Sun, 12 Feb 2023 03:44:39 -0500 Subject: Everything necessary to register a C++ class with internal state for access within Godot --- extension/src/register_types.cpp | 51 +++++++++++++++++++++++----------------- 1 file changed, 30 insertions(+), 21 deletions(-) (limited to 'extension/src/register_types.cpp') diff --git a/extension/src/register_types.cpp b/extension/src/register_types.cpp index 775e6c3..4b049ce 100644 --- a/extension/src/register_types.cpp +++ b/extension/src/register_types.cpp @@ -6,46 +6,55 @@ #include #include "TestSingleton.hpp" +#include "Simulation.hpp" using namespace godot; using namespace OpenVic2; -static TestSingleton *_test_singleton; +static TestSingleton* _test_singleton; +static Simulation* _simulation; void initialize_openvic2_types(ModuleInitializationLevel p_level) { - if (p_level != MODULE_INITIALIZATION_LEVEL_SCENE) { - return; - } + if (p_level != MODULE_INITIALIZATION_LEVEL_SCENE) { + return; + } - ClassDB::register_class(); + ClassDB::register_class(); + _test_singleton = memnew(TestSingleton); + Engine::get_singleton()->register_singleton("TestSingleton", TestSingleton::get_singleton()); + + ClassDB::register_class(); + _simulation = memnew(Simulation); + Engine::get_singleton()->register_singleton("Simulation", Simulation::get_singleton()); - _test_singleton = memnew(TestSingleton); - Engine::get_singleton()->register_singleton("TestSingleton", TestSingleton::get_singleton()); } void uninitialize_openvic2_types(ModuleInitializationLevel p_level) { - if (p_level != MODULE_INITIALIZATION_LEVEL_SCENE) { - return; - } + if (p_level != MODULE_INITIALIZATION_LEVEL_SCENE) { + return; + } + + Engine::get_singleton()->unregister_singleton("TestSingleton"); + memdelete(_test_singleton); - Engine::get_singleton()->unregister_singleton("TestSingleton"); - memdelete(_test_singleton); + Engine::get_singleton()->unregister_singleton("Simulation"); + memdelete(_test_singleton); } extern "C" { - // Initialization. + // Initialization. - GDExtensionBool GDE_EXPORT openvic2_library_init(const GDExtensionInterface *p_interface, const GDExtensionClassLibraryPtr p_library, GDExtensionInitialization *r_initialization) - { - GDExtensionBinding::InitObject init_obj(p_interface, p_library, r_initialization); + GDExtensionBool GDE_EXPORT openvic2_library_init(const GDExtensionInterface *p_interface, const GDExtensionClassLibraryPtr p_library, GDExtensionInitialization *r_initialization) + { + GDExtensionBinding::InitObject init_obj(p_interface, p_library, r_initialization); - init_obj.register_initializer(initialize_openvic2_types); - init_obj.register_terminator(uninitialize_openvic2_types); - init_obj.set_minimum_library_initialization_level(MODULE_INITIALIZATION_LEVEL_SCENE); + init_obj.register_initializer(initialize_openvic2_types); + init_obj.register_terminator(uninitialize_openvic2_types); + init_obj.set_minimum_library_initialization_level(MODULE_INITIALIZATION_LEVEL_SCENE); - return init_obj.init(); - } + return init_obj.init(); + } } \ No newline at end of file -- cgit v1.2.3-56-ga3b1