¿Cómo implementar un buffer de input de juegos de lucha profesional?

Bien chicos, entiendo cómo hacer un buffer de input básico.

Aquí está mi código:

public class InputBuffer : MonoBehaviour { public int max_buffer; public enum keys { down, up, left, right, X, Y, Z, A, B, C } public List<keys> InputPlayer; public enum Special { WPunch, MPunch, SPunch, WKick, MKick, SKick, Hadouken, Shoryuken } public List<Special> SpecialsPlayer; void Start () { InputPlayer = new List<keys>(); SpecialsPlayer = new List<Special>(); } void AddKey(keys key) { InputPlayer.Add(key); if (InputPlayer.Count > max_buffer) { InputPlayer.RemoveAt(0); } } void CheckSpecial() { if (InputPlayer[InputPlayer.Count-1] == keys.A) { if (InputPlayer[InputPlayer.Count-2] == keys.right) { if (InputPlayer[InputPlayer.Count-3] == keys.down) { SpecialsPlayer.Add(Special.Hadouken); } } } } } 

Esto funciona muy bien, pero luego recibo keys repetidas en el búfer cuando mantengo presionada una tecla.

Podría solucionarlo teniendo una última variable presionada por la tecla y solo llamando a la tecla inputbuffer.getkey si la tecla presionada es diferente. Pero esto hace que el buffer se comporte bastante rígido.

Me encantaría ver cómo puedo mejorar mi código para que no reconozca las teclas múltiples cuando se mantiene presionado un button, pero también permite los movimientos de carga (pluma sónica de Guile).

También me gustaría ver cómo funcionan los accesos directos a las inputs (usando un command especial anterior como parte de un segundo, generalmente usado en canceles a super).

Me encantaría ver cuál es la forma correcta de manejar los búferes de input en kof y SF.

almacene la bandera para cada tecla y establézcala como verdadera en la tecla. no agregue esta key al búfer mientras el indicador correspondiente sea verdadero. establece el indicador en falso cuando ocurre la key.