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

118 lines
3.0 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>
@if ( Lobby == null )
{
<div class="controls">
<a class="button">Loading...</a>
<a class="button" href="/lobby/list">Return</a>
</div>
}
else
{
<div class="controls">
<div class="col">
<label>Members (@Lobby.MemberCount/@Lobby.MaxMembers)</label>
<div class="span">
@foreach (var member in Lobby.Members)
{
<img class="avatar" src="avatar:@member.Id" tooltip="@member.Name" />
}
</div>
</div>
@if ( Lobby.Owner.IsMe )
{
<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=@LeaveLobby>Leave Lobby</a>
<a class="button" @onclick=@Start>Start</a>
<a class="button" href="/lobby/list">Return</a>
</div>
}
</root>
@code
{
Friend Owner => Lobby.Owner;
ILobby Lobby => Game.Menu.Lobby;
int MaxPlayersSupported { get; set; } = 1;
Package MapPackage { get; set; }
void OnMapClicked()
{
Game.Overlay.ShowPackageSelector( "type:map sort:popular", OnMapSelected );
StateHasChanged();
}
void OnMapSelected( Package map )
{
MapPackage = map;
Game.Menu.Lobby.Map = map.FullIdent;
StateHasChanged();
}
public void LeaveLobby()
{
Lobby?.Leave();
this.Navigate( "/lobby/list" );
}
async Task Start()
{
await Game.Menu.StartServerAsync( Game.Menu.Lobby.MaxMembers, $"{Game.Menu.Lobby.Owner.Name}'s game", Game.Menu.Lobby.Map );
}
async void FetchPackage()
{
MapPackage = await Package.FetchAsync( Game.Menu.Lobby?.Map ?? "facepunch.square", true );
}
protected override void OnAfterTreeRender( bool firstTime )
{
FetchPackage();
}
protected override void OnParametersSet()
{
MaxPlayersSupported = Game.Menu.Package.GetMeta<int>( "MaxPlayers", 1 );
}
}