S&box Wiki

Revision Difference

loading_screen#550122

<cat>UI.GameMenu</cat>⤶ <title>Loading Screens</title>⤶ ⤶ # What is a loading screen?⤶ ⤶ Loading screens are shown when entering a game server. During loading the client connects to the server, downloads the game, map and any addons, and then actually joins the game.⤶ ⤶ <upload src="1/8db67e802b34452.jpg" size="23624" name="sbox_0185.jpg" />⤶ ⤶ The loading screen usually shows progress indicating which of these things it's doing. It's also nice to have a cancel button.⤶ ⤶ ⤶ # Defining Your Loading Screen⤶ ⤶ When your game is opened in the menu, we look in your game for a `Panel` or `RootPanel` that implements the `Sandbox.Menu.ILoadingScreenPanel` interface. If we find it, then we create it and that's your loading screen.⤶ ⤶ So to create a loading screen panel in plain c#, you'd do something like this.⤶ ⤶ ```⤶ public class MyMainMenu : RootPanel, Sandbox.Menu.ILoadingScreenPanel⤶ {⤶ public void OnLoadingProgress( Sandbox.Menu.LoadingProgress progress )⤶ {⤶ ⤶ }⤶ }⤶ ```⤶ ⤶ or to define one in Razor you'd do⤶ ⤶ ```⤶ @using Sandbox;⤶ @using Sandbox.UI;⤶ @inherits RootPanel⤶ @implements Sandbox.Menu.ILoadingScreenPanel⤶ ⤶ <root>⤶ ⤶ <div>Loading!</div>⤶ <div>@Progress.Title</div>⤶ ⤶ </root>⤶ ⤶ @code⤶ {⤶ public LoadingProgress Progress;⤶ ⤶ public void OnLoadingProgress( LoadingProgress progress )⤶ {⤶ Progress = progress;⤶ StateHasChanged();⤶ }⤶ }⤶ ⤶ ```⤶ ⤶ From there you can add stylesheets and panels as you would normally define any UI.⤶ ⤶ ⤶ # LoadingProgress⤶ ⤶ The `OnLoadingProgress` method receives a `LoadingProgress` struct from the engine. This holds information on the current load progress.⤶ ⤶ ⤶ # Cancelling⤶ ⤶ To cancel, just call `Game.Menu.CancelLoading()`. You can easily wire a button up to do this in Razor like this.⤶ ⤶ ```⤶ <div class="controls">⤶ <div class="button" onclick="@Game.Menu.CancelLoading">⤶ Cancel⤶ </div>⤶ </div>⤶ ```⤶