import { AfterPlayCardEvent } from './after-play-card.event';
import { AfterTakeCardsEvent } from './after-take-cards.event';
import { BeforeTurnEvent } from './before-turn.event';
import { GameEndEvent } from './game-end.event';
import { AfterYellUnoEvent } from './after-yell-uno.event';
import { ChangeColorEvent } from './color-change.event';
import { SkipEvent } from './skip.event';
import { ReverseEvent } from './reverse.event';
import { ICard } from '../models/card.model';
import { IGameState } from '../models/game-state.model';
/**
 * Game event utility class
 */
export declare class GameEvents {
    private static instance;
    private readonly events;
    private constructor();
    /**
     * Get instance of game event utility class
     */
    static getInstance(): GameEvents;
    /**
     * Observable that emits values when the game starts
     */
    get afterGameStart$(): import("rxjs").Observable<void>;
    /**
     * Observable that emits values after a card is played
     */
    get afterPlayCard$(): import("rxjs").Observable<AfterPlayCardEvent>;
    /**
     * Observable that emits values after a card is taken
     */
    get afterTakeCards$(): import("rxjs").Observable<AfterTakeCardsEvent>;
    /**
     * Observable that emits values after Uno is yelled
     */
    get afterYellUno$(): import("rxjs").Observable<AfterYellUnoEvent>;
    /**
     * Observable that emits values before a turn begins
     */
    get beforeTurn$(): import("rxjs").Observable<BeforeTurnEvent>;
    /**
     * Observable that emits values when the game ends
     */
    get gameEnd$(): import("rxjs").Observable<GameEndEvent>;
    /**
     * Observable that emits values when the color of card has changed
     */
    get changeColor$(): import("rxjs").Observable<ChangeColorEvent>;
    /**
     * Observable that emits values when the color of card has changed
     */
    get skip$(): import("rxjs").Observable<SkipEvent>;
    /**
     * Observable that emits values when the color of card has changed
     */
    get reverse$(): import("rxjs").Observable<ReverseEvent>;
    /**
     * Observable that emits values when an error occurred
     */
    get error$(): import("rxjs").Observable<any>;
    /**
     * Observable that emits values when a special card has dropped
     */
    get specialCard$(): import("rxjs").Observable<ICard>;
    /**
     * Observable that emits values when a common card has dropped
     */
    get cardplayed$(): import("rxjs").Observable<ICard>;
    /**
     * Observable that emits values when a common card has dropped
     */
    get stateChanged$(): import("rxjs").Observable<IGameState>;
    /**
     * Emits value in the observable at the beginning of the game
     */
    dispatchAfterGameStart(): void;
    /**
     * Emits value after a card is played
     *
     * @param data contains player information and played card
     */
    dispatchAfterPlayCard(data: AfterPlayCardEvent): void;
    /**
     * Emits value after a card is taken from the deck
     *
     * @param data contains player information and taken cards
     */
    dispatchAfterTakeCards(data: AfterTakeCardsEvent): void;
    /**
     * Emits value after a player yells Uno
     *
     * @param data contains yeller information
     */
    dispatchAfterYellUno(data: AfterYellUnoEvent): void;
    /**
     * Emits value before a turn begins
     *
     * @param data contains player information
     */
    dispatchBeforeTurn(data: BeforeTurnEvent): void;
    /**
     * Emits value when there is a winner
     *
     * @param data contains winner information and winner score
     */
    dispatchGameEnd(data: GameEndEvent): void;
    /**
     * Emits value when the color of card has changed
     *
     * @param data contains new color
     */
    dispatchChangeColor(data: ChangeColorEvent): void;
    /**
     * Emits value  when the next player has skiped
     *
     * @param data contains next user
     */
    dispatchSkip(data: SkipEvent): void;
    /**
     * Emits value the direction is changed by revert card
     *
     * @param data contains new color
     */
    dispatchReverse(data: ReverseEvent): void;
    /**
     * Emits error
     *
     * @param error
     */
    dispatchError(error: any): any;
    /**
     * Emits card when was played a special card
     *
     * @param card special card
     */
    dispatchSpecialCard(card: ICard): any;
    /**
     * Emits card when a card was played (not specials cards)
     *
     * @param card
     */
    dispatchCardPlayed(card: ICard): any;
    /**
     * Emits state when it was changed
     * @param state GameState
     */
    dispatchStateChanged(state: IGameState): void;
}
