feat: add document comments

develop
paring 2022-11-03 20:59:53 +09:00
parent 3cd5067f49
commit 8d3287c36c
Signed by: pikokr
GPG Key ID: DB839724AD14EC9F
1 changed files with 95 additions and 77 deletions

View File

@ -3,87 +3,105 @@ using UnityEngine.Events;
namespace SkyHook namespace SkyHook
{ {
public class SkyHookManager : MonoBehaviour public class SkyHookManager : MonoBehaviour
{
private static SkyHookManager _instance;
internal static bool IsFocused;
public bool requireFocus = true;
private bool _started;
public static UnityEvent<SkyHookEvent> KeyUpdated = new();
public static SkyHookManager Instance
{ {
get private static SkyHookManager _instance;
{
if (_instance) return _instance;
var obj = new GameObject("SkyHook Manager"); private static bool IsFocused;
_instance = obj.AddComponent<SkyHookManager>(); /// <summary>
/// Whether or not the event will be received only if the game window is focused.
/// </summary>
// ReSharper disable once MemberCanBePrivate.Global
// ReSharper disable once FieldCanBeMadeReadOnly.Global
public static bool RequireFocus = true;
DontDestroyOnLoad(_instance); private bool _started;
return _instance; /// <summary>
} /// The key updated event data
/// </summary>
// ReSharper disable once MemberCanBePrivate.Global
public static readonly UnityEvent<SkyHookEvent> KeyUpdated = new();
/// <summary>
/// The instance of sky hook manager. The instance will be crated if it does not exist
/// </summary>
// ReSharper disable once MemberCanBePrivate.Global
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)
{
if (RequireFocus && !IsFocused)
{
return;
}
KeyUpdated.Invoke(ev);
}
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;
}
}
} }
private void HookCallback(SkyHookEvent ev)
{
KeyUpdated.Invoke(ev);
}
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;
}
}
}
} }