import { BackgammonPlayer, BackgammonPlayers } from './player';
export type BackgammonCubeValue = undefined | 2 | 4 | 8 | 16 | 32 | 64;
export declare const BackgammonCubeValues: BackgammonCubeValue[];
export type BackgammonCubeStateKind = 'initialized' | 'doubled' | 'maxxed' | 'offered';
interface BaseCube {
    id: string;
    owner: BackgammonPlayer | undefined;
    value: BackgammonCubeValue | undefined;
    offeredBy?: BackgammonPlayer | undefined;
}
interface Cube extends BaseCube {
    stateKind: BackgammonCubeStateKind;
}
export type BackgammonCubeInitialized = Cube & {
    stateKind: 'initialized';
    owner: undefined;
    value: undefined;
    offeredBy?: undefined;
};
export type BackgammonCubeDoubled = Cube & {
    stateKind: 'doubled';
    owner: BackgammonPlayer;
    value: BackgammonCubeValue;
    offeredBy?: undefined;
};
export type BackgammonCubeMaxxed = Cube & {
    stateKind: 'maxxed';
    owner: undefined;
    value: 64;
    offeredBy?: undefined;
};
export type BackgammonCubeOffered = Cube & {
    stateKind: 'offered';
    owner: BackgammonPlayer;
    value: BackgammonCubeValue;
    offeredBy: BackgammonPlayer;
};
export type BackgammonCube = BackgammonCubeInitialized | BackgammonCubeDoubled | BackgammonCubeMaxxed | BackgammonCubeOffered;
export interface CubeProps {
    id?: string;
    stateKind?: BackgammonCubeStateKind;
    value?: BackgammonCubeValue;
    owner?: BackgammonPlayer;
}
export interface CubeClass {
    id: string;
    stateKind: BackgammonCubeStateKind;
    value: BackgammonCubeValue | undefined;
    owner: BackgammonPlayer | undefined;
    initialize: (cube?: CubeProps) => Cube;
    double: (cube: Cube, player: BackgammonPlayer, players: BackgammonPlayers) => BackgammonCubeDoubled | BackgammonCubeMaxxed;
}
export {};
//# sourceMappingURL=cube.d.ts.map