public override void HandleInput(InputState input) { PlayerIndex player; if (selectionMode == 0) { if (input.CurrentKeyboardStates[0].IsKeyDown(Microsoft.Xna.Framework.Input.Keys.Left) || input.CurrentKeyboardStates[0].IsKeyDown(Microsoft.Xna.Framework.Input.Keys.A) || input.CurrentGamePadStates[0].ThumbSticks.Left.X<-0.2f || input.CurrentGamePadStates[0].DPad.Left == ButtonState.Pressed) { switch (selectedColor) { case 0: if (carColor.R > 25) carColor.R -= 2; break; case 1: if (carColor.G > 25) carColor.G -= 2; break; case 2: if (carColor.B > 25) carColor.B -= 2; break; } } if (input.CurrentKeyboardStates[0].IsKeyDown(Microsoft.Xna.Framework.Input.Keys.Right) || input.CurrentKeyboardStates[0].IsKeyDown(Microsoft.Xna.Framework.Input.Keys.D) || input.CurrentGamePadStates[0].ThumbSticks.Left.X > 0.2f || input.CurrentGamePadStates[0].DPad.Right == ButtonState.Pressed) { switch (selectedColor) { case 0: if (carColor.R < 255) carColor.R += 2; break; case 1: if (carColor.G < 255) carColor.G += 2; break; case 2: if (carColor.B < 255) carColor.B += 2; break; } } if (input.IsNewKeyPress(Microsoft.Xna.Framework.Input.Keys.Up, null, out player) || input.IsNewKeyPress(Microsoft.Xna.Framework.Input.Keys.W, null, out player) || input.IsMenuUp(null)) { selectedColor--; if (selectedColor == -1) selectedColor = 2; } if (input.IsNewKeyPress(Microsoft.Xna.Framework.Input.Keys.Down, null, out player) || input.IsNewKeyPress(Microsoft.Xna.Framework.Input.Keys.S, null, out player) || input.IsMenuDown(null)) { selectedColor++; if (selectedColor == 3) selectedColor = 0; } if (input.IsNewKeyPress(Microsoft.Xna.Framework.Input.Keys.Enter, null, out player) || input.IsNewKeyPress(Microsoft.Xna.Framework.Input.Keys.Space, null, out player) || input.IsMenuSelect(null, out player)) { AudioController.PlaySFX("select", 0.5f, 0f, 0f); selectionMode = 1; LoadTracks(selectedCup); } if (input.MouseLeftClick) { if(rightRect.Contains(new Point(input.CurrentMouseState.X, input.CurrentMouseState.Y))) { AudioController.PlaySFX("select", 0.5f, 0f, 0f); selectionMode = 1; LoadTracks(selectedCup); } if (leftRect.Contains(new Point(input.CurrentMouseState.X, input.CurrentMouseState.Y))) { AudioController.StopMusic(); LoadingScreen.Load(ScreenManager, false, null, new MainMenuScreen()); } } if (input.MouseDragging) { if (redRect.Contains(new Point(input.CurrentMouseState.X, input.CurrentMouseState.Y))) { carColor.R = (byte)MathHelper.Clamp((25f + (230f / 400f) * ((input.CurrentMouseState.X - (float)redRect.Left))), 25f, 255f); selectedColor = 0; } if (greenRect.Contains(new Point(input.CurrentMouseState.X, input.CurrentMouseState.Y))) { carColor.G = (byte)MathHelper.Clamp((25f + (230f / 400f) * ((input.CurrentMouseState.X - (float)greenRect.Left))), 25f, 255f); selectedColor = 1; } if (blueRect.Contains(new Point(input.CurrentMouseState.X, input.CurrentMouseState.Y))) { carColor.B = (byte)MathHelper.Clamp((25f + (230f / 400f) * ((input.CurrentMouseState.X - (float)blueRect.Left))), 25f, 255f); selectedColor = 2; } } #if WINRT || WINDOWS_PHONE || TOUCH foreach (GestureSample gest in input.Gestures) { if (gest.GestureType == GestureType.HorizontalDrag) { if (redRect.Contains(new Point((int)gest.Position.X, (int)gest.Position.Y))) { carColor.R = (byte)MathHelper.Clamp((25f + (230f / 400f) * ((gest.Position.X - (float)redRect.Left))), 25f, 255f); selectedColor = 0; } if (greenRect.Contains(new Point((int)gest.Position.X, (int)gest.Position.Y))) { carColor.G = (byte)MathHelper.Clamp((25f + (230f / 400f) * ((gest.Position.X - (float)greenRect.Left))), 25f, 255f); selectedColor = 1; } if (blueRect.Contains(new Point((int)gest.Position.X, (int)gest.Position.Y))) { carColor.B = (byte)MathHelper.Clamp((25f + (230f / 400f) * ((gest.Position.X - (float)blueRect.Left))), 25f, 255f); selectedColor = 2; } } } if (input.TapGesture != null) { #if WINDOWS_PHONE if (rightRect.Contains(new Point((int)input.TapGesture.Value.Position.Y, ScreenManager.Viewport.Height - (int)input.TapGesture.Value.Position.X))) #else if (rightRect.Contains(new Point((int)input.TapGesture.Value.Position.X, (int)input.TapGesture.Value.Position.Y))) #endif { AudioController.PlaySFX("select", 0.5f, 0f, 0f); selectionMode = 1; LoadTracks(selectedCup); } #if WINDOWS_PHONE if (leftRect.Contains(new Point((int)input.TapGesture.Value.Position.Y, ScreenManager.Viewport.Height - (int)input.TapGesture.Value.Position.X))) #else if (leftRect.Contains(new Point((int)input.TapGesture.Value.Position.X, (int)input.TapGesture.Value.Position.Y))) #endif { AudioController.StopMusic(); LoadingScreen.Load(ScreenManager, false, null, new MainMenuScreen()); } } #endif if (input.IsMenuCancel(null, out player)) { AudioController.StopMusic(); LoadingScreen.Load(ScreenManager, false, null, new MainMenuScreen()); } } else { if (input.IsNewKeyPress(Microsoft.Xna.Framework.Input.Keys.Escape, null, out player) || input.IsNewKeyPress(Microsoft.Xna.Framework.Input.Keys.Back, null, out player) || input.IsMenuCancel(null, out player)) { selectionMode = 0; } if (input.IsNewKeyPress(Microsoft.Xna.Framework.Input.Keys.Left, null, out player) || input.IsNewKeyPress(Microsoft.Xna.Framework.Input.Keys.A, null, out player) || (input.CurrentGamePadStates[0].ThumbSticks.Left.X<-0.2f && input.LastGamePadStates[0].ThumbSticks.Left.X>=-0.2f) || input.CurrentGamePadStates[0].DPad.Left == ButtonState.Pressed && input.LastGamePadStates[0].DPad.Left != ButtonState.Pressed) { selectedCup--; if (selectedCup == -1) selectedCup = 0; else LoadTracks(selectedCup); } if (input.IsNewKeyPress(Microsoft.Xna.Framework.Input.Keys.Right, null, out player) || input.IsNewKeyPress(Microsoft.Xna.Framework.Input.Keys.D, null, out player) || (input.CurrentGamePadStates[0].ThumbSticks.Left.X > 0.2f && input.LastGamePadStates[0].ThumbSticks.Left.X <= 0.2f) || input.CurrentGamePadStates[0].DPad.Right == ButtonState.Pressed && input.LastGamePadStates[0].DPad.Right != ButtonState.Pressed) { selectedCup++; if (selectedCup == Cups.Count) selectedCup = Cups.Count-1; else LoadTracks(selectedCup); } if (input.IsNewKeyPress(Microsoft.Xna.Framework.Input.Keys.Enter, null, out player) || input.IsNewKeyPress(Microsoft.Xna.Framework.Input.Keys.Space, null, out player) || input.IsMenuSelect(null, out player)) { AudioController.PlaySFX("select", 0.5f, 0f, 0f); ExitScreen(); // } if (input.MouseLeftClick) { if (rightRect.Contains(new Point(input.CurrentMouseState.X, input.CurrentMouseState.Y))) { AudioController.PlaySFX("select", 0.5f, 0f, 0f); ExitScreen(); } if (leftRect.Contains(new Point(input.CurrentMouseState.X, input.CurrentMouseState.Y))) { selectionMode = 0; } if (leftCupRect.Contains(new Point(input.CurrentMouseState.X, input.CurrentMouseState.Y))) { selectedCup--; if (selectedCup == -1) selectedCup = 0; else LoadTracks(selectedCup); } if (rightCupRect.Contains(new Point(input.CurrentMouseState.X, input.CurrentMouseState.Y))) { selectedCup++; if (selectedCup == Cups.Count) selectedCup = Cups.Count - 1; else LoadTracks(selectedCup); } } #if WINRT || WINDOWS_PHONE || TOUCH foreach (GestureSample gest in input.Gestures) { if (gest.GestureType == GestureType.Flick) { if (gest.Delta.X > 0f) { selectedCup--; if (selectedCup == -1) selectedCup = 0; else LoadTracks(selectedCup); } if (gest.Delta.X < 0f) { selectedCup++; if (selectedCup == Cups.Count) selectedCup = Cups.Count - 1; else LoadTracks(selectedCup); } } } if (input.TapGesture != null) { #if WINDOWS_PHONE if (rightRect.Contains(new Point((int)input.TapGesture.Value.Position.Y, ScreenManager.Viewport.Height - (int)input.TapGesture.Value.Position.X))) #else if (rightRect.Contains(new Point((int)input.TapGesture.Value.Position.X, (int)input.TapGesture.Value.Position.Y))) #endif { AudioController.PlaySFX("select", 0.5f, 0f, 0f); ExitScreen(); } #if WINDOWS_PHONE if (leftRect.Contains(new Point((int)input.TapGesture.Value.Position.Y, ScreenManager.Viewport.Height - (int)input.TapGesture.Value.Position.X))) #else if (leftRect.Contains(new Point((int)input.TapGesture.Value.Position.X, (int)input.TapGesture.Value.Position.Y))) #endif { selectionMode = 0; } #if WINDOWS_PHONE if (rightCupRect.Contains(new Point((int)input.TapGesture.Value.Position.Y, ScreenManager.Viewport.Height - (int)input.TapGesture.Value.Position.X))) #else if (rightCupRect.Contains(new Point((int)input.TapGesture.Value.Position.X, (int)input.TapGesture.Value.Position.Y))) #endif { selectedCup++; if (selectedCup == Cups.Count) selectedCup = Cups.Count - 1; else LoadTracks(selectedCup); } #if WINDOWS_PHONE if (leftCupRect.Contains(new Point((int)input.TapGesture.Value.Position.Y, ScreenManager.Viewport.Height - (int)input.TapGesture.Value.Position.X))) #else if (leftCupRect.Contains(new Point((int)input.TapGesture.Value.Position.X, (int)input.TapGesture.Value.Position.Y))) #endif { selectedCup--; if (selectedCup == -1) selectedCup = 0; else LoadTracks(selectedCup); } } #endif } base.HandleInput(input); }
/// <summary> /// Responds to user input, changing the selected entry and accepting /// or cancelling the menu. /// </summary> public override void HandleInput(InputState input) { // we cancel the current menu screen if the user presses the back button PlayerIndex player; if (input.IsNewButtonPress(Buttons.Back, ControllingPlayer, out player)) { OnCancel(player); } if (input.IsMenuCancel(null, out player)) { OnCancel(player); } if (input.IsMenuUp(null)) if(selectedEntry>0) selectedEntry--; if (input.IsMenuDown(null)) if (selectedEntry < menuEntries.Count-1) selectedEntry++; if (input.IsMenuSelect(null, out player)) OnSelectEntry(selectedEntry, PlayerIndex.One); #if WINDOWS_PHONE || WINRT || TOUCH // look for any taps that occurred and select any entries that were tapped foreach (GestureSample gesture in input.Gestures) { if (gesture.GestureType == GestureType.Tap) { // convert the position to a Point that we can test against a Rectangle Point tapLocation = new Point((int)gesture.Position.X, (int)gesture.Position.Y); // iterate the entries to see if any were tapped for (int i = 0; i < menuEntries.Count; i++) { MenuEntry menuEntry = menuEntries[i]; if (GetMenuEntryHitBounds(menuEntry).Contains(tapLocation)) { // select the entry. since gestures are only available on Windows Phone, // we can safely pass PlayerIndex.One to all entries since there is only // one player on Windows Phone. OnSelectEntry(i, PlayerIndex.One); } } } } #endif if (!ScreenManager.IsPhone) { Point mouseLocation = new Point(input.CurrentMouseState.X, input.CurrentMouseState.Y); for (int i = 0; i < menuEntries.Count; i++) { MenuEntry menuEntry = menuEntries[i]; if (GetMenuEntryHitBounds(menuEntry).Contains(mouseLocation)) { selectedEntry = i; // Mouse left click? if (input.CurrentMouseState.LeftButton == ButtonState.Released && input.LastMouseState.LeftButton == ButtonState.Pressed) { // select the entry. since gestures are only available on Windows Phone, // we can safely pass PlayerIndex.One to all entries since there is only // one player on Windows Phone. OnSelectEntry(i, PlayerIndex.One); } } } } }