From 9730d06a463571b4e375ce69e2b45fbabfcf5533 Mon Sep 17 00:00:00 2001 From: goyuken Date: Wed, 16 Apr 2014 01:47:37 +0000 Subject: [PATCH] preliminary moose support --- BizHawk.Client.EmuHawk/Input/Input.cs | 15 +++++++++++++++ BizHawk.Client.EmuHawk/MainForm.cs | 21 ++++++++++++++++++++- 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/BizHawk.Client.EmuHawk/Input/Input.cs b/BizHawk.Client.EmuHawk/Input/Input.cs index 617b95afa8..95dc02da29 100644 --- a/BizHawk.Client.EmuHawk/Input/Input.cs +++ b/BizHawk.Client.EmuHawk/Input/Input.cs @@ -338,6 +338,21 @@ namespace BizHawk.Client.EmuHawk } } + // analyse moose + // other sorts of mouse api (raw input) could easily be added as a separate listing under a different class + { + var P = System.Windows.Forms.Control.MousePosition; + if (trackdeltas) + { + // these are relative to screen coordinates, but that's not terribly important + FloatDeltas["WMouse X"] += Math.Abs(P.X - FloatValues["WMouse X"]) * 50; + FloatDeltas["WMouse Y"] += Math.Abs(P.Y - FloatValues["WMouse Y"]) * 50; + } + // coordinate translation happens later + FloatValues["WMouse X"] = P.X; + FloatValues["WMouse Y"] = P.Y; + } + } bool swallow = !GlobalWin.MainForm.AllowInput; diff --git a/BizHawk.Client.EmuHawk/MainForm.cs b/BizHawk.Client.EmuHawk/MainForm.cs index 49531e5a04..4fc4331956 100644 --- a/BizHawk.Client.EmuHawk/MainForm.cs +++ b/BizHawk.Client.EmuHawk/MainForm.cs @@ -686,7 +686,26 @@ namespace BizHawk.Client.EmuHawk } // foreach event // also handle floats - conInput.AcceptNewFloats(Input.Instance.GetFloats()); + conInput.AcceptNewFloats(Input.Instance.GetFloats().Select(o => + { + // hackish + if (o.Item1 == "WMouse X") + { + var P = GlobalWin.DisplayManager.UntransformPoint(new System.Drawing.Point((int)o.Item2, 0)); + float x = P.X / (float)Global.Emulator.VideoProvider.BufferWidth; + return new Tuple("WMouse X", x * 20000 - 10000); + } + else if (o.Item1 == "WMouse Y") + { + var P = GlobalWin.DisplayManager.UntransformPoint(new System.Drawing.Point(0, (int)o.Item2)); + float y = P.Y / (float)Global.Emulator.VideoProvider.BufferHeight; + return new Tuple("WMouse Y", y * 20000 - 10000); + } + else + { + return o; + } + })); } public void RebootCore()