using System.Collections.Generic; using BizHawk.Emulation.Common; namespace BizHawk.Client.Common { /// /// Will hold buttons for 1 frame and then release them. /// (Calling Click() from your button click is what you want to do) /// TODO - should the duration be controllable? /// public class ClickyVirtualPadController : IController { private readonly HashSet _pressed = new HashSet(); public ControllerDefinition Definition { get; set; } public bool IsPressed(string button) => _pressed.Contains(button); public float AxisValue(string name) => 0.0f; /// /// Call this once per frame to do the timekeeping for the hold and release /// public void FrameTick() => _pressed.Clear(); /// /// Call this to hold the button down for one frame /// public void Click(string button) => _pressed.Add(button); public void Toggle(string button) { if (IsPressed(button)) { _pressed.Remove(button); } else { _pressed.Add(button); } } public void SetBool(string button, bool value) { if (value) { _pressed.Remove(button); } else { _pressed.Add(button); } } } }