import * as Core from "@intelligentgraphics/ig.gfx.core";
import { ComponentId, WorldCoordinates, MathTypes } from "@intelligentgraphics/ig.gfx.core";
/** Interface for a movement plane. */
export interface IMovementPlane {
    /** The plane in which the movement occurs */
    plane: MathTypes.Plane;
    /**
     * A validator for points. Assumes that the given point lies in the plane.
     * There are situations (e.g. for movement at walls) where you want to restrict the movement (e.g. only move in a segment of the plane).
     * This is a restriction on the points that are considered for movement
     */
    isValid(p: Core.WorldCoordinates): boolean;
    /**
     * If set to true, every point in the plane is accepted for movement.
     * This is different from the validator, as a valid point in a non main plane will be projected into a main plane,
     * while an invalid point will always be rejected.
     */
    isMainPlane: boolean;
}
/** A standard plane which allows all points in the given plane for movement.  */
export declare class StandardPlane implements IMovementPlane {
    plane: MathTypes.Plane;
    isMainPlane: boolean;
    constructor(plane: MathTypes.Plane, isMainPlane?: boolean);
    isValid(p: Core.WorldCoordinates): boolean;
}
/** Class for movement at the front of a wall. Only valid points are points that are on the front face of the wall. */
export declare class WallPlane implements IMovementPlane {
    plane: MathTypes.Plane;
    isMainPlane: boolean;
    /** The component of the wall */
    private wallComponent;
    /** The id of the wall. */
    private wallId;
    /** The front face */
    private frontFace;
    /**
     * The constructor
     * @param wallId
     * @param offset used for moving the plane, so that the movement is always exactly at the wall
     */
    constructor(wallId: Core.ComponentId, offset: Core.WorldCoordinates);
    isValid(p: Core.WorldCoordinates): boolean;
}
export declare class NonEnvironmentWallPlane implements IMovementPlane {
    plane: MathTypes.Plane;
    isMainPlane: boolean;
    private planeSegment;
    constructor(componentId: ComponentId, offset: WorldCoordinates);
    isValid(p: WorldCoordinates): boolean;
}
