diff --git a/SHADE_CSharp/premake5.lua b/SHADE_CSharp/premake5.lua
index c6efa145..2d6c1edb 100644
--- a/SHADE_CSharp/premake5.lua
+++ b/SHADE_CSharp/premake5.lua
@@ -35,6 +35,10 @@ project "SHADE_CSharp"
optimize "On"
defines{"_RELEASE"}
+ filter "configurations:Publish"
+ optimize "On"
+ defines{"_RELEASE"}
+
require "vstudio"
function platformsElement(cfg)
diff --git a/SHADE_CSharp/src/Utility/Debug.cs b/SHADE_CSharp/src/Utility/Debug.cs
new file mode 100644
index 00000000..eb9d9b24
--- /dev/null
+++ b/SHADE_CSharp/src/Utility/Debug.cs
@@ -0,0 +1,37 @@
+using System;
+using System.Runtime.InteropServices;
+
+namespace SHADE
+{
+ internal static class Debug
+ {
+ [DllImport("SHADE_Engine.dll", EntryPoint = "SHLog_Info")]
+ public static extern void LogInfo([MarshalAs(UnmanagedType.LPStr)] string str);
+ [DllImport("SHADE_Engine.dll", EntryPoint = "SHLog_Warning")]
+ public static extern void LogWarning([MarshalAs(UnmanagedType.LPStr)] string str);
+ [DllImport("SHADE_Engine.dll", EntryPoint = "SHLog_Error")]
+ public static extern void LogError([MarshalAs(UnmanagedType.LPStr)] string str);
+ [DllImport("SHADE_Engine.dll", EntryPoint = "SHLog_Critical")]
+ public static extern void LogCritical([MarshalAs(UnmanagedType.LPStr)] string str);
+ public static void LogInfo(string msg, Object thrower)
+ {
+ LogInfo($"[{thrower.GetType().Name}] {msg}");
+ }
+ public static void LogWarning(string msg, Object thrower)
+ {
+ LogWarning($"[{thrower.GetType().Name}] {msg}");
+ }
+ public static void LogError(string msg, Object thrower)
+ {
+ LogError($"[{thrower.GetType().Name}] {msg}");
+ }
+ public static void LogCritical(string msg, Object thrower)
+ {
+ LogCritical($"[{thrower.GetType().Name}] {msg}");
+ }
+ public static void LogException(Exception exception, Object thrower)
+ {
+ LogError($"[{ thrower.GetType().Name }] Unhandled exception: { exception.ToString() }");
+ }
+ }
+}
\ No newline at end of file
diff --git a/SHADE_Engine/src/Tools/SHLog.cpp b/SHADE_Engine/src/Tools/SHLog.cpp
index 2d0b7b58..30a79338 100644
--- a/SHADE_Engine/src/Tools/SHLog.cpp
+++ b/SHADE_Engine/src/Tools/SHLog.cpp
@@ -51,4 +51,24 @@ namespace SHADE
}
#endif
+ void SHLog_Info(const char* msg) noexcept
+ {
+ SHLOG_INFO(msg)
+ }
+
+ void SHLog_Warning(const char* msg) noexcept
+ {
+ SHLOG_WARNING(msg)
+ }
+
+ void SHLog_Error(const char* msg) noexcept
+ {
+ SHLOG_ERROR(msg)
+ }
+
+ void SHLog_Critical(const char* msg) noexcept
+ {
+ SHLOG_CRITICAL(msg)
+ }
+
}
diff --git a/SHADE_Engine/src/Tools/SHLog.h b/SHADE_Engine/src/Tools/SHLog.h
index b77042db..89dd9206 100644
--- a/SHADE_Engine/src/Tools/SHLog.h
+++ b/SHADE_Engine/src/Tools/SHLog.h
@@ -45,4 +45,12 @@ namespace SHADE
static void Trace(const std::string& msg) noexcept;
#endif
};
+
+ extern "C"
+ {
+ static void SHLog_Info(const char* msg) noexcept;
+ static void SHLog_Warning(const char* msg) noexcept;
+ static void SHLog_Error(const char* msg) noexcept;
+ static void SHLog_Critical(const char* msg) noexcept;
+ }
}
diff --git a/SHADE_Managed/premake5.lua b/SHADE_Managed/premake5.lua
index 6d37122c..906511c1 100644
--- a/SHADE_Managed/premake5.lua
+++ b/SHADE_Managed/premake5.lua
@@ -45,7 +45,8 @@ project "SHADE_Managed"
{
"yaml-cpp",
"imgui",
- "SHADE_Engine"
+ "SHADE_Engine",
+ "SHADE_CSharp"
}
disablewarnings
diff --git a/SHADE_Managed/src/Editor/Editor.cxx b/SHADE_Managed/src/Editor/Editor.cxx
index 120f0274..c2b34d44 100644
--- a/SHADE_Managed/src/Editor/Editor.cxx
+++ b/SHADE_Managed/src/Editor/Editor.cxx
@@ -68,36 +68,36 @@ using namespace System::Collections::Generic;
/// The managed type of the object to edit.
/// The native type of the object to edit.
/// The SHEditorUI:: function to use for editing.
-#define RENDER_FIELD_RANGE(MANAGED_TYPE, NATIVE_TYPE, FUNC) \
-(field->FieldType == MANAGED_TYPE::typeid) \
-{ \
- NATIVE_TYPE val = safe_cast(field->GetValue(object)); \
- NATIVE_TYPE oldVal = val; \
- \
- RangeAttribute^ rangeAttrib = hasAttribute(field); \
- const std::string FIELD_NAME = Convert::ToNative(field->Name); \
- bool changed = false; \
- if (rangeAttrib) \
- { \
- changed = SHEditorUI::InputSlider \
- ( \
- FIELD_NAME, \
- static_cast(rangeAttrib->Min), \
- static_cast(rangeAttrib->Max), \
- val, &isHovered \
- ); \
- } \
- else \
- { \
- changed = SHEditorUI::FUNC(FIELD_NAME, val, &isHovered); \
- } \
- \
- if (changed) \
- { \
- field->SetValue(object, val); \
- registerUndoAction(object, field, val, oldVal); \
- } \
-} \
+#define RENDER_FIELD_RANGE(MANAGED_TYPE, NATIVE_TYPE, FUNC) \
+(field->FieldType == MANAGED_TYPE::typeid) \
+{ \
+ NATIVE_TYPE val = safe_cast(field->GetValue(object)); \
+ NATIVE_TYPE oldVal = val; \
+ \
+ RangeAttribute^ rangeAttrib = hasAttribute(field);\
+ const std::string FIELD_NAME = Convert::ToNative(field->Name); \
+ bool changed = false; \
+ if (rangeAttrib) \
+ { \
+ changed = SHEditorUI::InputSlider \
+ ( \
+ FIELD_NAME, \
+ static_cast(rangeAttrib->Min), \
+ static_cast(rangeAttrib->Max), \
+ val, &isHovered \
+ ); \
+ } \
+ else \
+ { \
+ changed = SHEditorUI::FUNC(FIELD_NAME, val, &isHovered); \
+ } \
+ \
+ if (changed) \
+ { \
+ field->SetValue(object, val); \
+ registerUndoAction(object, field, val, oldVal); \
+ } \
+} \
///
/// Macro expansion that is used in renderFieldInInspector() to check the type of a field
/// named "field" against the specified type and if it matches, retrieves the value of
@@ -286,6 +286,18 @@ namespace SHADE
registerUndoAction(object, field, Convert::ToCLI(val), Convert::ToCLI(oldVal));
}
}
+ else if (field->FieldType->BaseType == ICallbackEvent::typeid)
+ {
+ // Needs to present
+ // - name and param list
+ // Needs to present for each callbackaction
+ // - object, methodinfo OR action
+ // - Ways to add or remove items
+ }
+ else
+ {
+ return;
+ }
// Check if the field has a specific attribute
TooltipAttribute^ toolTip = hasAttribute(field);