IController - Remove the indexer property and refactor code accordingly, also simplify and cleanup many of the IController implementations

This commit is contained in:
adelikat 2016-12-14 14:12:16 -06:00
parent e94de78ebd
commit 2d9213c379
16 changed files with 214 additions and 287 deletions

View File

@ -341,7 +341,7 @@ namespace BizHawk.Client.ApiHawk
AutoFireStickyXorAdapter joypadAdaptor = Global.AutofireStickyXORAdapter; AutoFireStickyXorAdapter joypadAdaptor = Global.AutofireStickyXORAdapter;
IEnumerable<string> pressedButtons = from button in joypadAdaptor.Definition.BoolButtons IEnumerable<string> pressedButtons = from button in joypadAdaptor.Definition.BoolButtons
where joypadAdaptor[button] where joypadAdaptor.IsPressed(button)
select button; select button;
foreach (Joypad j in allJoypads) foreach (Joypad j in allJoypads)

View File

@ -9,14 +9,6 @@ namespace BizHawk.Client.Common
{ {
public class Controller : IController public class Controller : IController
{ {
private readonly WorkingDictionary<string, List<string>> _bindings = new WorkingDictionary<string, List<string>>();
private readonly WorkingDictionary<string, bool> _buttons = new WorkingDictionary<string, bool>();
private readonly WorkingDictionary<string, float> _floatButtons = new WorkingDictionary<string, float>();
private readonly Dictionary<string, ControllerDefinition.FloatRange> _floatRanges = new WorkingDictionary<string, ControllerDefinition.FloatRange>();
private readonly Dictionary<string, Config.AnalogBind> _floatBinds = new Dictionary<string, Config.AnalogBind>();
private ControllerDefinition _type;
public Controller(ControllerDefinition definition) public Controller(ControllerDefinition definition)
{ {
_type = definition; _type = definition;
@ -27,16 +19,37 @@ namespace BizHawk.Client.Common
} }
} }
public ControllerDefinition Definition { get { return _type; } } public ControllerDefinition Definition
{
get { return _type; }
}
/// <summary>don't do this</summary>
public void ForceType(ControllerDefinition newtype) { _type = newtype; }
public bool this[string button] { get { return IsPressed(button); } }
public bool IsPressed(string button) public bool IsPressed(string button)
{ {
return _buttons[button]; return _buttons[button];
} }
public float GetFloat(string name)
{
return _floatButtons[name];
}
private readonly WorkingDictionary<string, List<string>> _bindings = new WorkingDictionary<string, List<string>>();
private readonly WorkingDictionary<string, bool> _buttons = new WorkingDictionary<string, bool>();
private readonly WorkingDictionary<string, float> _floatButtons = new WorkingDictionary<string, float>();
private readonly Dictionary<string, ControllerDefinition.FloatRange> _floatRanges = new WorkingDictionary<string, ControllerDefinition.FloatRange>();
private readonly Dictionary<string, Config.AnalogBind> _floatBinds = new Dictionary<string, Config.AnalogBind>();
private ControllerDefinition _type;
/// <summary>don't do this</summary>
public void ForceType(ControllerDefinition newtype) { _type = newtype; }
public bool this[string button]
{
get { return IsPressed(button); }
}
public bool AnyPressed public bool AnyPressed
{ {
get get
@ -50,8 +63,6 @@ namespace BizHawk.Client.Common
} }
} }
public float GetFloat(string name) { return _floatButtons[name]; }
// Looks for bindings which are activated by the supplied physical button. // Looks for bindings which are activated by the supplied physical button.
public List<string> SearchBindings(string button) public List<string> SearchBindings(string button)
{ {
@ -132,7 +143,7 @@ namespace BizHawk.Client.Common
_buttons[kvp.Key] = false; _buttons[kvp.Key] = false;
foreach (var bound_button in kvp.Value) foreach (var bound_button in kvp.Value)
{ {
if (controller[bound_button]) if (controller.IsPressed(bound_button))
{ {
_buttons[kvp.Key] = true; _buttons[kvp.Key] = true;
} }
@ -181,7 +192,7 @@ namespace BizHawk.Client.Common
{ {
foreach (var button in controller.Overrides) foreach (var button in controller.Overrides)
{ {
_buttons[button] = controller[button]; _buttons[button] = controller.IsPressed(button);
} }
foreach (var button in controller.FloatOverrides) foreach (var button in controller.FloatOverrides)
@ -260,7 +271,7 @@ namespace BizHawk.Client.Common
public int Off { get; set; } public int Off { get; set; }
public ControllerDefinition Definition { get { return _type; } } public ControllerDefinition Definition { get { return _type; } }
public bool this[string button] { get { return IsPressed(button); } }
public bool IsPressed(string button) public bool IsPressed(string button)
{ {
if (_autofire) if (_autofire)
@ -295,7 +306,7 @@ namespace BizHawk.Client.Common
{ {
foreach (var bound_button in kvp.Value) foreach (var bound_button in kvp.Value)
{ {
if (_buttons[kvp.Key] == false && controller[bound_button]) if (_buttons[kvp.Key] == false && controller.IsPressed(bound_button))
{ {
_buttonStarts[kvp.Key] = _emulator.Frame; _buttonStarts[kvp.Key] = _emulator.Frame;
} }
@ -308,7 +319,7 @@ namespace BizHawk.Client.Common
_buttons[kvp.Key] = false; _buttons[kvp.Key] = false;
foreach (var bound_button in kvp.Value) foreach (var bound_button in kvp.Value)
{ {
if (controller[bound_button]) if (controller.IsPressed(bound_button))
{ {
_buttons[kvp.Key] = true; _buttons[kvp.Key] = true;
} }

View File

@ -1,9 +1,4 @@
using System; namespace BizHawk.Client.Common
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace BizHawk.Client.Common
{ {
public class AutoPatternBool public class AutoPatternBool
{ {

View File

@ -1,74 +1,56 @@
using System; using BizHawk.Emulation.Common;
using BizHawk.Emulation.Common;
namespace BizHawk.Client.Common namespace BizHawk.Client.Common
{ {
public class AndAdapter : IController public class AndAdapter : IController
{ {
public ControllerDefinition Definition
{
get { return Source.Definition; }
}
public bool IsPressed(string button) public bool IsPressed(string button)
{ {
return this[button]; if (Source != null && SourceAnd != null)
{
return Source.IsPressed(button) & SourceAnd.IsPressed(button);
}
return false;
} }
// pass floats solely from the original source // pass floats solely from the original source
// this works in the code because SourceOr is the autofire controller // this works in the code because SourceOr is the autofire controller
public float GetFloat(string name) { return Source.GetFloat(name); } public float GetFloat(string name)
public IController Source { get; set; }
public IController SourceAnd { get; set; }
public ControllerDefinition Definition { get { return Source.Definition; } set { throw new InvalidOperationException(); } }
public bool this[string button]
{ {
get return Source.GetFloat(name);
{
if (Source != null && SourceAnd != null)
{
return Source[button] & SourceAnd[button];
}
return false;
}
set
{
throw new InvalidOperationException();
}
} }
internal IController Source { get; set; }
internal IController SourceAnd { get; set; }
} }
public class ORAdapter : IController public class ORAdapter : IController
{ {
public ControllerDefinition Definition
{
get { return Source.Definition; }
}
public bool IsPressed(string button) public bool IsPressed(string button)
{ {
return this[button]; return (Source != null ? Source.IsPressed(button) : false)
| (SourceOr != null ? SourceOr.IsPressed(button) : false);
} }
// pass floats solely from the original source // pass floats solely from the original source
// this works in the code because SourceOr is the autofire controller // this works in the code because SourceOr is the autofire controller
public float GetFloat(string name) { return Source.GetFloat(name); } public float GetFloat(string name)
public IController Source { get; set; }
public IController SourceOr { get; set; }
public ControllerDefinition Definition
{ {
get { return Source.Definition; } return Source.GetFloat(name);
set { throw new InvalidOperationException(); }
} }
public bool this[string button] internal IController Source { get; set; }
{ internal IController SourceOr { get; set; }
get
{
return (Source != null ? Source[button] : false)
| (SourceOr != null ? SourceOr[button] : false);
}
set
{
throw new InvalidOperationException();
}
}
} }
} }

View File

@ -12,11 +12,6 @@ namespace BizHawk.Client.Common
{ {
public ControllerDefinition Definition { get; set; } public ControllerDefinition Definition { get; set; }
public bool this[string button]
{
get { return IsPressed(button); }
}
public bool IsPressed(string button) public bool IsPressed(string button)
{ {
return _pressed.Contains(button); return _pressed.Contains(button);

View File

@ -7,28 +7,11 @@ namespace BizHawk.Client.Common
/// </summary> /// </summary>
public class CopyControllerAdapter : IController public class CopyControllerAdapter : IController
{ {
public IController Source { get; set; }
private IController Curr
{
get
{
return Source == null
? NullController.Instance
: Source;
}
}
public ControllerDefinition Definition public ControllerDefinition Definition
{ {
get { return Curr.Definition; } get { return Curr.Definition; }
} }
public bool this[string button]
{
get { return Curr[button]; }
}
public bool IsPressed(string button) public bool IsPressed(string button)
{ {
return Curr.IsPressed(button); return Curr.IsPressed(button);
@ -38,5 +21,17 @@ namespace BizHawk.Client.Common
{ {
return Curr.GetFloat(name); return Curr.GetFloat(name);
} }
public IController Source { get; set; }
private IController Curr
{
get
{
return Source == null
? NullController.Instance
: Source;
}
}
} }
} }

View File

@ -1,10 +1,4 @@
using System; using BizHawk.Emulation.Common;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using BizHawk.Emulation.Common;
using BizHawk.Client.Common;
namespace BizHawk.Client.Common.InputAdapterExtensions namespace BizHawk.Client.Common.InputAdapterExtensions
{ {

View File

@ -11,40 +11,20 @@ namespace BizHawk.Client.Common
/// </summary> /// </summary>
public class OverrideAdaptor : IController public class OverrideAdaptor : IController
{ {
public ControllerDefinition Definition { get; private set; }
private readonly Dictionary<string, bool> _overrides = new Dictionary<string, bool>(); private readonly Dictionary<string, bool> _overrides = new Dictionary<string, bool>();
private readonly Dictionary<string, float> _floatOverrides = new Dictionary<string, float>(); private readonly Dictionary<string, float> _floatOverrides = new Dictionary<string, float>();
private readonly List<string> _inverses = new List<string>(); private readonly List<string> _inverses = new List<string>();
public ControllerDefinition Definition { get; set; }
public bool this[string button]
{
get
{
if (_overrides.ContainsKey(button))
{
return _overrides[button];
}
throw new InvalidOperationException();
}
set
{
if (_overrides.ContainsKey(button))
{
_overrides[button] = value;
}
else
{
_overrides.Add(button, value);
}
}
}
public bool IsPressed(string button) public bool IsPressed(string button)
{ {
return this[button]; if (_overrides.ContainsKey(button))
{
return _overrides[button];
}
throw new InvalidOperationException();
} }
public float GetFloat(string name) public float GetFloat(string name)
@ -104,7 +84,15 @@ namespace BizHawk.Client.Common
public void SetButton(string button, bool value) public void SetButton(string button, bool value)
{ {
this[button] = value; if (_overrides.ContainsKey(button))
{
_overrides[button] = value;
}
else
{
_overrides.Add(button, value);
}
_inverses.Remove(button); _inverses.Remove(button);
} }

View File

@ -1,5 +1,4 @@
using System; using System.Collections.Generic;
using System.Collections.Generic;
using System.Linq; using System.Linq;
using BizHawk.Common; using BizHawk.Common;
@ -18,9 +17,15 @@ namespace BizHawk.Client.Common
/// </summary> /// </summary>
public class StickyOrAdapter : IController public class StickyOrAdapter : IController
{ {
public ControllerDefinition Definition
{
get { return Source.Definition; }
}
public bool IsPressed(string button) public bool IsPressed(string button)
{ {
return this[button]; return Source.StickyIsInEffect(button)
|| SourceStickyOr.StickyIsInEffect(button);
} }
// pass floats solely from the original source // pass floats solely from the original source
@ -33,56 +38,34 @@ namespace BizHawk.Client.Common
public ISticky Source { get; set; } public ISticky Source { get; set; }
public ISticky SourceStickyOr { get; set; } public ISticky SourceStickyOr { get; set; }
public ControllerDefinition Definition { get { return Source.Definition; } set { throw new InvalidOperationException(); } }
public bool this[string button]
{
get
{
return Source.StickyIsInEffect(button) ||
SourceStickyOr.StickyIsInEffect(button);
}
set
{
throw new InvalidOperationException();
}
}
} }
public class StickyXorAdapter : ISticky, IController public class StickyXorAdapter : ISticky, IController
{ {
protected HashSet<string> stickySet = new HashSet<string>(); /// <summary>
/// Determines if a sticky is current mashing the button itself,
/// If sticky is not set then false, if set, it returns true if the Source is not pressed, else false
/// </summary>
public bool StickyIsInEffect(string button)
{
if (IsSticky(button))
{
return !Source.IsPressed(button);
}
public IController Source { get; set; } return false;
}
public ControllerDefinition Definition public ControllerDefinition Definition
{ {
get { return Source.Definition; } get { return Source.Definition; }
set { throw new InvalidOperationException(); }
} }
public bool Locked { get; set; } // Pretty much a hack,
public bool IsPressed(string button) public bool IsPressed(string button)
{ {
return this[button]; var source = Source.IsPressed(button);
} source ^= stickySet.Contains(button);
return source;
// if SetFloat() is called (typically virtual pads), then that float will entirely override the Source input
// otherwise, the source is passed thru.
protected readonly WorkingDictionary<string, float?> _floatSet = new WorkingDictionary<string, float?>();
public void SetFloat(string name, float? value)
{
if (value.HasValue)
{
_floatSet[name] = value;
}
else
{
_floatSet.Remove(name);
}
} }
public float GetFloat(string name) public float GetFloat(string name)
@ -102,40 +85,35 @@ namespace BizHawk.Client.Common
return Source.GetFloat(name); return Source.GetFloat(name);
} }
public IController Source { get; set; }
public bool Locked { get; set; } // Pretty much a hack,
private List<string> _justPressed = new List<string>();
protected readonly HashSet<string> stickySet = new HashSet<string>();
// if SetFloat() is called (typically virtual pads), then that float will entirely override the Source input
// otherwise, the source is passed thru.
protected readonly WorkingDictionary<string, float?> _floatSet = new WorkingDictionary<string, float?>();
public void SetFloat(string name, float? value)
{
if (value.HasValue)
{
_floatSet[name] = value;
}
else
{
_floatSet.Remove(name);
}
}
public void ClearStickyFloats() public void ClearStickyFloats()
{ {
_floatSet.Clear(); _floatSet.Clear();
} }
public bool this[string button]
{
get
{
var source = Source[button];
source ^= stickySet.Contains(button);
return source;
}
set
{
throw new InvalidOperationException();
}
}
/// <summary>
/// Determines if a sticky is current mashing the button itself,
/// If sticky is not set then false, if set, it returns true if the Source is not pressed, else false
/// </summary>
public bool StickyIsInEffect(string button)
{
if (IsSticky(button))
{
return !Source.IsPressed(button);
}
return false;
}
public void SetSticky(string button, bool isSticky) public void SetSticky(string button, bool isSticky)
{ {
if (isSticky) if (isSticky)
@ -189,16 +167,62 @@ namespace BizHawk.Client.Common
_justPressed = buttons; _justPressed = buttons;
} }
private List<string> _justPressed = new List<string>();
} }
public class AutoFireStickyXorAdapter : ISticky, IController public class AutoFireStickyXorAdapter : ISticky, IController
{ {
/// <summary>
/// Determines if a sticky is current mashing the button itself,
/// If sticky is not set then false, if set, it returns true if the Source is not pressed, else false
/// </summary>
public bool StickyIsInEffect(string button)
{
if (IsSticky(button))
{
return !Source.IsPressed(button);
}
return false;
}
public ControllerDefinition Definition
{
get { return Source.Definition; }
}
public bool IsPressed(string button)
{
var source = Source.IsPressed(button);
bool patternValue = false;
if (_boolPatterns.ContainsKey(button))
{ // I can't figure a way to determine right here if it should Peek or Get.
patternValue = _boolPatterns[button].PeekNextValue();
}
source ^= patternValue;
return source;
}
public float GetFloat(string name)
{
if (_floatPatterns.ContainsKey(name))
{
return _floatPatterns[name].PeekNextValue();
}
if (Source == null)
{
return 0;
}
return Source.GetFloat(name);
}
// TODO: Change the AutoHold adapter to be one of these, with an 'Off' value of 0? // TODO: Change the AutoHold adapter to be one of these, with an 'Off' value of 0?
// Probably would have slightly lower performance, but it seems weird to have such a similar class that is only used once. // Probably would have slightly lower performance, but it seems weird to have such a similar class that is only used once.
private int On; private int On;
private int Off; private int Off;
public void SetOnOffPatternFromConfig() public void SetOnOffPatternFromConfig()
{ {
On = Global.Config.AutofireOn < 1 ? 0 : Global.Config.AutofireOn; On = Global.Config.AutofireOn < 1 ? 0 : Global.Config.AutofireOn;
@ -215,18 +239,8 @@ namespace BizHawk.Client.Common
public IController Source { get; set; } public IController Source { get; set; }
public ControllerDefinition Definition
{
get { return Source.Definition; }
}
public bool Locked { get; set; } // Pretty much a hack, public bool Locked { get; set; } // Pretty much a hack,
public bool IsPressed(string button)
{
return this[button];
}
public void SetFloat(string name, float? value, AutoPatternFloat pattern = null) public void SetFloat(string name, float? value, AutoPatternFloat pattern = null)
{ {
if (value.HasValue) if (value.HasValue)
@ -241,52 +255,11 @@ namespace BizHawk.Client.Common
} }
} }
public float GetFloat(string name)
{
if (_floatPatterns.ContainsKey(name))
return _floatPatterns[name].PeekNextValue();
if (Source == null)
return 0;
return Source.GetFloat(name);
}
public void ClearStickyFloats() public void ClearStickyFloats()
{ {
_floatPatterns.Clear(); _floatPatterns.Clear();
} }
public bool this[string button]
{
get
{
var source = Source[button];
bool patternValue = false;
if (_boolPatterns.ContainsKey(button))
{ // I can't figure a way to determine right here if it should Peek or Get.
patternValue = _boolPatterns[button].PeekNextValue();
}
source ^= patternValue;
return source;
}
}
/// <summary>
/// Determines if a sticky is current mashing the button itself,
/// If sticky is not set then false, if set, it returns true if the Source is not pressed, else false
/// </summary>
public bool StickyIsInEffect(string button)
{
if (IsSticky(button))
{
return !Source.IsPressed(button);
}
return false;
}
public void SetSticky(string button, bool isSticky, AutoPatternBool pattern = null) public void SetSticky(string button, bool isSticky, AutoPatternBool pattern = null)
{ {
if (isSticky) if (isSticky)
@ -335,6 +308,7 @@ namespace BizHawk.Client.Common
} }
private List<string> _justPressed = new List<string>(); private List<string> _justPressed = new List<string>();
public void MassToggleStickyState(List<string> buttons) public void MassToggleStickyState(List<string> buttons)
{ {
foreach (var button in buttons.Where(button => !_justPressed.Contains(button))) foreach (var button in buttons.Where(button => !_justPressed.Contains(button)))

View File

@ -11,31 +11,15 @@ namespace BizHawk.Client.Common
/// </summary> /// </summary>
public class UD_LR_ControllerAdapter : IController public class UD_LR_ControllerAdapter : IController
{ {
private HashSet<string> Unpresses = new HashSet<string>();
public ControllerDefinition Definition public ControllerDefinition Definition
{ {
get { return Source.Definition; } get { return Source.Definition; }
} }
public bool this[string button]
{
get { return IsPressed(button); }
}
public IController Source { get; set; }
// The float format implies no U+D and no L+R no matter what, so just passthru
public float GetFloat(string name)
{
return Source.GetFloat(name);
}
public bool IsPressed(string button) public bool IsPressed(string button)
{ {
bool PriorityUD_LR = !Global.Config.AllowUD_LR && !Global.Config.ForbidUD_LR; // implied by neither of the others being set (left as non-enum for back-compatibility) bool PriorityUD_LR = !Global.Config.AllowUD_LR && !Global.Config.ForbidUD_LR; // implied by neither of the others being set (left as non-enum for back-compatibility)
if (Global.Config.AllowUD_LR) if (Global.Config.AllowUD_LR)
{ {
return Source.IsPressed(button); return Source.IsPressed(button);
@ -165,5 +149,15 @@ namespace BizHawk.Client.Common
return Source.IsPressed(button); return Source.IsPressed(button);
} }
// The float format implies no U+D and no L+R no matter what, so just passthru
public float GetFloat(string name)
{
return Source.GetFloat(name);
}
private readonly HashSet<string> Unpresses = new HashSet<string>();
public IController Source { get; set; }
} }
} }

View File

@ -25,11 +25,11 @@ namespace BizHawk.Client.Common
{ {
if (!controller.HasValue) if (!controller.HasValue)
{ {
buttons[button] = adaptor[button]; buttons[button] = adaptor.IsPressed(button);
} }
else if (button.Length >= 3 && button.Substring(0, 2) == "P" + controller) else if (button.Length >= 3 && button.Substring(0, 2) == "P" + controller)
{ {
buttons[button.Substring(3)] = adaptor["P" + controller + " " + button.Substring(3)]; buttons[button.Substring(3)] = adaptor.IsPressed("P" + controller + " " + button.Substring(3));
} }
} }
@ -52,6 +52,7 @@ namespace BizHawk.Client.Common
return buttons; return buttons;
} }
// TODO: what about float controls?
[LuaMethodAttributes( [LuaMethodAttributes(
"getimmediate", "getimmediate",
"returns a lua table of any controller buttons currently pressed by the user" "returns a lua table of any controller buttons currently pressed by the user"
@ -61,7 +62,7 @@ namespace BizHawk.Client.Common
var buttons = Lua.NewTable(); var buttons = Lua.NewTable();
foreach (var button in Global.ActiveController.Definition.BoolButtons) foreach (var button in Global.ActiveController.Definition.BoolButtons)
{ {
buttons[button] = Global.ActiveController[button]; buttons[button] = Global.ActiveController.IsPressed(button);
} }
return buttons; return buttons;

View File

@ -263,7 +263,7 @@ namespace BizHawk.Client.Common
// Movie may go into finished mode as a result from latching // Movie may go into finished mode as a result from latching
if (!Movie.IsFinished) if (!Movie.IsFinished)
{ {
if (Global.ClientControls["Scrub Input"]) if (Global.ClientControls.IsPressed("Scrub Input"))
{ {
LatchInputFromPlayer(Global.MovieInputSourceAdapter); LatchInputFromPlayer(Global.MovieInputSourceAdapter);
ClearFrame(); ClearFrame();

View File

@ -37,8 +37,7 @@ namespace BizHawk.Client.Common
} }
} }
#region IController Implementation // TODO: get rid of this, add a SetBool() method or something for the set access, replace get wtih IsPressed
public bool this[string button] public bool this[string button]
{ {
get get
@ -55,6 +54,8 @@ namespace BizHawk.Client.Common
} }
} }
#region IController Implementation
public bool IsPressed(string button) public bool IsPressed(string button)
{ {
return MyBoolButtons[button]; return MyBoolButtons[button];

View File

@ -9,10 +9,7 @@ namespace BizHawk.Client.Common
{ {
#region IController Implementation #region IController Implementation
public bool this[string button] public ControllerDefinition Definition { get; set; }
{
get { return MyBoolButtons[button]; }
}
public bool IsPressed(string button) public bool IsPressed(string button)
{ {
@ -28,8 +25,6 @@ namespace BizHawk.Client.Common
#region IMovieController Implementation #region IMovieController Implementation
public ControllerDefinition Definition { get; set; }
/// <summary> /// <summary>
/// latches one player from the source /// latches one player from the source
/// </summary> /// </summary>

View File

@ -371,7 +371,7 @@ namespace BizHawk.Client.Common
Changes = true; Changes = true;
InvalidateAfter(frame); InvalidateAfter(frame);
ChangeLog.AddBoolToggle(frame, buttonName, !adapter[buttonName], "Toggle " + buttonName + ": " + frame); ChangeLog.AddBoolToggle(frame, buttonName, !adapter.IsPressed(buttonName), "Toggle " + buttonName + ": " + frame);
} }
public void SetBoolState(int frame, string buttonName, bool val) public void SetBoolState(int frame, string buttonName, bool val)
@ -380,7 +380,7 @@ namespace BizHawk.Client.Common
ExtendMovieForEdit(frame - _log.Count + 1); ExtendMovieForEdit(frame - _log.Count + 1);
var adapter = GetInputState(frame) as Bk2ControllerAdapter; var adapter = GetInputState(frame) as Bk2ControllerAdapter;
var old = adapter[buttonName]; var old = adapter.IsPressed(buttonName);
adapter[buttonName] = val; adapter[buttonName] = val;
var lg = LogGeneratorInstance(); var lg = LogGeneratorInstance();
@ -406,7 +406,7 @@ namespace BizHawk.Client.Common
for (int i = 0; i < count; i++) for (int i = 0; i < count; i++)
{ {
var adapter = GetInputState(frame + i) as Bk2ControllerAdapter; var adapter = GetInputState(frame + i) as Bk2ControllerAdapter;
bool old = adapter[buttonName]; bool old = adapter.IsPressed(buttonName);
adapter[buttonName] = val; adapter[buttonName] = val;
var lg = LogGeneratorInstance(); var lg = LogGeneratorInstance();

View File

@ -7,12 +7,14 @@
/// </summary> /// </summary>
ControllerDefinition Definition { get; } ControllerDefinition Definition { get; }
// TODO - it is obnoxious for this to be here. must be removed. /// <summary>
bool this[string button] { get; } /// Returns the current state of a boolean control
/// </summary>
// TODO - this can stay but it needs to be changed to go through the float
bool IsPressed(string button); bool IsPressed(string button);
/// <summary>
/// Returns the state of a float control
/// </summary>
float GetFloat(string name); float GetFloat(string name);
} }
} }