Skip to content

Latest commit

 

History

History
216 lines (156 loc) · 7.09 KB

File metadata and controls

216 lines (156 loc) · 7.09 KB

DeckComponent

Что это: компонент колоды: инициализация, тасовка, выдача карт. Обёртка над DeckModel. Визуальная стопка, перемешивание, раздача в руку. Файл: Scripts/Cards/Components/DeckComponent.cs.

Как использовать: добавить на объект колоды, задать Config и Card Prefab; при необходимости включить Initialize On Start, Shuffle On Start; вызовы Initialize(), Shuffle(), Draw() и события — см. секции ниже.


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

Config

Поле Описание
Config Ссылка на DeckConfig
Initialize On Start Автоинициализация при старте
Shuffle On Start Перемешать при инициализации

Visual

Поле Описание
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)

Trump Display

Поле Описание
Show Trump Card Показывать козырную карту
Trump Card Display CardComponent для отображения козыря

События (UnityEvent)

Событие Описание
OnInitialized Колода инициализирована
OnShuffled Колода перемешана
OnDeckEmpty Колода опустела
OnCardDrawn(CardComponent) Карта взята из колоды
OnVisualStackChanged Визуальная стопка изменилась
OnVisualStackBuilt Визуальная стопка построена
OnShuffleVisualStarted(ShuffleVisualType) Старт визуального shuffle
OnShuffleVisualCompleted Конец визуального shuffle
OnCardDealt(CardComponent, HandComponent) Карта роздана в руку

Методы

Initialize

[Button]
public void Initialize();

Инициализирует колоду согласно конфигурации.

Shuffle

[Button]
public void Shuffle();

Перемешивает оставшиеся карты.

DrawCard

public CardComponent DrawCard(bool faceUp = true);

Берёт верхнюю карту из колоды.

DrawCardAsync

public UniTask<CardComponent> DrawCardAsync(
    Vector3 targetPosition, 
    bool faceUp = true, 
    float duration = 0.3f);

Берёт карту с анимацией перемещения.

DrawCards

public List<CardComponent> DrawCards(int count, bool faceUp = true);

Берёт несколько карт.

ReturnCard

public void ReturnCard(CardComponent card, bool toTop = false);

Возвращает карту в колоду.

Reset

[Button]
public void Reset();

Сбрасывает колоду в начальное состояние.

BuildVisualStack / BuildVisualStackAsync

[Button("Build Visual Stack")]
public void BuildVisualStack();
public UniTask BuildVisualStackAsync();

Строит визуальную стопку из текущей модели колоды на VisualStackBoard. Для тестирования есть кнопка в инспекторе: Build Visual Stack.

ShuffleVisual / ShuffleVisualAsync

[Button("Shuffle Visual")]
public void ShuffleVisual(ShuffleVisualType type = ShuffleVisualType.Shake);
public UniTask ShuffleVisualAsync(ShuffleVisualType type, float? duration = null);

Перемешивает модель + синхронизирует визуальный порядок + запускает визуальный эффект (Shake/Cut/Riffle). Для тестирования есть кнопка в инспекторе: Shuffle Visual.

DealToHand / DealToHandAsync

[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);
        }
    }
}

Пример: единый визуальный режим как у Hand/Board

_deck.Initialize();
_deck.BuildVisualStack(); // через кнопку в инспекторе или код

// Те же режимы, что у руки и стола:
// Fan / Line / Stack / Grid / Slots / Scattered
// (Deck использует общий CardLayoutType)
await _deck.ShuffleVisualAsync(ShuffleVisualType.Shake);
await _deck.DealToHandAsync(_playerHand, faceUp: true);

См. также