/*!
 * @file Floor.h
 * @brief ゲーム中のダンジョンと付随要素のプロトタイプ
 * @date 2013/12/11
 * @author Deskull
 * 2013 Sikabane Works.
 */

#pragma once

#include "stdafx.h"
#include "Deeangband.h"
#include "GameElement.h"
#include "Square.h"

/*!
 * @class Floor
 * @brief フロアのクラス
 */
class Floor : public GameElement
{
private:
	vector<vector<shared_ptr<Square>>> squares;
	vector<shared_ptr<Door>> doors;
	MAP_LENGTH width; /*!< フロアの横サイズ*/
	MAP_LENGTH height; /*!< フロアの縦サイズ*/

public:

	/*! 
	 * @brief Floorクラスコンストラクタ(GameElementメンバ対応)
	 * @param id GameElementのID
	 * @param TAG GameElementのタグ
	 * @param gameWorld 所属元gameWorld参照ポインタ
	 */
	Floor::Floor(ID id, TAG tag, GameWorld *gameWorld);

	Floor::Floor();

	Floor::~Floor();

	/*!
	 * @brief フロアの横サイズを得る
	 * @return フロアの横サイズ
	 */
	MAP_LENGTH Floor::GetWidth(void);

	/*!
	 * @brief フロアの縦サイズを得る
	 * @return フロアの縦サイズ
	 */
	MAP_LENGTH Floor::GetHeight(void);

	/*!
	 * @brief フロアの該当座標のマスを返す。
	 * @return 該当するマスインスタンスの参照ポインタ
	 */
	Square *Floor::GetSquare(MAP_LENGTH x, MAP_LENGTH y);
};
