import { BGState } from './BGState';
import { BGListener } from './BGListener';
import { CBAction, CBInPlay, CBOpening, CBResponse, CBState, CBToRoll } from './CubeGameState';
import { SingleGameEventHandler } from './SingleGameEventHandler';
import { SGInPlay, SGOpening, SGToRoll } from './SingleGameState';
/**
 * 標準的なバックギャモン、キューブありの時にU.I.として提供する操作の定義：引数には、イベント発生前の状態を渡さないといけない。
 *
 */
export declare type BGEventHandler = {
    /**
     * オープニングロールを行う
     */
    onRollOpening: (bgState: {
        cbState: CBOpening;
        sgState: SGOpening;
    }) => void;
    /**
     * 駒の移動を確定する
     */
    onCommit: (bgState: {
        cbState: CBInPlay;
        sgState: SGInPlay;
    }) => void;
    /**
     * ロールを行う
     */
    onRoll: (bgState: {
        cbState: CBToRoll | CBAction;
        sgState: SGToRoll;
    }) => void;
    /**
     * ゲームを開始する
     */
    onStartGame: () => void;
    /**
     * ダブルする
     */
    onDouble: (bgState: {
        cbState: CBAction;
        sgState: SGToRoll;
    }) => void;
    /**
     * テイクする
     */
    onTake: (bgState: {
        cbState: CBResponse;
        sgState: SGToRoll;
    }) => void;
    /**
     * パスする
     */
    onPass: (bgState: {
        cbState: CBResponse;
        sgState: SGToRoll;
    }) => void;
};
/**
 * BGHandlerをSingleGameHandlerに変換する
 * @returns
 */
export declare function asSGEventHandler(cbState: CBState, handlers: Partial<BGEventHandler>): SingleGameEventHandler;
/**
 * BGListenerを接合し、一つのBGListenerにする
 *
 * @param bg1 BGListener（先に実行される）
 * @param bg2 BGListener（後に実行される）
 * @returns
 */
export declare function concatBGListeners(bg1: Partial<BGListener>, bg2: Partial<BGListener>): Partial<BGListener>;
/**
 * 状態の保持を行うためのBGListenerを生成する
 *
 * @param defaultState ゲーム開始時の初期配置
 * @param setBGState 状態保持関数
 * @returns
 */
export declare function setBGStateListener(defaultState: BGState, setBGState: (bgState: BGState) => void): BGListener;
//# sourceMappingURL=BGEventHandler.d.ts.map