Что это: компонент руки: набор карт, раскладка (Fan, Line, Stack, Grid и др.), анимации. Обёртка над HandModel. Файл: Scripts/Cards/Components/HandComponent.cs.
Как использовать: добавить на объект руки, задать Layout Type и параметры раскладки; добавлять/удалять карты через API компонента; привязать HandView для визуала. См. секции ниже.
| Поле | Описание |
|---|---|
| Layout Type | Общий CardLayoutType: Fan, Line, Stack, Grid, Slots, Scattered |
| Spacing | Расстояние между картами |
| Arc Angle | Угол дуги (для Fan) |
| Arc Radius | Радиус дуги (для Fan) |
| Поле | Описание |
|---|---|
| Grid Columns | Количество колонок |
| Grid Row Spacing | Расстояние между рядами |
| Поле | Описание |
|---|---|
| Max Cards | Максимум карт в руке |
| Поле | Описание |
|---|---|
| Add To Bottom | Если true - новые карты добавляются под низ (sibling index 0). Для игры "Пьяница" - включить. |
| Поле | Описание |
|---|---|
| Arrange Duration | Длительность анимации расстановки |
| Arrange Ease | Тип easing |
| Событие | Параметр | Описание |
|---|---|---|
OnCardCountChanged |
int |
Количество карт изменилось |
OnCardAdded |
CardComponent |
Карта добавлена |
OnCardRemoved |
CardComponent |
Карта удалена |
OnCardClicked |
CardComponent |
Клик по карте |
OnHandChanged |
— | Рука изменилась |
OnCardCountChanged (int):
→ CardCountText.SetText (Dynamic int)
public async UniTask AddCardAsync(CardComponent card, bool animate = true);Добавляет карту в руку.
public async UniTask RemoveCardAsync(CardComponent card, bool animate = true);Удаляет карту из руки.
public CardComponent DrawFirst(); // Берёт первую карту
public CardComponent DrawRandom(); // Берёт случайную картуБерёт карту из руки и удаляет её. Возвращает null если рука пуста.
[Button]
public void SortByRank(bool ascending = true);
[Button]
public void SortBySuit(bool ascending = true);Сортирует карты с анимацией.
public List<CardComponent> GetCardsThatCanBeat(CardData attackCard, Suit? trump);Находит карты, которыми можно побить атакующую.
[Button]
public void Clear();Очищает руку и уничтожает карты.
| Свойство | Тип | Описание |
|---|---|---|
Model |
HandModel |
Модель руки |
Cards |
IReadOnlyList<CardComponent> |
Карты в руке |
Count |
int |
Количество карт |
IsEmpty |
bool |
Пуста ли рука |
IsFull |
bool |
Заполнена ли рука |
LayoutType |
CardLayoutType |
Тип раскладки |
LegacyLayoutType |
HandLayoutType |
Устаревшее свойство для совместимости со старыми сценами |
Карты расположены дугой, как в руке игрока.
Карты в ряд с перекрытием.
Карты друг на друге со смещением.
Карты в несколько рядов.
Режим с фиксированными позициями (обычно используется на BoardComponent).
Случайное распределение карт в заданном радиусе.
// Игрок выбирает карту для атаки
handComponent.OnCardClicked.AddListener(card =>
{
if (isMyTurn)
{
PlayCard(card);
}
});
// Найти карты для защиты
var validDefense = handComponent.GetCardsThatCanBeat(attackCard.Data, trumpSuit);
foreach (var card in validDefense)
{
card.SetHighlighted(true);
}