import { Room } from "../Room";
import { ITileConfiguration, ITileInfo } from "../../../interfaces/Room.interface";
import { Container } from "pixi.js";
import { Material } from "../materials/Material";
import { IInteractionEvent } from "../../../interfaces/Interaction.interface";
/**
 * Tile class that show up during room rendering.
 *
 * @class
 * @memberof Scuti
 */
export declare class Tile extends Container {
    /**
     * The room instance where the tile will be drawn.
     *
     * @member {Room}
     * @private
     */
    private _room;
    /**
     * The ITileInfo instance
     *
     * @member {ITileInfo}
     * @private
     */
    private _tileInfo?;
    /**
     * The thickness of the tile part.
     *
     * @member {number}
     * @private
     */
    private _thickness;
    /**
     * The tile material that will be applied to this part, it contains the color and the texture of the tile.
     *
     * @member {Material}
     * @private
     */
    private _material;
    /**
     * The tile position.
     *
     * @member {IFloorPosition}
     * @private
     */
    private _position;
    /**
     * The tile interaction manager.
     *
     * @member {InteractionManager}
     * @private
     */
    private _interactionManager;
    /**
     * @param {Room} [room] - The room instance where the tile will be drawn.
     * @param {ITileConfiguration} [configuration] - The tile configuration.
     * @param {Material} [configuration.material] - The time material that will be applied.
     * @param {number} [configuration.thickness] - The tile thickness.
     * @param {IPosition3D} [configuration.position] - The tile position.
     **/
    constructor(room: Room, configuration: ITileConfiguration, tileInfo?: ITileInfo);
    /**
     * Draw the tile.
     *
     * @return {void}
     * @private
     */
    private _draw;
    /**
     * Reference to the tile thickness.
     *
     * @member {number}
     * @readonly
     * @public
     */
    get thickness(): number;
    /**
     * Update the tile thickness and redraw the tile.
     *
     * @param {number} [thickness] - The room tile thickness that will be applied.
     * @public
     */
    set thickness(thickness: number);
    /**
     * Reference to the tile material instance.
     *
     * @member {Material}
     * @readonly
     * @public
     */
    get material(): Material;
    /**
     * Update the tile material and redraw the tile.
     *
     * @param {Material} [material] - The room tile material that will be applied.
     * @public
     */
    set material(material: Material);
    /**
     * Reference to the pointer down event.
     *
     * @member {(event: IInteractionEvent) => void}
     * @readonly
     * @public
     */
    get onPointerDown(): (event: IInteractionEvent) => void;
    /**
     * Update the event function that will be executed.
     *
     * @param {(event: IInteractionEvent) => void} [value] - The event function that will be executed.
     * @public
     */
    set onPointerDown(value: (event: IInteractionEvent) => void);
    /**
     * Reference to the pointer up event.
     *
     * @member {(event: IInteractionEvent) => void}
     * @readonly
     * @public
     */
    get onPointerUp(): (event: IInteractionEvent) => void;
    /**
     * Update the event function that will be executed.
     *
     * @param {(event: IInteractionEvent) => void} [value] - The event function that will be executed.
     * @public
     */
    set onPointerUp(value: (event: IInteractionEvent) => void);
    /**
     * Reference to the pointer move event.
     *
     * @member {(event: IInteractionEvent) => void}
     * @readonly
     * @public
     */
    get onPointerMove(): (event: IInteractionEvent) => void;
    /**
     * Update the event function that will be executed.
     *
     * @param {(event: IInteractionEvent) => void} [value] - The event function that will be executed.
     * @public
     */
    set onPointerMove(value: (event: IInteractionEvent) => void);
    /**
     * Reference to the pointer out event.
     *
     * @member {(event: IInteractionEvent) => void}
     * @readonly
     * @public
     */
    get onPointerOut(): (event: IInteractionEvent) => void;
    /**
     * Update the event function that will be executed.
     *
     * @param {(event: IInteractionEvent) => void} [value] - The event function that will be executed.
     * @public
     */
    set onPointerOut(value: (event: IInteractionEvent) => void);
    /**
     * Reference to the pointer over event.
     *
     * @member {(event: IInteractionEvent) => void}
     * @readonly
     * @public
     */
    get onPointerOver(): (event: IInteractionEvent) => void;
    /**
     * Update the event function that will be executed.
     *
     * @param {(event: IInteractionEvent) => void} [value] - The event function that will be executed.
     * @public
     */
    set onPointerOver(value: (event: IInteractionEvent) => void);
    /**
     * Reference to the pointer double click event.
     *
     * @member {(event: IInteractionEvent) => void}
     * @readonly
     * @public
     */
    get onDoubleClick(): (event: IInteractionEvent) => void;
    /**
     * Update the event function that will be executed.
     *
     * @param {(event: IInteractionEvent) => void} [value] - The event function that will be executed.
     * @public
     */
    set onDoubleClick(value: (event: IInteractionEvent) => void);
}
