The game setup UI panel. It displays and manages configuration options for a match, such as setting the number of AI opponents, defining their difficulty, and initiating the game.
@namespace CitySim
@using CitySim.DesignSystem
@using CitySim.Ai
@using CitySim.Match
@using CitySim.Punchboard
@inherits MatchPanel
<root class="overlay game-setup-stage">
<div class="game-setup-layout" style=@($"max-width: {PlayerPreferences.SurfacePixels(1040)};")><PlotterSurface Kind=@(PbPanelKind.Raised) Corner=@true><ChildContent>
<div class="game-setup-content">
<div class="game-setup-title">@(GameText.Get("ui.game_setup_panel.game_setup"))</div>
<div class="game-setup-count"><div>@(GameText.Get("ui.game_setup_panel.ai_opponents"))</div><div class="game-setup-count-buttons">
@for(var i=1;i<=SoloSetup.MaximumOpponents;i++) { var count=i; <PlotterButton [email protected]() Kind=@(PbButtonKind.Secondary) Toggled=@(City.GameSetup.OpponentCount==count) Clicked=@(()=>City.SetOpponentCount(count)) /> }
</div></div>
<div class="game-setup-roster">
@foreach(var opponent in City.GameSetup.Opponents.Take(City.GameSetup.OpponentCount)) {
<div class="opponent-row" @key=opponent.Seat>
<div class="opponent-seat" style="background-color: @Pb.Rgba(PlayerColours.ForSeat(opponent.Seat+1))">@(opponent.Seat+1)</div>
<div class="opponent-name-field"><div class="opponent-field-label">@(GameText.Get("ui.opponent_name_entry.name"))</div><OpponentNameEntry City=@City Opponent=@opponent /></div>
<div class="opponent-difficulty"><div class="opponent-field-label">@(GameText.Get("ui.game_setup_panel.difficulty"))</div><div class="opponent-difficulty-buttons">
@foreach(var level in Enum.GetValues<BotDifficulty>()) { var difficulty=level; <PlotterButton Text=@(GameText.EnumLabel(difficulty)) Size=@(PbSize.Small) Kind=@(PbButtonKind.Secondary) Toggled=@(opponent.Difficulty==difficulty) Clicked=@(()=>City.EditOpponent(opponent.Seat,opponent.Name,difficulty)) /> }
</div></div>
</div>
}
</div>
<div class="game-setup-actions"><PlotterButton Text=@(GameText.Get("ui.game_setup_panel.back")) Kind=@(PbButtonKind.Ghost) Clicked=@(()=>City.Screens.Pop()) /><PlotterButton Text=@(GameText.Get("ui.game_setup_panel.randomize_names")) Kind=@(PbButtonKind.Ghost) Clicked=@(()=>City.RandomizeOpponentNames()) /><PlotterButton CssClass="primary" Text=@(GameText.Get("ui.game_setup_panel.start_game")) Clicked=@(()=>City.RequestStart(GameMode.Match)) /></div>
</div>
</ChildContent></PlotterSurface></div>
</root>
@code {
protected override void Subscribe() { if(City!=null) City.UiChanged+=Refresh; }
protected override void Unsubscribe() { if(City!=null) City.UiChanged-=Refresh; }
}