import { Dice } from '../Dices';
import { CheckerPlayState, CheckerPlayStateCommitted } from './CheckerPlayState';
/**
 * 未確定の状態のチェッカープレイを管理する：CheckerPlayでは機能追加の必要性が薄いので、
 * CheckerPlayHandlerを設けず簡素な定義のままになっている
 */
export declare type CheckerPlayDispatcher = {
    doCheckerPlay: (state: CheckerPlayState, absPos: number, dices: Dice[]) => void;
    doRevertDices: (state: CheckerPlayState) => void;
    doUndo: (state: CheckerPlayState) => void;
    doCommitCheckerPlay: (state: CheckerPlayState) => void;
    doRedo: (state: CheckerPlayState) => void;
};
/**
 * 未確定の状態のチェッカープレイによって発生するイベントの通知先
 */
export declare type CheckerPlayListeners = {
    onCheckerPlay: (state: CheckerPlayState) => void;
    onRevertDices: (state: CheckerPlayState) => void;
    onUndo: (state: CheckerPlayState) => void;
    onCommitCheckerPlay: (state: CheckerPlayStateCommitted) => void;
    onRedo: (state: CheckerPlayState) => void;
};
/**
 * CheckerPlayDispatcherオブジェクトを生成する
 * @param listeners
 * @returns
 */
export declare function checkerPlayDispatcher(listeners: CheckerPlayListeners): CheckerPlayDispatcher;
/**
 * 任意のポイントがクリックされたとき、それに対応するムーブを決定し、
 * そのムーブの適用後の局面を返す
 *
 * @param state 現局面（そこから可能な局面のツリーを含む）
 * @param absPos クリックされたポイントの絶対座標（=White視点の座標）
 * @param dices ダイス状態の配列：インデックスの小さいものを優先して使用する
 * @returns
 */
export declare function applyCheckerPlay(state: CheckerPlayState, absPos: number, dices: Dice[]): {
    isValid: true;
    state: CheckerPlayState;
} | {
    isValid: false;
};
export declare function fill(listeners: Partial<CheckerPlayListeners>): CheckerPlayListeners;
export declare function decorate(base: CheckerPlayListeners, ...listeners: Partial<CheckerPlayListeners>[]): CheckerPlayListeners;
export declare function setCPStateListener(setState: (state: CheckerPlayState | undefined) => void): CheckerPlayListeners;
//# sourceMappingURL=CheckerPlayDispatcher.d.ts.map