From 7fa551708f34e5dcb99cc815c62f12f5eabfa8af Mon Sep 17 00:00:00 2001 From: adelikat Date: Tue, 24 Jun 2014 17:12:20 +0000 Subject: [PATCH] Virtual Pad - get analog button working on movie replay --- BizHawk.Client.Common/movie/MovieSession.cs | 14 +++++++ .../tools/VirtualPads/VirtualpadTool.cs | 4 +- .../controls/VirtualPadAnalogButton.cs | 39 +++++++++++++------ 3 files changed, 44 insertions(+), 13 deletions(-) diff --git a/BizHawk.Client.Common/movie/MovieSession.cs b/BizHawk.Client.Common/movie/MovieSession.cs index e8b8f6b247..304393862c 100644 --- a/BizHawk.Client.Common/movie/MovieSession.cs +++ b/BizHawk.Client.Common/movie/MovieSession.cs @@ -41,6 +41,20 @@ namespace BizHawk.Client.Common return adapter; } + // Convenience property that gets the controller state from the movie for the most recent frame + public IController CurrentInput + { + get + { + if (Global.MovieSession.Movie.IsActive && !Global.MovieSession.Movie.IsFinished) + { + return Global.MovieSession.Movie.GetInputState(Global.Emulator.Frame - 1); + } + + return null; + } + } + private void Output(string message) { if (MessageCallback != null) diff --git a/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualpadTool.cs b/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualpadTool.cs index ad9b27ee6e..58287047a1 100644 --- a/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualpadTool.cs +++ b/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualpadTool.cs @@ -120,9 +120,9 @@ namespace BizHawk.Client.EmuHawk return; } - if (Global.MovieSession.Movie.IsActive && !Global.MovieSession.Movie.IsFinished) + if (Global.MovieSession.Movie.IsPlaying && !Global.MovieSession.Movie.IsFinished) { - Pads.ForEach(p => p.Set(Global.MovieOutputHardpoint)); + Pads.ForEach(p => p.Set(Global.MovieSession.CurrentInput)); } // TODO diff --git a/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/VirtualPadAnalogButton.cs b/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/VirtualPadAnalogButton.cs index 5e90642a48..1df5ec126f 100644 --- a/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/VirtualPadAnalogButton.cs +++ b/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/VirtualPadAnalogButton.cs @@ -11,7 +11,7 @@ namespace BizHawk.Client.EmuHawk { private string _displayName = string.Empty; private int _maxValue = 0; - + private bool _programmaticallyChangingValue = false; public VirtualPadAnalogButton() { InitializeComponent(); @@ -59,6 +59,22 @@ namespace BizHawk.Client.EmuHawk } } + public int CurrentValue + { + get + { + return AnalogTrackBar.Value; + } + + set + { + _programmaticallyChangingValue = true; + AnalogTrackBar.Value = value; + ValueLabel.Text = AnalogTrackBar.Value.ToString(); + _programmaticallyChangingValue = false; + } + } + public void Clear() { // Nothing to do @@ -66,20 +82,21 @@ namespace BizHawk.Client.EmuHawk public void Set(IController controller) { - // TODO + var newVal = (int)controller.GetFloat(Name); + var changed = AnalogTrackBar.Value != newVal; + if (changed) + { + CurrentValue = newVal; + } } private void AnalogTrackBar_ValueChanged(object sender, EventArgs e) { - ValueLabel.Text = AnalogTrackBar.Value.ToString(); - Refresh(); - Global.StickyXORAdapter.SetFloat(Name, AnalogTrackBar.Value); - } - - public void UpdateValues() - { - AnalogTrackBar.Value = (int)Global.StickyXORAdapter.GetFloat(Name); - base.Update(); + if (!_programmaticallyChangingValue) + { + CurrentValue = AnalogTrackBar.Value; + Global.StickyXORAdapter.SetFloat(Name, AnalogTrackBar.Value); + } } } }