/*!
 * @file GameSurfaceSDL.h
 * @brief GameSurfaceSDLクラスとその他付随要素のプロトタイプ
 * @date 2014/02/19
 * @author Deskull
 * 2014 Sikabane Works.
 */

#pragma once

#include "stdafx.h"

#include "Deeangband.h"
#include "Floor.h"
#include "GameSurface.h"
#include "GameWorld.h"
#include <SDL.h>
#include <SDL_image.h>
//#include <SDL_gfx.h>
#include <SDL_ttf.h>

/*! 
 * @class GameSurfaceSDL
 * @brief ゲームのメインインターフェイスクラス(SDL実装)
 */
class GameSurfaceSDL : public GameSurface
{
private:
	Creature *viewCreaturePtr;
	Floor *viewFloorPtr;

	SDL_Renderer *renderer; 
	SDL_RWops *rwop;
	string error;
	SDL_Window *window;
	TTF_Font* font;
	SDL_Surface *titleSurface;
	SDL_Color color;
	SDL_Rect src;
	SDL_Rect title;

	void pushAnyKey(void);
	void initInterfaces(void);
	void drawCreatureStatus(Creature *creaturePtr);

	/*!
	 * @brief フロアの状況を描画する
	 * @param floorPtr 表示したいフロアの構造体参照ポインタ
	 * @param x 左上起点のX座標
	 * @param y 左上起点のY座標
	 * @param w 表示のマス幅
	 * @param h 表示のマス高さ
	 * @return なし
	 */
	void drawFloor(Floor *floorPtr, int x, int y, int w, int h);

public:

	/*!
	 * @brief ゲーム画面を再描画する
	 * @return なし
	 */
	void GameSurfaceSDL::Redraw(void);

	/*!
	 * @brief 指定されたクリーチャーのステータスを表示する
	 * @param creaturePtr 表示したいクリーチャーの参照ポインタ
	 * @return なし
	 */
	void GameSurfaceSDL::ViewCreatureStatus(Creature *creaturePtr);

	/*!
	 * @brief 表示するフロアを切り替える
	 * @param creaturePtr 表示したいフロアの参照ポインタ
	 * @return なし
	 */
	void GameSurfaceSDL::SetFloor(Floor *floorPtr);

	/*!
	 * @brief コンストラクタ
	 */
	GameSurfaceSDL(void);

	/*!
	 * @brief デストラクタ
	 */
	~GameSurfaceSDL(void);

	/*!
	 * @brief プレイヤーからコマンドを取得する
	 * @return ゲームコマンドID
	 */
	GAME_COMMAND GetCommand(void);

	/*!
	 * @brief フロア表示のフォーカスを変更する。
	 * @param coord 基準座標
	 * @return なし
	 */
	void GameSurfaceSDL::FocusFloor(int x, int y);

};
