using System;
using System.Collections.Generic;
using System.Linq;
using BizHawk.Emulation.Common;
namespace BizHawk.Client.Common
{
///
/// Used to pass into an Override method to manage the logic overriding input
/// This only works with bool buttons!
///
public class OverrideAdapter : IController
{
public ControllerDefinition Definition { get; private set; }
private readonly Dictionary _overrides = new Dictionary();
private readonly Dictionary _floatOverrides = new Dictionary();
private readonly List _inverses = new List();
/// not overridden
public bool IsPressed(string button)
{
if (_overrides.ContainsKey(button))
{
return _overrides[button];
}
throw new InvalidOperationException();
}
public float GetFloat(string name)
=> _floatOverrides.ContainsKey(name)
? _floatOverrides[name]
: 0.0F;
public IEnumerable Overrides => _overrides.Select(kvp => kvp.Key);
public IEnumerable FloatOverrides => _floatOverrides.Select(kvp => kvp.Key);
public IEnumerable InversedButtons => _inverses;
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();
}
}
}