using System; using System.Collections.Generic; 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) { if (_floatOverrides.ContainsKey(name)) { return _floatOverrides[name]; } return 0.0F; } public IEnumerable Overrides { get { foreach (var kvp in _overrides) { yield return kvp.Key; } } } public IEnumerable FloatOverrides { get { foreach (var kvp in _floatOverrides) { yield return kvp.Key; } } } public IEnumerable 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(); } } }