Что это: компонент колоды: инициализация, тасовка, выдача карт. Обёртка над DeckModel. Визуальная стопка, перемешивание, раздача в руку. Файл: Scripts/Cards/Components/DeckComponent.cs.
Как использовать: добавить на объект колоды, задать Config и Card Prefab; при необходимости включить Initialize On Start, Shuffle On Start; вызовы Initialize(), Shuffle(), Draw() и события — см. секции ниже.
| Поле | Описание |
|---|---|
| Config | Ссылка на DeckConfig |
| Initialize On Start | Автоинициализация при старте |
| Shuffle On Start | Перемешать при инициализации |
| Поле | Описание |
|---|---|
| Spawn Point | Точка появления карт |
| Card Prefab | Префаб CardComponent |
| Visual Layout Type | Общий тип layout (CardLayoutType) как в Hand/Board |
| Visual Stack Board | BoardComponent как визуальный контейнер стопки |
| Spawn Visual On Initialize | Автоспавн визуальной стопки при Initialize |
| Stack Face Up | Спавнить карты лицом вверх |
| Stack Position Jitter | Рандомный разброс позиции для живого вида |
| Stack Rotation Jitter | Рандомный разброс поворота |
| Stack Step Y | Шаг стопки по оси Y |
| Stack Offset Position/Rotation | Дополнительный общий offset для всей стопки |
| Animation Config | CardAnimationConfig для параметров shuffle/deal/stack |
| Set Animation Config As Global | Публикует конфиг Deck как глобальный fallback (CardSettingsRuntime) |
| Поле | Описание |
|---|---|
| Show Trump Card | Показывать козырную карту |
| Trump Card Display | CardComponent для отображения козыря |
| Событие | Описание |
|---|---|
OnInitialized |
Колода инициализирована |
OnShuffled |
Колода перемешана |
OnDeckEmpty |
Колода опустела |
OnCardDrawn(CardComponent) |
Карта взята из колоды |
OnVisualStackChanged |
Визуальная стопка изменилась |
OnVisualStackBuilt |
Визуальная стопка построена |
OnShuffleVisualStarted(ShuffleVisualType) |
Старт визуального shuffle |
OnShuffleVisualCompleted |
Конец визуального shuffle |
OnCardDealt(CardComponent, HandComponent) |
Карта роздана в руку |
[Button]
public void Initialize();Инициализирует колоду согласно конфигурации.
[Button]
public void Shuffle();Перемешивает оставшиеся карты.
public CardComponent DrawCard(bool faceUp = true);Берёт верхнюю карту из колоды.
public UniTask<CardComponent> DrawCardAsync(
Vector3 targetPosition,
bool faceUp = true,
float duration = 0.3f);Берёт карту с анимацией перемещения.
public List<CardComponent> DrawCards(int count, bool faceUp = true);Берёт несколько карт.
public void ReturnCard(CardComponent card, bool toTop = false);Возвращает карту в колоду.
[Button]
public void Reset();Сбрасывает колоду в начальное состояние.
[Button("Build Visual Stack")]
public void BuildVisualStack();
public UniTask BuildVisualStackAsync();Строит визуальную стопку из текущей модели колоды на VisualStackBoard.
Для тестирования есть кнопка в инспекторе: Build Visual Stack.
[Button("Shuffle Visual")]
public void ShuffleVisual(ShuffleVisualType type = ShuffleVisualType.Shake);
public UniTask ShuffleVisualAsync(ShuffleVisualType type, float? duration = null);Перемешивает модель + синхронизирует визуальный порядок + запускает визуальный эффект (Shake/Cut/Riffle).
Для тестирования есть кнопка в инспекторе: Shuffle Visual.
[Button("Deal To Hand")]
public void DealToHand(HandComponent hand, bool faceUp = true);
public UniTask<CardComponent> DealToHandAsync(HandComponent hand, bool faceUp, float? moveDuration = null);Раздает верхнюю карту из визуальной стопки в руку с синхронизацией модели.
Для тестирования есть кнопка в инспекторе: Deal To Hand.
| Свойство | Тип | Описание |
|---|---|---|
Model |
DeckModel |
Модель колоды |
RemainingCount |
int |
Количество оставшихся карт |
IsEmpty |
bool |
Пуста ли колода |
TrumpCard |
CardData? |
Козырная карта |
TrumpSuit |
Suit? |
Козырная масть |
SpawnPoint |
Transform |
Точка спавна |
AnimationConfig |
CardAnimationConfig |
Конфиг анимаций этой колоды |
public class GameManager : MonoBehaviour
{
[SerializeField] private DeckComponent _deck;
[SerializeField] private HandComponent _playerHand;
private async void Start()
{
_deck.Initialize();
// Раздать 6 карт игроку
for (int i = 0; i < 6; i++)
{
var card = _deck.DrawCard();
await _playerHand.AddCardAsync(card);
}
}
}_deck.Initialize();
_deck.BuildVisualStack(); // через кнопку в инспекторе или код
// Те же режимы, что у руки и стола:
// Fan / Line / Stack / Grid / Slots / Scattered
// (Deck использует общий CardLayoutType)
await _deck.ShuffleVisualAsync(ShuffleVisualType.Shake);
await _deck.DealToHandAsync(_playerHand, faceUp: true);