import { Scuti } from "../../Scuti";
import { Container } from "pixi.js";
import { IRoomConfiguration } from "../../interfaces/Room.interface";
import { RoomView } from "./RoomView";
import { RoomTileMap } from "./RoomTileMap";
import { Material } from "./materials/Material";
import { RoomObjectLayer } from "./layers/RoomObjectLayer";
import { RoomTileLayer } from "./layers/RoomTileLayer";
/**
 * Room class for rendering rooms like the ones on Habbo Hotel.
 *
 * @class
 * @memberof Scuti
 */
export declare class Room extends Container {
    /**
     * The game engine instance that the room will be using to render objects.
     *
     * @member {Scuti}
     * @private
     */
    private _engine;
    /**
     * The room tile map where every informations about the room model is stored.
     *
     * @member {RoomTileMap}
     * @private
     */
    private _tileMap;
    /**
     * The wall material that will be applied in the room, it contains the color and the texture of the wall.
     *
     * @member {Material}
     * @private
     */
    private _wallMaterial;
    /**
     * The floor material that will be applied in the room, it contains the color and the texture of the wall.
     *
     * @member {Material}
     * @private
     */
    private _floorMaterial;
    /**
     * The wall thickness of the room.
     *
     * @member {number}
     * @private
     */
    private _wallThickness;
    /**
     * The floor thickness of the room.
     *
     * @member {number}
     * @private
     */
    private _floorThickness;
    /**
     * The wall height of the room, the height is added to the base height of the room.
     *
     * @member {number}
     * @private
     */
    private _wallHeight;
    /**
     * The room view instance, where all the objects like furnitures, avatars or the tiles, walls and stairs are stored.
     *
     * @member {RoomView}
     * @private
     */
    private _view;
    /**
     * The room camera, it manage the room dragging and centering the room when it's out of bounds.
     *
     * @member {RoomCamera}
     * @private
     */
    private _camera;
    /**
     * @param {Scuti} [engine] - The Scuti instance that will be used to render the room.
     * @param {IRoomConfiguration} [configuration] - The room configuration.
     * @param {string} [configuration.tilemap] - The room tile map that will be parsed.
     * @param {Material} [configuration.floorMaterial] - The room floor material that will be applied.
     * @param {number} [configuration.floorThickness] - The room floor thickness.
     * @param {Material} [configuration.wallMaterial] - The room wall material that will be applied.
     * @param {number} [configuration.wallHeight] - The room wall height.
     * @param {number} [configuration.wallThickness] - The room wall thickness.
     **/
    constructor(engine: Scuti, configuration: IRoomConfiguration);
    /**
     * Reference to the game engine instance.
     *
     * @member {Scuti}
     * @readonly
     * @public
     */
    get engine(): Scuti;
    /**
     * Reference to the room view instance.
     *
     * @member {RoomView}
     * @readonly
     * @public
     */
    get view(): RoomView;
    /**
     * Reference to the room tile map instance.
     *
     * @member {RoomTileMap}
     * @readonly
     * @public
     */
    get tileMap(): RoomTileMap;
    /**
     * Reference to the wall material instance.
     *
     * @member {Material}
     * @readonly
     * @public
     */
    get wallMaterial(): Material;
    /**
     * Update the wall material and rerender the room.
     *
     * @param {Material} [material] - The room wall material that will be applied.
     * @public
     */
    set wallMaterial(material: Material);
    /**
     * Reference to the floor material instance.
     *
     * @member {Material}
     * @readonly
     * @public
     */
    get floorMaterial(): Material;
    /**
     * Update the floor material and rerender the room.
     *
     * @param {Material} [material] - The room floor material that will be applied.
     * @public
     */
    set floorMaterial(material: Material);
    /**
     * Reference to the wall thickness.
     *
     * @member {number}
     * @readonly
     * @public
     */
    get wallThickness(): number;
    /**
     * Update the wall thickness and rerender the room.
     *
     * @param {number} [thickness] - The room wall thickness that will be applied.
     * @public
     */
    set wallThickness(thickness: number);
    /**
     * Reference to the floor thickness.
     *
     * @member {number}
     * @readonly
     * @public
     */
    get floorThickness(): number;
    /**
     * Update the floor thickness and rerender the room.
     *
     * @param {number} [thickness] - The room floor thickness that will be applied.
     * @public
     */
    set floorThickness(thickness: number);
    /**
     * Reference to the wall height.
     *
     * @member {number}
     * @readonly
     * @public
     */
    get wallHeight(): number;
    /**
     * Update the wall height and rerender the room.
     *
     * @param {number} [height] - The room wall height that will be applied.
     * @public
     */
    set wallHeight(height: number);
    /**
     * Reference to the object tile container.
     *
     * @member {RoomTileLayer}
     * @readonly
     * @public
     */
    get tiles(): RoomTileLayer;
    /**
     * Reference to the object layer container.
     *
     * @member {RoomObjectLayer}
     * @readonly
     * @public
     */
    get objects(): RoomObjectLayer;
}
