aboutsummaryrefslogtreecommitdiff
path: root/extension/src
diff options
context:
space:
mode:
author George L. Albany <Megacake1234@gmail.com>2023-01-25 02:07:01 +0100
committer George L. Albany <Megacake1234@gmail.com>2023-01-25 02:07:01 +0100
commit5371a960c9f0665d7de594cc5e274db225620207 (patch)
treef0c5d01c2ae8c2293b60af9b120440730021ccc3 /extension/src
parentc16b58ddb07a4f814a4efa1dc3bf72e7bbe5f932 (diff)
feat(build): Implement scons building
feat(engine): Integrate basic Godot project feat(test): Demonstrate Godot using extension feat(dependency): Add OV2-compiler as deps submodule feat(dependency): Add godot-cpp as a submodule feat(git): Ignore Godot 4 files feat(docs): Updated readme with instructions feat: Can call `TestSingleton.hello_singleton()` from GDScript Adds basic workflow support but that is currently disabled
Diffstat (limited to 'extension/src')
-rw-r--r--extension/src/TestSingleton.cpp36
-rw-r--r--extension/src/TestSingleton.hpp24
-rw-r--r--extension/src/register_types.cpp51
-rw-r--r--extension/src/register_types.h6
4 files changed, 117 insertions, 0 deletions
diff --git a/extension/src/TestSingleton.cpp b/extension/src/TestSingleton.cpp
new file mode 100644
index 0000000..0855a30
--- /dev/null
+++ b/extension/src/TestSingleton.cpp
@@ -0,0 +1,36 @@
+#include "TestSingleton.hpp"
+
+#include <godot_cpp/core/class_db.hpp>
+#include <godot_cpp/variant/utility_functions.hpp>
+
+using namespace godot;
+using namespace OpenVic2;
+
+TestSingleton *TestSingleton::singleton = nullptr;
+
+void TestSingleton::_bind_methods()
+{
+ ClassDB::bind_method(D_METHOD("hello_singleton"), &TestSingleton::hello_singleton);
+}
+
+TestSingleton *TestSingleton::get_singleton()
+{
+ return singleton;
+}
+
+TestSingleton::TestSingleton()
+{
+ ERR_FAIL_COND(singleton != nullptr);
+ singleton = this;
+}
+
+TestSingleton::~TestSingleton()
+{
+ ERR_FAIL_COND(singleton != this);
+ singleton = nullptr;
+}
+
+void TestSingleton::hello_singleton()
+{
+ UtilityFunctions::print("Hello GDExtension Singleton!");
+} \ No newline at end of file
diff --git a/extension/src/TestSingleton.hpp b/extension/src/TestSingleton.hpp
new file mode 100644
index 0000000..0a591ac
--- /dev/null
+++ b/extension/src/TestSingleton.hpp
@@ -0,0 +1,24 @@
+#pragma once
+
+#include <godot_cpp/classes/object.hpp>
+#include <godot_cpp/core/class_db.hpp>
+
+namespace OpenVic2 {
+ class TestSingleton : public godot::Object
+ {
+ GDCLASS(TestSingleton, godot::Object);
+
+ static TestSingleton *singleton;
+
+ protected:
+ static void _bind_methods();
+
+ public:
+ static TestSingleton *get_singleton();
+
+ TestSingleton();
+ ~TestSingleton();
+
+ void hello_singleton();
+ };
+} \ No newline at end of file
diff --git a/extension/src/register_types.cpp b/extension/src/register_types.cpp
new file mode 100644
index 0000000..775e6c3
--- /dev/null
+++ b/extension/src/register_types.cpp
@@ -0,0 +1,51 @@
+#include "register_types.h"
+#include <gdextension_interface.h>
+#include <godot_cpp/core/class_db.hpp>
+#include <godot_cpp/core/defs.hpp>
+#include <godot_cpp/godot.hpp>
+#include <godot_cpp/classes/engine.hpp>
+
+#include "TestSingleton.hpp"
+
+using namespace godot;
+using namespace OpenVic2;
+
+static TestSingleton *_test_singleton;
+
+void initialize_openvic2_types(ModuleInitializationLevel p_level)
+{
+ if (p_level != MODULE_INITIALIZATION_LEVEL_SCENE) {
+ return;
+ }
+
+ ClassDB::register_class<TestSingleton>();
+
+ _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;
+ }
+
+ Engine::get_singleton()->unregister_singleton("TestSingleton");
+ memdelete(_test_singleton);
+}
+
+extern "C"
+{
+
+ // 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);
+
+ return init_obj.init();
+ }
+} \ No newline at end of file
diff --git a/extension/src/register_types.h b/extension/src/register_types.h
new file mode 100644
index 0000000..860359f
--- /dev/null
+++ b/extension/src/register_types.h
@@ -0,0 +1,6 @@
+#pragma once
+
+#include <godot_cpp/core/class_db.hpp>
+
+void initialize_openvic2_types(godot::ModuleInitializationLevel);
+void uninitialize_openvic2_types(godot::ModuleInitializationLevel); \ No newline at end of file