Browse Source

Get mouse position past screen edge

Used mouse position prior which is limited by the screen size. This will
get the mouse position past the screen size which allows for infinite
mouse movement.
habeebweeb 4 years ago
parent
commit
c263a600bb

+ 5 - 6
COM3D2.MeidoPhotoStudio.Plugin/MeidoPhotoStudio/DragPoint/DragPoint.cs

@@ -163,7 +163,7 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
             ApplyColour(new Color(r, g, b, a));
         }
 
-        protected Vector3 MouseDelta() => Input.mousePosition - startMousePosition;
+        protected Vector3 MouseDelta() => Utility.MousePosition - startMousePosition;
 
         protected bool OtherDragType()
         {
@@ -174,10 +174,9 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
 
         protected Vector3 CursorPosition()
         {
-            Vector3 mousePosition = Input.mousePosition;
-            return camera.ScreenToWorldPoint(
-                new Vector3(mousePosition.x, mousePosition.y, screenPoint.z)
-            ) + startOffset - newOffset;
+            Vector3 mousePosition = Utility.MousePosition;
+            return camera.ScreenToWorldPoint(new Vector3(mousePosition.x, mousePosition.y, screenPoint.z))
+                + startOffset - newOffset;
         }
 
         protected virtual void Update()
@@ -206,7 +205,7 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
                 OnMouseDown();
             }
 
-            if (collider.enabled && Input.mousePosition != startMousePosition) Drag();
+            if (collider.enabled) Drag();
         }
 
         protected abstract void UpdateDragType();

+ 30 - 0
COM3D2.MeidoPhotoStudio.Plugin/MeidoPhotoStudio/Utility.cs

@@ -14,6 +14,8 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
         internal static readonly Regex guidRegEx = new Regex(
             @"^[a-f0-9]{8}(\-[a-f0-9]{4}){3}\-[a-f0-9]{12}$", RegexOptions.IgnoreCase
         );
+        internal static readonly GameObject mousePositionGo;
+        internal static readonly MousePosition mousePosition;
         public static readonly BepInEx.Logging.ManualLogSource Logger
             = BepInEx.Logging.Logger.CreateLogSource(MeidoPhotoStudio.pluginName);
         public enum ModKey
@@ -21,6 +23,13 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
             Control, Shift, Alt
         }
         public static string Timestamp => $"{DateTime.Now:yyyyMMddHHmmss}";
+        public static Vector3 MousePosition => mousePosition.Position;
+
+        static Utility()
+        {
+            mousePositionGo = new GameObject();
+            mousePosition = mousePositionGo.AddComponent<MousePosition>();
+        }
 
         public static void LogInfo(object data) => Logger.LogInfo(data);
 
@@ -201,6 +210,27 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
         }
     }
 
+    internal class MousePosition : MonoBehaviour
+    {
+        private Vector3 mousePosition;
+        public Vector3 Position => mousePosition;
+
+        private void Awake()
+        {
+            DontDestroyOnLoad(this);
+            mousePosition = Input.mousePosition;
+        }
+
+        private void Update()
+        {
+            mousePosition.x += Input.GetAxis("Mouse X") * 20;
+            mousePosition.y += Input.GetAxis("Mouse Y") * 20;
+
+            if (Input.GetMouseButtonUp(0) || Input.GetMouseButtonDown(0)) mousePosition = Input.mousePosition;
+        }
+    }
+
+
     internal static class BinaryExtensions
     {
         public static string ReadNullableString(this BinaryReader binaryReader)