SusGameSessionScreenContent

Full-bleed оболочка матча — монтирует SusHudRoot через HUD-пресет, session chrome (turn/phase/hint/quit), опциональный result-оверлей.
Пакет
SusGame · Экраны (коммерческий)
Свойства
| Имя | Тип | По умолчанию | |
|---|---|---|---|
TurnNumber | Prop<int> | 1 | |
TurnLabel | Prop<string> | "Turn 1" | |
TurnLabelFormat | Prop<string> | "Turn {0}" | |
Phase | Prop<string> | "deployment" | |
PhaseLabel | Prop<string> | "Deployment" | |
IsPlayerTurn | Prop<bool> | true | |
ActiveAction | Prop<string> | "" | |
ShowResult | Prop<bool> | false | |
ResultText | Prop<string> | "" | |
ActionHint | Prop<string> | "" | |
HintVariant | Prop<string> | "info" | |
Locked | Prop<bool> | false | |
Waiting | Prop<bool> | false | |
WaitingText | Prop<string> | "Waiting for opponent…" | |
InputLocked | Prop<bool> | false | |
ResultOutcome | Prop<string> | "victory" | |
ResultDocked | Prop<bool> | false | |
ResultStaged | Prop<bool> | false | |
ResultEntering | Prop<bool> | false | |
ResultView | Prop<string> | "panel" | |
HudPresetId | Prop<string> | SusHudPresetRegistry.Tactical | |
ContinueText | Prop<string> | "Continue" | |
ObjectivesTitle | Prop<string> | "Objectives" | |
DefaultObjectives | Prop<List<string>> | new List<string> { "Deploy units", "Complete the mission" } |
Слоты
События
Хуки стиля
Контракт USS-классов — внешний вид переопределяется без правки C#. Состояния переключаются этими классами:
sc-gs-actionbarsc-gs-result-overlaysc-gs-topbarsus-flow-hintsus-flow-hint--flushsus-flow-panelsus-game-session-action-btnsus-game-session-screensus-game-session-screen__hintsus-game-session-screen__phase-dotsus-game-session-screen__phase-dot--deploysus-game-session-screen__phase-dot--enemysus-game-session-screen__phase-dot--lootsus-game-session-screen__phase-dot--playersus-game-session-screen__phase-dot--waitsus-game-session-screen__phase-labelsus-game-session-screen__quit-btnsus-game-session-screen__resultsus-game-session-screen__result--dockedsus-game-session-screen__result--matchsus-game-session-screen__result-dimsus-game-session-screen__result-glowsus-game-session-screen__result-glow--coresus-game-session-screen__result-panelsus-game-session-screen__turn-labelsus-game-session-screen__waitingsus-game-session-screen__waiting--opensus-game-session-screen__waiting-textsus-game-session-screen__waiting-tracksus-input-locksus-match-result__expandsus-menu-button
Использование
Привяжите пропы chrome; меняйте HudPresetId или вызывайте ApplyHudPreset, чтобы переключить модули. Подключите QuitBtn / ResultOkBtn со стороны хоста.
<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>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 | Подпись чипа фазы |
ActionHint | Chrome-alert с подсказкой; пусто → скрыт |
ShowResult / ResultText | Видимость оверлея результата + текст |
ResultView | "panel" (по умолчанию) или "match" (см. ниже) |
ContinueText | Подпись ResultOkBtn. По умолчанию "Continue" |
WaitingText | Текст баннера ожидания. По умолчанию "Waiting for opponent…" |
ObjectivesTitle / DefaultObjectives | Заголовок и стартовые строки панели задач пресета |
HudPresetId | При изменении вызывает ApplyHudPreset |
IsPlayerTurn / ActiveAction | Объявленные Prop<> — в текущем пине не подключены к chrome UI |
HudRoot / HudMount | Root + последний результат 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".
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. Если в вашей игре свои имена фаз, сопоставьте их один раз вместо переименования:
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) |