From ba441d12fae90d58eb3a14b217f7a2704100d725 Mon Sep 17 00:00:00 2001
From: QueenOfSquiggles <8940604+QueenOfSquiggles@users.noreply.github.com>
Date: Thu, 30 Nov 2023 13:11:42 -0600
Subject: [PATCH] Added a few more features
---
Cargo.toml | 2 +-
assets/icons/gui_interact.svg | 62 +++++++
squiggles_core.gdextension | 44 +++--
src/editor_plugin.rs | 17 ++
src/game_globals.rs | 133 ++++++++++++++
src/game_settings/graphics.rs | 121 +++++++++++++
src/game_settings/mod.rs | 39 +++++
.../custom_world_environment.rs | 44 +++++
src/godot_replacements/mod.rs | 1 +
src/interaction.rs | 37 +---
src/lib.rs | 26 ++-
src/serialization.rs | 165 ++++++++++++++++++
src/utility_nodes/gui_interact.rs | 128 ++++++++++++++
src/utility_nodes/mod.rs | 1 +
14 files changed, 764 insertions(+), 56 deletions(-)
create mode 100644 assets/icons/gui_interact.svg
create mode 100644 src/editor_plugin.rs
create mode 100644 src/game_globals.rs
create mode 100644 src/game_settings/graphics.rs
create mode 100644 src/game_settings/mod.rs
create mode 100644 src/godot_replacements/custom_world_environment.rs
create mode 100644 src/godot_replacements/mod.rs
create mode 100644 src/serialization.rs
create mode 100644 src/utility_nodes/gui_interact.rs
create mode 100644 src/utility_nodes/mod.rs
diff --git a/Cargo.toml b/Cargo.toml
index 300c6da..f0a8811 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -7,5 +7,5 @@ edition = "2021"
crate-type = ["cdylib"] # Compile this crate to a dynamic C library.
[dependencies]
-godot = { git = "https://github.com/godot-rust/gdext", rev="d3745f8" }
+godot = { git = "https://github.com/godot-rust/gdext", rev="05a1b09" }
once_cell = "1.18.0"
diff --git a/assets/icons/gui_interact.svg b/assets/icons/gui_interact.svg
new file mode 100644
index 0000000..2c5be59
--- /dev/null
+++ b/assets/icons/gui_interact.svg
@@ -0,0 +1,62 @@
+
+
+
+
diff --git a/squiggles_core.gdextension b/squiggles_core.gdextension
index bab373f..15247dc 100644
--- a/squiggles_core.gdextension
+++ b/squiggles_core.gdextension
@@ -3,33 +3,39 @@ entry_symbol = "gdext_rust_init"
compatibility_minimum = 4.1
[libraries]
-linux.debug.x86_64 = "res://squiggles_core/target/debug/libsquiggles_core.so"
-windows.debug.x86_64 = "res://squiggles_core/target/debug/squiggles_core.dll"
-macos.debug = "res://squiggles_core/target/debug/libsquiggles_core.dylib"
-macos.debug.arm64 = "res://squiggles_core/target/debug/libsquiggles_core.dylib"
-
-linux.release.x86_64 = "res://squiggles_core/target/release/libsquiggles_core.so"
-windows.release.x86_64 = "res://squiggles_core/target/release/squiggles_core.dll"
-macos.release = "res://squiggles_core/target/release/libsquiggles_core.dylib"
-macos.release.arm64 = "res://squiggles_core/target/release/libsquiggles_core.dylib"
+;; Debug Binaries
+linux.debug.x86_64 = "res://addons/squiggles_core/target/debug/libsquiggles_core.so"
+windows.debug.x86_64 = "res://addons/squiggles_core/target/debug/squiggles_core.dll"
+macos.debug = "res://addons/squiggles_core/target/debug/libsquiggles_core.dylib"
+macos.debug.arm64 = "res://addons/squiggles_core/target/debug/libsquiggles_core.dylib"
+
+;; Release Binaries
+linux.release.x86_64 = "res://addons/squiggles_core/target/release/libsquiggles_core.so"
+windows.release.x86_64 = "res://addons/squiggles_core/target/release/squiggles_core.dll"
+macos.release = "res://addons/squiggles_core/target/release/libsquiggles_core.dylib"
+macos.release.arm64 = "res://addons/squiggles_core/target/release/libsquiggles_core.dylib"
[icons]
;; camera.rs
-CameraBrain3D = "res://squiggles_core/assets/icons/camera_brain.svg"
-VirtualCamera3D = "res://squiggles_core/assets/icons/virtual_camera.svg"
+CameraBrain3D = "res://addons/squiggles_core/assets/icons/camera_brain.svg"
+VirtualCamera3D = "res://addons/squiggles_core/assets/icons/virtual_camera.svg"
;; interaction.rs
-InteractRaycast3D = "res://squiggles_core/assets/icons/interaction_raycast3d.svg"
-InteractArea3D = "res://squiggles_core/assets/icons/interaction_area3d.svg"
-InteractionObjectArea3D = "res://squiggles_core/assets/icons/interact_object_area3d.svg"
-InteractionObjectStaticBody3D = "res://squiggles_core/assets/icons/interact_object_static3d.svg"
-InteractionObjectCharacterBody3D = "res://squiggles_core/assets/icons/interact_object_character3d.svg"
+InteractRaycast3D = "res://addons/squiggles_core/assets/icons/interaction_raycast3d.svg"
+InteractArea3D = "res://addons/squiggles_core/assets/icons/interaction_area3d.svg"
+InteractionObjectArea3D = "res://addons/squiggles_core/assets/icons/interact_object_area3d.svg"
+InteractionObjectStaticBody3D = "res://addons/squiggles_core/assets/icons/interact_object_static3d.svg"
+InteractionObjectCharacterBody3D = "res://addons/squiggles_core/assets/icons/interact_object_character3d.svg"
;; state_machine.rs
-FiniteStateMachine = "res://squiggles_core/assets/icons/fsm.svg"
-FiniteState = "res://squiggles_core/assets/icons/fsm_state.svg"
-FiniteSubStateMachine = "res://squiggles_core/assets/icons/fsm_sub_state.svg"
\ No newline at end of file
+FiniteStateMachine = "res://addons/squiggles_core/assets/icons/fsm.svg"
+FiniteState = "res://addons/squiggles_core/assets/icons/fsm_state.svg"
+FiniteSubStateMachine = "res://addons/squiggles_core/assets/icons/fsm_sub_state.svg"
+
+;; utility_nodes/gui_interact.rs
+
+GuiInteract = "res://addons/squiggles_core/assets/icons/gui_interact.svg"
\ No newline at end of file
diff --git a/src/editor_plugin.rs b/src/editor_plugin.rs
new file mode 100644
index 0000000..40c7874
--- /dev/null
+++ b/src/editor_plugin.rs
@@ -0,0 +1,17 @@
+use godot::{engine::*, prelude::*};
+use once_cell::sync::Lazy;
+
+use crate::game_globals::CoreGlobals;
+
+pub static SINGLETON_CORE_GLOBALS: Lazy = Lazy::new(|| StringName::from("CoreGlobals"));
+
+pub fn register_engine_elements() {
+ Engine::singleton().register_singleton(
+ SINGLETON_CORE_GLOBALS.clone(),
+ CoreGlobals::alloc_gd().upcast(),
+ );
+}
+
+pub fn unregister_engine_elements() {
+ Engine::singleton().unregister_singleton(SINGLETON_CORE_GLOBALS.clone());
+}
diff --git a/src/game_globals.rs b/src/game_globals.rs
new file mode 100644
index 0000000..11465ab
--- /dev/null
+++ b/src/game_globals.rs
@@ -0,0 +1,133 @@
+use godot::{
+ builtin::meta::{ConvertError, GodotConvert},
+ engine::*,
+ prelude::*,
+};
+
+use crate::{
+ editor_plugin::SINGLETON_CORE_GLOBALS, game_settings::SquigglesCoreConfig,
+ serialization::SquigglesSerialized,
+};
+
+const PROJECT_SETTINGS_NAMESPACE: &str = "addons/squiggles_core/";
+const S_LOADERS: &str = "loaders";
+const S_GAME_SETTINGS: &str = "game_settings";
+
+fn get_setting_name(name: &str) -> GString {
+ (String::from(PROJECT_SETTINGS_NAMESPACE) + name).to_godot()
+}
+
+#[derive(GodotClass)]
+#[class(tool, base=Object)]
+pub struct CoreGlobals {
+ #[var]
+ config: Gd,
+ #[base]
+ base: Base