@runox-game/game-engine
Version:
RunoX game engine
98 lines (97 loc) • 3.23 kB
TypeScript
import { IDeck } from './deck.model';
import { IPlayersGroup } from './players-group.model';
import { Turn, ITurn } from './turn.model';
import { IStack } from './stack.model';
import { GameDirection } from './game-direction.model';
import { ICard } from './card.model';
import { IPlayer } from './player.model';
import { GameEvents } from '../events/game-events';
import { GameModes } from './game-modes';
import { BehaviorSubject, Observable } from 'rxjs';
import { ILog, ILogger } from '../log/log.factory';
import { LogLevel } from '../log/log-levels.enum';
export interface IGameState extends ILogger {
valid: boolean;
id: number;
readonly deck: IDeck;
readonly stack: IStack;
readonly playersGroup: IPlayersGroup;
readonly turn: ITurn;
readonly events: GameEvents;
unoYellers: {
[id: string]: boolean;
};
gameDirection: number;
cardsToGive: number;
gameModes: GameModes;
winner: IPlayer | undefined;
winnerScore: number;
readonly nextPlayerToPlay: IPlayer;
changeDirection(): void;
giveCards(quantity: number, toPlayer: IPlayer): ICard[];
addStackCardsToDeck(): void;
overrideInternalState(state: IGameState): void;
setWinner(player: IPlayer, score: number): void;
getPlayersWhoShouldHaveYelled(): IPlayer[];
onSpecialCardPlayed(): Observable<ICard>;
onCardPlayed(): Observable<ICard>;
onStateChanged(): Observable<IGameState>;
}
/** Clase que representa el estado del juego */
export declare class GameState implements IGameState {
readonly deck: IDeck;
readonly stack: IStack;
readonly playersGroup: IPlayersGroup;
readonly turn: Turn;
readonly events: GameEvents;
gameDirection: GameDirection;
cardsToGive: number;
unoYellers: {
[id: string]: boolean;
};
id: number;
gameModes: GameModes;
winner: IPlayer | undefined;
winnerScore: number;
log$: BehaviorSubject<ILog>;
constructor();
get nextPlayerToPlay(): IPlayer;
get valid(): boolean;
changeDirection(): void;
giveCards(quantity: number, toPlayer: IPlayer): ICard[];
addStackCardsToDeck(): void;
overrideInternalState(state: IGameState): void;
setWinner(player: IPlayer, score: number): void;
/**
* Log message in the state with a level asigned.
*
* @remarks
* If levels is undefined will be assigned LogLevel.DEFAULT
*
* @param state
* @param message
* @param level
*/
log(message: string, level?: LogLevel): void;
/**
* Return an observable with a flow of logs filtered by level
* @param level
*/
logs(level: LogLevel): Observable<ILog>;
/**
* Return an observable with a special card has played
*/
onSpecialCardPlayed(): Observable<ICard>;
/**
* Return an observable with a common card has played
*/
onCardPlayed(): Observable<ICard>;
/**
* Return an observable with game state
*/
onStateChanged(): Observable<IGameState>;
/**
* Find and return users who should yell uno
*/
getPlayersWhoShouldHaveYelled(): IPlayer[];
}