/// <summary> /// Responds to user input, accepting or cancelling the message box. /// </summary> public override void HandleInput( InputState input ) { PlayerIndex playerIndex; // We pass in our ControllingPlayer, which may either be null (to // accept input from any player) or a specific index. If we pass a null // controlling player, the InputState helper returns to us which player // actually provided the input. We pass that through to our Accepted and // Cancelled events, so they can tell which player triggered them. if ( input.IsMenuSelect( ControllingPlayer, out playerIndex ) ) { // Raise the accepted event, then exit the message box. if ( Accepted != null ) Accepted( this, new PlayerIndexEventArgs( playerIndex ) ); ExitScreen(); } else if ( input.IsMenuCancel( ControllingPlayer, out playerIndex ) ) { // Raise the cancelled event, then exit the message box. if ( Cancelled != null ) Cancelled( this, new PlayerIndexEventArgs( playerIndex ) ); ExitScreen(); } }
/// <summary> /// Allows the screen to handle user input. Unlike Update, this method /// is only called when the screen is active, and not when some other /// screen has taken the focus. /// </summary> public virtual void HandleInput( InputState input ) { }
/// <summary> /// Responds to user input, changing the selected entry and accepting /// or cancelling the menu. /// </summary> public override void HandleInput( InputState input ) { // Move to the previous menu entry? if ( input.IsMenuUp( ControllingPlayer ) ) { selectedEntry--; if ( selectedEntry < 0 ) selectedEntry = menuEntries.Count - 1; } // Move to the next menu entry? if ( input.IsMenuDown( ControllingPlayer ) ) { selectedEntry++; if ( selectedEntry >= menuEntries.Count ) selectedEntry = 0; } // Accept or cancel the menu? We pass in our ControllingPlayer, which may // either be null (to accept input from any player) or a specific index. // If we pass a null controlling player, the InputState helper returns to // us which player actually provided the input. We pass that through to // OnSelectEntry and OnCancel, so they can tell which player triggered them. PlayerIndex playerIndex; if ( input.IsMenuSelect( ControllingPlayer, out playerIndex ) ) { OnSelectEntry( selectedEntry, playerIndex ); } else if ( input.IsMenuCancel( ControllingPlayer, out playerIndex ) ) { OnCancel( playerIndex ); } }
public override void HandleInput( InputState input ) { if ( input == null ) throw new ArgumentNullException( "input" ); // Look up inputs for the active player profile. int playerIndex = (int)ControllingPlayer.Value; KeyboardState keyboardState = input.CurrentKeyboardStates[playerIndex]; GamePadState gamePadState = input.CurrentGamePadStates[playerIndex]; bool gamePadDisconnected = !gamePadState.IsConnected && input.GamePadWasConnected[playerIndex]; if ( input.IsPauseGame( ControllingPlayer ) || gamePadDisconnected ) { //ScreenManager.AddScreen( new PauseMenuScreen(), ControllingPlayer ); ZombieCraft.Instance.Exit(); } else { float mouseZoomSensitivity = 1f; float triggerZoomSensitivity = 9f; Vector3 zoomVector = Vector3.Normalize( new Vector3( 0, 1, 1 ) ); // camera zoom (controller) float zoom = triggerZoomSensitivity * ( input.CurrentGamePadStates[0].Triggers.Left - input.CurrentGamePadStates[0].Triggers.Right ); // camera zoom (mouse wheel) float lastScrollValue = scrollValue; scrollValue = Mouse.GetState().ScrollWheelValue; if ( lastScrollValue != scrollValue ) zoom = mouseZoomSensitivity * ( lastScrollValue - scrollValue ); Camera camera = InstancedModelDrawer.Camera; camera.Position += zoomVector * zoom; // clamp zoom float lookLength = ( camera.Position - camera.Target ).Length(); if ( lookLength < closeZoom || camera.Position.Y < 0 ) camera.Position = camera.Target + closeZoom * zoomVector; else if ( lookLength > farZoom ) camera.Position = camera.Target + farZoom * zoomVector; // camera pan (controller) float panSensitivity = 5f; if ( gamePadState.ThumbSticks.Left.X != 0 ) { float movement = panSensitivity * gamePadState.ThumbSticks.Left.X; camera.Target.X += movement; camera.Position.X += movement; } if ( gamePadState.ThumbSticks.Left.Y != 0 ) { float movement = panSensitivity * -gamePadState.ThumbSticks.Left.Y; camera.Target.Z += movement; camera.Position.Z += movement; } // place beacon with controller if ( input.IsNewButtonPress( Buttons.A, PlayerIndex.One ) ) PlaceBeacon( 0 ); if ( input.IsNewButtonPress( Buttons.B, PlayerIndex.One ) ) PlaceBeacon( 1 ); if ( input.IsNewButtonPress( Buttons.X, PlayerIndex.One ) ) PlaceBeacon( 2 ); if ( input.IsNewButtonPress( Buttons.Y, PlayerIndex.One ) ) RemoveLastBeacon(); // click to set target position MouseState mouseState = Mouse.GetState(); if ( mouseState.LeftButton == ButtonState.Pressed ) PlaceBeacon( 0 ); if ( mouseState.RightButton == ButtonState.Pressed ) RemoveLastBeacon(); } }