From 0811ff4e415193b6fa9b46db5e82bcb2bd145426 Mon Sep 17 00:00:00 2001 From: pjgat09 Date: Fri, 10 May 2013 23:29:14 +0000 Subject: [PATCH] N64: Wired up the analog control in the virtual controller. I probably did the float wiring badly, but it works for now. --- .../Consoles/Nintendo/N64/N64.cs | 6 ++++- BizHawk.MultiClient/movie/InputAdapters.cs | 23 +++++++++++++++---- .../tools/VirtualPadN64.Designer.cs | 5 +++- BizHawk.MultiClient/tools/VirtualPadN64.cs | 12 ++++++++++ 4 files changed, 40 insertions(+), 6 deletions(-) diff --git a/BizHawk.Emulation/Consoles/Nintendo/N64/N64.cs b/BizHawk.Emulation/Consoles/Nintendo/N64/N64.cs index b20da5b29f..f8af28dee9 100644 --- a/BizHawk.Emulation/Consoles/Nintendo/N64/N64.cs +++ b/BizHawk.Emulation/Consoles/Nintendo/N64/N64.cs @@ -84,7 +84,11 @@ namespace BizHawk.Emulation.Consoles.Nintendo.N64 float X_Axis = Controller.GetFloat("P1 X Axis"); float Y_Axis = Controller.GetFloat("P1 Y Axis"); - // ... convert the float values to a signed bytes somehow ... + // Analog stick right = +X + // Analog stick up = +Y + + x = (sbyte)X_Axis; + y = (sbyte)Y_Axis; api.set_buttons(0, ReadController(1), x, y); api.frame_advance(); diff --git a/BizHawk.MultiClient/movie/InputAdapters.cs b/BizHawk.MultiClient/movie/InputAdapters.cs index d96a718ec5..52343d825c 100644 --- a/BizHawk.MultiClient/movie/InputAdapters.cs +++ b/BizHawk.MultiClient/movie/InputAdapters.cs @@ -144,7 +144,7 @@ namespace BizHawk.MultiClient public class ForceOffAdaptor : IController { public bool IsPressed(string button) { return this[button]; } - public float GetFloat(string name) { return 0.0f; } //TODO + public float GetFloat(string name) { return Source.GetFloat(name); } //TODO public void UpdateControls(int frame) { } protected HashSet stickySet = new HashSet(); @@ -185,7 +185,16 @@ namespace BizHawk.MultiClient public bool Locked = false; //Pretty much a hack, public bool IsPressed(string button) { return this[button]; } - public float GetFloat(string name) { return 0.0f; } //TODO + + WorkingDictionary FloatSet = new WorkingDictionary(); + public void SetFloat(string name, float value) + { + FloatSet[name] = value; + } + public float GetFloat(string name) + { + return FloatSet[name]; + } public void UpdateControls(int frame) { } public bool this[string button] { @@ -323,7 +332,7 @@ namespace BizHawk.MultiClient public bool Locked = false; //Pretty much a hack, - public float GetFloat(string name) { return 0.0f; } //TODO + public float GetFloat(string name) { return Source.GetFloat(name); } //TODO public void UpdateControls(int frame) { } public void SetSticky(string button, bool isSticky) @@ -859,11 +868,12 @@ namespace BizHawk.MultiClient public ControllerDefinition Type { get; set; } public bool this[string button] { get { return MyBoolButtons[button]; } } public bool IsPressed(string button) { return MyBoolButtons[button]; } - public float GetFloat(string name) { return 0; } + public float GetFloat(string name) { return MyFloatControls[name]; } public void UpdateControls(int frame) { } //-------- private readonly WorkingDictionary MyBoolButtons = new WorkingDictionary(); + private readonly WorkingDictionary MyFloatControls = new WorkingDictionary(); void Force(string button, bool state) { @@ -911,6 +921,11 @@ namespace BizHawk.MultiClient { MyBoolButtons[button] = source[button]; } + + foreach (string name in Type.FloatControls) + { + MyFloatControls[name] = source.GetFloat(name); + } } //Redundancy beats crazy if logic that makes new consoles annoying to add diff --git a/BizHawk.MultiClient/tools/VirtualPadN64.Designer.cs b/BizHawk.MultiClient/tools/VirtualPadN64.Designer.cs index 5dfd089634..02fd0858fa 100644 --- a/BizHawk.MultiClient/tools/VirtualPadN64.Designer.cs +++ b/BizHawk.MultiClient/tools/VirtualPadN64.Designer.cs @@ -215,10 +215,13 @@ // AnalogControl1 // this.AnalogControl1.BackColor = System.Drawing.Color.Transparent; + this.AnalogControl1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; this.AnalogControl1.Location = new System.Drawing.Point(24, 14); this.AnalogControl1.Name = "AnalogControl1"; - this.AnalogControl1.Size = new System.Drawing.Size(128, 128); + this.AnalogControl1.Size = new System.Drawing.Size(132, 132); this.AnalogControl1.TabIndex = 0; + this.AnalogControl1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.AnalogControl1_MouseClick); + this.AnalogControl1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.AnalogControl1_MouseMove); // // VirtualPadN64 // diff --git a/BizHawk.MultiClient/tools/VirtualPadN64.cs b/BizHawk.MultiClient/tools/VirtualPadN64.cs index 0fb5d577a5..332d12fc8d 100644 --- a/BizHawk.MultiClient/tools/VirtualPadN64.cs +++ b/BizHawk.MultiClient/tools/VirtualPadN64.cs @@ -156,5 +156,17 @@ namespace BizHawk.MultiClient Global.StickyXORAdapter.SetSticky(Controller + " DPad R", PR.Checked); } } + + private void AnalogControl1_MouseClick(object sender, MouseEventArgs e) + { + Global.StickyXORAdapter.SetFloat("P1 X Axis", AnalogControl1.X); + Global.StickyXORAdapter.SetFloat("P1 Y Axis", -AnalogControl1.Y); + } + + private void AnalogControl1_MouseMove(object sender, MouseEventArgs e) + { + Global.StickyXORAdapter.SetFloat("P1 X Axis", AnalogControl1.X); + Global.StickyXORAdapter.SetFloat("P1 Y Axis", -AnalogControl1.Y); + } } }