import { Turn } from "../../turn";
import { Color } from "../../color";
import { Coordinate } from "../../coordinate";
import { MovementRule, MovementRuleMeta } from "./movement-rule";
import { Action } from "../../affect/affect.types";
import { StraightMovementRuleConfig } from "./straight-movement.rule";
import { GetPiece } from "../../get-piece";
import { Entity } from "../../entity";
export type CastlingRuleSpecificConfig = {
    mainPieceCoordinate: Coordinate;
    foreginPieceCoordinate: Coordinate;
};
export type CastlingMovementRuleConfig = {
    color: Color;
} & StraightMovementRuleConfig & CastlingRuleSpecificConfig & Entity;
export type CastlingMovementRuleMeta = MovementRuleMeta & {
    color: Color;
} & CastlingRuleSpecificConfig & Entity;
export declare class CastlingMovementRule extends MovementRule {
    private color;
    constructor({ id, name, moveToEmpty, moveToKill, collision, distance, directions, speed, color: color, mainPieceCoordinate, foreginPieceCoordinate, }: CastlingMovementRuleConfig);
    mainPieceCoordinate: CastlingRuleSpecificConfig["mainPieceCoordinate"];
    foreginPieceCoordinate: CastlingRuleSpecificConfig["foreginPieceCoordinate"];
    private isPieceMoved;
    private getSign;
    private isSpaceBeetweenLocked;
    protected calculateNewCoord: () => Action;
    private isPieceNotExist;
    private isColorDifferent;
    availableMoves(_fromX: number, _fromY: number, getPiece: GetPiece, turns: Turn[]): Action[];
    getMeta(): CastlingMovementRuleMeta;
}
