This repository has been archived on 2023-05-28. You can view files and clone it, but cannot push or open issues/pull-requests.
SkyHook-Unity/Runtime/SkyHookManager.cs

89 lines
1.5 KiB
C#
Raw Normal View History

2022-11-03 20:55:22 +09:00
using UnityEngine;
2022-11-03 20:56:56 +09:00
using UnityEngine.Events;
2022-11-03 20:55:22 +09:00
namespace SkyHook
{
public class SkyHookManager : MonoBehaviour
{
private static SkyHookManager _instance;
internal static bool IsFocused;
public bool requireFocus = true;
private bool _started;
2022-11-03 20:56:56 +09:00
public static UnityEvent<SkyHookEvent> KeyUpdated = new();
2022-11-03 20:55:22 +09:00
public static SkyHookManager Instance
{
get
{
if (_instance) return _instance;
var obj = new GameObject("SkyHook Manager");
_instance = obj.AddComponent<SkyHookManager>();
DontDestroyOnLoad(_instance);
return _instance;
}
}
private void HookCallback(SkyHookEvent ev)
{
2022-11-03 20:56:56 +09:00
KeyUpdated.Invoke(ev);
2022-11-03 20:55:22 +09:00
}
private void StartHook()
{
var result = SkyHookNative.StartHook(HookCallback);
if (result != null)
{
throw new SkyHookException(result);
}
_started = true;
}
private void StopHook()
{
if (!_started) return;
var result = SkyHookNative.StopHook();
if (result != null)
{
throw new SkyHookException(result);
}
_started = false;
}
public static void Start()
{
Instance.StartHook();
}
public static void Stop()
{
Instance.StopHook();
}
private void OnDestroy()
{
Debug.Log("Destroy");
StopHook();
}
private void Run()
{
if (requireFocus)
{
IsFocused = Application.isFocused;
}
}
}
}