Career save status banner UI for the match HUD. Shows a recovered or unsaved-progress message in Russian or English, with retry and acknowledge buttons wired to MatchController.
@using Sandbox
@using Sandbox.UI
@using Socer
@using System
@using System.Linq
@inherits PanelComponent
<root class="career-save-overlay localized-text">
@if(Game?.Career!=null && Game.PersistenceState!=CareerPersistenceState.Healthy)
{
var recovered=Game.PersistenceState==CareerPersistenceState.Recovered;
var blocked=Game.PersistenceState==CareerPersistenceState.RecoveryRequired;
<div class="career-save-banner @(recovered?"recovered":"save-error") @(Game.ClubOpen?"":"in-match")">
<div class="career-save-mark"><label>@(recovered?"✓":"!")</label></div>
<div class="career-save-copy">
<label class="career-save-title">@Text(recovered?"Восстановлено из резервной копии":"Прогресс не сохраняется",recovered?"Restored from backup":"Progress is not being saved")</label>
<label class="career-save-description">@(recovered?Text("Загружена последняя рабочая копия. Недавние изменения могли не сохраниться.","The last working copy was loaded. Recent changes may be missing."):blocked?Text("Сохранение недоступно. Игра работает только в этой сессии; исходные файлы сохранены.","The save is unavailable. This session cannot be saved; the original files are preserved."):Text("Изменения пока только в этой сессии. Повторяем запись автоматически; дождитесь восстановления перед выходом.","Changes exist only in this session. Saving will retry automatically; wait for recovery before leaving."))</label>
@if(blocked && !Game.CanRetryCareerSave){<label class="career-save-return">@Text("Вернитесь в клуб и завершите матч, чтобы повторить восстановление.","Return to the club and finish the match before retrying recovery.")</label>}
</div>
@if(recovered){<button class="career-save-acknowledge" onclick=@(()=>Game.AcknowledgeCareerRecovery())>@Text("Понятно","Got it")</button>}
else{<button class="career-save-retry" disabled="@(!Game.CanRetryCareerSave)" onclick=@(()=>Game.RetryCareerSave())>@(blocked?Text("Повторить восстановление","Retry recovery"):Text("Повторить запись","Retry saving"))</button>}
</div>
}
</root>
@code {
MatchController cachedGame;
MatchController Game
{
get
{
if(cachedGame?.GameObject?.IsValid!=true || cachedGame.Scene!=Scene)
cachedGame=Scene.GetAllComponents<MatchController>().FirstOrDefault();
return cachedGame;
}
}
static string Text(string ru,string en)=>GamePreferences.Russian?ru:en;
protected override int BuildHash()=>HashCode.Combine(Game?.CareerSaveRevision,Game?.PersistenceState,Game?.CanRetryCareerSave,Game?.ClubOpen,GamePreferences.Revision);
}