Browse Source

Added some fun stuff that allows you to play with the time scale in Quake, either speeding it up or slowing it down from Unity.

console
Nico de Poel 5 years ago
parent
commit
6a06621b90
  1. 10
      Assets/Scripts/Bootstrap.cs
  2. 6
      Assets/Scripts/Uniquake.cs
  3. 5
      engine/projects/uniquake/uniquake.c

10
Assets/Scripts/Bootstrap.cs

@ -5,6 +5,8 @@ using UnityEngine;
public class Bootstrap : MonoBehaviour
{
private float speed = 1.0f;
private void Start()
{
Debug.Log($"Running in {IntPtr.Size * 8}-bit mode");
@ -16,5 +18,13 @@ public class Bootstrap : MonoBehaviour
{
gameObject.AddComponent<Uniquake>();
}
GUILayout.Label("Time scale:");
speed = GUILayout.HorizontalSlider(speed, 0.1f, 5.0f, GUILayout.Width(250));
GUILayout.Label($"{speed:0.00}");
if (!Mathf.Approximately(speed, Time.timeScale))
{
Time.timeScale = speed;
}
}
}

6
Assets/Scripts/Uniquake.cs

@ -13,8 +13,12 @@ public class Uniquake: MonoBehaviour
private QuakeParms quakeParms;
private UnityCallbacks callbacks = new UnityCallbacks();
private static double startTime; // TODO: this should be an instance field, but it requires a reference back to this object in the callbacks
void Start()
{
startTime = Time.timeAsDouble;
string[] arguments =
{
"",
@ -113,7 +117,7 @@ public class Uniquake: MonoBehaviour
[AOT.MonoPInvokeCallback(typeof(RealtimeSinceStartupCallback))]
private static double Callback_RealtimeSinceStartup()
{
return Time.realtimeSinceStartupAsDouble;
return Time.timeAsDouble - startTime;
}
private class UnityCallbacks

5
engine/projects/uniquake/uniquake.c

@ -63,9 +63,8 @@ UNIQUAKE_API void Uniquake_Init(const unity_callbacks_t *callbacks, quakeparms_t
unity_callbacks = callbacks;
COM_InitArgv(parms->argc, parms->argv);
// TODO winquake writes com_argc/argv back to parms.argc/argv, is this necessary?
isDedicated = true;
parms->argc = com_argc;
parms->argv = com_argv;
Host_Init(parms);
}

Loading…
Cancel
Save