FMI-Sandbox-01/code/ui/mainmenu/SetupGame.razor
2023-08-29 02:07:30 -04:00

76 lines
1.9 KiB
Plaintext

@using Sandbox;
@using System;
@using System.Linq;
@using System.Threading.Tasks;
@using Sandbox.Menu;
@using Sandbox.UI;
<root>
<label class="game-title">
@Game.Menu.Package.Title
</label>
<div class="controls">
<div class="span">
@if ( MaxPlayersSupported > 1 )
{
<FormGroup class="form-group">
<Label>Maximum Players</Label>
<Control>
<SliderControl ShowRange=@true Min=@(1f) Max=@MaxPlayersSupported Value:bind=@Game.Menu.Lobby.MaxMembers />
</Control>
</FormGroup>
}
<FormGroup class="form-group">
<Label>Map</Label>
<Control>
<SlimPackageCard OnLaunch=@OnMapClicked Package=@MapPackage />
</Control>
</FormGroup>
</div>
<div class="spacer" />
<a class="button" onclick=@Play>Start</a>
<a class="button" href="/">Return</a>
</div>
</root>
@code
{
int MaxPlayersSupported { get; set; } = 1;
int MaxPlayers { get; set; } = 1;
Package MapPackage { get; set; }
void OnMapClicked()
{
Game.Overlay.ShowPackageSelector( "type:map sort:popular", OnMapSelected );
StateHasChanged();
}
void OnMapSelected( Package map )
{
MapPackage = map;
StateHasChanged();
}
protected override async Task OnParametersSetAsync()
{
MaxPlayersSupported = Game.Menu.Package.GetMeta<int>( "MaxPlayers", 1 );
MaxPlayers = MaxPlayersSupported;
MapPackage = await Package.FetchAsync( "facepunch.square", false );
StateHasChanged();
}
async Task Play()
{
await Game.Menu.StartServerAsync( MaxPlayers, $"My game", MapPackage.FullIdent );
}
protected override int BuildHash()
{
return HashCode.Combine( MaxPlayers, MapPackage );
}
}