using System; using System.Runtime.InteropServices; using UnityEngine; public class UniQuake: MonoBehaviour { private const string DllName = "uniquake.dll"; private const int MemSize = 0x4000000; // 64 MB of heap space private QuakeParms quakeParms; private SysCalls sysCalls; private ModCalls modCalls; void Start() { string[] arguments = { "", "-window", "-width", "1440", "-height", "1080", "+developer", "1", }; quakeParms = new QuakeParms { baseDir = Application.persistentDataPath, cacheDir = null, }; quakeParms.SetArguments(arguments); quakeParms.AllocateMemory(MemSize); sysCalls = new SysCalls(this); modCalls = new ModCalls(this); UniQuake_Init(quakeParms, sysCalls.ToIntPtr, modCalls.ToIntPtr); } void Update() { UniQuake_Update(Time.deltaTime); } private void OnDestroy() { sysCalls.Destroy(); if (quakeParms != null) { quakeParms.Destroy(); quakeParms = null; } } [DllImport(DllName, CallingConvention = CallingConvention.Cdecl)] private static extern void UniQuake_Init(QuakeParms parms, IntPtr sysCalls, IntPtr modCalls); [DllImport(DllName, CallingConvention = CallingConvention.Cdecl)] private static extern void UniQuake_Update(float deltaTime); }