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

SusHudRoot ​

SusHudRoot

Full-bleed оболочка HUD — семь absolute-зон (top / tl / tr / center / bl / br / bottom) для chrome-модулей.

Пакет

SusGame · HUD (коммерческий)

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

SusGame · HUD

Свойства

ИмяТипПо умолчанию
DimmedProp<bool>false
BottomLayoutProp<string>"stack"

Слоты

Имя
top
tl
tr
center
l
r
bl
br
bottom

События

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

Хуки стиля ​

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

  • sus-hidden
  • sus-hud-root
  • sus-hud-root__ability-scroll
  • sus-hud-root__bottom-chrome
  • sus-hud-root__bottom-chrome-center
  • sus-hud-root__bottom-chrome-left
  • sus-hud-root__bottom-chrome-right
  • sus-hud-root__zone
  • sus-hud-root__zone--bl
  • sus-hud-root__zone--bottom
  • sus-hud-root__zone--br
  • sus-hud-root__zone--center
  • sus-hud-root__zone--l
  • sus-hud-root__zone--r
  • sus-hud-root__zone--tl
  • sus-hud-root__zone--top
  • sus-hud-root__zone--tr
  • sus-hud-root__zone--vacant
  • sus-hud-root--bottom-row
  • sus-hud-root--dim
  • sus-scroll
  • sus-slot

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

Собирайте через именованные слоты в XML или монтируйте виджеты из кода через MountIn.

csharp
var root = new SusHudRoot();
root.Dimmed.Value = false;
root.MountIn(SusHudZone.TL, new SusHudPlayerStatus());
root.MountIn(SusHudZone.Bottom, new SusAbilityBar());
root.MountIn(SusHudZone.BR, new SusHudTurnActions());
// root.ClearZones(); // wipe all zone children
xml
<template>
  <sus:SusHudRoot :Dimmed="Dim.Value">
    <template #top><!-- objective / banners --></template>
    <template #tl>
      <sus:SusHudPlayerStatus />
    </template>
    <template #tr>
      <sus:SusHudMenuButton />
    </template>
    <template #center><!-- toasts / confirm overlays --></template>
    <template #bl><!-- prompts --></template>
    <template #br>
      <sus:SusHudTurnActions />
    </template>
    <template #bottom>
      <sus:SusAbilityBar />
    </template>
  </sus:SusHudRoot>
</template>

<script>
public Prop<bool> Dim = new(false);
</script>
Prop / APIРоль
DimmedДобавляет оверлей --dim (rgba-вуаль)
Slots top · tl · tr · center · bl · br · bottomХосты зон
GetZone(SusHudZone)Возвращает VisualElement зоны
MountIn(zone, element)Добавляет ребёнка в зону
ClearZones()Очищает всех детей во всех зонах

Перепривязка зон из скина ​

По умолчанию root сам, в коде, не даёт угловым зонам наезжать на верхнюю и нижнюю: после каждого прохода layout он пишет инлайновый top у TL / TR, инлайновый max-height у Top и инлайновый bottom у BL / BR. Инлайновые стили сильнее USS, поэтому скину, который сам расставляет эти зоны, это нужно отключить. Хватит любого из двух переключателей:

css
.sus-hud-root { --sus-hud-zones-reanchored: 1; }
csharp
hudRoot.ZonesReanchored = true;   // before the first layout pass

Пока переключатель включён, на root стоит sus-hud-root--reanchored, эти инлайновые значения сброшены и больше не пишутся, а угловые зоны расставляет и верхнюю зону ограничивает ваш скин. Боковые рельсы L / R не трогаются никогда.

Нижняя зона в один ряд ​

BottomLayout = "row" (по умолчанию "stack") ставит нижние модули в один ряд, прижатый к правому краю, и скрывает пустую левую колонку ряда оружия и хода (класс sus-hud-root--bottom-row). Пресет задаёт это через SusHudPreset.BottomLayout (null оставляет значение root).

Заметки ​

  • Root и пустые зоны используют PickingMode.Ignore, чтобы клики по карте проходили насквозь; интерактивные дети сохраняют дефолтный picking.
  • Зоны — это absolute flex-оболочки; размещайте модули через Assembler / SusHudModuleKind или монтируйте вручную.
  • SusHudZone: Top, TL, TR, Center, BL, BR, Bottom.