Coach sidebar UI for a soccer match. Lists active players by team with number, name, stamina and current action, and shows the selected player's decision plus buttons for direct orders, role changes and calming a player.
@using Sandbox
@using Sandbox.UI
@using Socer
@using System
@using System.Linq
@inherits Panel
<root class="coach-sidebar">
<div class="squad-heading"><label>PLAYER CONTROL</label><label class="squad-count">@M.ActivePlayers.Count(p=>p.Team==0) / 11</label></div>
<div class="squad-tabs">
<button class="roster-tab-own @(Opponents?"":"chosen")" onclick=@(()=>Opponents=false)>My team</button>
<button class="roster-tab-opponent @(Opponents?"chosen":"")" onclick=@(()=>Opponents=true)>Opponent</button>
</div>
<div class="roster-list">
@foreach(var p in M.ActivePlayers.Where(p=>p.Team==(Opponents?1:0)).OrderBy(p=>p.Number))
{
var actor=p;
<button class="roster-player [email protected] @(Game.SelectedPlayer==actor.Id?"active":"") @(actor.Team==0 && Game.OrderedPlayer==actor.Id?"ordered":"")" onclick=@(()=>Game.SelectPlayer(actor.Id))>
<span class="roster-number @(actor.Keeper?"goalie":"")">@actor.Number</span>
<span class="roster-identity"><strong>@actor.Profile.Name</strong><small>@(actor.Team==0 && actor.DirectOrder!=DirectOrderKind.None?UiEnglish.Text(M.DirectOrderText(actor),"Following order"):UiEnglish.Text(actor.Action,"In play"))</small></span>
<span class="roster-energy">@((int)(actor.Stamina*100))%</span>
</button>
}
</div>
<div class="decision-readout"><label>@UiEnglish.Text(Selected.Action,"In play")</label><label>@UiEnglish.Text(Selected.DecisionReason,"Reading the game")</label></div>
<div class="order-panel">
<label class="order-eyebrow">@($"ORDER · {ClubIdentity.ShortName(0)} #{Own.Number}")</label>
<label class="order-name">@Own.Profile.Name</label>
<label class="order-current">@UiEnglish.Text(M.DirectOrderText(Own),"Free play")</label>
@if(Game.SelectedPlayer>=11 && !M.Players[Game.SelectedPlayer].SentOff)
{<label class="order-opponent">Target: @M.Players[Game.SelectedPlayer].Profile.Name</label>}
<div class="order-grid">
<div class="order-pair">
<button class="order-press @(Game.AwaitingOrder==DirectOrderKind.PressPlayer?"armed":"")" disabled="@Own.Keeper" onclick=@(()=>Game.BeginDirectOrder(DirectOrderKind.PressPlayer))>Press player</button>
<button class="order-mark @(Game.AwaitingOrder==DirectOrderKind.MarkPlayer?"armed":"")" disabled="@Own.Keeper" onclick=@(()=>Game.BeginDirectOrder(DirectOrderKind.MarkPlayer))>Mark player</button>
</div>
<div class="order-pair">
<button class="order-zone @(Game.AwaitingOrder==DirectOrderKind.GuardZone?"armed":"")" disabled="@Own.Keeper" onclick=@(()=>Game.BeginDirectOrder(DirectOrderKind.GuardZone))>Guard zone</button>
<button class="order-run @(Game.AwaitingOrder==DirectOrderKind.AttackRun?"armed":"")" disabled="@Own.Keeper" onclick=@(()=>Game.BeginDirectOrder(DirectOrderKind.AttackRun))>Run to point</button>
</div>
</div>
<label class="order-prompt">@(Own.Keeper?"The goalkeeper directs the wall and defensive line":Game.OrderPrompt)</label>
<div class="order-bottom">
<button class="order-clear" onclick=@(()=>Game.ClearDirectOrder())>Clear order</button>
@if(Game.AwaitingOrder!=DirectOrderKind.None){<button onclick=@(()=>Game.CancelDirectOrder())>Cancel</button>}
</div>
<button class="role-button" onclick=@(()=>Game.Instruction(Own.Id,(Own.Instruction+1)%4))>Role: @ClubCareer.Orders[Own.Instruction]</button>
@if(Own.Frustration>.4f && !Own.SentOff){<button class="calm-player" onclick=@(()=>M.CalmPlayer(Own.Id))>Calm player</button>}
</div>
</root>
@code {
public MatchController Game {get;set;}
MatchSimulation M=>Game.Match;
Footballer Own=>M.Players[Math.Clamp(Game.OrderedPlayer,0,10)];
Footballer Selected=>M.Players[Math.Clamp(Game.SelectedPlayer,0,21)];
bool Opponents;
protected override int BuildHash()=>Game?.ClubOpen==true?0:Game?.Revision??0;
}