/// <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;
 }
Example #6
0
 /// <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;
        }
Example #9
0
 /// <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;
 }
Example #11
0
 /// <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;
 }
Example #12
0
 /// <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;
 }
Example #13
0
 /// <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;
 }
Example #14
0
 /// <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;
 }
Example #15
0
 /// <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;
 }
Example #16
0
 /// <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;
        }
Example #18
0
 /// <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;
        }
Example #20
0
        /// <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;
 }
Example #22
0
 /// <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;
 }