/// <summary> /// Event handler for when the resolution setting is toggled. /// </summary> /// <param name="sender">Sender object.</param> /// <param name="e">Event arguments.</param> void ResolutionMenuEntrySelected(object sender, PlayerInputEventArgs e) { currentResolution = ((MenuEntry)sender).Text; string[] dimensions = currentResolution.Split(resolutionDelimiters); int width = int.Parse(dimensions[0]), height = int.Parse(dimensions[1]); Form gameWindow = Form.FromHandle(((ProjectSkyCrane)ScreenManager.Game).Window.Handle).FindForm(); gameWindow.Size = new Size(width, height); // Set the window size if (Screen.PrimaryScreen.Bounds.Width == width) // Set the new X coordinates { gameWindow.Left = 0; } else { gameWindow.Left = (Screen.PrimaryScreen.Bounds.Width - width) / 2; } if (Screen.PrimaryScreen.Bounds.Height == height) // Set the new Y coordinates { gameWindow.Top = 0; } else { gameWindow.Top = (Screen.PrimaryScreen.Bounds.Height - height) / 2; } return; }
/// <summary> /// Event handler for when the SFX volume is turned up or down. /// </summary> void SoundFXVolumeMenuEntrySelected(object sender, PlayerInputEventArgs e) { if (e.ToggleDirection != 0) { soundFXVolume += e.ToggleDirection * VOLUME_DELTA; if (soundFXVolume > MAX_VOLUME) // Toggle the volume { soundFXVolume = MIN_VOLUME; } else if (soundFXVolume < MIN_VOLUME) { soundFXVolume = MAX_VOLUME; } SoundEffect.MasterVolume = (float)soundFXVolume / (float)MAX_VOLUME; SetMenuEntryText(); } return; }
/// <summary> /// Event handler for when the SFX are turned on or off. /// </summary> void SoundFXOnEntrySelected(object sender, PlayerInputEventArgs e) { if (e.ToggleDirection != 0) { soundFXOn += e.ToggleDirection; if (soundFXOn < OnOff.Off) // Toggle the values { soundFXOn = OnOff.On; } else if (soundFXOn > OnOff.On) { soundFXOn = OnOff.Off; } if (soundFXOn == OnOff.On) // Potentially re-enable or disable sound { SoundEffect.MasterVolume = (float)soundFXVolume / (float)MAX_VOLUME; soundFXVolumeMenuEntry.Enabled = true; } else { SoundEffect.MasterVolume = 0; soundFXVolumeMenuEntry.Enabled = false; } SetMenuEntryText(); } return; }
/// <summary> /// Event handler for when the resolution setting is toggled. /// </summary> /// <param name="sender">Sender object.</param> /// <param name="e">Event arguments.</param> void ResolutionMenuEntrySelected(object sender, PlayerInputEventArgs e) { ScreenManager.AddScreen(new ResolutionsMenuScreen()); return; }
/// <summary> /// Event handler for when the music volume is turned up or down. /// </summary> void MusicVolumeMenuEntrySelected(object sender, PlayerInputEventArgs e) { if (e.ToggleDirection != 0) { musicVolume += e.ToggleDirection * VOLUME_DELTA; if (musicVolume > MAX_VOLUME) { musicVolume = MIN_VOLUME; } else if (musicVolume < MIN_VOLUME) { musicVolume = MAX_VOLUME; } MediaPlayer.Volume = (float)musicVolume / (float)MAX_VOLUME; SetMenuEntryText(); } return; }
/// <summary> /// Event handler for when the Play Game menu entry is selected. /// </summary> void MultiplayerMenuEntrySelected(object sender, PlayerInputEventArgs e) { ScreenManager.AddScreen(new MultiplayerMenuScreen()); return; }
/// <summary> /// Event handler for when the Play Game menu entry is selected. /// </summary> void HostPortMenuEntrySelected(object sender, PlayerInputEventArgs e) { TypingInput = true; return; }
/// <summary> /// Event handler for when the Play Game menu entry is selected. /// </summary> void ContinueMenuEntrySelected(object sender, PlayerInputEventArgs e) { int port; if (!int.TryParse(hostPort.ToString(), out port) || port <= MIN_PORT || port >= MAX_PORT) { return; } if (host) // We are hosting, immediately jump into the character select { try { ((ProjectSkyCrane)ScreenManager.Game).RawServer = new NetCode.RawServer(port); } catch // Something crazy happened, error out { return; } ScreenManager.AddScreen(new CharacterSelectMenuScreen(true, true)); } else // Start up a client and try connecting to the host { string hostAddressString = hostAddress.ToString().Trim(); if (string.IsNullOrWhiteSpace(hostAddressString)) // Sanity { return; } try { ((ProjectSkyCrane)ScreenManager.Game).RawClient = new NetCode.RawClient(); ((ProjectSkyCrane)ScreenManager.Game).RawClient.connect(hostAddressString, port); } catch // Something crazy happened, error out { return; } ScreenManager.AddScreen(new CharacterSelectMenuScreen(false, true)); } return; }
/// <summary> /// Helper overload makes it easy to use OnCancel as a MenuEntry event handler. /// </summary> protected virtual void OnCancel(object sender, PlayerInputEventArgs e) { OnCancel(); return; }
/// <summary> /// Event handler for when the Play Game menu entry is selected. /// </summary> void JoinGameMenuEntrySelected(object sender, PlayerInputEventArgs e) { ScreenManager.AddScreen(new HostSettingsMenuScreen(false)); return; }
/// <summary> /// Event handler for when the user selects ok on the "are you sure /// you want to quit" message box. This uses the loading screen to /// transition from the game back to the main menu screen. /// </summary> void ConfirmQuitMessageBoxAccepted(object sender, PlayerInputEventArgs e) { LoadingScreen.Load(ScreenManager, false, null, new BackgroundScreen(), new MainMenuScreen()); return; }
/// <summary> /// Resume playback when cancelling. /// </summary> /// <param name="sender">Object sender.</param> /// <param name="e">Event arguments.</param> protected override void OnCancel(object sender, PlayerInputEventArgs e) { MediaPlayer.Resume(); base.OnCancel(sender, e); return; }
/// <summary> /// Event handler for when the Quit Game menu entry is selected. /// </summary> void QuitGameMenuEntrySelected(object sender, PlayerInputEventArgs e) { const string message = "Quit to main menu?"; MessageBoxScreen confirmQuitMessageBox = new MessageBoxScreen(message); confirmQuitMessageBox.Accepted += ConfirmQuitMessageBoxAccepted; ScreenManager.AddScreen(confirmQuitMessageBox); return; }
/// <summary> /// Event handler for when the Play Game menu entry is selected. /// </summary> void NewGameMenuEntrySelected(object sender, PlayerInputEventArgs e) { ScreenManager.AddScreen(new CharacterSelectMenuScreen(true, false)); return; }
/// <summary> /// Event handler for when the vsync setting is toggled. /// </summary> /// <param name="sender">Sender object.</param> /// <param name="e">Event arguments.</param> void VsyncOnMenuEntrySelected(object sender, PlayerInputEventArgs e) { if (e.ToggleDirection != 0) { vsyncOn += e.ToggleDirection; if (vsyncOn < OnOff.Off) { vsyncOn = OnOff.On; } else if (vsyncOn > OnOff.On) { vsyncOn = OnOff.Off; } ((ProjectSkyCrane)ScreenManager.Game).GraphicsDeviceManager.SynchronizeWithVerticalRetrace = vsyncOn == OnOff.On; SetMenuEntryText(); } return; }
/// <summary> /// Event handler for when the borderless setting is toggled. /// </summary> /// <param name="sender">Sender object.</param> /// <param name="e">Event arguments.</param> void BorderlessOnMenuEntrySelected(object sender, PlayerInputEventArgs e) { if (e.ToggleDirection != 0) { borderlessOn += e.ToggleDirection; if (borderlessOn < OnOff.Off) { borderlessOn = OnOff.On; } else if (borderlessOn > OnOff.On) { borderlessOn = OnOff.Off; } if (borderlessOn == OnOff.On) // Sneakily adjust the border through the handle { Form.FromHandle(((ProjectSkyCrane)ScreenManager.Game).Window.Handle).FindForm().FormBorderStyle = FormBorderStyle.None; } else { Form.FromHandle(((ProjectSkyCrane)ScreenManager.Game).Window.Handle).FindForm().FormBorderStyle = FormBorderStyle.FixedSingle; } SetMenuEntryText(); } return; }
/// <summary> /// Event handler for when the Play Game menu entry is selected. /// </summary> void StartGameMenuEntrySelected(object sender, PlayerInputEventArgs e) { if (e.MenuAccept) // Handle character selection and game starting { if (!characterSelectionsLocked[playerId]) // Unlock a player { characterSelectionsLocked[playerId] = true; if (multiplayer) // Only broadcast in multiplayer mode { if (host) // Broadcast lock changes to all players { HostBroadcastLocks(); } else // Inform the host of a lock change { MenuState lockPacket = new MenuState(MenuState.Type.LockCharacter, playerId, (int)MenuState.LockCharacterDetails.Locked); ((ProjectSkyCrane)ScreenManager.Game).RawClient.sendMSC(lockPacket); } } } else if (host && AllLocked()) { if (multiplayer) // Only broadcast in multiplayer mode { HostBroadcastGameStart(); } LoadingScreen.Load(ScreenManager, false, new GameplayScreen(host, multiplayer, NumConnectedPlayers(), playerId, characterSelections, playerIdToConnectionHash)); } menuSelectSoundEffect.Play(); } else if (!characterSelectionsLocked[playerId] && e.ToggleDirection != 0) // Do some toggling of character selections { characterSelections[playerId] += e.ToggleDirection; if (characterSelections[playerId] < 0) { characterSelections[playerId] = (PlayerCharacter.Type)(characters.Length - 1); } else if ((int)characterSelections[playerId] >= characters.Length) { characterSelections[playerId] = 0; } if (multiplayer) // Only broadcast in multiplayer mode { if (host) // Broadcast sprite changes to all players { HostBroadcastSprites(); } else // Inform the host of a sprite change { MenuState spritePacket = new MenuState(MenuState.Type.SelectCharacter, playerId, (int)characterSelections[playerId]); ((ProjectSkyCrane)ScreenManager.Game).RawClient.sendMSC(spritePacket); } } menuScrollSoundEffect.Play(); } return; }
/// <summary> /// Event handler for when the fullscreen setting is toggled. /// </summary> /// <param name="sender">Sender object.</param> /// <param name="e">Event arguments.</param> void FullScreenOnMenuEntrySelected(object sender, PlayerInputEventArgs e) { if (e.ToggleDirection != 0) { ((ProjectSkyCrane)ScreenManager.Game).GraphicsDeviceManager.ToggleFullScreen(); fullScreenOn += e.ToggleDirection; if (fullScreenOn < OnOff.Off) { fullScreenOn = OnOff.On; } else if (fullScreenOn > OnOff.On) { fullScreenOn = OnOff.Off; } resolutionMenuEntry.Enabled = fullScreenOn == OnOff.Off; borderlessOnMenuEntry.Enabled = fullScreenOn == OnOff.Off; SetMenuEntryText(); } return; }
/// <summary> /// Event handler for typing this into the host address. /// </summary> void HostAddressMenuEntryTyped(object sender, PlayerInputEventArgs e) { bool resetText = false; if (e.KeysTyped != string.Empty && hostAddress.Length < MAX_ADDRESS_LENGTH) // Add a character { typingSoundEffect.Play(); hostAddress.Append(e.KeysTyped); resetText = true; } if (e.TypingBackspace && hostAddress.Length > 0) // Remove a character { typingSoundEffect.Play(); hostAddress.Remove(hostAddress.Length - 1, 1); resetText = true; } if (e.TypingAccepted) // User has entered a value { menuSelectSoundEffect.Play(); lastAddress = hostAddress.ToString(); } else if (e.TypingCancelled) // User has cancelled their input { menuCancelSoundEffect.Play(); hostAddress.Clear(); hostAddress.Append(lastAddress); resetText = true; } if (resetText) // Update the on-screen text { SetMenuEntryText(); } return; }
/// <summary> /// Event handler for when the music is turned on or off. /// </summary> void MusicOnMenuEntrySelected(object sender, PlayerInputEventArgs e) { if (e.ToggleDirection != 0) { musicOn += e.ToggleDirection; if (musicOn < OnOff.Off) { musicOn = OnOff.On; } else if (musicOn > OnOff.On) { musicOn = OnOff.Off; } if (musicOn == OnOff.On) // Toggle the muted values and associated menus { MediaPlayer.IsMuted = false; musicVolumeMenuEntry.Enabled = true; } else { MediaPlayer.IsMuted = true; musicVolumeMenuEntry.Enabled = false; } SetMenuEntryText(); } return; }
/// <summary> /// Event handler for typing this into the host address. /// </summary> void HostPortMenuEntryTyped(object sender, PlayerInputEventArgs e) { bool resetText = false; if (e.KeysTyped != string.Empty && hostPort.Length < MAX_PORT_LENGTH) // Add a character { for (int i = 0; i < e.KeysTyped.Length; i += 1) { if (char.IsDigit(e.KeysTyped[i])) { hostPort.Append(e.KeysTyped[i]); resetText = true; } } if (resetText) // If at least a key was found, type it { typingSoundEffect.Play(); } } if (e.TypingBackspace && hostPort.Length > 0) // Remove a character { typingSoundEffect.Play(); hostPort.Remove(hostPort.Length - 1, 1); resetText = true; } if (e.TypingAccepted) // User has entered a value { menuSelectSoundEffect.Play(); lastPort = hostPort.ToString(); } else if (e.TypingCancelled) // User has cancelled their input { menuCancelSoundEffect.Play(); hostPort.Clear(); hostPort.Append(lastPort); resetText = true; } if (resetText) // Update the on-screen text { SetMenuEntryText(); } return; }
/// <summary> /// Event handler for when the user selects ok on the "are you sure /// you want to exit" message box. /// </summary> void ConfirmExitMessageBoxAccepted(object sender, PlayerInputEventArgs e) { ScreenManager.Game.Exit(); return; }