diff --git a/.gitignore b/.gitignore index 79a845d..db0c40a 100644 --- a/.gitignore +++ b/.gitignore @@ -42,3 +42,4 @@ mono_crash.*.json # Fork Source/.sconsign.dblite +.vs diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..38b4def --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,7 @@ +{ + "files.associations": { + "*.rmd": "markdown", + "xtr1common": "cpp" + }, + "godot_tools.editor_path": "c:\\Projects\\SymbolEngine\\Engine\\gd\\bin\\godot.windows.opt.tools.64.exe" +} \ No newline at end of file diff --git a/Editor/bin/libgdexample.windows.debug.64.dll b/Editor/bin/libgdexample.windows.debug.64.dll new file mode 100644 index 0000000..4719347 Binary files /dev/null and b/Editor/bin/libgdexample.windows.debug.64.dll differ diff --git a/Editor/bin/libgdexample.windows.debug.64.exp b/Editor/bin/libgdexample.windows.debug.64.exp new file mode 100644 index 0000000..33847e5 Binary files /dev/null and b/Editor/bin/libgdexample.windows.debug.64.exp differ diff --git a/Editor/bin/libgdexample.windows.debug.64.lib b/Editor/bin/libgdexample.windows.debug.64.lib new file mode 100644 index 0000000..a198591 Binary files /dev/null and b/Editor/bin/libgdexample.windows.debug.64.lib differ diff --git a/Editor/gdexample.gdextension b/Editor/gdexample.gdextension new file mode 100644 index 0000000..2ab4bbb --- /dev/null +++ b/Editor/gdexample.gdextension @@ -0,0 +1,12 @@ +[configuration] + +entry_symbol = "example_library_init" + +[libraries] + +linux.64.debug = "bin/libgdexample.linux.debug.64.so" +linux.64.release = "bin/libgdexample.linux.release.64.so" +windows.64.debug = "bin/libgdexample.windows.debug.64.dll" +windows.64.release = "bin/libgdexample.windows.release.64.dll" +macos.debug = "bin/libgdexample.debug.framework" +macos.release = "bin/libgdexample.release.framework" \ No newline at end of file diff --git a/Editor/main.tscn b/Editor/main.tscn index 5e1beb3..7e0a0a6 100644 --- a/Editor/main.tscn +++ b/Editor/main.tscn @@ -1,3 +1,14 @@ -[gd_scene format=3 uid="uid://bqqewt05ne1ad"] +[gd_scene load_steps=2 format=3 uid="uid://bqqewt05ne1ad"] + +[ext_resource type="Texture2D" uid="uid://cnv7sgufjc3fk" path="res://icon.png" id="1_tqon5"] [node name="main" type="Node"] + +[node name="GDExample" type="GDExample" parent="."] +position = Vector2(7.83596, 18.1283) +texture = ExtResource( "1_tqon5" ) + +[node name="Sprite2D" type="Sprite2D" parent="."] +modulate = Color(1, 0.309804, 0.580392, 1) +position = Vector2(214, 2) +texture = ExtResource( "1_tqon5" ) diff --git a/Editor/project.godot b/Editor/project.godot index 4c56bf6..a63a06a 100644 --- a/Editor/project.godot +++ b/Editor/project.godot @@ -11,5 +11,10 @@ config_version=5 [application] config/name="SymbolEngine" +run/main_scene="res://main.tscn" config/icon="res://icon.png" config/features=PackedStringArray("4.0", "Vulkan Clustered") + +[native_extensions] + +paths=["res://../Source/gdexample.gdextension"] diff --git a/Source/SConstruct b/Source/SConstruct index b849a34..bf6fcf1 100644 --- a/Source/SConstruct +++ b/Source/SConstruct @@ -1,48 +1,11 @@ -#!python +#!/usr/bin/env python import os -import glob +import sys -opts = Variables([], ARGUMENTS) +RootDir = os.path.abspath("../"); +EditorDir = RootDir + "/Editor" -# 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" - -GDNative_Src = ProjPath + '/Engine/gdnative_cpp/src/' -Src = ProjPath + "/Source/" - -# 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(); +env = SConscript(RootDir + "/Engine/gdnative_cpp/SConstruct") # For the reference: # - CCFLAGS are compilation flags shared between C and C++ @@ -52,77 +15,24 @@ if env['platform'] == '': # - 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]) - # 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]) +env.Append(CPPPATH=["."]) +sources = Glob("./*.cpp") -sources = Glob(GDNative_Src + '/*.cpp') + Glob(Src + '/*cpp') - -for thing in sources : - print(thing) - -library = env.SharedLibrary(target=env['target_path'] + env['target_name'] , source=sources) +if env["platform"] == "osx": + library = env.SharedLibrary( + EditorDir + "/bin/libgdexample.{}.{}.framework/libgdexample.{}.{}".format( + env["platform"], env["target"], env["platform"], env["target"] + ), + source=sources, + ) +else: + library = env.SharedLibrary( + EditorDir + "/bin/libgdexample.{}.{}.{}{}".format( + env["platform"], env["target"], env["arch_suffix"], env["SHLIBSUFFIX"] + ), + 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 index a647824..bac8a2b 100644 --- a/Source/gdexample.cpp +++ b/Source/gdexample.cpp @@ -3,18 +3,18 @@ namespace godot { + #pragma region GodotRT -void GDExample::_register_methods() +void GDExample::_bind_methods() { - register_method("_process", &GDExample::_process); } -void GDExample::_init() -{ - time_passed = 0.f; -} +// void GDExample::_init() +// { +// time_passed = 0.f; +// } -void GDExample::_process(float delta) +void GDExample::_process(double delta) { time_passed += delta; @@ -29,9 +29,12 @@ void GDExample::_process(float delta) #pragma endregion GodotRT GDExample::GDExample() -{} +{ + time_passed = 0.f; +} GDExample::~GDExample() {} -} \ No newline at end of file + +} // godot \ No newline at end of file diff --git a/Source/gdexample.h b/Source/gdexample.h index 48ef8a4..d9a2cbc 100644 --- a/Source/gdexample.h +++ b/Source/gdexample.h @@ -1,13 +1,13 @@ #pragma once -#include -#include +#include +#include namespace godot { -class GDExample : public Sprite +class GDExample : public Sprite2D { - GODOT_CLASS(GDExample, Sprite) + GDCLASS(GDExample, Sprite2D) public: @@ -16,10 +16,10 @@ public: #pragma endregion Data #pragma region GodotRT - static void _register_methods(); + static void _bind_methods(); - void _init(); - void _process(float delta); + //void _init() override; + void _process(double delta) override; #pragma endregion GodotRT GDExample(); diff --git a/Source/gdexample.obj b/Source/gdexample.obj new file mode 100644 index 0000000..281d48b Binary files /dev/null and b/Source/gdexample.obj differ diff --git a/Source/gdlibrary.h b/Source/gdlibrary.h deleted file mode 100644 index 9cbd644..0000000 --- a/Source/gdlibrary.h +++ /dev/null @@ -1,26 +0,0 @@ -#pragma once - -#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/register_types.cpp b/Source/register_types.cpp new file mode 100644 index 0000000..a3f7c75 --- /dev/null +++ b/Source/register_types.cpp @@ -0,0 +1,43 @@ +#include "register_types.h" + +#include "gdexample.h" + + +namespace godot { + +void register_types(ModuleInitializationLevel p_level) +{ + if (p_level != MODULE_INITIALIZATION_LEVEL_SCENE) + return; + + ClassDB::register_class(); +} + +void unregister_types(ModuleInitializationLevel p_level) +{ + if (p_level != MODULE_INITIALIZATION_LEVEL_SCENE) + return; + + // Nothing for now... +} + +extern "C" +{ + GDNativeBool GDN_EXPORT + example_library_init( + GDNativeInterface const* p_interface, + GDNativeExtensionClassLibraryPtr const p_library, + GDNativeInitialization* r_initialization) + { + godot::GDExtensionBinding::InitObject + init_obj(p_interface, p_library, r_initialization); + init_obj.register_initializer(register_types); + init_obj.register_terminator(unregister_types); + init_obj.set_minimum_library_initialization_level(MODULE_INITIALIZATION_LEVEL_SCENE); + + return init_obj.init(); + } +} + +} // godot + diff --git a/Source/register_types.h b/Source/register_types.h new file mode 100644 index 0000000..59644c9 --- /dev/null +++ b/Source/register_types.h @@ -0,0 +1,4 @@ +#pragma once + +void register_types(); +void unregister_types(); diff --git a/Source/register_types.obj b/Source/register_types.obj new file mode 100644 index 0000000..7efeff0 Binary files /dev/null and b/Source/register_types.obj differ diff --git a/Source/vc140.idb b/Source/vc140.idb index b547d80..c62a7ac 100644 Binary files a/Source/vc140.idb and b/Source/vc140.idb differ diff --git a/Source/vc140.pdb b/Source/vc140.pdb index c721dad..9490c31 100644 Binary files a/Source/vc140.pdb and b/Source/vc140.pdb differ diff --git a/editor.bat b/editor.bat index 7c9c3c4..31f91cd 100644 --- a/editor.bat +++ b/editor.bat @@ -1,5 +1,5 @@ cd Engine\gd\bin\ -start godot.windows.tools.64.exe +start godot.windows.opt.tools.64.exe exit \ No newline at end of file