К содержимому

SusGameSessionScreenContent ​

SusGameSessionScreenContent

Full-bleed оболочка матча — монтирует SusHudRoot через HUD-пресет, session chrome (turn/phase/hint/quit), опциональный result-оверлей.

Пакет

SusGame · Экраны (коммерческий)

Открыть в песочнице

SusGame · Screens

Свойства

ИмяТипПо умолчанию
TurnNumberProp<int>1
TurnLabelProp<string>"Turn 1"
TurnLabelFormatProp<string>"Turn {0}"
PhaseProp<string>"deployment"
PhaseLabelProp<string>"Deployment"
IsPlayerTurnProp<bool>true
ActiveActionProp<string>""
ShowResultProp<bool>false
ResultTextProp<string>""
ActionHintProp<string>""
HintVariantProp<string>"info"
LockedProp<bool>false
WaitingProp<bool>false
WaitingTextProp<string>"Waiting for opponent…"
InputLockedProp<bool>false
ResultOutcomeProp<string>"victory"
ResultDockedProp<bool>false
ResultStagedProp<bool>false
ResultEnteringProp<bool>false
ResultViewProp<string>"panel"
HudPresetIdProp<string>SusHudPresetRegistry.Tactical
ContinueTextProp<string>"Continue"
ObjectivesTitleProp<string>"Objectives"
DefaultObjectivesProp<List<string>>new List<string> { "Deploy units", "Complete the mission" }

Слоты

Слотов нет.

События

Публичных событий нет.

Хуки стиля ​

Контракт USS-классов — внешний вид переопределяется без правки C#. Состояния переключаются этими классами:

  • sc-gs-actionbar
  • sc-gs-result-overlay
  • sc-gs-topbar
  • sus-flow-hint
  • sus-flow-hint--flush
  • sus-flow-panel
  • sus-game-session-action-btn
  • sus-game-session-screen
  • sus-game-session-screen__hint
  • sus-game-session-screen__phase-dot
  • sus-game-session-screen__phase-dot--deploy
  • sus-game-session-screen__phase-dot--enemy
  • sus-game-session-screen__phase-dot--loot
  • sus-game-session-screen__phase-dot--player
  • sus-game-session-screen__phase-dot--wait
  • sus-game-session-screen__phase-label
  • sus-game-session-screen__quit-btn
  • sus-game-session-screen__result
  • sus-game-session-screen__result--docked
  • sus-game-session-screen__result--match
  • sus-game-session-screen__result-dim
  • sus-game-session-screen__result-glow
  • sus-game-session-screen__result-glow--core
  • sus-game-session-screen__result-panel
  • sus-game-session-screen__turn-label
  • sus-game-session-screen__waiting
  • sus-game-session-screen__waiting--open
  • sus-game-session-screen__waiting-text
  • sus-game-session-screen__waiting-track
  • sus-input-lock
  • sus-match-result__expand
  • sus-menu-button

Использование ​

Привяжите пропы chrome; меняйте HudPresetId или вызывайте ApplyHudPreset, чтобы переключить модули. Подключите QuitBtn / ResultOkBtn со стороны хоста.

xml
<template>
  <sus:SusGameSessionScreenContent
    :TurnNumber="Turn.Value"
    :TurnLabel="TurnLbl.Value"
    :Phase="PhaseId.Value"
    :PhaseLabel="PhaseLbl.Value"
    :ActionHint="Hint.Value"
    :ShowResult="ShowEnd.Value"
    :ResultText="Result.Value"
    :HudPresetId="Preset.Value"
  />
</template>

<script>
public Prop<int> Turn = new(1);
public Prop<string> TurnLbl = new("Turn 1");
public Prop<string> PhaseId = new("deployment");
public Prop<string> PhaseLbl = new("Deployment");
public Prop<string> Hint = new("");
public Prop<bool> ShowEnd = new(false);
public Prop<string> Result = new("");
public Prop<string> Preset = new(SusHudPresetRegistry.Deployment);
</script>
csharp
var session = new SusGameSessionScreenContent();
session.HudPresetId.Value = SusHudPresetRegistry.Tactical;
session.ApplyHudPreset(SusHudPresetRegistry.Tactical);
// After mount — AbilityBar / MinimapFrame / ObjectivePanel from HudMount
session.TurnNumber.Value = 3;
session.PhaseLabel.Value = "Action";
session.ActionHint.Value = "Select a unit";
session.ShowResult.Value = true;
session.ResultText.Value = "Victory";
session.QuitBtn.OnClick += () => { /* confirm quit */ };
session.ResultOkBtn.OnClick += () => { /* dismiss result */ };
Prop / APIРоль
TurnNumber / TurnLabelЧип хода. TurnLabel следует TurnLabelFormat, пока вы не запишете свою подпись
TurnLabelFormatФормат чипа хода, {0} = TurnNumber. По умолчанию "Turn {0}"
Phase / PhaseLabelПодпись чипа фазы
ActionHintChrome-alert с подсказкой; пусто → скрыт
ShowResult / ResultTextВидимость оверлея результата + текст
ResultView"panel" (по умолчанию) или "match" (см. ниже)
ContinueTextПодпись ResultOkBtn. По умолчанию "Continue"
WaitingTextТекст баннера ожидания. По умолчанию "Waiting for opponent…"
ObjectivesTitle / DefaultObjectivesЗаголовок и стартовые строки панели задач пресета
HudPresetIdПри изменении вызывает ApplyHudPreset
IsPlayerTurn / ActiveActionОбъявленные Prop<> — в текущем пине не подключены к chrome UI
HudRoot / HudMountRoot + последний результат SusHudAssembler.Apply
AbilityBar / MinimapFrame / ObjectivePanelСсылки из mount (могут быть null в зависимости от пресета)
MatchResult / ReconnectOverlay / TurnBannerВстроенные части (см. их страницы)
QuitBtn / ResultOkBtn / ActionBarПодключение со стороны хоста
ApplyHudPreset(id)Повторно применяет assembler + пересобирает session chrome
SetPhaseAliases(map) / CanonicalPhase(phase)Сопоставить свои имена фаз со стилизованными ключами фаз
ShowReconnect(deadlineSeconds, text) / ShowReconnectFailed(onRetry, onLeave, text)Оверлей переподключения с дедлайном / с повтором и выходом

Вид результата ​

ResultView = "panel" (по умолчанию) оставляет простую панель результата: подпись и ResultOkBtn. ResultView = "match" вместо неё показывает карточку результата матча и переносит тот же экземпляр ResultOkBtn (имя, классы и обработчик клика сохраняются) в начало ряда действий карточки; переключение обратно на "panel" возвращает его на место. Любое другое значение считается "panel".

csharp
session.ResultView.Value = "match";
session.MatchResult.Title.Value = "Victory";
session.MatchResult.DockText.Value = "Collect loot"; // secondary action: fold the card into the side panel
session.ShowResult.Value = true;

Нажатие кнопки DockText ставит ResultDocked = true. Корень оверлея в виде match получает sus-game-session-screen__result--match.

Когда content работает внутри SusGameSessionScreen, его ShowVictory(details), ShowDefeat(details) и ShowDraw(details) заполняют карточку в виде match: MatchResult.Title получает переведённую строку исхода, которую панель показывает по умолчанию («Victory!», «Defeat», «Draw»; она следует локали), MatchResult.Reason получает details как есть (пустое значение скрывает строку), а ResultOutcome становится victory, defeat или draw. Title или Reason, записанные вами, никогда не перезаписываются, поэтому в примере выше ваше "Victory" остаётся. Kicker, SetSummary, SetGrowth и SetRank остаются вашими. Результат, показанный в виде panel, переносится в карточку, когда вы переключаете ResultView на "match".

Псевдонимы фаз ​

Чип фазы стилизуется небольшим набором ключей фаз: player, enemy, wait, deploy, loot. Если в вашей игре свои имена фаз, сопоставьте их один раз вместо переименования:

csharp
session.SetPhaseAliases(new Dictionary<string, string>
{
    ["combat"] = "player",
    ["turn-pending"] = "wait",
});

Фаза сначала ищется в карте, затем сверяется с ключами; фаза, которой нет ни там, ни там, сохраняет нейтральный вид. Новая карта заменяет предыдущую, null или пустая очищает её, а текущая Phase сразу перестилизуется. Встроенных синонимов нет. У экрана роутера SusGameSessionScreen есть такой же SetPhaseAliases.

Переподключение ​

ShowReconnect(deadlineSeconds) показывает состояние переподключения с обратным отсчётом, а ShowReconnectFailed(onRetry, onLeave) — состояние сбоя с двумя действиями. Оба передают вызов встроенному оверлею переподключения, где живут OnDeadline, TimerFormat и тексты кнопок.

Локализованные строки ​

Тексты по умолчанию этого экрана (формат хода, фаза, баннер ожидания, кнопка продолжения, задачи) и экрана роутера SusGameSessionScreen (кнопка выхода, строки результата, имена фаз) идут через String Table SusGame. Значение, заданное вами, всегда побеждает. См. Локализованные строки.

На экране роутера route prop resultLabel применяется, только если маршрут его задаёт; иначе текст кнопки берётся из ContinueText и его перевода.

Заметки ​

  • Пресет по умолчанию — SusHudPresetRegistry.Deployment. Пустой id откатывается к Tactical.
  • ApplyHudPreset заполняет панель задач значениями DefaultObjectives (Deploy units / Complete the mission), пока хост не вызовет ObjectivePanel.SetObjectives — замените их для реальных миссий.
  • Session chrome ожидает кастомный хост session-chrome из пресета; иначе монтируется в TL.

Замена самодельных обходов ​

Если ваш проект раньше пересобирал части этого экрана вручную, перейдите на встроенный API:

Самодельный обходВстроенный API
Записывать текст кнопки результата после показа оверлеяContinueText (route prop resultLabel — только если задан)
Самому переводить «Turn N», кнопки хода, баннер и тексты переподключенияTurnLabelFormat и текстовые props частей HUD, все в таблице SusGame
Прятать старую панель результата, переносить её кнопку, заполнять иконку кнопки раскрытияResultView = "match", MatchResult.DockText, ExpandIcon по умолчанию
Свой таймер и прогресс переподключенияShowReconnect(deadlineSeconds), ShowReconnectFailed(onRetry, onLeave), TimerFormat / OnDeadline оверлея
Сопоставлять свои имена фаз со своими ключами стиляSetPhaseAliases(map)