From 0b2ea3ddbca436ee4a8f7459bece6ff285737c0e Mon Sep 17 00:00:00 2001 From: PopSlime Date: Fri, 5 May 2023 00:40:51 +0800 Subject: [PATCH] Move part of the input module to Cryville.Input. --- .../Common/Unity/Input/AndroidTouchHandler.cs | 92 --- .../Common/Unity/Input/InputHandler.cs | 110 ---- .../Common/Unity/Input/InputManager.cs | 49 -- .../Common/Unity/Input/InputManager.cs.meta | 12 - .../Cryville/Common/Unity/Input/Messages.cs | 528 ------------------ .../Common/Unity/Input/Messages.cs.meta | 12 - .../Common/Unity/Input/NativeMethods.cs | 252 --------- .../Common/Unity/Input/NativeMethods.cs.meta | 12 - .../Common/Unity/Input/SimpleInputConsumer.cs | 49 -- .../Common/Unity/Input/UnityCameraUtils.cs | 12 - .../Unity/Input/UnityTouchHandler.cs.meta | 12 - .../Unity/Input/WindowsPointerHandler.cs | 349 ------------ .../Unity/Input/WindowsPointerHandler.cs.meta | 12 - Assets/Cryville/Crtr/ChartPlayer.cs | 2 +- .../Cryville/Crtr/Config/ConfigPanelMaster.cs | 2 +- .../Cryville/Crtr/Config/InputConfigPanel.cs | 6 +- Assets/Cryville/Crtr/Console.cs | 5 +- Assets/Cryville/Crtr/Game.cs | 21 +- Assets/Cryville/Crtr/InputProxy.cs | 60 +- Assets/Cryville/Crtr/Menu.cs | 3 +- Assets/Cryville/Cryville.Crtr.asmdef | 2 + Assets/Plugins/Android/AndroidManifest.xml | 18 + .../Plugins/Android/AndroidManifest.xml.meta | 7 + .../Android/arm64-v8a/libAndroidInputProxy.so | Bin 0 -> 5952 bytes .../arm64-v8a/libAndroidInputProxy.so.meta | 33 ++ .../armeabi-v7a/libAndroidInputProxy.so | Bin 0 -> 17868 bytes .../armeabi-v7a/libAndroidInputProxy.so.meta | 33 ++ .../Cryville.Input.Unity.Android.meta} | 5 +- .../AndroidInputHandler.cs | 67 +++ .../AndroidInputHandler.cs.meta} | 2 +- .../AndroidSensorHandler.cs | 107 ++++ .../AndroidSensorHandler.cs.meta} | 2 +- .../AndroidTouchHandler.cs | 47 ++ .../AndroidTouchHandler.cs.meta | 2 +- .../Cryville.Input.Unity.Android.asmdef | 3 + .../Cryville.Input.Unity.Android.asmdef.meta | 7 + .../Cryville.Input.Unity.Android/Java.meta | 8 + .../Java/NativeMethods.java | 6 + .../Java/NativeMethods.java.meta | 32 ++ .../Java/Proxy.java | 28 + .../Java/Proxy.java.meta | 32 ++ .../Java/SensorProxy.java | 104 ++++ .../Java/SensorProxy.java.meta | 32 ++ .../Java/TouchProxy.java | 49 ++ .../Java/TouchProxy.java.meta | 32 ++ .../JavaStaticMethods.cs | 27 + .../JavaStaticMethods.cs.meta} | 2 +- .../NativeMethods.cs | 9 + .../NativeMethods.cs.meta} | 2 +- .../Plugins/Cryville.Input.Unity.Builtin.meta | 8 + .../Cryville.Input.Unity.Builtin.asmdef | 3 + .../Cryville.Input.Unity.Builtin.asmdef.meta | 7 + .../UnityGuiInputHandler.cs} | 57 +- .../UnityGuiInputHandler.cs.meta | 11 + .../UnityMouseHandler.cs | 34 +- .../UnityMouseHandler.cs.meta | 2 +- .../UnityTouchHandler.cs | 38 +- .../UnityTouchHandler.cs.meta | 11 + Assets/Plugins/Cryville.Input.dll | Bin 0 -> 15360 bytes Assets/Plugins/Cryville.Input.dll.meta | 33 ++ Assets/Plugins/Cryville.Input.xml | 510 +++++++++++++++++ Assets/Plugins/Cryville.Input.xml.meta | 7 + 62 files changed, 1417 insertions(+), 1602 deletions(-) delete mode 100644 Assets/Cryville/Common/Unity/Input/AndroidTouchHandler.cs delete mode 100644 Assets/Cryville/Common/Unity/Input/InputHandler.cs delete mode 100644 Assets/Cryville/Common/Unity/Input/InputManager.cs delete mode 100644 Assets/Cryville/Common/Unity/Input/InputManager.cs.meta delete mode 100644 Assets/Cryville/Common/Unity/Input/Messages.cs delete mode 100644 Assets/Cryville/Common/Unity/Input/Messages.cs.meta delete mode 100644 Assets/Cryville/Common/Unity/Input/NativeMethods.cs delete mode 100644 Assets/Cryville/Common/Unity/Input/NativeMethods.cs.meta delete mode 100644 Assets/Cryville/Common/Unity/Input/SimpleInputConsumer.cs delete mode 100644 Assets/Cryville/Common/Unity/Input/UnityCameraUtils.cs delete mode 100644 Assets/Cryville/Common/Unity/Input/UnityTouchHandler.cs.meta delete mode 100644 Assets/Cryville/Common/Unity/Input/WindowsPointerHandler.cs delete mode 100644 Assets/Cryville/Common/Unity/Input/WindowsPointerHandler.cs.meta create mode 100644 Assets/Plugins/Android/AndroidManifest.xml create mode 100644 Assets/Plugins/Android/AndroidManifest.xml.meta create mode 100644 Assets/Plugins/Android/arm64-v8a/libAndroidInputProxy.so create mode 100644 Assets/Plugins/Android/arm64-v8a/libAndroidInputProxy.so.meta create mode 100644 Assets/Plugins/Android/armeabi-v7a/libAndroidInputProxy.so create mode 100644 Assets/Plugins/Android/armeabi-v7a/libAndroidInputProxy.so.meta rename Assets/{Cryville/Common/Unity/Input.meta => Plugins/Cryville.Input.Unity.Android.meta} (57%) create mode 100644 Assets/Plugins/Cryville.Input.Unity.Android/AndroidInputHandler.cs rename Assets/{Cryville/Common/Unity/Input/SimpleInputConsumer.cs.meta => Plugins/Cryville.Input.Unity.Android/AndroidInputHandler.cs.meta} (83%) create mode 100644 Assets/Plugins/Cryville.Input.Unity.Android/AndroidSensorHandler.cs rename Assets/{Cryville/Common/Unity/Input/UnityCameraUtils.cs.meta => Plugins/Cryville.Input.Unity.Android/AndroidSensorHandler.cs.meta} (83%) create mode 100644 Assets/Plugins/Cryville.Input.Unity.Android/AndroidTouchHandler.cs rename Assets/{Cryville/Common/Unity/Input => Plugins/Cryville.Input.Unity.Android}/AndroidTouchHandler.cs.meta (83%) create mode 100644 Assets/Plugins/Cryville.Input.Unity.Android/Cryville.Input.Unity.Android.asmdef create mode 100644 Assets/Plugins/Cryville.Input.Unity.Android/Cryville.Input.Unity.Android.asmdef.meta create mode 100644 Assets/Plugins/Cryville.Input.Unity.Android/Java.meta create mode 100644 Assets/Plugins/Cryville.Input.Unity.Android/Java/NativeMethods.java create mode 100644 Assets/Plugins/Cryville.Input.Unity.Android/Java/NativeMethods.java.meta create mode 100644 Assets/Plugins/Cryville.Input.Unity.Android/Java/Proxy.java create mode 100644 Assets/Plugins/Cryville.Input.Unity.Android/Java/Proxy.java.meta create mode 100644 Assets/Plugins/Cryville.Input.Unity.Android/Java/SensorProxy.java create mode 100644 Assets/Plugins/Cryville.Input.Unity.Android/Java/SensorProxy.java.meta create mode 100644 Assets/Plugins/Cryville.Input.Unity.Android/Java/TouchProxy.java create mode 100644 Assets/Plugins/Cryville.Input.Unity.Android/Java/TouchProxy.java.meta create mode 100644 Assets/Plugins/Cryville.Input.Unity.Android/JavaStaticMethods.cs rename Assets/{Cryville/Common/Unity/Input/UnityKeyHandler.cs.meta => Plugins/Cryville.Input.Unity.Android/JavaStaticMethods.cs.meta} (83%) create mode 100644 Assets/Plugins/Cryville.Input.Unity.Android/NativeMethods.cs rename Assets/{Cryville/Common/Unity/Input/InputHandler.cs.meta => Plugins/Cryville.Input.Unity.Android/NativeMethods.cs.meta} (83%) create mode 100644 Assets/Plugins/Cryville.Input.Unity.Builtin.meta create mode 100644 Assets/Plugins/Cryville.Input.Unity.Builtin/Cryville.Input.Unity.Builtin.asmdef create mode 100644 Assets/Plugins/Cryville.Input.Unity.Builtin/Cryville.Input.Unity.Builtin.asmdef.meta rename Assets/{Cryville/Common/Unity/Input/UnityKeyHandler.cs => Plugins/Cryville.Input.Unity.Builtin/UnityGuiInputHandler.cs} (54%) create mode 100644 Assets/Plugins/Cryville.Input.Unity.Builtin/UnityGuiInputHandler.cs.meta rename Assets/{Cryville/Common/Unity/Input => Plugins/Cryville.Input.Unity.Builtin}/UnityMouseHandler.cs (56%) rename Assets/{Cryville/Common/Unity/Input => Plugins/Cryville.Input.Unity.Builtin}/UnityMouseHandler.cs.meta (83%) rename Assets/{Cryville/Common/Unity/Input => Plugins/Cryville.Input.Unity.Builtin}/UnityTouchHandler.cs (57%) create mode 100644 Assets/Plugins/Cryville.Input.Unity.Builtin/UnityTouchHandler.cs.meta create mode 100644 Assets/Plugins/Cryville.Input.dll create mode 100644 Assets/Plugins/Cryville.Input.dll.meta create mode 100644 Assets/Plugins/Cryville.Input.xml create mode 100644 Assets/Plugins/Cryville.Input.xml.meta diff --git a/Assets/Cryville/Common/Unity/Input/AndroidTouchHandler.cs b/Assets/Cryville/Common/Unity/Input/AndroidTouchHandler.cs deleted file mode 100644 index add0549..0000000 --- a/Assets/Cryville/Common/Unity/Input/AndroidTouchHandler.cs +++ /dev/null @@ -1,92 +0,0 @@ -using System; -using UnityEngine; - -namespace Cryville.Common.Unity.Input { - public class AndroidTouchHandler : InputHandler { - readonly AndroidTouchListener _listener; - readonly AndroidJavaClass _systemClock; - - public AndroidTouchHandler() { - if (Environment.OSVersion.Platform != PlatformID.Unix) - throw new NotSupportedException("Android touch is not supported on this device"); - _systemClock = new AndroidJavaClass("android.os.SystemClock"); - new AndroidJavaClass("com.unity3d.player.UnityPlayer") - .GetStatic("currentActivity") - .Get("mUnityPlayer") - .Call("setOnTouchListener", _listener = new AndroidTouchListener(this)); - } - - protected override void Activate() { - _listener.Activated = true; - } - - protected override void Deactivate() { - _listener.Activated = false; - } - - public override void Dispose(bool disposing) { - if (disposing) { - Deactivate(); - } - } - - public override bool IsNullable(int type) { - if (type != 0) throw new ArgumentOutOfRangeException("type"); - return true; - } - - public override byte GetDimension(int type) { - if (type != 0) throw new ArgumentOutOfRangeException("type"); - return 2; - } - - public override string GetTypeName(int type) { - switch (type) { - case 0: return "Android Touch"; - default: throw new ArgumentOutOfRangeException("type"); - } - } - - public override double GetCurrentTimestamp() { - return _systemClock.CallStatic("uptimeMillis") / 1000.0; - } - - class AndroidTouchListener : AndroidJavaProxy { - public bool Activated { get; set; } - - readonly AndroidTouchHandler _handler; - - public AndroidTouchListener(AndroidTouchHandler handler) : base("android.view.View$OnTouchListener") { - _handler = handler; - } - -#pragma warning disable IDE1006 -#pragma warning disable IDE0060 - public bool onTouch(AndroidJavaObject v, AndroidJavaObject e) { - if (!Activated) return false; - try { - int pointerCount = e.Call("getPointerCount"); - for (int i = 0; i < pointerCount; i++) { - int id = e.Call("getPointerId", i); - double time = e.Call("getEventTime") / 1000.0; - int action = e.Call("getActionMasked"); - Vector2 pos = UnityCameraUtils.ScreenToWorldPoint(new Vector2( - e.Call("getX", i), - e.Call("getY", i) - )); - _handler.Feed(0, id, new InputVector(time, pos)); - if (action == 1 /*ACTION_UP*/ || action == 3 /*ACTION_CANCEL*/ || (action == 6 /*ACTION_POINTER_UP*/ && e.Call("getActionIndex") == i)) { - _handler.Feed(0, id, new InputVector(time)); - } - } - } - catch (Exception ex) { - Logger.Log("main", 4, "Input", "An error occured while handling an Android touch event: {0}", ex); - } - return false; - } -#pragma warning restore IDE0060 -#pragma warning restore IDE1006 - } - } -} diff --git a/Assets/Cryville/Common/Unity/Input/InputHandler.cs b/Assets/Cryville/Common/Unity/Input/InputHandler.cs deleted file mode 100644 index f76128e..0000000 --- a/Assets/Cryville/Common/Unity/Input/InputHandler.cs +++ /dev/null @@ -1,110 +0,0 @@ -using Cryville.Common.Reflection; -using System; -using UnityEngine; - -namespace Cryville.Common.Unity.Input { - public delegate void InputEventDelegate(InputIdentifier id, InputVector vec); - public abstract class InputHandler : IDisposable { - InputEventDelegate m_onInput; - public event InputEventDelegate OnInput { - add { - if (m_onInput == null) Activate(); - m_onInput -= value; - m_onInput += value; - } - remove { - if (m_onInput == null) return; - m_onInput -= value; - if (m_onInput == null) Deactivate(); - } - } - - ~InputHandler() { - Dispose(false); - } - public void Dispose() { - Dispose(true); - GC.SuppressFinalize(this); - } - - protected abstract void Activate(); - protected abstract void Deactivate(); - public abstract void Dispose(bool disposing); - public abstract bool IsNullable(int type); - public abstract byte GetDimension(int type); - public abstract string GetTypeName(int type); - public abstract double GetCurrentTimestamp(); - protected void Feed(int type, int id, InputVector vec) { - var del = m_onInput; - if (del != null) del(new InputIdentifier { Source = new InputSource { Handler = this, Type = type }, Id = id }, vec); - } - } - - public struct InputSource : IEquatable { - public InputHandler Handler { get; set; } - public int Type { get; set; } - public override bool Equals(object obj) { - if (obj == null || !(obj is InputSource)) return false; - return Equals((InputSource)obj); - } - public bool Equals(InputSource other) { - return Handler == other.Handler && Type == other.Type; - } - public override int GetHashCode() { - return Handler.GetHashCode() ^ Type; - } - public override string ToString() { - return string.Format("{0}:{1}", TypeNameHelper.GetSimpleName(Handler.GetType()), Handler.GetTypeName(Type)); - } - public static bool operator ==(InputSource lhs, InputSource rhs) { - return lhs.Equals(rhs); - } - public static bool operator !=(InputSource lhs, InputSource rhs) { - return !lhs.Equals(rhs); - } - } - - public struct InputIdentifier : IEquatable { - public InputSource Source { get; set; } - public int Id { get; set; } - public override bool Equals(object obj) { - if (obj == null || !(obj is InputIdentifier)) return false; - return Equals((InputIdentifier)obj); - } - public bool Equals(InputIdentifier other) { - return Source == other.Source && Id == other.Id; - } - public override int GetHashCode() { - return Source.GetHashCode() ^ ((Id << 16) | (Id >> 16)); - } - public override string ToString() { - return string.Format("{0},{1}", Source, Id); - } - public static bool operator ==(InputIdentifier lhs, InputIdentifier rhs) { - return lhs.Equals(rhs); - } - public static bool operator !=(InputIdentifier lhs, InputIdentifier rhs) { - return !lhs.Equals(rhs); - } - } - - public struct InputVector { - public double Time { get; set; } - public bool IsNull { get; set; } - public Vector3 Vector { get; set; } - public InputVector(double time) { - Time = time; - IsNull = true; - Vector = default(Vector3); - } - public InputVector(double time, Vector3 vector) { - Time = time; - IsNull = false; - Vector = vector; - } - public override string ToString() { - if (IsNull) return string.Format("null@{0}", Time); - else return string.Format("{0}@{1}", Vector.ToString("G9"), Time); - } - } -} diff --git a/Assets/Cryville/Common/Unity/Input/InputManager.cs b/Assets/Cryville/Common/Unity/Input/InputManager.cs deleted file mode 100644 index 604a9eb..0000000 --- a/Assets/Cryville/Common/Unity/Input/InputManager.cs +++ /dev/null @@ -1,49 +0,0 @@ -using Cryville.Common.Logging; -using Cryville.Common.Reflection; -using System; -using System.Collections.Generic; -using System.Reflection; - -namespace Cryville.Common.Unity.Input { - public class InputManager { - static readonly HashSet HandlerRegistries = new HashSet { - typeof(WindowsPointerHandler), - typeof(AndroidTouchHandler), - typeof(UnityKeyHandler), - typeof(UnityKeyHandler), - typeof(UnityMouseHandler), - typeof(UnityTouchHandler), - }; - readonly HashSet _handlers = new HashSet(); - readonly Dictionary _typemap = new Dictionary(); - public InputManager() { - foreach (var t in HandlerRegistries) { - try { - if (!typeof(InputHandler).IsAssignableFrom(t)) continue; - var h = (InputHandler)Activator.CreateInstance(t); - _typemap.Add(t, h); - _handlers.Add(h); - Logger.Log("main", 1, "Input", "Initialized {0}", TypeNameHelper.GetSimpleName(t)); - } - catch (TargetInvocationException ex) { - Logger.Log("main", 1, "Input", "Cannot initialize {0}: {1}", TypeNameHelper.GetSimpleName(t), ex.InnerException.Message); - } - } - } - public InputHandler GetHandler(string name) { - return _typemap[Type.GetType(name)]; - } - public void EnumerateHandlers(Action cb) { - foreach (var h in _handlers) cb(h); - } - } - - public struct InputEvent { - public InputIdentifier Id { get; set; } - public InputVector From { get; set; } - public InputVector To { get; set; } - public override string ToString() { - return string.Format("[{0}] {1} -> {2}", Id, From, To); - } - } -} diff --git a/Assets/Cryville/Common/Unity/Input/InputManager.cs.meta b/Assets/Cryville/Common/Unity/Input/InputManager.cs.meta deleted file mode 100644 index 3a4a187..0000000 --- a/Assets/Cryville/Common/Unity/Input/InputManager.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: aaf7daeaf7afb3146b3eea2a07f88055 -timeCreated: 1611035810 -licenseType: Free -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Cryville/Common/Unity/Input/Messages.cs b/Assets/Cryville/Common/Unity/Input/Messages.cs deleted file mode 100644 index 1c5b2d5..0000000 --- a/Assets/Cryville/Common/Unity/Input/Messages.cs +++ /dev/null @@ -1,528 +0,0 @@ -namespace Cryville.Common.Unity.Input { - public enum WindowMessages : uint { - WM_NULL = 0x0000, - WM_CREATE = 0x0001, - WM_DESTROY = 0x0002, - WM_MOVE = 0x0003, - WM_SIZE = 0x0005, - - WM_ACTIVATE = 0x0006, -/* - * WM_ACTIVATE state values - */ - WA_INACTIVE = 0, - WA_ACTIVE = 1, - WA_CLICKACTIVE = 2, - - WM_SETFOCUS = 0x0007, - WM_KILLFOCUS = 0x0008, - WM_ENABLE = 0x000A, - WM_SETREDRAW = 0x000B, - WM_SETTEXT = 0x000C, - WM_GETTEXT = 0x000D, - WM_GETTEXTLENGTH = 0x000E, - WM_PAINT = 0x000F, - WM_CLOSE = 0x0010, -//#ifndef _WIN32_WCE - WM_QUERYENDSESSION = 0x0011, - WM_QUERYOPEN = 0x0013, - WM_ENDSESSION = 0x0016, -//#endif - WM_QUIT = 0x0012, - WM_ERASEBKGND = 0x0014, - WM_SYSCOLORCHANGE = 0x0015, - WM_SHOWWINDOW = 0x0018, - WM_WININICHANGE = 0x001A, -//#if(WINVER >= 0x0400) - WM_SETTINGCHANGE = WM_WININICHANGE, -//#endif /* WINVER >= 0x0400 */ - - - WM_DEVMODECHANGE = 0x001B, - WM_ACTIVATEAPP = 0x001C, - WM_FONTCHANGE = 0x001D, - WM_TIMECHANGE = 0x001E, - WM_CANCELMODE = 0x001F, - WM_SETCURSOR = 0x0020, - WM_MOUSEACTIVATE = 0x0021, - WM_CHILDACTIVATE = 0x0022, - WM_QUEUESYNC = 0x0023, - - WM_GETMINMAXINFO = 0x0024, - WM_PAINTICON = 0x0026, - WM_ICONERASEBKGND = 0x0027, - WM_NEXTDLGCTL = 0x0028, - WM_SPOOLERSTATUS = 0x002A, - WM_DRAWITEM = 0x002B, - WM_MEASUREITEM = 0x002C, - WM_DELETEITEM = 0x002D, - WM_VKEYTOITEM = 0x002E, - WM_CHARTOITEM = 0x002F, - WM_SETFONT = 0x0030, - WM_GETFONT = 0x0031, - WM_SETHOTKEY = 0x0032, - WM_GETHOTKEY = 0x0033, - WM_QUERYDRAGICON = 0x0037, - WM_COMPAREITEM = 0x0039, -//#if(WINVER >= 0x0500) -//#ifndef _WIN32_WCE - WM_GETOBJECT = 0x003D, -//#endif -//#endif /* WINVER >= 0x0500 */ - WM_COMPACTING = 0x0041, - WM_COMMNOTIFY = 0x0044, /* no longer suported */ - WM_WINDOWPOSCHANGING = 0x0046, - WM_WINDOWPOSCHANGED = 0x0047, - - WM_POWER = 0x0048, -/* - * wParam for WM_POWER window message and DRV_POWER driver notification - */ - /*PWR_OK = 1, - PWR_FAIL = (-1), - PWR_SUSPENDREQUEST = 1, - PWR_SUSPENDRESUME = 2, - PWR_CRITICALRESUME = 3,*/ - - WM_COPYDATA = 0x004A, - WM_CANCELJOURNAL = 0x004B, - - -//#if(WINVER >= 0x0400) - WM_NOTIFY = 0x004E, - WM_INPUTLANGCHANGEREQUEST = 0x0050, - WM_INPUTLANGCHANGE = 0x0051, - WM_TCARD = 0x0052, - WM_HELP = 0x0053, - WM_USERCHANGED = 0x0054, - WM_NOTIFYFORMAT = 0x0055, - - NFR_ANSI = 1, - NFR_UNICODE = 2, - NF_QUERY = 3, - NF_REQUERY = 4, - - WM_CONTEXTMENU = 0x007B, - WM_STYLECHANGING = 0x007C, - WM_STYLECHANGED = 0x007D, - WM_DISPLAYCHANGE = 0x007E, - WM_GETICON = 0x007F, - WM_SETICON = 0x0080, -//#endif /* WINVER >= 0x0400 */ - - WM_NCCREATE = 0x0081, - WM_NCDESTROY = 0x0082, - WM_NCCALCSIZE = 0x0083, - WM_NCHITTEST = 0x0084, - WM_NCPAINT = 0x0085, - WM_NCACTIVATE = 0x0086, - WM_GETDLGCODE = 0x0087, -//#ifndef _WIN32_WCE - WM_SYNCPAINT = 0x0088, -//#endif - WM_NCMOUSEMOVE = 0x00A0, - WM_NCLBUTTONDOWN = 0x00A1, - WM_NCLBUTTONUP = 0x00A2, - WM_NCLBUTTONDBLCLK = 0x00A3, - WM_NCRBUTTONDOWN = 0x00A4, - WM_NCRBUTTONUP = 0x00A5, - WM_NCRBUTTONDBLCLK = 0x00A6, - WM_NCMBUTTONDOWN = 0x00A7, - WM_NCMBUTTONUP = 0x00A8, - WM_NCMBUTTONDBLCLK = 0x00A9, - - - -//#if(_WIN32_WINNT >= 0x0500) - WM_NCXBUTTONDOWN = 0x00AB, - WM_NCXBUTTONUP = 0x00AC, - WM_NCXBUTTONDBLCLK = 0x00AD, -//#endif /* _WIN32_WINNT >= 0x0500 */ - - -//#if(_WIN32_WINNT >= 0x0501) - WM_INPUT_DEVICE_CHANGE = 0x00FE, -//#endif /* _WIN32_WINNT >= 0x0501 */ - -//#if(_WIN32_WINNT >= 0x0501) - WM_INPUT = 0x00FF, -//#endif /* _WIN32_WINNT >= 0x0501 */ - - WM_KEYFIRST = 0x0100, - WM_KEYDOWN = 0x0100, - WM_KEYUP = 0x0101, - WM_CHAR = 0x0102, - WM_DEADCHAR = 0x0103, - WM_SYSKEYDOWN = 0x0104, - WM_SYSKEYUP = 0x0105, - WM_SYSCHAR = 0x0106, - WM_SYSDEADCHAR = 0x0107, -//#if(_WIN32_WINNT >= 0x0501) - WM_UNICHAR = 0x0109, - WM_KEYLAST = 0x0109, - UNICODE_NOCHAR = 0xFFFF, -//#else - WM_KEYLAST__WIN2000 = 0x0108, -//#endif /* _WIN32_WINNT >= 0x0501 */ - -//#if(WINVER >= 0x0400) - WM_IME_STARTCOMPOSITION = 0x010D, - WM_IME_ENDCOMPOSITION = 0x010E, - WM_IME_COMPOSITION = 0x010F, - WM_IME_KEYLAST = 0x010F, -//#endif /* WINVER >= 0x0400 */ - - WM_INITDIALOG = 0x0110, - WM_COMMAND = 0x0111, - WM_SYSCOMMAND = 0x0112, - WM_TIMER = 0x0113, - WM_HSCROLL = 0x0114, - WM_VSCROLL = 0x0115, - WM_INITMENU = 0x0116, - WM_INITMENUPOPUP = 0x0117, -//#if(WINVER >= 0x0601) - WM_GESTURE = 0x0119, - WM_GESTURENOTIFY = 0x011A, -//#endif /* WINVER >= 0x0601 */ - WM_MENUSELECT = 0x011F, - WM_MENUCHAR = 0x0120, - WM_ENTERIDLE = 0x0121, -//#if(WINVER >= 0x0500) -//#ifndef _WIN32_WCE - WM_MENURBUTTONUP = 0x0122, - WM_MENUDRAG = 0x0123, - WM_MENUGETOBJECT = 0x0124, - WM_UNINITMENUPOPUP = 0x0125, - WM_MENUCOMMAND = 0x0126, - -//#ifndef _WIN32_WCE -//#if(_WIN32_WINNT >= 0x0500) - WM_CHANGEUISTATE = 0x0127, - WM_UPDATEUISTATE = 0x0128, - WM_QUERYUISTATE = 0x0129, - -/* - * LOWORD(wParam) values in WM_*UISTATE* - */ - UIS_SET = 1, - UIS_CLEAR = 2, - UIS_INITIALIZE = 3, - -/* - * HIWORD(wParam) values in WM_*UISTATE* - */ - UISF_HIDEFOCUS = 0x1, - UISF_HIDEACCEL = 0x2, -//#if(_WIN32_WINNT >= 0x0501) - UISF_ACTIVE = 0x4, -//#endif /* _WIN32_WINNT >= 0x0501 */ -//#endif /* _WIN32_WINNT >= 0x0500 */ -//#endif - -//#endif -//#endif /* WINVER >= 0x0500 */ - - WM_CTLCOLORMSGBOX = 0x0132, - WM_CTLCOLOREDIT = 0x0133, - WM_CTLCOLORLISTBOX = 0x0134, - WM_CTLCOLORBTN = 0x0135, - WM_CTLCOLORDLG = 0x0136, - WM_CTLCOLORSCROLLBAR = 0x0137, - WM_CTLCOLORSTATIC = 0x0138, - MN_GETHMENU = 0x01E1, - - WM_MOUSEFIRST = 0x0200, - WM_MOUSEMOVE = 0x0200, - WM_LBUTTONDOWN = 0x0201, - WM_LBUTTONUP = 0x0202, - WM_LBUTTONDBLCLK = 0x0203, - WM_RBUTTONDOWN = 0x0204, - WM_RBUTTONUP = 0x0205, - WM_RBUTTONDBLCLK = 0x0206, - WM_MBUTTONDOWN = 0x0207, - WM_MBUTTONUP = 0x0208, - WM_MBUTTONDBLCLK = 0x0209, -//#if (_WIN32_WINNT >= 0x0400) || (_WIN32_WINDOWS > 0x0400) - WM_MOUSEWHEEL = 0x020A, -//#endif -//#if (_WIN32_WINNT >= 0x0500) - WM_XBUTTONDOWN = 0x020B, - WM_XBUTTONUP = 0x020C, - WM_XBUTTONDBLCLK = 0x020D, -//#endif -//#if (_WIN32_WINNT >= 0x0600) - WM_MOUSEHWHEEL = 0x020E, -//#endif - -//#if (_WIN32_WINNT >= 0x0600) - WM_MOUSELAST = 0x020E, -//#elif (_WIN32_WINNT >= 0x0500) - WM_MOUSELAST__WIN2000 = 0x020D, -//#elif (_WIN32_WINNT >= 0x0400) || (_WIN32_WINDOWS > 0x0400) - WM_MOUSELAST__WIN4 = 0x020A, -//#else - WM_MOUSELAST__WIN3 = 0x0209, -//#endif /* (_WIN32_WINNT >= 0x0600) */ - - -//#if(_WIN32_WINNT >= 0x0400) -/* Value for rolling one detent */ - WHEEL_DELTA = 120, - //GET_WHEEL_DELTA_WPARAM(wParam) ((short)HIWORD(wParam)) - -/* Setting to scroll one page for SPI_GET/SETWHEELSCROLLLINES */ - WHEEL_PAGESCROLL = (uint.MaxValue), -//#endif /* _WIN32_WINNT >= 0x0400 */ - -//#if(_WIN32_WINNT >= 0x0500) - //GET_KEYSTATE_WPARAM(wParam) (LOWORD(wParam)) - //GET_NCHITTEST_WPARAM(wParam) ((short)LOWORD(wParam)) - //GET_XBUTTON_WPARAM(wParam) (HIWORD(wParam)) - -/* XButton values are WORD flags */ - XBUTTON1 = 0x0001, - XBUTTON2 = 0x0002, -/* Were there to be an XBUTTON3, its value would be 0x0004 */ -//#endif /* _WIN32_WINNT >= 0x0500 */ - - WM_PARENTNOTIFY = 0x0210, - WM_ENTERMENULOOP = 0x0211, - WM_EXITMENULOOP = 0x0212, - -//#if(WINVER >= 0x0400) - WM_NEXTMENU = 0x0213, - WM_SIZING = 0x0214, - WM_CAPTURECHANGED = 0x0215, - WM_MOVING = 0x0216, - WM_POWERBROADCAST = 0x0218, -//#endif /* WINVER >= 0x0400 */ -//#if(WINVER >= 0x0400) - WM_DEVICECHANGE = 0x0219, -//#endif /* WINVER >= 0x0400 */ - - WM_MDICREATE = 0x0220, - WM_MDIDESTROY = 0x0221, - WM_MDIACTIVATE = 0x0222, - WM_MDIRESTORE = 0x0223, - WM_MDINEXT = 0x0224, - WM_MDIMAXIMIZE = 0x0225, - WM_MDITILE = 0x0226, - WM_MDICASCADE = 0x0227, - WM_MDIICONARRANGE = 0x0228, - WM_MDIGETACTIVE = 0x0229, - - - WM_MDISETMENU = 0x0230, - WM_ENTERSIZEMOVE = 0x0231, - WM_EXITSIZEMOVE = 0x0232, - WM_DROPFILES = 0x0233, - WM_MDIREFRESHMENU = 0x0234, - -//#if(WINVER >= 0x0602) - WM_POINTERDEVICECHANGE = 0x238, - WM_POINTERDEVICEINRANGE = 0x239, - WM_POINTERDEVICEOUTOFRANGE = 0x23A, -//#endif /* WINVER >= 0x0602 */ - - -//#if(WINVER >= 0x0601) - WM_TOUCH = 0x0240, -//#endif /* WINVER >= 0x0601 */ - -//#if(WINVER >= 0x0602) - WM_NCPOINTERUPDATE = 0x0241, - WM_NCPOINTERDOWN = 0x0242, - WM_NCPOINTERUP = 0x0243, - WM_POINTERUPDATE = 0x0245, - WM_POINTERDOWN = 0x0246, - WM_POINTERUP = 0x0247, - WM_POINTERENTER = 0x0249, - WM_POINTERLEAVE = 0x024A, - WM_POINTERACTIVATE = 0x024B, - WM_POINTERCAPTURECHANGED = 0x024C, - WM_TOUCHHITTESTING = 0x024D, - WM_POINTERWHEEL = 0x024E, - WM_POINTERHWHEEL = 0x024F, - DM_POINTERHITTEST = 0x0250, - WM_POINTERROUTEDTO = 0x0251, - WM_POINTERROUTEDAWAY = 0x0252, - WM_POINTERROUTEDRELEASED = 0x0253, -//#endif /* WINVER >= 0x0602 */ - - -//#if(WINVER >= 0x0400) - WM_IME_SETCONTEXT = 0x0281, - WM_IME_NOTIFY = 0x0282, - WM_IME_CONTROL = 0x0283, - WM_IME_COMPOSITIONFULL = 0x0284, - WM_IME_SELECT = 0x0285, - WM_IME_CHAR = 0x0286, -//#endif /* WINVER >= 0x0400 */ -//#if(WINVER >= 0x0500) - WM_IME_REQUEST = 0x0288, -//#endif /* WINVER >= 0x0500 */ -//#if(WINVER >= 0x0400) - WM_IME_KEYDOWN = 0x0290, - WM_IME_KEYUP = 0x0291, -//#endif /* WINVER >= 0x0400 */ - -//#if((_WIN32_WINNT >= 0x0400) || (WINVER >= 0x0500)) - WM_MOUSEHOVER = 0x02A1, - WM_MOUSELEAVE = 0x02A3, -//#endif -//#if(WINVER >= 0x0500) - WM_NCMOUSEHOVER = 0x02A0, - WM_NCMOUSELEAVE = 0x02A2, -//#endif /* WINVER >= 0x0500 */ - -//#if(_WIN32_WINNT >= 0x0501) - WM_WTSSESSION_CHANGE = 0x02B1, - - WM_TABLET_FIRST = 0x02c0, - WM_TABLET_LAST = 0x02df, -//#endif /* _WIN32_WINNT >= 0x0501 */ - -//#if(WINVER >= 0x0601) - WM_DPICHANGED = 0x02E0, -//#endif /* WINVER >= 0x0601 */ -//#if(WINVER >= 0x0605) - WM_DPICHANGED_BEFOREPARENT = 0x02E2, - WM_DPICHANGED_AFTERPARENT = 0x02E3, - WM_GETDPISCALEDSIZE = 0x02E4, -//#endif /* WINVER >= 0x0605 */ - - - WM_CUT = 0x0300, - WM_COPY = 0x0301, - WM_PASTE = 0x0302, - WM_CLEAR = 0x0303, - WM_UNDO = 0x0304, - WM_RENDERFORMAT = 0x0305, - WM_RENDERALLFORMATS = 0x0306, - WM_DESTROYCLIPBOARD = 0x0307, - WM_DRAWCLIPBOARD = 0x0308, - WM_PAINTCLIPBOARD = 0x0309, - WM_VSCROLLCLIPBOARD = 0x030A, - WM_SIZECLIPBOARD = 0x030B, - WM_ASKCBFORMATNAME = 0x030C, - WM_CHANGECBCHAIN = 0x030D, - WM_HSCROLLCLIPBOARD = 0x030E, - WM_QUERYNEWPALETTE = 0x030F, - WM_PALETTEISCHANGING = 0x0310, - WM_PALETTECHANGED = 0x0311, - WM_HOTKEY = 0x0312, - -//#if(WINVER >= 0x0400) - WM_PRINT = 0x0317, - WM_PRINTCLIENT = 0x0318, -//#endif /* WINVER >= 0x0400 */ - -//#if(_WIN32_WINNT >= 0x0500) - WM_APPCOMMAND = 0x0319, -//#endif /* _WIN32_WINNT >= 0x0500 */ - -//#if(_WIN32_WINNT >= 0x0501) - WM_THEMECHANGED = 0x031A, -//#endif /* _WIN32_WINNT >= 0x0501 */ - - -//#if(_WIN32_WINNT >= 0x0501) - WM_CLIPBOARDUPDATE = 0x031D, -//#endif /* _WIN32_WINNT >= 0x0501 */ - -//#if(_WIN32_WINNT >= 0x0600) - WM_DWMCOMPOSITIONCHANGED = 0x031E, - WM_DWMNCRENDERINGCHANGED = 0x031F, - WM_DWMCOLORIZATIONCOLORCHANGED= 0x0320, - WM_DWMWINDOWMAXIMIZEDCHANGE = 0x0321, -//#endif /* _WIN32_WINNT >= 0x0600 */ - -//#if(_WIN32_WINNT >= 0x0601) - WM_DWMSENDICONICTHUMBNAIL = 0x0323, - WM_DWMSENDICONICLIVEPREVIEWBITMAP = 0x0326, -//#endif /* _WIN32_WINNT >= 0x0601 */ - - -//#if(WINVER >= 0x0600) - WM_GETTITLEBARINFOEX = 0x033F, -//#endif /* WINVER >= 0x0600 */ - -//#if(WINVER >= 0x0400) -//#endif /* WINVER >= 0x0400 */ - - -//#if(WINVER >= 0x0400) - WM_HANDHELDFIRST = 0x0358, - WM_HANDHELDLAST = 0x035F, - - WM_AFXFIRST = 0x0360, - WM_AFXLAST = 0x037F, -//#endif /* WINVER >= 0x0400 */ - - WM_PENWINFIRST = 0x0380, - WM_PENWINLAST = 0x038F, - - -//#if(WINVER >= 0x0400) - WM_APP = 0x8000, -//#endif /* WINVER >= 0x0400 */ - - -/* - * NOTE: All Message Numbers below 0x0400 are RESERVED. - * - * Private Window Messages Start Here: - */ - WM_USER = 0x0400, - -//#if(WINVER >= 0x0400) - -/* wParam for WM_SIZING message */ - WMSZ_LEFT = 1, - WMSZ_RIGHT = 2, - WMSZ_TOP = 3, - WMSZ_TOPLEFT = 4, - WMSZ_TOPRIGHT = 5, - WMSZ_BOTTOM = 6, - WMSZ_BOTTOMLEFT = 7, - WMSZ_BOTTOMRIGHT = 8, -//#endif /* WINVER >= 0x0400 */ - -//#ifndef NONCMESSAGES - -/* - * WM_NCHITTEST and MOUSEHOOKSTRUCT Mouse Position Codes - */ - /*HTERROR = (-2), - HTTRANSPARENT = (-1), - HTNOWHERE = 0, - HTCLIENT = 1, - HTCAPTION = 2, - HTSYSMENU = 3, - HTGROWBOX = 4, - HTSIZE = HTGROWBOX, - HTMENU = 5, - HTHSCROLL = 6, - HTVSCROLL = 7, - HTMINBUTTON = 8, - HTMAXBUTTON = 9, - HTLEFT = 10, - HTRIGHT = 11, - HTTOP = 12, - HTTOPLEFT = 13, - HTTOPRIGHT = 14, - HTBOTTOM = 15, - HTBOTTOMLEFT = 16, - HTBOTTOMRIGHT = 17, - HTBORDER = 18, - HTREDUCE = HTMINBUTTON, - HTZOOM = HTMAXBUTTON, - HTSIZEFIRST = HTLEFT, - HTSIZELAST = HTBOTTOMRIGHT, -//#if(WINVER >= 0x0400) - HTOBJECT = 19, - HTCLOSE = 20, - HTHELP = 21, -//#endif /* WINVER >= 0x0400 */ - } -} diff --git a/Assets/Cryville/Common/Unity/Input/Messages.cs.meta b/Assets/Cryville/Common/Unity/Input/Messages.cs.meta deleted file mode 100644 index cd546a3..0000000 --- a/Assets/Cryville/Common/Unity/Input/Messages.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 466300df0840ba54d95240e3a800a642 -timeCreated: 1611373988 -licenseType: Free -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Cryville/Common/Unity/Input/NativeMethods.cs b/Assets/Cryville/Common/Unity/Input/NativeMethods.cs deleted file mode 100644 index 9b278c9..0000000 --- a/Assets/Cryville/Common/Unity/Input/NativeMethods.cs +++ /dev/null @@ -1,252 +0,0 @@ -using System; -using System.Runtime.InteropServices; -using System.Text; - -namespace Cryville.Common.Unity.Input { - static class NativeMethods { - [StructLayout(LayoutKind.Sequential)] - public struct MONITORINFO { - public int cbSize; - public RECT rcMonitor; - public RECT rcWork; - public uint dwFlags; - } - - [StructLayout(LayoutKind.Sequential)] - public struct RECT { - public int Left, Top, Right, Bottom; - - public RECT(int left, int top, int right, int bottom) { - Left = left; - Top = top; - Right = right; - Bottom = bottom; - } - - public int X { - get { return Left; } - set { - Right -= (Left - value); - Left = value; - } - } - - public int Y { - get { return Top; } - set { - Bottom -= (Top - value); - Top = value; - } - } - - public int Height { - get { return Bottom - Top; } - set { Bottom = value + Top; } - } - - public int Width { - get { return Right - Left; } - set { Right = value + Left; } - } - } - - [DllImport("user32.dll")] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool GetTouchInputInfo(IntPtr hTouchInput, int cInputs, [Out] TOUCHINPUT[] pInputs, int cbSize); - [StructLayout(LayoutKind.Sequential)] - public struct TOUCHINPUT { - public int x; - public int y; - public IntPtr hSource; - public int dwID; - public TOUCHINPUT_Flags dwFlags; - public TOUCHINPUT_Mask dwMask; - public int dwTime; - public IntPtr dwExtraInfo; - public int cxContact; - public int cyContact; - } - [Flags] - public enum TOUCHINPUT_Flags : int { - TOUCHEVENTF_MOVE = 0x0001, - TOUCHEVENTF_DOWN = 0x0002, - TOUCHEVENTF_UP = 0x0004, - TOUCHEVENTF_INRANGE = 0x0008, - TOUCHEVENTF_PRIMARY = 0x0010, - TOUCHEVENTF_NOCOALESCE = 0x0020, - TOUCHEVENTF_PEN = 0x0040, - TOUCHEVENTF_PALM = 0x0080, - } - [Flags] - public enum TOUCHINPUT_Mask : int { - TOUCHINPUTMASKF_CONTACTAREA = 0x0004, - TOUCHINPUTMASKF_EXTRAINFO = 0x0002, - TOUCHINPUTMASKF_TIMEFROMSYSTEM = 0x0001, - } - - [DllImport("user32.dll")] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool GetPointerInfo(int pointerID, ref POINTER_INFO pPointerInfo); - [StructLayout(LayoutKind.Sequential, Pack = 1)] - public struct POINTER_INFO { - public POINTER_INPUT_TYPE pointerType; - public UInt32 pointerId; - public UInt32 frameId; - public POINTER_FLAGS pointerFlags; - public IntPtr sourceDevice; - public IntPtr hwndTarget; - public POINT ptPixelLocation; - public POINT ptHimetricLocation; - public POINT ptPixelLocationRaw; - public POINT ptHimetricLocationRaw; - public UInt32 dwTime; - public UInt32 historyCount; - public Int32 inputData; - public UInt32 dwKeyStates; - public UInt64 PerformanceCount; - public POINTER_BUTTON_CHANGE_TYPE ButtonChangeType; - } - public enum POINTER_INPUT_TYPE { - PT_POINTER = 0x00000001, - PT_TOUCH = 0x00000002, - PT_PEN = 0x00000003, - PT_MOUSE = 0x00000004, - PT_TOUCHPAD = 0x00000005, - } - [Flags] - public enum POINTER_FLAGS { - POINTER_FLAG_NONE = 0x00000000, - POINTER_FLAG_NEW = 0x00000001, - POINTER_FLAG_INRANGE = 0x00000002, - POINTER_FLAG_INCONTACT = 0x00000004, - POINTER_FLAG_FIRSTBUTTON = 0x00000010, - POINTER_FLAG_SECONDBUTTON = 0x00000020, - POINTER_FLAG_THIRDBUTTON = 0x00000040, - POINTER_FLAG_FOURTHBUTTON = 0x00000080, - POINTER_FLAG_FIFTHBUTTON = 0x00000100, - POINTER_FLAG_PRIMARY = 0x00002000, - POINTER_FLAG_CONFIDENCE = 0x00004000, - POINTER_FLAG_CANCELED = 0x00008000, - POINTER_FLAG_DOWN = 0x00010000, - POINTER_FLAG_UPDATE = 0x00020000, - POINTER_FLAG_UP = 0x00040000, - POINTER_FLAG_WHEEL = 0x00080000, - POINTER_FLAG_HWHEEL = 0x00100000, - POINTER_FLAG_CAPTURECHANGED = 0x00200000, - POINTER_FLAG_HASTRANSFORM = 0x00400000, - } - public enum POINTER_BUTTON_CHANGE_TYPE { - POINTER_CHANGE_NONE, - POINTER_CHANGE_FIRSTBUTTON_DOWN, - POINTER_CHANGE_FIRSTBUTTON_UP, - POINTER_CHANGE_SECONDBUTTON_DOWN, - POINTER_CHANGE_SECONDBUTTON_UP, - POINTER_CHANGE_THIRDBUTTON_DOWN, - POINTER_CHANGE_THIRDBUTTON_UP, - POINTER_CHANGE_FOURTHBUTTON_DOWN, - POINTER_CHANGE_FOURTHBUTTON_UP, - POINTER_CHANGE_FIFTHBUTTON_DOWN, - POINTER_CHANGE_FIFTHBUTTON_UP, - } - - [StructLayout(LayoutKind.Sequential)] - public struct POINT { - public int X; - public int Y; - } - - [DllImport("user32.dll")] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool GetPointerTouchInfo(int pointerId, ref POINTER_TOUCH_INFO touchInfo); - [StructLayout(LayoutKind.Sequential)] - public struct POINTER_TOUCH_INFO { - public POINTER_INFO pointerInfo; - public TOUCH_FLAGS touchFlags; - public TOUCH_MASK touchMask; - public RECT rcContact; - public RECT rcContactRaw; - public uint orientation; - public uint pressure; - } - [Flags] - public enum TOUCH_FLAGS { - TOUCH_FLAG_NONE = 0x00000000, - } - [Flags] - public enum TOUCH_MASK { - TOUCH_MASK_NONE = 0x00000000, - TOUCH_MASK_CONTACTAREA = 0x00000001, - TOUCH_MASK_ORIENTATION = 0x00000002, - TOUCH_MASK_PRESSURE = 0x00000004, - } - - [DllImport("user32.dll")] - public static extern IntPtr EnableMouseInPointer(bool value); - - [DllImport("kernel32.dll")] - public static extern uint GetCurrentThreadId(); - [DllImport("user32.dll", CharSet = CharSet.Unicode, SetLastError = true)] - public static extern int GetClassName(IntPtr hWnd, StringBuilder lpString, int nMaxCount); - public delegate bool EnumWindowsProc(IntPtr hWnd,IntPtr lParam); - [DllImport("user32.dll")] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool EnumThreadWindows(uint dwThreadId, EnumWindowsProc lpEnumFunc, IntPtr lParam); - - [DllImport("user32.dll")] - public static extern IntPtr MonitorFromWindow(IntPtr hwnd, uint dwFlags); - - [DllImport("user32.dll")] - public static extern bool GetMonitorInfo(IntPtr hMonitor, ref MONITORINFO lpmi); - - [DllImport("user32.dll", EntryPoint = "SetWindowLong")] - public static extern int SetWindowLong32(IntPtr hWnd, int nIndex, int dwNewLong); - - [DllImport("user32.dll", EntryPoint = "SetWindowLongPtr")] - public static extern IntPtr SetWindowLongPtr64(IntPtr hWnd, int nIndex, IntPtr dwNewLong); - - [DllImport("user32.dll")] - public static extern IntPtr CallWindowProc(IntPtr lpPrevWndFunc, IntPtr hWnd, uint msg, IntPtr wParam, - IntPtr lParam); - - [DllImport("user32.dll")] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool RegisterTouchWindow(IntPtr hWnd, TOUCH_WINDOW_FLAGS ulFlags); - [Flags] - public enum TOUCH_WINDOW_FLAGS { - TWF_FINETOUCH = 1, - TWF_WANTPALM = 2, - } - - [DllImport("user32.dll")] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool UnregisterTouchWindow(IntPtr hWnd); - - [DllImport("user32.dll")] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern void CloseTouchInputHandle(IntPtr lParam); - - [DllImport("user32.dll")] - public static extern bool ScreenToClient(IntPtr hWnd, ref POINT lpPoint); - - [DllImport("Kernel32.dll", CharSet = CharSet.Unicode)] - public static extern ushort GlobalAddAtom(string lpString); - - [DllImport("Kernel32.dll")] - public static extern ushort GlobalDeleteAtom(ushort nAtom); - - [DllImport("user32.dll", CharSet = CharSet.Unicode)] - public static extern int SetProp(IntPtr hWnd, string lpString, int hData); - - [DllImport("user32.dll", CharSet = CharSet.Unicode)] - public static extern int RemoveProp(IntPtr hWnd, string lpString); - - [DllImport("user32.dll", CharSet = CharSet.Auto)] - public static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam); - - [DllImport("kernel32.dll")] - public static extern uint QueryPerformanceFrequency(out Int64 lpFrequency); - - [DllImport("kernel32.dll")] - public static extern uint QueryPerformanceCounter(out Int64 lpPerformanceCount); - } -} diff --git a/Assets/Cryville/Common/Unity/Input/NativeMethods.cs.meta b/Assets/Cryville/Common/Unity/Input/NativeMethods.cs.meta deleted file mode 100644 index a385859..0000000 --- a/Assets/Cryville/Common/Unity/Input/NativeMethods.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: a6ff72ea2b7f71345aa19940faf026e8 -timeCreated: 1622589747 -licenseType: Free -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Cryville/Common/Unity/Input/SimpleInputConsumer.cs b/Assets/Cryville/Common/Unity/Input/SimpleInputConsumer.cs deleted file mode 100644 index 75e34f6..0000000 --- a/Assets/Cryville/Common/Unity/Input/SimpleInputConsumer.cs +++ /dev/null @@ -1,49 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace Cryville.Common.Unity.Input { - public class SimpleInputConsumer { - readonly InputManager _manager; - readonly object _lock = new object(); - readonly Dictionary _vectors = new Dictionary(); - readonly List _events = new List(); - public SimpleInputConsumer(InputManager manager) { _manager = manager; } - public void Activate() { - lock (_lock) { - _events.Clear(); - } - _manager.EnumerateHandlers(h => h.OnInput += OnInput); - } - public void Deactivate() { - _manager.EnumerateHandlers(h => h.OnInput -= OnInput); - } - protected void OnInput(InputIdentifier id, InputVector vec) { - lock (_lock) { - InputVector vec0; - if (_vectors.TryGetValue(id, out vec0)) { - _events.Add(new InputEvent { - Id = id, - From = vec0, - To = vec, - }); - if (vec.IsNull) _vectors.Remove(id); - else _vectors[id] = vec; - } - else { - _events.Add(new InputEvent { - Id = id, - From = new InputVector(vec.Time), - To = vec, - }); - _vectors.Add(id, vec); - } - } - } - public void EnumerateEvents(Action cb) { - lock (_lock) { - foreach (var ev in _events) cb(ev); - _events.Clear(); - } - } - } -} diff --git a/Assets/Cryville/Common/Unity/Input/UnityCameraUtils.cs b/Assets/Cryville/Common/Unity/Input/UnityCameraUtils.cs deleted file mode 100644 index af5d2e8..0000000 --- a/Assets/Cryville/Common/Unity/Input/UnityCameraUtils.cs +++ /dev/null @@ -1,12 +0,0 @@ -using UnityEngine; - -namespace Cryville.Common.Unity.Input { - public static class UnityCameraUtils { - public static Vector2 ScreenToWorldPoint(Vector2 pos) { - Vector3 i = pos; - i.z = -Camera.main.transform.localPosition.z; - i = Camera.main.ScreenToWorldPoint(i); - return i; - } - } -} diff --git a/Assets/Cryville/Common/Unity/Input/UnityTouchHandler.cs.meta b/Assets/Cryville/Common/Unity/Input/UnityTouchHandler.cs.meta deleted file mode 100644 index 1a90028..0000000 --- a/Assets/Cryville/Common/Unity/Input/UnityTouchHandler.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 93f60577ebaa5824dba5f322bbd1ad26 -timeCreated: 1618910605 -licenseType: Free -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Cryville/Common/Unity/Input/WindowsPointerHandler.cs b/Assets/Cryville/Common/Unity/Input/WindowsPointerHandler.cs deleted file mode 100644 index f2b2b6a..0000000 --- a/Assets/Cryville/Common/Unity/Input/WindowsPointerHandler.cs +++ /dev/null @@ -1,349 +0,0 @@ -/* - * @author Valentin Simonov / http://va.lent.in/ - * @author Valentin Frolov - * @author Andrew David Griffiths - * @author Cryville:Lime - */ -using AOT; -using System; -using System.Runtime.InteropServices; -using System.Text; -using UnityEngine; -using Logger = Cryville.Common.Logging.Logger; - -namespace Cryville.Common.Unity.Input { - public class WindowsPointerHandler : InputHandler { - static WindowsPointerHandler Instance; - - const string PRESS_AND_HOLD_ATOM = "MicrosoftTabletPenServiceProperty"; - delegate IntPtr WndProcDelegate(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam); - - public const int MONITOR_DEFAULTTONEAREST = 2; - readonly IntPtr hMainWindow; - IntPtr oldWndProcPtr; - IntPtr newWndProcPtr; - WndProcDelegate newWndProc; - ushort pressAndHoldAtomID; - - readonly int touchInputSize; - readonly long freq; - static bool usePointerMessage; - - public WindowsPointerHandler() { - if (Instance != null) - throw new InvalidOperationException("WindowsPointerHandler already created"); - if (Environment.OSVersion.Platform != PlatformID.Win32NT) - throw new NotSupportedException("Windows pointer is not supported on this device"); - Instance = this; - usePointerMessage = true; - - hMainWindow = GetUnityWindowHandle(); - if (hMainWindow == IntPtr.Zero) { - throw new InvalidOperationException("Cannot find the game window"); - } - NativeMethods.QueryPerformanceFrequency(out freq); - retry: - if (usePointerMessage) { - try { - NativeMethods.EnableMouseInPointer(true); - Logger.Log("main", 0, "Input", "Touch input frequency: {0}", freq); - } - catch (TypeLoadException) { - usePointerMessage = false; - Logger.Log("main", 2, "Input", "Advanced touch handling not supported"); - goto retry; - } - } - else { - touchInputSize = Marshal.SizeOf(typeof(NativeMethods.TOUCHINPUT)); - } - } - - public const int TABLET_DISABLE_PRESSANDHOLD = 0x00000001; - public const int TABLET_DISABLE_PENTAPFEEDBACK = 0x00000008; - public const int TABLET_DISABLE_PENBARRELFEEDBACK = 0x00000010; - public const int TABLET_DISABLE_FLICKS = 0x00010000; - - protected override void Activate() { - newWndProc = WndProc; - newWndProcPtr = Marshal.GetFunctionPointerForDelegate(newWndProc); - oldWndProcPtr = SetWindowLongPtr(hMainWindow, -4, newWndProcPtr); - if (!NativeMethods.RegisterTouchWindow(hMainWindow, NativeMethods.TOUCH_WINDOW_FLAGS.TWF_WANTPALM)) { - throw new InvalidOperationException("Failed to register touch window"); - } - pressAndHoldAtomID = NativeMethods.GlobalAddAtom(PRESS_AND_HOLD_ATOM); - NativeMethods.SetProp(hMainWindow, PRESS_AND_HOLD_ATOM, - TABLET_DISABLE_PRESSANDHOLD | // disables press and hold (right-click) gesture - TABLET_DISABLE_PENTAPFEEDBACK | // disables UI feedback on pen up (waves) - TABLET_DISABLE_PENBARRELFEEDBACK | // disables UI feedback on pen button down (circle) - TABLET_DISABLE_FLICKS // disables pen flicks (back, forward, drag down, drag up); - ); - } - - protected override void Deactivate() { - if (pressAndHoldAtomID != 0) { - NativeMethods.RemoveProp(hMainWindow, PRESS_AND_HOLD_ATOM); - NativeMethods.GlobalDeleteAtom(pressAndHoldAtomID); - } - if (!NativeMethods.UnregisterTouchWindow(hMainWindow)) { - throw new InvalidOperationException("Failed to unregister touch window"); - } - SetWindowLongPtr(hMainWindow, -4, oldWndProcPtr); - newWndProcPtr = IntPtr.Zero; - newWndProc = null; - } - - const string UnityWindowClassName = "UnityWndClass"; - - static IntPtr _windowHandle; - public static IntPtr GetUnityWindowHandle() { - uint threadId = NativeMethods.GetCurrentThreadId(); - NativeMethods.EnumThreadWindows( - threadId, - UnityWindowFilter, - IntPtr.Zero - ); - return _windowHandle; - } - - [MonoPInvokeCallback(typeof(NativeMethods.EnumWindowsProc))] - public static bool UnityWindowFilter(IntPtr hWnd, IntPtr lParam) { - var classText = new StringBuilder(UnityWindowClassName.Length + 1); - NativeMethods.GetClassName(hWnd, classText, classText.Capacity); - if (classText.ToString() == UnityWindowClassName) { - _windowHandle = hWnd; - return false; - } - return true; - } - - public override bool IsNullable(int type) { - return true; - } - - public override byte GetDimension(int type) { - return 2; - } - - public override string GetTypeName(int type) { - switch (type) { - case 0: return "Windows Pointer Unknown"; - case 1: return "Windows Pointer Pointer"; - case 2: return "Windows Pointer Touch"; - case 3: return "Windows Pointer Pen"; - case 4: return "Windows Pointer Mouse"; - case 5: return "Windows Pointer Touch Pad"; - case 255: return "Windows Touch"; - default: throw new ArgumentOutOfRangeException(nameof(type)); - } - } - - public override double GetCurrentTimestamp() { - long tick; - NativeMethods.QueryPerformanceCounter(out tick); - return (double)tick / freq; - } - - public override void Dispose(bool disposing) { - if (disposing) { - Deactivate(); - if (usePointerMessage) - NativeMethods.EnableMouseInPointer(false); - } - Instance = null; - } - - [MonoPInvokeCallback(typeof(WndProcDelegate))] - static IntPtr WndProc(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam) { - try { - var m = (WindowMessages)msg; - /*if (m >= WindowMessages.WM_MOUSEFIRST && m <= WindowMessages.WM_MOUSELAST) { - if (!usePointerMessage) - Instance.handleMouseMsg(msg, wParam, lParam); - } - else*/ - switch (m) { - case WindowMessages.WM_TOUCH: - if (usePointerMessage) - NativeMethods.CloseTouchInputHandle(lParam); - else - Instance.HandleTouchMsg(wParam, lParam); - break; - case WindowMessages.WM_POINTERDOWN: - case WindowMessages.WM_POINTERUP: - case WindowMessages.WM_POINTERUPDATE: - if (usePointerMessage) - Instance.HandlePointerMsg(msg, wParam, lParam); - break; - case WindowMessages.WM_CLOSE: - Instance.Dispose(); - // Calling oldWndProcPtr here would crash the application - Application.Quit(); - return IntPtr.Zero; - } - return NativeMethods.CallWindowProc(Instance.oldWndProcPtr, hWnd, msg, wParam, lParam); - } - catch (Exception ex) { - Logger.Log("main", 4, "Input", "An error occured while handling pointer:\n{0}", ex); - return IntPtr.Zero; - } - } - - void HandlePointerMsg(uint msg, IntPtr wParam, IntPtr lParam) { - int id = LOWORD(wParam.ToInt32()); - - var rawpinfo = new NativeMethods.POINTER_INFO(); - if (!NativeMethods.GetPointerInfo(id, ref rawpinfo)) - throw new InvalidOperationException("Failed to get pointer info"); - - /* - Vector2? _cs = null; - uint? orientation = null; - uint? pressure = null; - if (pointerInfo.pointerType == NativeMethods.POINTER_INPUT_TYPE.PT_TOUCH) { - var pointerTouchInfo = new NativeMethods.POINTER_TOUCH_INFO(); - NativeMethods.GetPointerTouchInfo(pointerId, ref pointerTouchInfo); - if (pointerTouchInfo.touchMask.HasFlag(NativeMethods.TOUCH_MASK.TOUCH_MASK_CONTACTAREA)) { - Vector2 cs; - cs.x = pointerTouchInfo.rcContact.Width; - cs.y = pointerTouchInfo.rcContact.Height; - _cs = cs; - } - if (pointerTouchInfo.touchMask.HasFlag(NativeMethods.TOUCH_MASK.TOUCH_MASK_ORIENTATION)) { - orientation = pointerTouchInfo.orientation; - } - if (pointerTouchInfo.touchMask.HasFlag(NativeMethods.TOUCH_MASK.TOUCH_MASK_PRESSURE)) { - pressure = pointerTouchInfo.pressure; - } - }*/ - - NativeMethods.POINT p = rawpinfo.ptPixelLocation; - NativeMethods.ScreenToClient(hMainWindow, ref p); - Vector2 _p = UnityCameraUtils.ScreenToWorldPoint(new Vector2(p.X, Screen.height - p.Y)); - - double time = (double)rawpinfo.PerformanceCount / freq; - - int type; - switch (rawpinfo.pointerType) { - case NativeMethods.POINTER_INPUT_TYPE.PT_POINTER : type = 1; break; - case NativeMethods.POINTER_INPUT_TYPE.PT_TOUCH : type = 2; break; - case NativeMethods.POINTER_INPUT_TYPE.PT_PEN : type = 3; break; - case NativeMethods.POINTER_INPUT_TYPE.PT_MOUSE : type = 4; break; - case NativeMethods.POINTER_INPUT_TYPE.PT_TOUCHPAD: type = 5; break; - default: type = 0; break; - } - if (rawpinfo.pointerFlags.HasFlag(NativeMethods.POINTER_FLAGS.POINTER_FLAG_CANCELED)) { - Feed(type, id, new InputVector(time)); - return; - } - - InputVector vec = new InputVector(time, _p); - - switch ((WindowMessages)msg) { - case WindowMessages.WM_POINTERDOWN: - case WindowMessages.WM_POINTERUPDATE: - Feed(type, id, vec); - break; - case WindowMessages.WM_POINTERUP: - Feed(type, id, vec); - Feed(type, id, new InputVector(time)); - break; - } - } - - /*void handleMouseMsg(uint msg, IntPtr wParam, IntPtr lParam) { - int id = mouseId; - double procTime = diag::Stopwatch.GetTimestamp() - / (double)diag::Stopwatch.Frequency; - Vector2 _p; - _p.x = ((int)(short)LOWORD(lParam.ToInt32())); - _p.y = ((int)(short)HIWORD(lParam.ToInt32())); - PointerPhase phase; - switch ((WindowMessages)msg) { - case WindowMessages.WM_LBUTTONDOWN: - case WindowMessages.WM_LBUTTONDBLCLK: - phase = PointerPhase.Begin; - id = mouseId = newIdCallback(); - break; - case WindowMessages.WM_MOUSEMOVE: - if (mouseId == 0) - return; - phase = PointerPhase.Update; - break; - case WindowMessages.WM_LBUTTONUP: - phase = PointerPhase.End; - mouseId = 0; - break; - case WindowMessages.WM_MOUSELEAVE: - phase = PointerPhase.Cancel; - mouseId = 0; - break; - default: - return; - } - callback(id, new PointerInfo() { - Id = id, - ProcessTime = procTime, - Phase = phase, - Type = PointerType.Mouse, - Position = _p, - }); - }*/ - - void HandleTouchMsg(IntPtr wParam, IntPtr lParam) { - int inputCount = LOWORD(wParam.ToInt32()); - NativeMethods.TOUCHINPUT[] inputs = new NativeMethods.TOUCHINPUT[inputCount]; - - if (!NativeMethods.GetTouchInputInfo(lParam, inputCount, inputs, touchInputSize)) - throw new InvalidOperationException("Failed to get touch input info"); - - for (int i = 0; i < inputCount; i++) { - NativeMethods.TOUCHINPUT touch = inputs[i]; - - NativeMethods.POINT p = new NativeMethods.POINT { - X = touch.x / 100, - Y = touch.y / 100 - }; - NativeMethods.ScreenToClient(hMainWindow, ref p); - Vector2 _p = UnityCameraUtils.ScreenToWorldPoint(new Vector2(p.X, Screen.height - p.Y)); - - /*Vector2? _cs = null; - if (touch.dwMask.HasFlag(NativeMethods.TOUCHINPUT_Mask.TOUCHINPUTMASKF_CONTACTAREA)) { - Vector2 cs; - cs.x = touch.cxContact / 100; - cs.y = touch.cyContact / 100; - _cs = cs; - }*/ - - int id = touch.dwID; - double time = touch.dwTime / 1000.0; - InputVector vec = new InputVector(time, _p); - - if (touch.dwFlags.HasFlag(NativeMethods.TOUCHINPUT_Flags.TOUCHEVENTF_MOVE) || - touch.dwFlags.HasFlag(NativeMethods.TOUCHINPUT_Flags.TOUCHEVENTF_DOWN)) { - Feed(255, id, vec); - } - else if (touch.dwFlags.HasFlag(NativeMethods.TOUCHINPUT_Flags.TOUCHEVENTF_UP)) { - Feed(255, id, vec); - Feed(255, id, new InputVector(time)); - } - } - - NativeMethods.CloseTouchInputHandle(lParam); - } - - public static int LOWORD(int value) { - return value & 0xffff; - } - - public static int HIWORD(int value) { - return (value & (0xffff << 16)) >> 16; - } - - public static IntPtr SetWindowLongPtr(IntPtr hWnd, int nIndex, IntPtr dwNewLong) { - if (IntPtr.Size == 8) - return NativeMethods.SetWindowLongPtr64(hWnd, nIndex, dwNewLong); - return new IntPtr(NativeMethods.SetWindowLong32(hWnd, nIndex, dwNewLong.ToInt32())); - } - } -} diff --git a/Assets/Cryville/Common/Unity/Input/WindowsPointerHandler.cs.meta b/Assets/Cryville/Common/Unity/Input/WindowsPointerHandler.cs.meta deleted file mode 100644 index 3c1be9a..0000000 --- a/Assets/Cryville/Common/Unity/Input/WindowsPointerHandler.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: d1b353deb73c51b409b15e54c54a6bb1 -timeCreated: 1611282071 -licenseType: Free -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Cryville/Crtr/ChartPlayer.cs b/Assets/Cryville/Crtr/ChartPlayer.cs index 9f6c26e..cad9ac5 100644 --- a/Assets/Cryville/Crtr/ChartPlayer.cs +++ b/Assets/Cryville/Crtr/ChartPlayer.cs @@ -623,7 +623,7 @@ namespace Cryville.Crtr { judge = new Judge(this, pruleset); etor.ContextJudge = judge; - inputProxy = new InputProxy(pruleset, judge); + inputProxy = new InputProxy(pruleset, judge, screenSize); inputProxy.LoadFrom(_rscfg.inputs); if (!inputProxy.IsCompleted()) { throw new ArgumentException("Input config not completed\nPlease complete the input settings"); diff --git a/Assets/Cryville/Crtr/Config/ConfigPanelMaster.cs b/Assets/Cryville/Crtr/Config/ConfigPanelMaster.cs index f04a190..0048383 100644 --- a/Assets/Cryville/Crtr/Config/ConfigPanelMaster.cs +++ b/Assets/Cryville/Crtr/Config/ConfigPanelMaster.cs @@ -56,7 +56,7 @@ namespace Cryville.Crtr.Config { m_genericConfigPanel.Target = _rscfg.generic; - var proxy = new InputProxy(ruleset.Root, null); + var proxy = new InputProxy(ruleset.Root, null, new Vector2(Screen.width, Screen.height)); proxy.LoadFrom(_rscfg.inputs); m_inputConfigPanel.proxy = proxy; diff --git a/Assets/Cryville/Crtr/Config/InputConfigPanel.cs b/Assets/Cryville/Crtr/Config/InputConfigPanel.cs index 2518479..075f646 100644 --- a/Assets/Cryville/Crtr/Config/InputConfigPanel.cs +++ b/Assets/Cryville/Crtr/Config/InputConfigPanel.cs @@ -1,6 +1,6 @@ using Cryville.Common; using Cryville.Common.Unity; -using Cryville.Common.Unity.Input; +using Cryville.Input; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; @@ -77,7 +77,7 @@ namespace Cryville.Crtr.Config { void Update() { if (m_inputDialog.activeSelf) { _consumer.EnumerateEvents(ev => { - AddSourceItem(ev.Id.Source); + AddSourceItem(ev.Identifier.Source); }); } } @@ -95,7 +95,7 @@ namespace Cryville.Crtr.Config { if (proxy.IsUsed(tsrc)) { text.text += " (Used)"; } - else if (tsrc.Handler.GetDimension(src.Value.Type) < m_configScene.ruleset.Root.inputs[_sel].dim) { + else if (tsrc.Handler.Dimension < m_configScene.ruleset.Root.inputs[_sel].dim) { text.text += " (Not Applicable)"; } else flag = true; diff --git a/Assets/Cryville/Crtr/Console.cs b/Assets/Cryville/Crtr/Console.cs index 2697a04..a4d2d4f 100644 --- a/Assets/Cryville/Crtr/Console.cs +++ b/Assets/Cryville/Crtr/Console.cs @@ -6,6 +6,7 @@ using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UI; using Logger = Cryville.Common.Logging.Logger; +using unity = UnityEngine; namespace Cryville.Crtr { public class Console : MonoBehaviour { @@ -36,8 +37,8 @@ namespace Cryville.Crtr { void Update() { if ( - Input.GetKeyDown(KeyCode.Return) - || Input.GetKeyDown(KeyCode.KeypadEnter) + unity::Input.GetKeyDown(KeyCode.Return) + || unity::Input.GetKeyDown(KeyCode.KeypadEnter) ) { Submit(); InputBox.text = ""; diff --git a/Assets/Cryville/Crtr/Game.cs b/Assets/Cryville/Crtr/Game.cs index 5a6ef70..c0e2e60 100644 --- a/Assets/Cryville/Crtr/Game.cs +++ b/Assets/Cryville/Crtr/Game.cs @@ -3,8 +3,10 @@ using Cryville.Audio.Source; using Cryville.Common.Font; using Cryville.Common.Logging; using Cryville.Common.Unity; -using Cryville.Common.Unity.Input; using Cryville.Common.Unity.UI; +using Cryville.Input; +using Cryville.Input.Unity; +using Cryville.Input.Unity.Android; using FFmpeg.AutoGen; using Ionic.Zip; using Newtonsoft.Json; @@ -12,6 +14,7 @@ using System; using System.IO; using UnityEngine; using Logger = Cryville.Common.Logging.Logger; +using unity = UnityEngine; namespace Cryville.Crtr { public static class Game { @@ -58,7 +61,21 @@ namespace Cryville.Crtr { GameDataPath = Settings.Default.GameDataPath; - Input.simulateMouseWithTouches = false; + unity::Input.simulateMouseWithTouches = false; + //InputManager.HandlerRegistries.Add(typeof(AndroidAccelerometerHandler)); + //InputManager.HandlerRegistries.Add(typeof(AndroidAccelerometerUncalibratedHandler)); + //InputManager.HandlerRegistries.Add(typeof(AndroidGameRotationVectorHandler)); + //InputManager.HandlerRegistries.Add(typeof(AndroidGravityHandler)); + //InputManager.HandlerRegistries.Add(typeof(AndroidGyroscopeHandler)); + //InputManager.HandlerRegistries.Add(typeof(AndroidLinearAccelerationHandler)); + //InputManager.HandlerRegistries.Add(typeof(AndroidMagneticFieldHandler)); + //InputManager.HandlerRegistries.Add(typeof(AndroidMagneticFieldUncalibratedHandler)); + //InputManager.HandlerRegistries.Add(typeof(AndroidRotationVectorHandler)); + InputManager.HandlerRegistries.Add(typeof(AndroidTouchHandler)); + InputManager.HandlerRegistries.Add(typeof(UnityGuiInputHandler)); + InputManager.HandlerRegistries.Add(typeof(UnityGuiInputHandler)); + InputManager.HandlerRegistries.Add(typeof(UnityMouseHandler)); + InputManager.HandlerRegistries.Add(typeof(UnityTouchHandler)); InputManager = new InputManager(); #if UNITY_EDITOR_WIN diff --git a/Assets/Cryville/Crtr/InputProxy.cs b/Assets/Cryville/Crtr/InputProxy.cs index 5b5544d..921b0a3 100644 --- a/Assets/Cryville/Crtr/InputProxy.cs +++ b/Assets/Cryville/Crtr/InputProxy.cs @@ -1,20 +1,23 @@ using Cryville.Common; -using Cryville.Common.Logging; using Cryville.Common.Pdt; -using Cryville.Common.Reflection; -using Cryville.Common.Unity.Input; using Cryville.Crtr.Config; +using Cryville.Input; using System; using System.Collections.Generic; using System.Runtime.Serialization; -using RVector3 = UnityEngine.Vector3; +using System.Threading; +using UnityEngine; +using UnityEngine.Profiling; +using Logger = Cryville.Common.Logging.Logger; +using RVector4 = UnityEngine.Vector4; namespace Cryville.Crtr { public class InputProxy : IDisposable { readonly PdtEvaluator _etor; readonly PdtRuleset _ruleset; readonly Judge _judge; - public InputProxy(PdtRuleset ruleset, Judge judge) { + readonly InputVector _screenSize; + public InputProxy(PdtRuleset ruleset, Judge judge, Vector2 screenSize) { for (int i = 0; i <= MAX_DEPTH; i++) { var vecsrc = new InputVectorSrc(); _vecsrcs[i] = vecsrc; @@ -23,6 +26,7 @@ namespace Cryville.Crtr { _etor = judge != null ? judge._etor : ChartPlayer.etor; _ruleset = ruleset; _judge = judge; + _screenSize = new InputVector(screenSize.x, screenSize.y); foreach (var i in ruleset.inputs) { _use.Add(i.Key, 0); _rev.Add(i.Key, new List()); @@ -42,10 +46,15 @@ namespace Cryville.Crtr { public event EventHandler ProxyChanged; public void LoadFrom(Dictionary config) { foreach (var cfg in config) { + var handler = Game.InputManager.GetHandlerByTypeName(cfg.Value.handler); + if (handler == null) { + Logger.Log("main", 3, "Input", "Uninitialized or unknown handler in ruleset config: {0}", cfg.Value.handler); + continue; + } Set(new InputProxyEntry { Target = new Identifier(cfg.Key), Source = new InputSource { - Handler = Game.InputManager.GetHandler(cfg.Value.handler), + Handler = handler, Type = cfg.Value.type } }); @@ -55,7 +64,7 @@ namespace Cryville.Crtr { config.Clear(); foreach (var p in _tproxies) { config.Add((string)p.Key.Name, new RulesetConfig.InputEntry { - handler = TypeNameHelper.GetNamespaceQualifiedName(p.Value.Source.Value.Handler.GetType()), + handler = p.Value.Source.Value.Handler.GetType().AssemblyQualifiedName, type = p.Value.Source.Value.Type }); } @@ -176,7 +185,7 @@ namespace Cryville.Crtr { static readonly int _var_value = IdentifierManager.Shared.Request("value"); const int MAX_DEPTH = 15; - const int MAX_DIMENSION = 3; + const int MAX_DIMENSION = 4; readonly InputVectorSrc[] _vecsrcs = new InputVectorSrc[MAX_DEPTH + 1]; readonly InputVectorOp[] _vecops = new InputVectorOp[MAX_DEPTH + 1]; unsafe class InputVectorSrc : PropSrc.FixedBuffer { @@ -186,9 +195,9 @@ namespace Cryville.Crtr { } } public bool IsNull { get; set; } - public void Set(RVector3 vec) { + public void Set(RVector4 vec) { fixed (byte* _ptr = buf) { - *(RVector3*)_ptr = vec; + *(RVector4*)_ptr = vec; } Invalidate(); } @@ -204,7 +213,7 @@ namespace Cryville.Crtr { _src.IsNull = true; } else { - var vec = new RVector3(); + var vec = new RVector4(); int dim; if (op.Type == PdtInternalType.Number) dim = 1; else if (op.Type == PdtInternalType.Vector) { @@ -228,19 +237,32 @@ namespace Cryville.Crtr { readonly Dictionary _vect = new Dictionary(); readonly Dictionary _vecs = new Dictionary(); double? _lockTime = null; - unsafe void OnInput(InputIdentifier id, InputVector vec) { - lock (_etor) { + unsafe void OnInput(InputIdentifier id, InputFrame frame) { + var rc = id.Source.Handler.ReferenceCue; + if (rc.RelativeUnit == RelativeUnit.Pixel) { + frame = rc.InverseTransform(frame, _screenSize); + var vec = frame.Vector; + vec.X /= _screenSize.X; vec.Y /= _screenSize.Y; + vec.X -= 0.5f; vec.Y -= 0.5f; + vec.X *= ChartPlayer.hitRect.width; vec.Y *= ChartPlayer.hitRect.height; + frame.Vector = vec; + } + else frame = rc.InverseTransform(frame); + bool locked = false; + try { + Profiler.BeginSample("InputProxy.OnInput"); + Monitor.Enter(_etor, ref locked); InputProxyEntry proxy; if (_sproxies.TryGetValue(id.Source, out proxy)) { _etor.ContextCascadeInsert(); - float ft, tt = (float)(_lockTime != null ? _lockTime.Value : (vec.Time - _timeOrigins[id.Source.Handler])); + float ft, tt = (float)(_lockTime != null ? _lockTime.Value : (frame.Time - _timeOrigins[id.Source.Handler])); if (!_vect.TryGetValue(id, out ft)) ft = tt; - if (vec.IsNull) { + if (frame.IsNull) { _etor.ContextCascadeUpdate(_var_value, PropSrc.Null); OnInput(id, proxy.Target, ft, tt, true); } else { - _vecsrcs[0].Set(vec.Vector); + _vecsrcs[0].Set(new RVector4(frame.Vector.X, frame.Vector.Y, frame.Vector.Z, frame.Vector.W)); _etor.ContextCascadeUpdate(_var_value, _vecsrcs[0]); OnInput(id, proxy.Target, ft, tt, false); } @@ -248,6 +270,10 @@ namespace Cryville.Crtr { _etor.ContextCascadeDiscard(); } } + finally { + if (locked) Monitor.Exit(_etor); + Profiler.EndSample(); + } } static readonly int _var_fv = IdentifierManager.Shared.Request("input_vec_from"); static readonly int _var_tv = IdentifierManager.Shared.Request("input_vec_to"); @@ -295,7 +321,7 @@ namespace Cryville.Crtr { foreach (var s in _sproxies) { var src = s.Key; if (_activeCounts[src] == 0) { - OnInput(new InputIdentifier { Source = src, Id = 0 }, new InputVector(_lockTime != null ? _lockTime.Value : src.Handler.GetCurrentTimestamp())); + OnInput(new InputIdentifier { Source = src, Id = 0 }, new InputFrame(_lockTime != null ? _lockTime.Value : src.Handler.GetCurrentTimestamp())); } } } diff --git a/Assets/Cryville/Crtr/Menu.cs b/Assets/Cryville/Crtr/Menu.cs index 3975aa6..2306b2c 100644 --- a/Assets/Cryville/Crtr/Menu.cs +++ b/Assets/Cryville/Crtr/Menu.cs @@ -3,6 +3,7 @@ using Cryville.Crtr.Browsing; using System.Collections.Generic; using TMPro; using UnityEngine; +using unity = UnityEngine; namespace Cryville.Crtr { public class Menu : MonoBehaviour { @@ -45,7 +46,7 @@ namespace Cryville.Crtr { m_targetAnimator.SetTrigger("T_Main"); } } - if (Input.GetKeyDown(KeyCode.Escape)) { + if (unity::Input.GetKeyDown(KeyCode.Escape)) { if (m_targetAnimator != null) Back(); } } diff --git a/Assets/Cryville/Cryville.Crtr.asmdef b/Assets/Cryville/Cryville.Crtr.asmdef index 0aea2b0..a9c3607 100644 --- a/Assets/Cryville/Cryville.Crtr.asmdef +++ b/Assets/Cryville/Cryville.Crtr.asmdef @@ -2,6 +2,8 @@ "name": "Cryville.Crtr", "rootNamespace": "", "references": [ + "GUID:0bb40a8a1701f13479c68e3659a99bfd", + "GUID:ae5eee924eae80345b704d2b7de05cc0", "GUID:5686e5ee69d0e084c843d61c240d7fdb", "GUID:13ba8ce62aa80c74598530029cb2d649", "GUID:2922aa74af3b2854e81b8a8b286d8206", diff --git a/Assets/Plugins/Android/AndroidManifest.xml b/Assets/Plugins/Android/AndroidManifest.xml new file mode 100644 index 0000000..c47d677 --- /dev/null +++ b/Assets/Plugins/Android/AndroidManifest.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + diff --git a/Assets/Plugins/Android/AndroidManifest.xml.meta b/Assets/Plugins/Android/AndroidManifest.xml.meta new file mode 100644 index 0000000..73ca90f --- /dev/null +++ b/Assets/Plugins/Android/AndroidManifest.xml.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 10f1d59c7d7d3354c9e06e18c37d6c46 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Android/arm64-v8a/libAndroidInputProxy.so b/Assets/Plugins/Android/arm64-v8a/libAndroidInputProxy.so new file mode 100644 index 0000000000000000000000000000000000000000..af10a9e1c8bfb3a124dbe7e270a0ff5231e7bc0a GIT binary patch literal 5952 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 eR*;zOHFlKzkN>t literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Android/arm64-v8a/libAndroidInputProxy.so.meta b/Assets/Plugins/Android/arm64-v8a/libAndroidInputProxy.so.meta new file mode 100644 index 0000000..ff02775 --- /dev/null +++ b/Assets/Plugins/Android/arm64-v8a/libAndroidInputProxy.so.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 1fae26592ef751f47993715f379faed4 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Android: Android + second: + enabled: 1 + settings: + CPU: ARM64 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Android/armeabi-v7a/libAndroidInputProxy.so b/Assets/Plugins/Android/armeabi-v7a/libAndroidInputProxy.so new file mode 100644 index 0000000000000000000000000000000000000000..865bd4d1d4803d116abe04a6455e475d58dc69be GIT binary patch literal 17868 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 E7c+dtf&c&j literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Android/armeabi-v7a/libAndroidInputProxy.so.meta b/Assets/Plugins/Android/armeabi-v7a/libAndroidInputProxy.so.meta new file mode 100644 index 0000000..1c100da --- /dev/null +++ b/Assets/Plugins/Android/armeabi-v7a/libAndroidInputProxy.so.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 4328ea0ce04f49844a91172367c83c6c +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Android: Android + second: + enabled: 1 + settings: + CPU: ARMv7 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville/Common/Unity/Input.meta b/Assets/Plugins/Cryville.Input.Unity.Android.meta similarity index 57% rename from Assets/Cryville/Common/Unity/Input.meta rename to Assets/Plugins/Cryville.Input.Unity.Android.meta index f794fb5..0799202 100644 --- a/Assets/Cryville/Common/Unity/Input.meta +++ b/Assets/Plugins/Cryville.Input.Unity.Android.meta @@ -1,9 +1,8 @@ fileFormatVersion: 2 -guid: 7548d5a078795b04b8c54524389ba0fe +guid: 4406fa823b7746b47a76d810f5bedf6c folderAsset: yes -timeCreated: 1611035780 -licenseType: Free DefaultImporter: + externalObjects: {} userData: assetBundleName: assetBundleVariant: diff --git a/Assets/Plugins/Cryville.Input.Unity.Android/AndroidInputHandler.cs b/Assets/Plugins/Cryville.Input.Unity.Android/AndroidInputHandler.cs new file mode 100644 index 0000000..adc0b76 --- /dev/null +++ b/Assets/Plugins/Cryville.Input.Unity.Android/AndroidInputHandler.cs @@ -0,0 +1,67 @@ +using System; +using UnityEngine; + +namespace Cryville.Input.Unity.Android { + public abstract class AndroidInputHandler : InputHandler where TSelf : AndroidInputHandler { + protected static TSelf Instance { get; private set; } + + readonly IntPtr _t_T; + static readonly jvalue[] _p_void = new jvalue[0]; + readonly IntPtr _i_T; + + readonly IntPtr _m_T_activate; + readonly IntPtr _m_T_deactivate; + + bool _activated; + + public AndroidInputHandler(string className) { + if (Instance != null) + throw new InvalidOperationException("AndroidInputHandler already created"); + if (Environment.OSVersion.Platform != PlatformID.Unix) + throw new NotSupportedException("Android input is not supported on this device"); + Instance = (TSelf)this; + + JavaStaticMethods.Init(); + + var _lt_T = AndroidJNI.FindClass(className); + _t_T = AndroidJNI.NewGlobalRef(_lt_T); + AndroidJNI.DeleteLocalRef(_lt_T); + + var _m_T_init = AndroidJNI.GetMethodID(_t_T, "", "()V"); + var _li_T = AndroidJNI.NewObject(_t_T, _m_T_init, _p_void); + _i_T = AndroidJNI.NewGlobalRef(_li_T); + AndroidJNI.DeleteLocalRef(_li_T); + + var _m_T_getId = AndroidJNI.GetMethodID(_t_T, "getId", "()I"); + _m_T_activate = AndroidJNI.GetMethodID(_t_T, "activate", "()V"); + _m_T_deactivate = AndroidJNI.GetMethodID(_t_T, "deactivate", "()V"); + + NativeMethods.AndroidInputProxy_RegisterCallback( + AndroidJNI.CallIntMethod(_i_T, _m_T_getId, _p_void), + Callback + ); + } + + protected override void Activate() { + if (_activated) return; + _activated = true; + AndroidJNI.CallVoidMethod(_i_T, _m_T_activate, _p_void); + } + + protected override void Deactivate() { + if (!_activated) return; + _activated = false; + AndroidJNI.CallVoidMethod(_i_T, _m_T_deactivate, _p_void); + } + + public override void Dispose(bool disposing) { + if (disposing) { + Deactivate(); + AndroidJNI.DeleteGlobalRef(_i_T); + AndroidJNI.DeleteGlobalRef(_t_T); + } + } + + private protected abstract AndroidInputProxy_Callback Callback { get; } + } +} diff --git a/Assets/Cryville/Common/Unity/Input/SimpleInputConsumer.cs.meta b/Assets/Plugins/Cryville.Input.Unity.Android/AndroidInputHandler.cs.meta similarity index 83% rename from Assets/Cryville/Common/Unity/Input/SimpleInputConsumer.cs.meta rename to Assets/Plugins/Cryville.Input.Unity.Android/AndroidInputHandler.cs.meta index 1d026ff..6f4c08f 100644 --- a/Assets/Cryville/Common/Unity/Input/SimpleInputConsumer.cs.meta +++ b/Assets/Plugins/Cryville.Input.Unity.Android/AndroidInputHandler.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 8fd2d5f1c7ba0c74c9ce8775075750db +guid: ed308f7b1ca3ed443b6eea2559c103c8 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/Plugins/Cryville.Input.Unity.Android/AndroidSensorHandler.cs b/Assets/Plugins/Cryville.Input.Unity.Android/AndroidSensorHandler.cs new file mode 100644 index 0000000..4f71e58 --- /dev/null +++ b/Assets/Plugins/Cryville.Input.Unity.Android/AndroidSensorHandler.cs @@ -0,0 +1,107 @@ +using Cryville.Common.Interop; +using Cryville.Common.Logging; +using System; +using System.Text.RegularExpressions; + +namespace Cryville.Input.Unity.Android { + public abstract class AndroidSensorHandler : AndroidInputHandler> where TSelf : AndroidSensorHandler { + public AndroidSensorHandler(string typeName, byte dimension) : base("world/cryville/input/unity/android/SensorProxy$" + typeName) { + m_typeName = Regex.Replace(typeName, @"(?<=[a-z])(?=[A-Z])", " "); + m_dimension = dimension; + } + + public override bool IsNullable => false; + + readonly byte m_dimension; + public override byte Dimension => m_dimension; + + readonly string m_typeName; + public override string GetTypeName(int type) { + switch (type) { + case 0: return m_typeName; + default: throw new ArgumentOutOfRangeException("type"); + } + } + + public override double GetCurrentTimestamp() { + return JavaStaticMethods.SystemClock_elapsedRealtimeNanos() / 1e9; + } + + private protected sealed override AndroidInputProxy_Callback Callback { get { return OnFeed; } } + + [MonoPInvokeCallback] + static void OnFeed(int id, int action, long time, float x, float y, float z, float w) { + try { + double timeSecs = time / 1e9; + Instance.Feed(0, id, new InputFrame(timeSecs, new InputVector(x, y, z, w))); + } + catch (Exception ex) { + Logger.Log("main", 4, "Input", "An error occurred while handling an Android sensor event: {0}", ex); + } + } + } + + public class AndroidAccelerometerHandler : AndroidSensorHandler { + public AndroidAccelerometerHandler() : base("Accelerometer", 3) { } + readonly static ReferenceCue _refCue = new ReferenceCue { + PhysicalDimension = new PhysicalDimension { Length = 1, Time = -2 }, + }; + public override ReferenceCue ReferenceCue => _refCue; + } + public class AndroidAccelerometerUncalibratedHandler : AndroidSensorHandler { + public AndroidAccelerometerUncalibratedHandler() : base("AccelerometerUncalibrated", 3) { } + readonly static ReferenceCue _refCue = new ReferenceCue { + PhysicalDimension = new PhysicalDimension { Length = 1, Time = -2 }, + }; + public override ReferenceCue ReferenceCue => _refCue; + } + public class AndroidGameRotationVectorHandler : AndroidSensorHandler { + public AndroidGameRotationVectorHandler() : base("GameRotationVector", 4) { } + readonly static ReferenceCue _refCue = new ReferenceCue { + PhysicalDimension = new PhysicalDimension(), + }; + public override ReferenceCue ReferenceCue => _refCue; + } + public class AndroidGravityHandler : AndroidSensorHandler { + public AndroidGravityHandler() : base("Gravity", 3) { } + readonly static ReferenceCue _refCue = new ReferenceCue { + PhysicalDimension = new PhysicalDimension { Length = 1, Time = -2 }, + }; + public override ReferenceCue ReferenceCue => _refCue; + } + public class AndroidGyroscopeHandler : AndroidSensorHandler { + public AndroidGyroscopeHandler() : base("Gyroscope", 3) { } + readonly static ReferenceCue _refCue = new ReferenceCue { + PhysicalDimension = new PhysicalDimension { Time = -1 }, + }; + public override ReferenceCue ReferenceCue => _refCue; + } + public class AndroidLinearAccelerationHandler : AndroidSensorHandler { + public AndroidLinearAccelerationHandler() : base("LinearAcceleration", 3) { } + readonly static ReferenceCue _refCue = new ReferenceCue { + PhysicalDimension = new PhysicalDimension { Length = 1, Time = -2 }, + }; + public override ReferenceCue ReferenceCue => _refCue; + } + public class AndroidMagneticFieldHandler : AndroidSensorHandler { + public AndroidMagneticFieldHandler() : base("MagneticField", 3) { } + readonly static ReferenceCue _refCue = new ReferenceCue { + PhysicalDimension = new PhysicalDimension { Mass = 1, Time = -2, ElectricCurrent = -1 }, + }; + public override ReferenceCue ReferenceCue => _refCue; + } + public class AndroidMagneticFieldUncalibratedHandler : AndroidSensorHandler { + public AndroidMagneticFieldUncalibratedHandler() : base("MagneticFieldUncalibrated", 3) { } + readonly static ReferenceCue _refCue = new ReferenceCue { + PhysicalDimension = new PhysicalDimension { Mass = 1, Time = -2, ElectricCurrent = -1 }, + }; + public override ReferenceCue ReferenceCue => _refCue; + } + public class AndroidRotationVectorHandler : AndroidSensorHandler { + public AndroidRotationVectorHandler() : base("RotationVector", 4) { } + readonly static ReferenceCue _refCue = new ReferenceCue { + PhysicalDimension = new PhysicalDimension(), + }; + public override ReferenceCue ReferenceCue => _refCue; + } +} diff --git a/Assets/Cryville/Common/Unity/Input/UnityCameraUtils.cs.meta b/Assets/Plugins/Cryville.Input.Unity.Android/AndroidSensorHandler.cs.meta similarity index 83% rename from Assets/Cryville/Common/Unity/Input/UnityCameraUtils.cs.meta rename to Assets/Plugins/Cryville.Input.Unity.Android/AndroidSensorHandler.cs.meta index f8c8464..448f9f1 100644 --- a/Assets/Cryville/Common/Unity/Input/UnityCameraUtils.cs.meta +++ b/Assets/Plugins/Cryville.Input.Unity.Android/AndroidSensorHandler.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 35a1c45601c39f94db20178505a68be2 +guid: ad609064283f3454992d6cdc8885110f MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/Plugins/Cryville.Input.Unity.Android/AndroidTouchHandler.cs b/Assets/Plugins/Cryville.Input.Unity.Android/AndroidTouchHandler.cs new file mode 100644 index 0000000..162caa0 --- /dev/null +++ b/Assets/Plugins/Cryville.Input.Unity.Android/AndroidTouchHandler.cs @@ -0,0 +1,47 @@ +using Cryville.Common.Interop; +using Cryville.Common.Logging; +using System; + +namespace Cryville.Input.Unity.Android { + public class AndroidTouchHandler : AndroidInputHandler { + public AndroidTouchHandler() : base("world/cryville/input/unity/android/TouchProxy") { } + + public override bool IsNullable => true; + + public override byte Dimension => 2; + + readonly static ReferenceCue _refCue = new ReferenceCue { + PhysicalDimension = new PhysicalDimension { Length = 1 }, + RelativeUnit = RelativeUnit.Pixel, + Flags = ReferenceFlag.FlipY, + Pivot = new InputVector(0, 1), + }; + public override ReferenceCue ReferenceCue => _refCue; + + public override string GetTypeName(int type) { + switch (type) { + case 0: return "Android Touch"; + default: throw new ArgumentOutOfRangeException("type"); + } + } + + public override double GetCurrentTimestamp() { + return JavaStaticMethods.SystemClock_uptimeMillis() / 1000.0; + } + + private protected override AndroidInputProxy_Callback Callback { get { return OnFeed; } } + + [MonoPInvokeCallback] + static void OnFeed(int id, int action, long time, float x, float y, float z, float w) { + try { + double timeSecs = time / 1000.0; + Instance.Feed(0, id, new InputFrame(timeSecs, new InputVector(x, y))); + if (action == 1 /*ACTION_UP*/ || action == 3 /*ACTION_CANCEL*/ || action == 6 /*ACTION_POINTER_UP*/) + Instance.Feed(0, id, new InputFrame(timeSecs)); + } + catch (Exception ex) { + Logger.Log("main", 4, "Input", "An error occurred while handling an Android touch event: {0}", ex); + } + } + } +} diff --git a/Assets/Cryville/Common/Unity/Input/AndroidTouchHandler.cs.meta b/Assets/Plugins/Cryville.Input.Unity.Android/AndroidTouchHandler.cs.meta similarity index 83% rename from Assets/Cryville/Common/Unity/Input/AndroidTouchHandler.cs.meta rename to Assets/Plugins/Cryville.Input.Unity.Android/AndroidTouchHandler.cs.meta index 1b3f33a..fed79c6 100644 --- a/Assets/Cryville/Common/Unity/Input/AndroidTouchHandler.cs.meta +++ b/Assets/Plugins/Cryville.Input.Unity.Android/AndroidTouchHandler.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: b0e1f8fc8f7607246b0012ad74fa0aeb +guid: 30eda6ba86d92084f8f038c661147f81 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/Plugins/Cryville.Input.Unity.Android/Cryville.Input.Unity.Android.asmdef b/Assets/Plugins/Cryville.Input.Unity.Android/Cryville.Input.Unity.Android.asmdef new file mode 100644 index 0000000..6bdbc4f --- /dev/null +++ b/Assets/Plugins/Cryville.Input.Unity.Android/Cryville.Input.Unity.Android.asmdef @@ -0,0 +1,3 @@ +{ + "name": "Cryville.Input.Unity.Android" +} diff --git a/Assets/Plugins/Cryville.Input.Unity.Android/Cryville.Input.Unity.Android.asmdef.meta b/Assets/Plugins/Cryville.Input.Unity.Android/Cryville.Input.Unity.Android.asmdef.meta new file mode 100644 index 0000000..87facea --- /dev/null +++ b/Assets/Plugins/Cryville.Input.Unity.Android/Cryville.Input.Unity.Android.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 0bb40a8a1701f13479c68e3659a99bfd +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Cryville.Input.Unity.Android/Java.meta b/Assets/Plugins/Cryville.Input.Unity.Android/Java.meta new file mode 100644 index 0000000..bdbcd27 --- /dev/null +++ b/Assets/Plugins/Cryville.Input.Unity.Android/Java.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 89dfa18c4a1ae534096094086e3971ee +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Cryville.Input.Unity.Android/Java/NativeMethods.java b/Assets/Plugins/Cryville.Input.Unity.Android/Java/NativeMethods.java new file mode 100644 index 0000000..00e29ac --- /dev/null +++ b/Assets/Plugins/Cryville.Input.Unity.Android/Java/NativeMethods.java @@ -0,0 +1,6 @@ +package world.cryville.input.unity.android; + +final class NativeMethods { + private NativeMethods() { } + public static native void feed(int hid, int id, int action, long time, float x, float y, float z, float t); +} \ No newline at end of file diff --git a/Assets/Plugins/Cryville.Input.Unity.Android/Java/NativeMethods.java.meta b/Assets/Plugins/Cryville.Input.Unity.Android/Java/NativeMethods.java.meta new file mode 100644 index 0000000..1044fa9 --- /dev/null +++ b/Assets/Plugins/Cryville.Input.Unity.Android/Java/NativeMethods.java.meta @@ -0,0 +1,32 @@ +fileFormatVersion: 2 +guid: 1796f226463344b48bb9789967b38eda +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Android: Android + second: + enabled: 1 + settings: {} + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Cryville.Input.Unity.Android/Java/Proxy.java b/Assets/Plugins/Cryville.Input.Unity.Android/Java/Proxy.java new file mode 100644 index 0000000..fe626dc --- /dev/null +++ b/Assets/Plugins/Cryville.Input.Unity.Android/Java/Proxy.java @@ -0,0 +1,28 @@ +package world.cryville.input.unity.android; + +import com.unity3d.player.UnityPlayer; +import com.unity3d.player.UnityPlayerActivity; +import world.cryville.input.unity.android.NativeMethods; + +public abstract class Proxy { + protected static UnityPlayerActivity activity; + + static int _count; + int _id; + + public Proxy() { + if (activity == null) activity = (UnityPlayerActivity)UnityPlayer.currentActivity; + _id = _count++; + } + + public int getId() { return _id; } + + public abstract void activate(); + public abstract void deactivate(); + + protected void feed(int id, int action, long time) { NativeMethods.feed(_id, id, action, time, 0, 0, 0, 0); } + protected void feed(int id, int action, long time, float x) { NativeMethods.feed(_id, id, action, time, x, 0, 0, 0); } + protected void feed(int id, int action, long time, float x, float y) { NativeMethods.feed(_id, id, action, time, x, y, 0, 0); } + protected void feed(int id, int action, long time, float x, float y, float z) { NativeMethods.feed(_id, id, action, time, x, y, z, 0); } + protected void feed(int id, int action, long time, float x, float y, float z, float w) { NativeMethods.feed(_id, id, action, time, x, y, z, w); } +} \ No newline at end of file diff --git a/Assets/Plugins/Cryville.Input.Unity.Android/Java/Proxy.java.meta b/Assets/Plugins/Cryville.Input.Unity.Android/Java/Proxy.java.meta new file mode 100644 index 0000000..85cde09 --- /dev/null +++ b/Assets/Plugins/Cryville.Input.Unity.Android/Java/Proxy.java.meta @@ -0,0 +1,32 @@ +fileFormatVersion: 2 +guid: b60db87d680aebd4c8d9071ff17d3a56 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Android: Android + second: + enabled: 1 + settings: {} + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Cryville.Input.Unity.Android/Java/SensorProxy.java b/Assets/Plugins/Cryville.Input.Unity.Android/Java/SensorProxy.java new file mode 100644 index 0000000..0c7227c --- /dev/null +++ b/Assets/Plugins/Cryville.Input.Unity.Android/Java/SensorProxy.java @@ -0,0 +1,104 @@ +package world.cryville.input.unity.android; + +import android.content.Context; +import android.hardware.Sensor; +import android.hardware.SensorEvent; +import android.hardware.SensorEventListener; +import android.hardware.SensorManager; +import java.lang.IllegalStateException; +import java.lang.IndexOutOfBoundsException; +import java.util.HashMap; +import java.util.List; +import world.cryville.input.unity.android.Proxy; + +public abstract class SensorProxy extends Proxy implements SensorEventListener { + static SensorManager manager; + + int dimension; + + HashMap sensors; + List candidateSensors; + + public SensorProxy(int type, int dim) throws IllegalStateException, IndexOutOfBoundsException { + if (manager == null) manager = (SensorManager)activity.getSystemService(Context.SENSOR_SERVICE); + dimension = dim; + if (dimension < 0 || dimension > 4) throw new IndexOutOfBoundsException("Invalid dimension"); + + sensors = new HashMap(); + candidateSensors = manager.getSensorList(type); + if (candidateSensors.size() == 0) throw new IllegalStateException("Sensor not found"); + } + + @Override + public void activate() { + int workingSensorCount = 0; + for (Sensor sensor : candidateSensors) { + if (manager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_FASTEST)) { + sensors.put(sensor, workingSensorCount++); + } + } + } + + @Override + public void deactivate() { + manager.unregisterListener(this); + sensors.clear(); + } + + @Override + public void onAccuracyChanged(Sensor sensor, int accuracy) { } + + @Override + public void onSensorChanged(SensorEvent event) { + Integer id = sensors.get(event.sensor); + if (id == null) return; + float[] v = event.values; + switch (dimension) { + case 0: feed(0, id, event.timestamp); break; + case 1: feed(0, id, event.timestamp, v[0]); break; + case 2: feed(0, id, event.timestamp, v[0], v[1]); break; + case 3: feed(0, id, event.timestamp, v[0], v[1], v[2]); break; + case 4: feed(0, id, event.timestamp, v[0], v[1], v[2], v[3]); break; + } + } + + public static class Accelerometer extends SensorProxy { + public Accelerometer() { super(Sensor.TYPE_ACCELEROMETER, 3); } + } + + public static class AccelerometerUncalibrated extends SensorProxy { + public AccelerometerUncalibrated() { super(Sensor.TYPE_ACCELEROMETER_UNCALIBRATED, 3); } + } + + public static class GameRotationVector extends SensorProxy { + public GameRotationVector() { super(Sensor.TYPE_GAME_ROTATION_VECTOR, 4); } + } + + public static class Gravity extends SensorProxy { + public Gravity() { super(Sensor.TYPE_GRAVITY, 3); } + } + + public static class Gyroscope extends SensorProxy { + public Gyroscope() { super(Sensor.TYPE_GYROSCOPE, 3); } + } + + public static class GyroscopeUncalibrated extends SensorProxy { + public GyroscopeUncalibrated() { super(Sensor.TYPE_GYROSCOPE_UNCALIBRATED, 3); } + } + + public static class LinearAcceleration extends SensorProxy { + public LinearAcceleration() { super(Sensor.TYPE_LINEAR_ACCELERATION, 3); } + } + + public static class MagneticField extends SensorProxy { + public MagneticField() { super(Sensor.TYPE_MAGNETIC_FIELD, 3); } + } + + public static class MagneticFieldUncalibrated extends SensorProxy { + public MagneticFieldUncalibrated() { super(Sensor.TYPE_MAGNETIC_FIELD_UNCALIBRATED, 3); } + } + + public static class RotationVector extends SensorProxy { + public RotationVector() { super(Sensor.TYPE_ROTATION_VECTOR, 4); } + } +} \ No newline at end of file diff --git a/Assets/Plugins/Cryville.Input.Unity.Android/Java/SensorProxy.java.meta b/Assets/Plugins/Cryville.Input.Unity.Android/Java/SensorProxy.java.meta new file mode 100644 index 0000000..4e3c8e9 --- /dev/null +++ b/Assets/Plugins/Cryville.Input.Unity.Android/Java/SensorProxy.java.meta @@ -0,0 +1,32 @@ +fileFormatVersion: 2 +guid: c1acbb4fd13ca1249880dbc02ff3c9d4 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Android: Android + second: + enabled: 1 + settings: {} + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Cryville.Input.Unity.Android/Java/TouchProxy.java b/Assets/Plugins/Cryville.Input.Unity.Android/Java/TouchProxy.java new file mode 100644 index 0000000..71850b6 --- /dev/null +++ b/Assets/Plugins/Cryville.Input.Unity.Android/Java/TouchProxy.java @@ -0,0 +1,49 @@ +package world.cryville.input.unity.android; + +import android.view.MotionEvent; +import android.view.View; +import com.unity3d.player.UnityPlayer; +import java.lang.reflect.Field; +import world.cryville.input.unity.android.Proxy; + +public final class TouchProxy extends Proxy implements View.OnTouchListener { + public TouchProxy() throws NoSuchFieldException, IllegalAccessException, SecurityException { + Field playerField = activity.getClass().getDeclaredField("mUnityPlayer"); + playerField.setAccessible(true); + UnityPlayer player = (UnityPlayer)playerField.get(activity); + player.setOnTouchListener(this); + } + + boolean activated; + + @Override + public void activate() { + activated = true; + } + + @Override + public void deactivate() { + activated = false; + } + + @Override + public boolean onTouch(View v, MotionEvent event) { + if (!activated) return false; + int pointerCount = event.getPointerCount(); + int action = event.getActionMasked(); + int actionIndex = event.getActionIndex(); + long time = event.getEventTime(); + for (int i = 0; i < pointerCount; i++) { + int id = event.getPointerId(i); + float x = event.getX(i); + float y = event.getY(i); + if (action == 5 || action == 6) { + feed(id, i == actionIndex ? action : -1, time, x, y); + } + else { + feed(id, action, time, x, y); + } + } + return false; + } +} \ No newline at end of file diff --git a/Assets/Plugins/Cryville.Input.Unity.Android/Java/TouchProxy.java.meta b/Assets/Plugins/Cryville.Input.Unity.Android/Java/TouchProxy.java.meta new file mode 100644 index 0000000..c16843c --- /dev/null +++ b/Assets/Plugins/Cryville.Input.Unity.Android/Java/TouchProxy.java.meta @@ -0,0 +1,32 @@ +fileFormatVersion: 2 +guid: 4bd9aa92ec47fbf4fa63a219cfe7e4ce +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Android: Android + second: + enabled: 1 + settings: {} + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Cryville.Input.Unity.Android/JavaStaticMethods.cs b/Assets/Plugins/Cryville.Input.Unity.Android/JavaStaticMethods.cs new file mode 100644 index 0000000..8fca08a --- /dev/null +++ b/Assets/Plugins/Cryville.Input.Unity.Android/JavaStaticMethods.cs @@ -0,0 +1,27 @@ +using System; +using UnityEngine; + +namespace Cryville.Input.Unity.Android { + internal static class JavaStaticMethods { + static bool _init; + static IntPtr _t_SystemClock; + static IntPtr _m_SystemClock_elapsedRealtimeNanos; + static IntPtr _m_SystemClock_uptimeMillis; + static readonly jvalue[] _p_void = new jvalue[0]; + public static void Init() { + if (_init) return; + _init = true; + var _lt_SystemClock = AndroidJNI.FindClass("android/os/SystemClock"); + _t_SystemClock = AndroidJNI.NewGlobalRef(_lt_SystemClock); + _m_SystemClock_elapsedRealtimeNanos = AndroidJNI.GetStaticMethodID(_lt_SystemClock, "elapsedRealtimeNanos", "()J"); + _m_SystemClock_uptimeMillis = AndroidJNI.GetStaticMethodID(_lt_SystemClock, "uptimeMillis", "()J"); + AndroidJNI.DeleteLocalRef(_lt_SystemClock); + } + public static long SystemClock_elapsedRealtimeNanos() { + return AndroidJNI.CallStaticLongMethod(_t_SystemClock, _m_SystemClock_elapsedRealtimeNanos, _p_void); + } + public static long SystemClock_uptimeMillis() { + return AndroidJNI.CallStaticLongMethod(_t_SystemClock, _m_SystemClock_uptimeMillis, _p_void); + } + } +} diff --git a/Assets/Cryville/Common/Unity/Input/UnityKeyHandler.cs.meta b/Assets/Plugins/Cryville.Input.Unity.Android/JavaStaticMethods.cs.meta similarity index 83% rename from Assets/Cryville/Common/Unity/Input/UnityKeyHandler.cs.meta rename to Assets/Plugins/Cryville.Input.Unity.Android/JavaStaticMethods.cs.meta index 844e560..99a6380 100644 --- a/Assets/Cryville/Common/Unity/Input/UnityKeyHandler.cs.meta +++ b/Assets/Plugins/Cryville.Input.Unity.Android/JavaStaticMethods.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 8aa36fa1966064f489cf5c318f576d3f +guid: a5eec7567c416414cad01bedd2b1786b MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/Plugins/Cryville.Input.Unity.Android/NativeMethods.cs b/Assets/Plugins/Cryville.Input.Unity.Android/NativeMethods.cs new file mode 100644 index 0000000..5b3a2ec --- /dev/null +++ b/Assets/Plugins/Cryville.Input.Unity.Android/NativeMethods.cs @@ -0,0 +1,9 @@ +using System.Runtime.InteropServices; + +namespace Cryville.Input.Unity.Android { + internal delegate void AndroidInputProxy_Callback(int id, int action, long time, float x, float y, float z, float w); + internal static class NativeMethods { + [DllImport("AndroidInputProxy")] + public static extern void AndroidInputProxy_RegisterCallback(int hid, AndroidInputProxy_Callback cb); + } +} diff --git a/Assets/Cryville/Common/Unity/Input/InputHandler.cs.meta b/Assets/Plugins/Cryville.Input.Unity.Android/NativeMethods.cs.meta similarity index 83% rename from Assets/Cryville/Common/Unity/Input/InputHandler.cs.meta rename to Assets/Plugins/Cryville.Input.Unity.Android/NativeMethods.cs.meta index e7048a1..262b284 100644 --- a/Assets/Cryville/Common/Unity/Input/InputHandler.cs.meta +++ b/Assets/Plugins/Cryville.Input.Unity.Android/NativeMethods.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 139cf0675329c9d46b902249fecdb500 +guid: d66e4c88d885f4a49bdb1c6b5783281e MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/Plugins/Cryville.Input.Unity.Builtin.meta b/Assets/Plugins/Cryville.Input.Unity.Builtin.meta new file mode 100644 index 0000000..e2154d2 --- /dev/null +++ b/Assets/Plugins/Cryville.Input.Unity.Builtin.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: caca3e7f8fad7404eb69b96c39190e02 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Cryville.Input.Unity.Builtin/Cryville.Input.Unity.Builtin.asmdef b/Assets/Plugins/Cryville.Input.Unity.Builtin/Cryville.Input.Unity.Builtin.asmdef new file mode 100644 index 0000000..3e0c584 --- /dev/null +++ b/Assets/Plugins/Cryville.Input.Unity.Builtin/Cryville.Input.Unity.Builtin.asmdef @@ -0,0 +1,3 @@ +{ + "name": "Cryville.Input.Unity.Builtin" +} diff --git a/Assets/Plugins/Cryville.Input.Unity.Builtin/Cryville.Input.Unity.Builtin.asmdef.meta b/Assets/Plugins/Cryville.Input.Unity.Builtin/Cryville.Input.Unity.Builtin.asmdef.meta new file mode 100644 index 0000000..ba0298b --- /dev/null +++ b/Assets/Plugins/Cryville.Input.Unity.Builtin/Cryville.Input.Unity.Builtin.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ae5eee924eae80345b704d2b7de05cc0 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville/Common/Unity/Input/UnityKeyHandler.cs b/Assets/Plugins/Cryville.Input.Unity.Builtin/UnityGuiInputHandler.cs similarity index 54% rename from Assets/Cryville/Common/Unity/Input/UnityKeyHandler.cs rename to Assets/Plugins/Cryville.Input.Unity.Builtin/UnityGuiInputHandler.cs index 7221432..4bebd0b 100644 --- a/Assets/Cryville/Common/Unity/Input/UnityKeyHandler.cs +++ b/Assets/Plugins/Cryville.Input.Unity.Builtin/UnityGuiInputHandler.cs @@ -2,21 +2,21 @@ using System; using System.Collections.Generic; using UnityEngine; -namespace Cryville.Common.Unity.Input { - public class UnityKeyHandler : InputHandler where T : UnityKeyReceiver { - GameObject receiver; - T recvcomp; +namespace Cryville.Input.Unity { + public class UnityGuiInputHandler : InputHandler where T : UnityGuiEventReceiver { + GameObject _receiver; + T _recvComp; - public UnityKeyHandler() { } + public UnityGuiInputHandler() { } protected override void Activate() { - receiver = new GameObject("__keyrecv__"); - recvcomp = receiver.AddComponent(); - recvcomp.SetCallback(Feed); + _receiver = new GameObject("__guiRecv__"); + _recvComp = _receiver.AddComponent(); + _recvComp.SetCallback(Feed); } protected override void Deactivate() { - if (receiver) GameObject.Destroy(receiver); + if (_receiver) GameObject.Destroy(_receiver); } public override void Dispose(bool disposing) { @@ -24,17 +24,16 @@ namespace Cryville.Common.Unity.Input { Deactivate(); } } + + public override bool IsNullable { get { return true; } } - public override bool IsNullable(int type) { - return false; - } + public override byte Dimension { get { return 0; } } - public override byte GetDimension(int type) { - return 0; - } + readonly static ReferenceCue _refCue = new ReferenceCue { }; + public override ReferenceCue ReferenceCue => _refCue; public override string GetTypeName(int type) { - return recvcomp.GetKeyName(type); + return _recvComp.GetKeyName(type); } public override double GetCurrentTimestamp() { @@ -42,10 +41,10 @@ namespace Cryville.Common.Unity.Input { } } - public abstract class UnityKeyReceiver : MonoBehaviour where T : UnityKeyReceiver { - protected Action Callback; + public abstract class UnityGuiEventReceiver : MonoBehaviour { + protected Action Callback; protected readonly HashSet Keys = new HashSet(); - public void SetCallback(Action h) { + public void SetCallback(Action h) { Callback = h; } public abstract string GetKeyName(int type); @@ -55,12 +54,12 @@ namespace Cryville.Common.Unity.Input { void Update() { double time = Time.realtimeSinceStartupAsDouble; foreach (var k in Keys) { - Callback(k, 0, new InputVector(time, Vector3.zero)); + Callback(k, 0, new InputFrame(time, new InputVector())); } } } - public class UnityKeyboardReceiver : UnityKeyReceiver { + public class UnityKeyReceiver : UnityGuiEventReceiver { public override string GetKeyName(int type) { return Enum.GetName(typeof(KeyCode), type); } @@ -72,24 +71,24 @@ namespace Cryville.Common.Unity.Input { switch (e.type) { case EventType.KeyDown: if (!Keys.Contains(key)) { - Callback(key, 0, new InputVector(time, Vector3.zero)); + Callback(key, 0, new InputFrame(time, new InputVector())); Keys.Add(key); } break; case EventType.KeyUp: Keys.Remove(key); - Callback(key, 0, new InputVector(time)); + Callback(key, 0, new InputFrame(time)); break; } } } - public class UnityMouseButtonReceiver : UnityKeyReceiver { + public class UnityMouseReceiver : UnityGuiEventReceiver { public override string GetKeyName(int type) { switch (type) { - case 0: return "Mouse Left"; - case 1: return "Mouse Right"; - case 2: return "Mouse Middle"; + case 0: return "Mouse Left Button"; + case 1: return "Mouse Right Button"; + case 2: return "Mouse Middle Button"; default: return string.Format("Mouse Button {0}", type); } } @@ -100,13 +99,13 @@ namespace Cryville.Common.Unity.Input { switch (e.type) { case EventType.MouseDown: if (!Keys.Contains(key)) { - Callback(key, 0, new InputVector(time, Vector3.zero)); + Callback(key, 0, new InputFrame(time, new InputVector())); Keys.Add(key); } break; case EventType.MouseUp: Keys.Remove(key); - Callback(key, 0, new InputVector(time)); + Callback(key, 0, new InputFrame(time)); break; } } diff --git a/Assets/Plugins/Cryville.Input.Unity.Builtin/UnityGuiInputHandler.cs.meta b/Assets/Plugins/Cryville.Input.Unity.Builtin/UnityGuiInputHandler.cs.meta new file mode 100644 index 0000000..ee61428 --- /dev/null +++ b/Assets/Plugins/Cryville.Input.Unity.Builtin/UnityGuiInputHandler.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5d13ae3abab4ed94ca872bc13f466c3f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville/Common/Unity/Input/UnityMouseHandler.cs b/Assets/Plugins/Cryville.Input.Unity.Builtin/UnityMouseHandler.cs similarity index 56% rename from Assets/Cryville/Common/Unity/Input/UnityMouseHandler.cs rename to Assets/Plugins/Cryville.Input.Unity.Builtin/UnityMouseHandler.cs index 34f7a46..d56b063 100644 --- a/Assets/Cryville/Common/Unity/Input/UnityMouseHandler.cs +++ b/Assets/Plugins/Cryville.Input.Unity.Builtin/UnityMouseHandler.cs @@ -2,9 +2,9 @@ using System; using UnityEngine; using unity = UnityEngine; -namespace Cryville.Common.Unity.Input { +namespace Cryville.Input.Unity { public class UnityMouseHandler : InputHandler { - GameObject receiver; + GameObject _receiver; public UnityMouseHandler() { if (!unity::Input.mousePresent) { @@ -13,12 +13,12 @@ namespace Cryville.Common.Unity.Input { } protected override void Activate() { - receiver = new GameObject("__mouserecv__"); - receiver.AddComponent().SetHandler(this); + _receiver = new GameObject("__mouseRecv__"); + _receiver.AddComponent().SetHandler(this); } protected override void Deactivate() { - if (receiver) GameObject.Destroy(receiver); + if (_receiver) GameObject.Destroy(_receiver); } public override void Dispose(bool disposing) { @@ -27,15 +27,15 @@ namespace Cryville.Common.Unity.Input { } } - public override bool IsNullable(int type) { - if (type != 0) throw new ArgumentOutOfRangeException("type"); - return false; - } + public override bool IsNullable { get { return false; } } - public override byte GetDimension(int type) { - if (type != 0) throw new ArgumentOutOfRangeException("type"); - return 2; - } + public override byte Dimension { get { return 2; } } + + readonly static ReferenceCue _refCue = new ReferenceCue { + PhysicalDimension = new PhysicalDimension { Length = 1 }, + RelativeUnit = RelativeUnit.Pixel, + }; + public override ReferenceCue ReferenceCue => _refCue; public override string GetTypeName(int type) { switch (type) { @@ -49,14 +49,14 @@ namespace Cryville.Common.Unity.Input { } public class UnityMouseReceiver : MonoBehaviour { - UnityMouseHandler handler; + UnityMouseHandler _handler; public void SetHandler(UnityMouseHandler h) { - handler = h; + _handler = h; } void Update() { double time = Time.realtimeSinceStartupAsDouble; - Vector3 pos = UnityCameraUtils.ScreenToWorldPoint(unity::Input.mousePosition); - handler.Feed(0, 0, new InputVector(time, pos)); + Vector3 pos = unity::Input.mousePosition; + _handler.Feed(0, 0, new InputFrame(time, new InputVector(pos.x, pos.y))); } } } diff --git a/Assets/Cryville/Common/Unity/Input/UnityMouseHandler.cs.meta b/Assets/Plugins/Cryville.Input.Unity.Builtin/UnityMouseHandler.cs.meta similarity index 83% rename from Assets/Cryville/Common/Unity/Input/UnityMouseHandler.cs.meta rename to Assets/Plugins/Cryville.Input.Unity.Builtin/UnityMouseHandler.cs.meta index ff37d94..374673b 100644 --- a/Assets/Cryville/Common/Unity/Input/UnityMouseHandler.cs.meta +++ b/Assets/Plugins/Cryville.Input.Unity.Builtin/UnityMouseHandler.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 946e4d6c783bbd645a484b5612476526 +guid: a48e9f6f85234594bba5e2a940bb33f2 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/Cryville/Common/Unity/Input/UnityTouchHandler.cs b/Assets/Plugins/Cryville.Input.Unity.Builtin/UnityTouchHandler.cs similarity index 57% rename from Assets/Cryville/Common/Unity/Input/UnityTouchHandler.cs rename to Assets/Plugins/Cryville.Input.Unity.Builtin/UnityTouchHandler.cs index 96a82a4..8226f8f 100644 --- a/Assets/Cryville/Common/Unity/Input/UnityTouchHandler.cs +++ b/Assets/Plugins/Cryville.Input.Unity.Builtin/UnityTouchHandler.cs @@ -2,9 +2,9 @@ using System; using UnityEngine; using unity = UnityEngine; -namespace Cryville.Common.Unity.Input { +namespace Cryville.Input.Unity { public class UnityTouchHandler : InputHandler { - GameObject receiver; + GameObject _receiver; public UnityTouchHandler() { if (!unity::Input.touchSupported) { @@ -13,12 +13,12 @@ namespace Cryville.Common.Unity.Input { } protected override void Activate() { - receiver = new GameObject("__touchrecv__"); - receiver.AddComponent().SetHandler(this); + _receiver = new GameObject("__touchRecv__"); + _receiver.AddComponent().SetHandler(this); } protected override void Deactivate() { - if (receiver) GameObject.Destroy(receiver); + if (_receiver) GameObject.Destroy(_receiver); } public override void Dispose(bool disposing) { @@ -27,15 +27,15 @@ namespace Cryville.Common.Unity.Input { } } - public override bool IsNullable(int type) { - if (type != 0) throw new ArgumentOutOfRangeException("type"); - return true; - } + public override bool IsNullable { get { return true; } } - public override byte GetDimension(int type) { - if (type != 0) throw new ArgumentOutOfRangeException("type"); - return 2; - } + public override byte Dimension { get { return 2; } } + + readonly static ReferenceCue _refCue = new ReferenceCue { + PhysicalDimension = new PhysicalDimension { Length = 1 }, + RelativeUnit = RelativeUnit.Pixel, + }; + public override ReferenceCue ReferenceCue => _refCue; public override string GetTypeName(int type) { switch (type) { @@ -49,19 +49,19 @@ namespace Cryville.Common.Unity.Input { } public class UnityPointerReceiver : MonoBehaviour { - UnityTouchHandler handler; + UnityTouchHandler _handler; public void SetHandler(UnityTouchHandler h) { - handler = h; + _handler = h; } void Update() { double time = Time.realtimeSinceStartupAsDouble; for (int i = 0; i < unity::Input.touchCount; i++) { var t = unity::Input.GetTouch(i); - Vector2 pos = UnityCameraUtils.ScreenToWorldPoint(t.position); - var vec = new InputVector(time, pos); - handler.Feed(0, t.fingerId, vec); + Vector2 pos = t.position; + var vec = new InputFrame(time, new InputVector(pos.x, pos.y)); + _handler.Feed(0, t.fingerId, vec); if (t.phase == TouchPhase.Ended || t.phase == TouchPhase.Canceled) { - handler.Feed(0, t.fingerId, new InputVector(time)); + _handler.Feed(0, t.fingerId, new InputFrame(time)); } } } diff --git a/Assets/Plugins/Cryville.Input.Unity.Builtin/UnityTouchHandler.cs.meta b/Assets/Plugins/Cryville.Input.Unity.Builtin/UnityTouchHandler.cs.meta new file mode 100644 index 0000000..baff25c --- /dev/null +++ b/Assets/Plugins/Cryville.Input.Unity.Builtin/UnityTouchHandler.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f94e26b2515ef8840bf1a79800235d8f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Cryville.Input.dll b/Assets/Plugins/Cryville.Input.dll new file mode 100644 index 0000000000000000000000000000000000000000..1a7ea52d9cc386cffc3e2b17be458dad6b9f8793 GIT binary patch literal 15360 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 nbg9GNyXB;h{pi6MV)S3t + + + Cryville.Input + + + + + Input event. + + + + + The identifier. + + + + + The input frame last received. + + + + + The new input frame received. + + + + + + + + Represents the method that will handle the event. + + The identifier of . + The new input frame. + + + + Input handler. + + + + + Occurs when a new input frame is sent. + + + + + + + + + + + Activates the input handler and starts receiving new input frames. + + + + + Deactivates the input handler and stops receiving new input frames. + + + + + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + + Whether disposing or finalizing. + + + + Whether null input frames may be sent by the input handler. + + + See for more information. + + + + + The dimension of the vectors sent by the input handler. + + + Dimension must be an integer from 0 (inclusive) to 4 (inclusive.) The components of the whose indices are beyond the dimension should be set to 0. + + + + + The reference cue for the vectors sent by the input handler. + + + + + Gets the friendly name of the specified type. + + The type. + The friendly name of the specified type. + + See for more information. + + + + + Gets the current timestamp of the input handler. + + The current timestamp of the input handler in seconds. + + + + Sends a new input frame. + + The type of the input frame. + The ID of the input frame. + The input frame. + + + + Input identifier. + + + + + The input source. + + + + + The input ID. + + + This property is used to distinguish different inputs on the input source. For example, a touch screen that supports simultaneous touches may assign unique IDs to each finger. + + + + + + + + + + + + + + + + + + + + + + + Input manager. + + + + + A set of handler types to be initialized. + + + + + Creates an instance of the class and tries to initialize all the handlers in . + + + + + Gets the handler with the specified type name. + + The type name. + The handler with the specified type name. if not found or not initialized. + + + + Enumerates all initialized handlers and passes each of them into a callback function. + + The callback function. + + + + Input source. + + + + + The input handler. + + + + + The type of the input source as an identifier of a component of the input handler. + + + This property is used to distinguish different components of the input handler. For example, each key on the keyboard is assigned a unique type number. Use to get a friendly name of a specific type. + + + + + + + + + + + + + + + + + + + + + + + Input frame. + + + + + The timestamp in seconds. + + + + + Whether the vector is null. + + + An input frame with this property set to marks the end of life of an input ID (see .) This usually occurs when, for example, the button of the device is released. + When this property is set to , all the components of the vector is meaningless and should be set to 0. + + + + + The input vector. + + + + + Creates an instance of the struct with set to . + + The timestamp in seconds. + + + + Creates an instance of the struct. + + The timestamp in seconds. + The input vector. + + + + + + + Input vector. + + + + + The first component of the vector. + + + + + The second component of the vector. + + + + + The third component of the vector. + + + + + The fourth component of the vector. + + + + + Creates an instance of the struct of one dimension. + + The first component of the vector. + + + + Creates an instance of the struct of two dimensions. + + The first component of the vector. + The second component of the vector. + + + + Creates an instance of the struct of three dimensions. + + The first component of the vector. + The second component of the vector. + The third component of the vector. + + + + Creates an instance of the struct of four dimensions. + + The first component of the vector. + The second component of the vector. + The third component of the vector. + The fourth component of the vector. + + + + + + + + + + + + + + + + + + + Provides cues about the frame of reference. + + + + + The physical dimension. + + + + + The additional relative unit. + + + + + The reference flags. + + + + + The origin. + + + + + The pivot. + + + + + Transforms a frame into the reference by applying the offset specified by . + + The input frame. + The transformed input frame. + + + + Transforms a frame out of the reference by removing the offset specified by . + + The input frame. + The transformed input frame. + + + + Transforms a frame into the reference by applying the offset specified by and . + + The input frame. + The universe size. + The transformed input frame. + + + + Transforms a frame out of the reference by removing the offset specified by and . + + The input frame. + The universe size. + The transformed input frame. + + + + Physical dimension. + + + + + The dimensions of time. + + + + + The dimensions of length. + + + + + The dimensions of mass. + + + + + The dimensions of electric current. + + + + + The dimensions of thermodynamic temperature. + + + + + The dimensions of amount of substance. + + + + + The dimensions of luminous intensity. + + + + + Relative unit. + + + + + None. + + + + + Pixel. + + + + + Reference flag. + + + + + None. + + + + + The X axis is flipped. + + + + + The Y axis is flipped. + + + + + The Z axis is flipped. + + + + + The W axis is flipped. + + + + + A simple input consumer that receives input frames. + + + + + Creates an instance of the class. + + The input consumer. + + + + Activates all the input handlers. + + + + + Deactivates all the input handlers. + + + + + Called when a new input frame is received. + + The input identifier. + The new input frame. + + + + Enumerates all the input events in the queue, passes each of them into the given callback function, and then flushes the queue. + + The callback function. + + + + Enumerates all the active identifiers and passes each of them into the given callback function with its current frame. + + The callback function. + + + diff --git a/Assets/Plugins/Cryville.Input.xml.meta b/Assets/Plugins/Cryville.Input.xml.meta new file mode 100644 index 0000000..825b749 --- /dev/null +++ b/Assets/Plugins/Cryville.Input.xml.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 46bef57d10a154a489b726decf5cb994 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: