Broadcast match console panel. Shows tempo and approach controls with sliders, a minimap of player and ball positions, and team direction.
@using Sandbox
@using Sandbox.UI
@using Socer
@using System
@inherits Panel
<root class="match-console localized-text @(Expanded || TutorialPlan?"expanded":"")">
<div class="match-plan-controls">
<button class="plan-summary" onclick=@(()=>Expanded=!Expanded)><label>@Text("Tempo","Темп")</label><div class="summary-meter">@for(int i=0;i<10;i++){<div class="@(i<M.TeamTempo[0]*10?"filled":"")"></div>}</div><label class="summary-value">@TempoName</label></button>
<div class="plan-expanded"><BroadcastPlanSlider Game="@Game" Tempo="@true" /><div class="plan-endpoints"><label>@Text("Patient","Спокойный")</label><label>@Text("Fast","Быстрый")</label></div></div>
<button class="plan-summary" onclick=@(()=>Expanded=!Expanded)><label>@Text("Approach","Настрой")</label><div class="summary-meter">@for(int i=0;i<10;i++){<div class="@(i<M.TeamMentality[0]*10?"filled":"")"></div>}</div><label class="summary-value">@MentalityName</label></button>
<div class="plan-expanded"><BroadcastPlanSlider Game="@Game" Tempo="@false" /><div class="plan-endpoints"><label>@Text("Deep defence","Глухая оборона")</label><label>@Text("Press & attack","Прессинг и атака")</label></div><label class="effort-note">@Text("Higher intensity uses more stamina","Высокая интенсивность расходует больше сил")</label></div>
</div>
<div class="match-minimap">
<div class="map-pitch"><div class="map-half"></div><div class="map-circle"></div><div class="map-box home"></div><div class="map-box away"></div><div class="map-small-box home"></div><div class="map-small-box away"></div>
@foreach(var p in M.ActivePlayers){<div @key="p.Id" class="map-player @(p.Team==0?"home":"away") @(p.Id==M.Owner?"possessor":"")" style="@At(p.Position)"></div>}
<div class="map-ball" style="@At(M.Ball)"></div>
</div>
<div class="map-legend"><div class="map-key home"></div><label>@ClubIdentity.ShortName(M.HomeName)</label><label class="map-direction">@(M.Direction(0)>0?"→":"←")</label><div class="map-key away"></div><label>@ClubIdentity.ShortName(M.AwayName)</label></div>
</div>
</root>
@code {
public MatchController Game {get;set;}
public bool Expanded {get;set;}
bool TutorialPlan=>Game?.MatchTutorialActive==true && Game.MatchTutorialLesson?.Key=="plan";
MatchSimulation M=>Game.Match;
static string Text(string en,string ru)=>GamePreferences.Russian?ru:en;
string TempoName=>M.TeamTempo[0]<.25f?Text("Patient","Спокойный"):M.TeamTempo[0]>.75f?Text("Fast","Быстрый"):Text("Moderate","Умеренный");
string MentalityName=>M.TeamMentality[0]<.25f?Text("Defence","Оборона"):M.TeamMentality[0]>.75f?Text("Attack","Атака"):M.TeamMentality[0]<.45f?Text("Cautious","Осторожно"):M.TeamMentality[0]>.55f?Text("Pressure","Давление"):Text("Balanced","Баланс");
static string At(Point p)=>FormattableString.Invariant($"left:{Math.Clamp(p.X/105*100,0,100):0.00}%;top:{Math.Clamp(p.Y/68*100,0,100):0.00}%;");
protected override int BuildHash()=>HashCode.Combine(Game?.Match,(int)(Time.Now*10),Expanded,TutorialPlan,GamePreferences.Revision);
}