using System; using System.Collections.Generic; public interface IInputTranslator { //public void Init(IBindingHolder holder); public void AddCommandTranslator(ICommandTranslator translator); public void RemoveCommandTranslator(ICommandTranslator translator); public void RestictTranslation(List commands, bool isRestricted); public bool IsTranslationResticted(List commands); public void Tick(); } public class InputTranslator : IInputTranslator where T : IBinding { private List commandTranslators; private IBindingHolder bindingHolder; public InputTranslator(IBindingHolder holder, Boolean isPlayer2) { commandTranslators = new List(); bindingHolder = holder; bindingHolder.Init(isPlayer2); } //public void Init(IBindingHolder holder) //{ // commandTranslators = new List(); // bindingHolder = holder; // bindingHolder.Init(); //} public void AddCommandTranslator(ICommandTranslator translator) { if (commandTranslators.Contains(translator)) return; commandTranslators.Add(translator); } public void RemoveCommandTranslator(ICommandTranslator translator) { if (commandTranslators.Contains(translator)) commandTranslators.Remove(translator); } public void RestictTranslation(List commands, bool isRestricted) { foreach (var keyBinding in bindingHolder.InputBindings) { if (commands.Contains(keyBinding.Key)) { keyBinding.Value.IsRestricted = isRestricted; } } } public bool IsTranslationResticted(List commands) { foreach (ECommand command in commands) { if (bindingHolder.InputBindings.ContainsKey(command)) { return bindingHolder.InputBindings[command].IsRestricted; } } return false; } public void Tick() { if (commandTranslators.Count == 0) return; var commands = new Dictionary(); foreach (var keyBinding in bindingHolder.InputBindings) { if (keyBinding.Value.IsRestricted) continue; if (keyBinding.Value.IsPressed()) commands.Add(keyBinding.Key, new PressedState(true, false)); if (keyBinding.Value.IsReleased()) commands.Add(keyBinding.Key, new PressedState(false, true)); } if (commands.Count == 0) return; foreach (var commandTranslator in commandTranslators) { foreach (var command in commands) { var eCommand = command.Key; var pressedState = command.Value; commandTranslator.TranslateCommand(eCommand, pressedState); } } } }