@ -78,7 +78,7 @@ public class UniQuake: MonoBehaviour
}
}
[DllImport(DllName, CallingConvention = CallingConvention.Cdecl)]
[DllImport(DllName, CallingConvention = CallingConvention.Cdecl)]
private static extern void UniQuake_Echo ( DebugLog Callback logCallback , [ MarshalAs ( UnmanagedType . LPStr ) ] string message ) ;
private static extern void UniQuake_Echo ( SysPrint Callback logCallback , [ MarshalAs ( UnmanagedType . LPStr ) ] string message ) ;
[DllImport(DllName, CallingConvention = CallingConvention.Cdecl)]
[DllImport(DllName, CallingConvention = CallingConvention.Cdecl)]
private static extern void UniQuake_Init ( IntPtr callbacks , QuakeParms parms ) ;
private static extern void UniQuake_Init ( IntPtr callbacks , QuakeParms parms ) ;
@ -86,36 +86,37 @@ public class UniQuake: MonoBehaviour
[DllImport(DllName, CallingConvention = CallingConvention.Cdecl)]
[DllImport(DllName, CallingConvention = CallingConvention.Cdecl)]
private static extern void UniQuake_Update ( float deltaTime ) ;
private static extern void UniQuake_Update ( float deltaTime ) ;
private delegate void DebugLog Callback( [ MarshalAs ( UnmanagedType . LPStr ) ] string message ) ;
private delegate void SysPrint Callback( [ MarshalAs ( UnmanagedType . LPStr ) ] string message ) ;
[AOT.MonoPInvokeCallback(typeof(DebugLog Callback))]
private static void Callback_DebugLog ( string message )
[AOT.MonoPInvokeCallback(typeof(SysPrint Callback))]
private static void Callback_SysPrint ( string message )
{
{
Debug . Log ( message ) ;
Debug . Log ( message ) ;
}
}
private delegate void DebugLog ErrorCallback( [ MarshalAs ( UnmanagedType . LPStr ) ] string message ) ;
private delegate void Sys ErrorCallback( [ MarshalAs ( UnmanagedType . LPStr ) ] string message ) ;
[AOT.MonoPInvokeCallback(typeof(DebugLog ErrorCallback))]
private static void Callback_DebugLog Error ( string message )
[AOT.MonoPInvokeCallback(typeof(Sys ErrorCallback))]
private static void Callback_Sys Error ( string message )
{
{
Debug . LogError ( message ) ;
Debug . LogError ( message ) ;
Application . Quit ( 1 ) ;
}
}
private delegate void ApplicationQuitCallback ( int exitCode ) ;
private delegate void SysQuitCallback ( ) ;
[AOT.MonoPInvokeCallback(typeof(Application QuitCallback))]
private static void Callback_ApplicationQuit ( int exitCode )
[AOT.MonoPInvokeCallback(typeof(Sys QuitCallback))]
private static void Callback_SysQuit ( )
{
{
Debug . Log ( $"Quitting application with exit code: {exitCode} " ) ;
Debug . Log ( $"Quitting application normally " ) ;
// TODO: kill execution of the DLL entirely (Sys_Quit expects immediate exit, which Application.Quit doesn't do)
// TODO: kill execution of the DLL entirely (Sys_Quit expects immediate exit, which Application.Quit doesn't do)
Application . Quit ( exitCode ) ;
Application . Quit ( 0 ) ;
}
}
private delegate double RealtimeSinceStartup Callback( ) ;
private delegate double SysFloatTime Callback( ) ;
[AOT.MonoPInvokeCallback(typeof(RealtimeSinceStartup Callback))]
private static double Callback_RealtimeSinceStartup ( )
[AOT.MonoPInvokeCallback(typeof(SysFloatTime Callback))]
private static double Callback_SysFloatTime ( )
{
{
return Time . timeAsDouble - startTime ;
return Time . timeAsDouble - startTime ;
}
}
@ -130,10 +131,10 @@ public class UniQuake: MonoBehaviour
{
{
container = new UnityCallbacksContainer
container = new UnityCallbacksContainer
{
{
DebugLogPtr = CreateCallback < DebugLogCallback > ( Callback_DebugLog ) ,
DebugLogErrorPt r = CreateCallback < DebugLogErrorCallback > ( Callback_DebugLog Error) ,
ApplicationQuitPtr = CreateCallback < ApplicationQuitCallback > ( Callback_Application Quit) ,
RealtimeSinceStartupPtr = CreateCallback < RealtimeSinceStartupCallback > ( Callback_RealtimeSinceStartup ) ,
SysPrint = CreateCallback < SysPrintCallback > ( Callback_SysPrint ) ,
SysErro r = CreateCallback < SysErrorCallback > ( Callback_Sys Error) ,
SysQuit = CreateCallback < SysQuitCallback > ( Callback_Sys Quit) ,
SysFloatTime = CreateCallback < SysFloatTimeCallback > ( Callback_SysFloatTime ) ,
} ;
} ;
containerHandle = GCHandle . Alloc ( container , GCHandleType . Pinned ) ;
containerHandle = GCHandle . Alloc ( container , GCHandleType . Pinned ) ;
@ -163,10 +164,10 @@ public class UniQuake: MonoBehaviour
[StructLayout(LayoutKind.Sequential, Pack = 0)]
[StructLayout(LayoutKind.Sequential, Pack = 0)]
private class UnityCallbacksContainer
private class UnityCallbacksContainer
{
{
public IntPtr DebugLogPtr ;
public IntPtr DebugLogErrorPt r;
public IntPtr ApplicationQuitPtr ;
public IntPtr RealtimeSinceStartupPtr ;
public IntPtr SysPrint ;
public IntPtr SysErro r;
public IntPtr SysQuit ;
public IntPtr SysFloatTime ;
}
}
[StructLayout(LayoutKind.Sequential, Pack = 0)]
[StructLayout(LayoutKind.Sequential, Pack = 0)]