BizHawk/BizHawk.Client.Common/inputAdapters/OverrideAdapter.cs

119 lines
2.1 KiB
C#

using System;
using System.Collections.Generic;
using BizHawk.Emulation.Common;
namespace BizHawk.Client.Common
{
/// <summary>
/// Used to pass into an Override method to manage the logic overriding input
/// This only works with bool buttons!
/// </summary>
public class OverrideAdapter : IController
{
public ControllerDefinition Definition { get; private set; }
private readonly Dictionary<string, bool> _overrides = new Dictionary<string, bool>();
private readonly Dictionary<string, float> _floatOverrides = new Dictionary<string, float>();
private readonly List<string> _inverses = new List<string>();
/// <exception cref="InvalidOperationException"><paramref name="button"/> not overridden</exception>
public bool IsPressed(string button)
{
if (_overrides.ContainsKey(button))
{
return _overrides[button];
}
throw new InvalidOperationException();
}
public float GetFloat(string name)
{
if (_floatOverrides.ContainsKey(name))
{
return _floatOverrides[name];
}
return 0.0F;
}
public IEnumerable<string> Overrides
{
get
{
foreach (var kvp in _overrides)
{
yield return kvp.Key;
}
}
}
public IEnumerable<string> FloatOverrides
{
get
{
foreach (var kvp in _floatOverrides)
{
yield return kvp.Key;
}
}
}
public IEnumerable<string> InversedButtons
{
get
{
foreach (var name in _inverses)
{
yield return name;
}
}
}
public void SetFloat(string name, float value)
{
if (_floatOverrides.ContainsKey(name))
{
_floatOverrides[name] = value;
}
else
{
_floatOverrides.Add(name, value);
}
}
public void SetButton(string button, bool value)
{
if (_overrides.ContainsKey(button))
{
_overrides[button] = value;
}
else
{
_overrides.Add(button, value);
}
_inverses.Remove(button);
}
public void UnSet(string button)
{
_overrides.Remove(button);
_inverses.Remove(button);
}
public void SetInverse(string button)
{
_inverses.Add(button);
}
public void FrameTick()
{
_overrides.Clear();
_floatOverrides.Clear();
_inverses.Clear();
}
}
}