/// <summary> /// /// </summary> /// <param name="providers"></param> /// <param name="gameTime"></param> /// <returns></returns> public IEnumerable <IInputCallbacker> Update(Dictionary <Type, IInputStateProvider> providers, GameTime gameTime) { // Console.WriteLine(providers.Count); GamepadStateProvider provider = providers[typeof(GamepadStateProvider)] as GamepadStateProvider; IEnumerable <Buttons> toCheck = provider.GetOldPressedButtons(PlayerIndex.One).Union(provider.GetCurrentPressedButtons(PlayerIndex.One)); List <String> calls = new List <string>(); foreach (PlayerIndex index in Enum.GetValues(typeof(PlayerIndex))) { if (!provider.CurrentState(index).IsConnected) { continue; } foreach (Buttons button in toCheck) { foreach (var bind in buttonBinds.Where(bind => bind.Value.Contains(button))) { // että ei ajeta kahta kertaa samaa keyta if (calls.Contains(bind.Key)) { continue; } InputState inputState; GamepadBinding binding = Bindings[bind.Key]; if (provider.IsButtonDown(button, index)) { inputState = InputState.Down; binding.HoldTime += gameTime.ElapsedGameTime.TotalMilliseconds; } else if (provider.IsButtonPressed(button, index)) { inputState = InputState.Pressed; binding.HoldTime = 0; } else { inputState = InputState.Released; } GamepadInputEventArgs args = new GamepadInputEventArgs(binding.HoldTime, inputState, gameTime, index, provider.CurrentState(index).ThumbSticks); GamepadInputCallbacker cb = new GamepadInputCallbacker(button, args, binding.Callbacks); calls.Add(bind.Key); yield return(cb); } } } }
/// <summary> /// /// </summary> /// <param name="providers"></param> /// <param name="gameTime"></param> /// <returns></returns> public IEnumerable<IInputCallbacker> Update(Dictionary<Type, IInputStateProvider> providers, GameTime gameTime) { // Console.WriteLine(providers.Count); GamepadStateProvider provider = providers[typeof (GamepadStateProvider)] as GamepadStateProvider; IEnumerable<Buttons> toCheck = provider.GetOldPressedButtons(PlayerIndex.One).Union(provider.GetCurrentPressedButtons(PlayerIndex.One)); List<String> calls = new List<string>(); foreach (PlayerIndex index in Enum.GetValues(typeof(PlayerIndex))) { if (!provider.CurrentState(index).IsConnected) continue; foreach (Buttons button in toCheck) { foreach (var bind in buttonBinds.Where(bind => bind.Value.Contains(button))) { // että ei ajeta kahta kertaa samaa keyta if (calls.Contains(bind.Key)) continue; InputState inputState; GamepadBinding binding = Bindings[bind.Key]; if (provider.IsButtonDown(button, index)) { inputState = InputState.Down; binding.HoldTime += gameTime.ElapsedGameTime.TotalMilliseconds; } else if (provider.IsButtonPressed(button, index)) { inputState = InputState.Pressed; binding.HoldTime = 0; } else { inputState = InputState.Released; } GamepadInputEventArgs args = new GamepadInputEventArgs(binding.HoldTime, inputState, gameTime, index, provider.CurrentState(index).ThumbSticks); GamepadInputCallbacker cb = new GamepadInputCallbacker(button, args, binding.Callbacks); calls.Add(bind.Key); yield return cb; } } } }