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/Simulation.hpp | 52 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 extension/src/Simulation.hpp (limited to 'extension/src/Simulation.hpp') diff --git a/extension/src/Simulation.hpp b/extension/src/Simulation.hpp new file mode 100644 index 0000000..6ade846 --- /dev/null +++ b/extension/src/Simulation.hpp @@ -0,0 +1,52 @@ +#pragma once + +#include +#include +#include +#include + +namespace OpenVic2 { + class Simulation : public godot::Object { + std::vector exampleProvinces; + + //BEGIN BOILERPLATE + GDCLASS(Simulation, godot::Object); + static Simulation* _simulation; + + protected: + static void _bind_methods() { + godot::ClassDB::bind_method(godot::D_METHOD("conductSimulationStep"), &Simulation::conductSimulationStep); + godot::ClassDB::bind_method(godot::D_METHOD("queryProvinceSize"), &Simulation::queryProvinceSize); + } + + public: + inline static Simulation* get_singleton() { return _simulation; } + + inline Simulation() { + ERR_FAIL_COND(_simulation != nullptr); + _simulation = this; + + exampleProvinces.resize(10, 1); + } + inline ~Simulation() { + ERR_FAIL_COND(_simulation != this); + _simulation = nullptr; + } + //END BOILERPLATE + + inline void conductSimulationStep() { + for (size_t x = 0; x < exampleProvinces.size(); x++) { + exampleProvinces[x] += (x + 1); + } + } + + inline size_t queryProvinceSize(size_t provinceID) { + if (provinceID >= exampleProvinces.size()) { + return 0; + } + return exampleProvinces[provinceID]; + } + }; + + Simulation* Simulation::_simulation = nullptr; +} \ No newline at end of file -- cgit v1.2.3-56-ga3b1 From 9f7ad25bdb8a821b24042bfd62e5a694451789f6 Mon Sep 17 00:00:00 2001 From: Robert Clarke Date: Sun, 12 Feb 2023 21:49:58 -0500 Subject: Moved positioning of GDCLASS macro --- extension/src/Simulation.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'extension/src/Simulation.hpp') diff --git a/extension/src/Simulation.hpp b/extension/src/Simulation.hpp index 6ade846..554f257 100644 --- a/extension/src/Simulation.hpp +++ b/extension/src/Simulation.hpp @@ -7,10 +7,10 @@ namespace OpenVic2 { class Simulation : public godot::Object { + GDCLASS(Simulation, godot::Object); std::vector exampleProvinces; //BEGIN BOILERPLATE - GDCLASS(Simulation, godot::Object); static Simulation* _simulation; protected: -- cgit v1.2.3-56-ga3b1 From a4f213bf923b79674b8dcef4c35f0f79329ffc80 Mon Sep 17 00:00:00 2001 From: Robert Clarke Date: Sun, 12 Feb 2023 22:05:08 -0500 Subject: Removing semicolons that would cause issues on MSVC --- extension/src/Simulation.hpp | 2 +- extension/src/TestSingleton.hpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'extension/src/Simulation.hpp') diff --git a/extension/src/Simulation.hpp b/extension/src/Simulation.hpp index 554f257..e16f34b 100644 --- a/extension/src/Simulation.hpp +++ b/extension/src/Simulation.hpp @@ -7,7 +7,7 @@ namespace OpenVic2 { class Simulation : public godot::Object { - GDCLASS(Simulation, godot::Object); + GDCLASS(Simulation, godot::Object) std::vector exampleProvinces; //BEGIN BOILERPLATE diff --git a/extension/src/TestSingleton.hpp b/extension/src/TestSingleton.hpp index 0a591ac..de27589 100644 --- a/extension/src/TestSingleton.hpp +++ b/extension/src/TestSingleton.hpp @@ -6,7 +6,7 @@ namespace OpenVic2 { class TestSingleton : public godot::Object { - GDCLASS(TestSingleton, godot::Object); + GDCLASS(TestSingleton, godot::Object) static TestSingleton *singleton; -- cgit v1.2.3-56-ga3b1