Skip to content

Latest commit

 

History

History
194 lines (129 loc) · 5.19 KB

File metadata and controls

194 lines (129 loc) · 5.19 KB

HandComponent

Что это: компонент руки: набор карт, раскладка (Fan, Line, Stack, Grid и др.), анимации. Обёртка над HandModel. Файл: Scripts/Cards/Components/HandComponent.cs.

Как использовать: добавить на объект руки, задать Layout Type и параметры раскладки; добавлять/удалять карты через API компонента; привязать HandView для визуала. См. секции ниже.


Настройки в инспекторе

Layout

Поле Описание
Layout Type Общий CardLayoutType: Fan, Line, Stack, Grid, Slots, Scattered
Spacing Расстояние между картами
Arc Angle Угол дуги (для Fan)
Arc Radius Радиус дуги (для Fan)

Grid Settings

Поле Описание
Grid Columns Количество колонок
Grid Row Spacing Расстояние между рядами

Limits

Поле Описание
Max Cards Максимум карт в руке

Card Order

Поле Описание
Add To Bottom Если true - новые карты добавляются под низ (sibling index 0). Для игры "Пьяница" - включить.

Animation

Поле Описание
Arrange Duration Длительность анимации расстановки
Arrange Ease Тип easing

События (UnityEvent)

Событие Параметр Описание
OnCardCountChanged int Количество карт изменилось
OnCardAdded CardComponent Карта добавлена
OnCardRemoved CardComponent Карта удалена
OnCardClicked CardComponent Клик по карте
OnHandChanged Рука изменилась

Пример подключения в инспекторе

OnCardCountChanged (int):
  → CardCountText.SetText (Dynamic int)

Методы

AddCardAsync

public async UniTask AddCardAsync(CardComponent card, bool animate = true);

Добавляет карту в руку.

RemoveCardAsync

public async UniTask RemoveCardAsync(CardComponent card, bool animate = true);

Удаляет карту из руки.

DrawFirst / DrawRandom

public CardComponent DrawFirst();   // Берёт первую карту
public CardComponent DrawRandom();  // Берёт случайную карту

Берёт карту из руки и удаляет её. Возвращает null если рука пуста.

SortByRank / SortBySuit

[Button]
public void SortByRank(bool ascending = true);

[Button]
public void SortBySuit(bool ascending = true);

Сортирует карты с анимацией.

GetCardsThatCanBeat

public List<CardComponent> GetCardsThatCanBeat(CardData attackCard, Suit? trump);

Находит карты, которыми можно побить атакующую.

Clear

[Button]
public void Clear();

Очищает руку и уничтожает карты.


Свойства

Свойство Тип Описание
Model HandModel Модель руки
Cards IReadOnlyList<CardComponent> Карты в руке
Count int Количество карт
IsEmpty bool Пуста ли рука
IsFull bool Заполнена ли рука
LayoutType CardLayoutType Тип раскладки
LegacyLayoutType HandLayoutType Устаревшее свойство для совместимости со старыми сценами

Типы раскладки

Fan (Веер)

Карты расположены дугой, как в руке игрока.

Line (Линия)

Карты в ряд с перекрытием.

Stack (Стопка)

Карты друг на друге со смещением.

Grid (Сетка)

Карты в несколько рядов.

Slots (Слоты)

Режим с фиксированными позициями (обычно используется на BoardComponent).

Scattered (Разброс)

Случайное распределение карт в заданном радиусе.


Пример использования

// Игрок выбирает карту для атаки
handComponent.OnCardClicked.AddListener(card =>
{
    if (isMyTurn)
    {
        PlayCard(card);
    }
});

// Найти карты для защиты
var validDefense = handComponent.GetCardsThatCanBeat(attackCard.Data, trumpSuit);
foreach (var card in validDefense)
{
    card.SetHighlighted(true);
}

См. также