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

SusAbilityBar ​

SusAbilityBar

Горизонтальная полоса способностей — пересобирает дочерние SusAbilitySlot, заполняет из SusHudAbilityData, цифры 1…N активируют вне hold-режима.

Пакет

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

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

SusGame · HUD

Свойства

ИмяТипПо умолчанию
SlotCountProp<int>4
UseHoldProp<bool>false
KeyScopeProp<string>"focus"

Слоты

Слотов нет.

События

ИмяПолеPayload
AbilityActivatedOnAbilityActivatedint
AbilityHoldCompleteOnAbilityHoldCompleteint

Хуки стиля ​

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

  • sus-ability-bar
  • sus-hidden

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

Управляйте содержимым слотов из кода через SetAbilities. XML задаёт только пропы layout/режима.

csharp
var bar = new SusAbilityBar();
bar.SlotCount.Value = 4;
bar.UseHold.Value = false;
bar.OnAbilityActivated += index => { /* cast / spend AP */ };
bar.OnAbilityHoldComplete += index => { /* charged cast */ };

bar.SetAbilities(new List<SusHudAbilityData>
{
    new() { Id = "strike", Icon = "sword", Title = "Strike", Keybind = "1" },
    new() { Id = "heal", Icon = "plus", Title = "Heal", Cooldown01 = 0.4f, CooldownText = "2s" },
    new() { Id = "shield", Icon = "shield", Title = "Guard", Disabled = true },
});
xml
<template>
  <sus:SusAbilityBar :SlotCount="Slots.Value"
                     :UseHold="Hold.Value"
                     @ability-activated="OnAbilityActivated"
                     @ability-hold-complete="OnAbilityHoldComplete" />
</template>

<script>
public Prop<int> Slots = new(4);
public Prop<bool> Hold = new(false);
void OnAbilityActivated(int index) { /* … */ }
void OnAbilityHoldComplete(int index) { /* … */ }
// Call SetAbilities / UpdateAbility from combat code after mount.
</script>
Prop / APIРоль
SlotCountКоличество слотов (1…10, по умолчанию 4)
UseHoldТранслирует hold-режим на каждый слот
SetAbilities(list)Меняет размер и заполняет из SusHudAbilityData
UpdateAbility(i, data)Патчит один слот
GetSlot(i)Доступ к дочернему SusAbilitySlot
OnAbilityActivatedИндекс активированного слота
OnAbilityHoldCompleteИндекс после завершения hold
ActivateSlot(i)Активирует слот i из вашего собственного ввода — так же, как клик
KeyScopeГде полоса слушает клавиши: "focus" (по умолчанию) или "panel"

Клавиши способностей ​

По умолчанию ввод способностей остаётся на стороне игры: ваша игра читает собственный ввод и вызывает ActivateSlot(index). Этот вызов работает ровно как клик — поднимает OnAbilityActivated, если только слот не hold-слот, не отключён и не на перезарядке.

csharp
// in your input handler
if (Input.GetKeyDown(KeyCode.Q)) bar.ActivateSlot(0);

KeyScope выбирает, где полоса сама слушает клавиши:

  • "focus" (по умолчанию): цифры 1–9 (верхний ряд или цифровой блок) активируют слот N-1, но только пока фокус у полосы. В бою фокус обычно в другом месте, так что там эти клавиши ничего не делают.
  • "panel": полоса слушает весь panel, пока к нему подключена, фокус не нужен. Нажатая клавиша сверяется со строкой Keybind каждого слота — цифрой, буквой или именем KeyCode, например F1. Клавиши, набранные в текстовом поле, игнорируются, hold-слоты клавишей не активируются, и распространение останавливает только клавиша, привязанная к слоту.

Заметки ​

  • Пуст, пока не вызван SetAbilities (или слоты не заполнит host/Assembler). Вызов до монтирования ставится в очередь до Mounted.
  • SusHudAbilityData: Id, Icon, Title, Description, Cooldown01 (0 готово … 1 полный кулдаун), CooldownText, Disabled, опциональный Keybind (пусто → index+1).
  • Предпочитайте эту полосу ручной сборке множества SusAbilitySlot, когда нужен общий контракт клавиш.