diff --git a/.gitmodules b/.gitmodules index 8c36aad..a811e12 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,3 @@ [submodule "Engine/gd"] path = Engine/gd url = https://github.com/godotengine/godot -[submodule "Engine/gdnative_cpp"] - path = Engine/gdnative_cpp - url = https://github.com/godotengine/godot-cpp diff --git a/Editor/main.tscn b/Editor/main.tscn new file mode 100644 index 0000000..5e1beb3 --- /dev/null +++ b/Editor/main.tscn @@ -0,0 +1,3 @@ +[gd_scene format=3 uid="uid://bqqewt05ne1ad"] + +[node name="main" type="Node"] diff --git a/Engine/gdnative_cpp b/Engine/gdnative_cpp deleted file mode 160000 index 95a2303..0000000 --- a/Engine/gdnative_cpp +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 95a2303e37fd28b20c2e53f82e867f5a08e1af53 diff --git a/Source/.sconsign.dblite b/Source/.sconsign.dblite new file mode 100644 index 0000000..6744373 Binary files /dev/null and b/Source/.sconsign.dblite differ diff --git a/Source/SConstruct b/Source/SConstruct new file mode 100644 index 0000000..31eb96c --- /dev/null +++ b/Source/SConstruct @@ -0,0 +1,118 @@ +#!python +import os + +opts = Variables([], ARGUMENTS) + +# Gets the standard flags CC, CCX, etc. +env = DefaultEnvironment() + +ProjPath = os.path.abspath("../"); +print("Project Path: " + ProjPath); + +# Define our options +opts.Add(EnumVariable('target', "Compilation target", 'debug', ['d', 'debug', 'r', 'release'])) +opts.Add(EnumVariable('platform', "Compilation platform", '', ['', 'windows', 'x11', 'linux', 'osx'])) +opts.Add(EnumVariable('p', "Compilation target, alias for 'platform'", '', ['', 'windows', 'x11', 'linux', 'osx'])) +opts.Add(BoolVariable('use_llvm', "Use the LLVM / Clang compiler", 'no')) +opts.Add(PathVariable('target_path', 'The path where the lib is installed.', ProjPath + '/Engine/gdnative_cpp/bin')) +opts.Add(PathVariable('target_name', 'The library name.', 'libgdexample', PathVariable.PathAccept)) + +# Local dependency paths, adapt them to your setup +godot_headers_path = ProjPath + "/Engine/gdnative_cpp/godot-headers/" +cpp_bindings_path = ProjPath + "/Engine/gdnative_cpp/" +cpp_library = "libgodot-cpp" + +# only support 64 at this time.. +bits = 64 + +# Updates the environment with the option variables. +opts.Update(env) + +# Process some arguments +if env['use_llvm']: + env['CC'] = 'clang' + env['CXX'] = 'clang++' + +if env['p'] != '': + env['platform'] = env['p'] + +if env['platform'] == '': + print("No valid target platform selected.") + quit(); + +# For the reference: +# - CCFLAGS are compilation flags shared between C and C++ +# - CFLAGS are for C-specific compilation flags +# - CXXFLAGS are for C++-specific compilation flags +# - CPPFLAGS are for pre-processor flags +# - CPPDEFINES are for pre-processor defines +# - LINKFLAGS are for linking flags + +# Check our platform specifics +if env['platform'] == "osx": + env['target_path'] += 'osx/' + cpp_library += '.osx' + env.Append(CCFLAGS=['-arch', 'x86_64']) + env.Append(CXXFLAGS=['-std=c++17']) + env.Append(LINKFLAGS=['-arch', 'x86_64']) + if env['target'] in ('debug', 'd'): + env.Append(CCFLAGS=['-g', '-O2']) + else: + env.Append(CCFLAGS=['-g', '-O3']) + +elif env['platform'] in ('x11', 'linux'): + env['target_path'] += 'x11/' + cpp_library += '.linux' + env.Append(CCFLAGS=['-fPIC']) + env.Append(CXXFLAGS=['-std=c++17']) + if env['target'] in ('debug', 'd'): + env.Append(CCFLAGS=['-g3', '-Og']) + else: + env.Append(CCFLAGS=['-g', '-O3']) + +elif env['platform'] == "windows": + env['target_path'] += 'win64/' + cpp_library += '.windows' + # This makes sure to keep the session environment variables on windows, + # that way you can run scons in a vs 2017 prompt and it will find all the required tools + env.Append(ENV=os.environ) + + env.Append(CPPDEFINES=['WIN32', '_WIN32', '_WINDOWS', '_CRT_SECURE_NO_WARNINGS']) + env.Append(CCFLAGS=['-W3', '-GR']) + env.Append(CXXFLAGS='/std:c++17') + if env['target'] in ('debug', 'd'): + env.Append(CPPDEFINES=['_DEBUG']) + env.Append(CCFLAGS=['-EHsc', '-MDd', '-ZI']) + env.Append(LINKFLAGS=['-DEBUG']) + else: + env.Append(CPPDEFINES=['NDEBUG']) + env.Append(CCFLAGS=['-O2', '-EHsc', '-MD']) + +if env['target'] in ('debug', 'd'): + cpp_library += '.debug' +else: + cpp_library += '.release' + +cpp_library += '.' + str(bits) + +# make sure our binding library is properly includes +env.Append(CPPPATH=['.', godot_headers_path, cpp_bindings_path + 'include/', cpp_bindings_path + 'include/core/', cpp_bindings_path + 'include/gen/']) +env.Append(LIBPATH=[cpp_bindings_path + 'bin/']) +env.Append(LIBS=[cpp_library]) + +GDNative_Src = ProjPath + '/Engine/gdnative_cpp/src/*.cpp' +Src = ProjPath + "/Source/*.cpp" + +# tweak this if you want to use different folders, or more folders, to store your source code in. +env.Append(CPPPATH=[GDNative_Src]) +env.Append(CPPPATH=[Src]) +sources = Glob(GDNative_Src, Src) + + +print(sources); +library = env.SharedLibrary(target=env['target_path'] + env['target_name'] , source=sources) + +Default(library) + +# Generates help for the -h scons option. +Help(opts.GenerateHelpText(env)) diff --git a/Source/gdexample.cpp b/Source/gdexample.cpp new file mode 100644 index 0000000..a647824 --- /dev/null +++ b/Source/gdexample.cpp @@ -0,0 +1,37 @@ +#include "gdexample.h" + + +namespace godot { + +#pragma region GodotRT +void GDExample::_register_methods() +{ + register_method("_process", &GDExample::_process); +} + +void GDExample::_init() +{ + time_passed = 0.f; +} + +void GDExample::_process(float delta) +{ + time_passed += delta; + + Vector2 + newPos = Vector2( + 10.0 + (10.0 * sin(time_passed * 2.0)), + 10.0 + (10.0 * cos(time_passed * 1.5)) + ); + + set_position(newPos); +} +#pragma endregion GodotRT + +GDExample::GDExample() +{} + +GDExample::~GDExample() +{} + +} \ No newline at end of file diff --git a/Source/gdexample.h b/Source/gdexample.h new file mode 100644 index 0000000..a7a5d3d --- /dev/null +++ b/Source/gdexample.h @@ -0,0 +1,29 @@ +#pragma once + +#include +#include + +namespace godot { + +class GDExample : public Sprite +{ + GODOT_CLASS(GDExample, Sprite) + +public: + +#pragma region Data + float time_passed; +#pragma endregion Data + +#pragma region GodotRT + static void _register_methods(); + + void _init(); + void _process(float delta); +#pragma endregion GodotRT + + GDExample(); + ~GDExample(); +}; + +} \ No newline at end of file diff --git a/Source/gdlibrary.h b/Source/gdlibrary.h new file mode 100644 index 0000000..a6f13e1 --- /dev/null +++ b/Source/gdlibrary.h @@ -0,0 +1,24 @@ +#include "gdexample.h" + +#define gd_export(Type_) \ +extern "C" Type_ GDN_Export + +gd_export(void) +godot_gdnative_init(godot_gdnative_init_options* o) +{ + godot::Godot::gdnative_init(o); +} + +gd_export(void) +godot_gdnative_terminate(godot_gdnative_terminate_options* o) +{ + godot:Godot::gdnative_terminate(o); +} + +gd_export(void) +godot_nativescript_init(void* handle) +{ + godot::Godot::nativescript_init(handle); + + godot::register_class(); +} diff --git a/Source/vc140.idb b/Source/vc140.idb new file mode 100644 index 0000000..5b5d207 Binary files /dev/null and b/Source/vc140.idb differ diff --git a/Source/vc140.pdb b/Source/vc140.pdb new file mode 100644 index 0000000..387f84b Binary files /dev/null and b/Source/vc140.pdb differ