using System; using System.Collections.Generic; using System.Text; namespace BizHawk.MultiClient { public class Controller : IController { private ControllerDefinition type; private Dictionary> bindings = new Dictionary>(); private WorkingDictionary stickyButtons = new WorkingDictionary(); private List unpressedButtons = new List(); private List forcePressedButtons = new List(); private List removeFromForcePressedButtons = new List(); private List programmaticallyPressedButtons = new List(); //look for bindings which are activated by the supplied physical button. public List SearchBindings(string button) { var ret = new List(); foreach (var kvp in bindings) { foreach (var bound_button in kvp.Value) { if (bound_button == button) ret.Add(kvp.Key); } } return ret; } //uses the bindings to latch our own logical button state from the source controller's button state (which are assumed to be the physical side of the binding) public void LatchFromPhysical(IController controller) { foreach (var kvp in bindings) { stickyButtons[kvp.Key] = false; foreach (var bound_button in kvp.Value) { if(controller[bound_button]) stickyButtons[kvp.Key] = true; } } } public Controller(ControllerDefinition definition) { type = definition; foreach (var b in type.BoolButtons) { bindings[b] = new List(); } foreach (var f in type.FloatControls) bindings[f] = new List(); } public void BindButton(string button, string control) { bindings[button].Add(control); } public void BindMulti(string button, string controlString) { if (string.IsNullOrEmpty(controlString)) return; string[] controlbindings = controlString.Split(','); foreach (string control in controlbindings) bindings[button].Add(control.Trim()); } public ControllerDefinition Type { get { return type; } } public bool this[string button] { get { return IsPressed(button); } } public bool IsPressed(string button) { return stickyButtons[button]; } public float GetFloat(string name) { throw new NotImplementedException(); } public void UnpressButton(string name) { unpressedButtons.Add(name); } public void UpdateControls(int frame) { } public void SetSticky(string button, bool sticky) { stickyButtons[button] = sticky; } public bool IsSticky(string button) { return stickyButtons[button]; } public void ForceButton(string button) { forcePressedButtons.Add(button); } } }