/// <summary> /// Get the state of semantic input. /// </summary> public ButtonState GetSemanticButtonState(SemanticButtonType type, ref GamePadState gamePadState) { switch (type) { case SemanticButtonType.AffirmButton: return GetAffirmState(ref gamePadState); case SemanticButtonType.CancelButton: return GetCancelState(ref gamePadState); case SemanticButtonType.NextPageButton: return GetNextPageState(ref gamePadState); case SemanticButtonType.PreviousPageButton: return GetPreviousPageState(ref gamePadState); default: return ButtonState.Released; } }
private void SemanticButtonInput(GameTime gameTime, SemanticButtonType type, ref GamePadState gamePadState, Focusable focusable) { ButtonState state = inputRouter.GetSemanticButtonState(type, ref gamePadState); if (state == ButtonState.Pressed) { if (isSemanticButtonPressed[(int)type] != ButtonState.Pressed) SemanticButtonInput(gameTime, type, InputType.ClickDown, focusable); SemanticButtonDownRepeat(gameTime, type, focusable); SemanticButtonInput(gameTime, type, InputType.Down, focusable); } else if (state != ButtonState.Pressed) { if (isSemanticButtonPressed[(int)type] == ButtonState.Pressed) { SemanticButtonUp(type); SemanticButtonInput(gameTime, type, InputType.ClickUp, focusable); } // OPTIMIZATION: this functionality is not worth the speed cost //SemanticButtonUpRepeat(type); //SemanticButtonInput(type, InputType.Up); } isSemanticButtonPressed[(int)type] = state; }
private void SemanticButtonUp(SemanticButtonType type) { semanticButtonPressedElapsedTime[(int)type] = 0; semanticButtonPressedElapsedTime2[(int)type] = 0; }
private void SemanticButtonDownRepeat(GameTime gameTime, SemanticButtonType type, Focusable focusable) { semanticButtonPressedElapsedTime[(int)type] += (float)gameTime.ElapsedGameTime.TotalSeconds; if (semanticButtonPressedElapsedTime[(int)type] <= repeatRate.FirstDelay) return; semanticButtonPressedElapsedTime2[(int)type] += (float)gameTime.ElapsedGameTime.TotalSeconds; if (semanticButtonPressedElapsedTime2[(int)type] <= repeatRate.RepeatDelay) return; semanticButtonPressedElapsedTime2[(int)type] = 0; SemanticButtonInput(gameTime, type, InputType.Repeat, focusable); }
private void SemanticButtonInput(GameTime gameTime, SemanticButtonType type, InputType inputType, Focusable focusable) { switch (type) { case SemanticButtonType.AffirmButton: focusable.NotifySemanticInput(gameTime, inputType, SemanticInputType.Affirm); break; case SemanticButtonType.CancelButton: focusable.NotifySemanticInput(gameTime, inputType, SemanticInputType.Cancel); break; case SemanticButtonType.NextPageButton: focusable.NotifySemanticInput(gameTime, inputType, SemanticInputType.NextPage); break; case SemanticButtonType.PreviousPageButton: focusable.NotifySemanticInput(gameTime, inputType, SemanticInputType.PreviousPage); break; } }