S&box Wiki

Revision Difference

creating_a_gamemenu#550109

<cat>UI.GameMenu</cat>⤶ <title>Creating A Game Menu</title>⤶ ⤶ # What is a game menu?⤶ ⤶ Not all games are created equal, so it's hard for us to create a menu screen that is suitable for all types of games. But that's cool because we let you create your own 100% custom menu.⤶ ⤶ Your game menu is responsible for setting the mood of your game and presenting options to help your players get started. ⤶ ⤶ The simplest menu would just contain a "start game" option. From there you can scale into creating and finding servers, lobbies, statistics, character customization, settings, update news etc.⤶ ⤶ # Defining Your Menu⤶ ⤶ When your game is opened in the menu, we look in your game for a `Panel` or `RootPanel` that implements the `Sandbox.Menu.IGameMenuPanel` interface. If we find it, then we create it and that's your main menu.⤶ ⤶ So to create a main menu panel in plain c#, you'd do something like this.⤶ ⤶ ```⤶ public class MyMainMenu : RootPanel, Sandbox.Menu.IGameMenuPanel⤶ {⤶ ⤶ }⤶ ```⤶ ⤶ or to define one in Razor you'd do⤶ ⤶ ```⤶ @using Sandbox;⤶ @using Sandbox.UI;⤶ @inherits RootPanel⤶ @implements Sandbox.Menu.IGameMenuPanel⤶ ⤶ <root>⤶ ⤶ <div>Deathmatch 98</div>⤶ ⤶ </root>⤶ ⤶ ```⤶ ⤶ From there you can add stylesheets and panels as you would normally define any UI.⤶ ⤶ ⤶ # Doing Stuff⤶ ⤶ Most interactions you're going to do with the game menu are available via the `Game.Menu` global.⤶ ⤶ ```⤶ ⤶ // Print the current game package name⤶ Log.Info( Game.Menu.Package.DisplayName );⤶ ⤶ ⤶ // Create a new lobby⤶ await Game.Menu.CreateLobbyAsync();⤶ ⤶ // Name the lobby⤶ Game.Menu.Lobby.Title = "My Awesome Lobby";⤶ ⤶ // Leave the lobby⤶ Game.Menu.Lobby.Leave();⤶ ⤶ // Connect to a server⤶ Game.Menu.ConnectToServer( server );⤶ ⤶ // Start a server⤶ Game.Menu.StartServerAsync( 8, "My Server", "facepunch.square" );⤶ ⤶ // Hide the menu, show the game⤶ Game.Menu.HideMenu();⤶ ⤶ // Close the game, return to s&box⤶ Game.Menu.Close();⤶ ```⤶ ⤶ ⤶ # Reference⤶ ⤶ The default "scaffolding" main menu is available in the base addon. If you're wondering how to do something, it might be a good idea to look in there for how we've already done it.⤶ ⤶ <upload src="1/8db65cf6caa2185.png" size="30346" name="image.png" />