/*!
* @file GameSurface.h
* @brief GameSurfaceクラスとその他付随要素のプロトタイプ
* @date 2013/12/17
* @author Deskull
* 2013 Sikabane Works.
*/

#pragma once

#include "stdafx.h"
#include "Deeangband.h"

#include "GameWorld.h"
#include "Coordinates.h"

namespace Deeangband
{

	/*! 
	* @class GameSurface
	* @brief ゲームのメインインターフェイスクラス
	*/
	class GameSurface
	{
	protected:
		GameWorld *gameWorld; //!< 対応するGameWorld

	public:
		GameSurface::GameSurface(void);
		GameSurface::GameSurface(GameWorld *gameWorld);
		virtual GameSurface::~GameSurface(void);

		/*!
		* @brief ゲームコマンドを受け取る
		* @return GAME_COMMAND で定義されたコマンド内容
		*/
		virtual GAME_COMMAND GetCommand(void)
		{
			return GAME_COMMAND_REDRAW;
		}

		/*!
		* @brief ゲーム画面表示を更新する。
		* @return なし
		*/
		virtual void GameSurface::Redraw(void) {}

		/*!
		* @brief ゲーム画面にクリーチャー情報を表示する。
		* @param creaturePtr 表示したいクリーチャーのインスタンス参照ポインタ。NULLならば非表示。
		* @return なし
		*/
		virtual void GameSurface::ViewCreatureStatus(Creature *creaturePtr) { creaturePtr; }

		/*!
		* @brief ゲーム画面左にプレイヤー簡略情報を表示する。
		* @param creaturePtr 表示したいクリーチャーのインスタンス参照ポインタ。NULLならば非表示。
		* @return なし
		*/
		virtual void GameSurface::SetSideStatusCreature(Creature *creaturePtr) { creaturePtr; }

		/*!
		* @brief ゲーム画面表示するフロアを切り替える。
		* @param fieldPtr 表示したいフロアのインスタンス参照ポインタ。NULLならば非表示。
		* @return なし
		*/
		virtual void GameSurface::SetField(Field *fieldPtr) { fieldPtr; }

		/*!
		* @brief フロア表示のフォーカスを変更する
		* @param x 基準X座標
		* @param y 基準Y座標
		* @return なし
		*/
		virtual void GameSurface::FocusField(int x, int y) { x; y; }

		/*!
		* @brief フロア表示のフォーカスを変更する
		* @param coord 基準座標
		* @return なし
		*/
		virtual void GameSurface::FocusField(Coordinates coord) { coord; }

		/*!
		* @brief システムメッセージを表示する
		* @param message メッセージ
		* @return なし
		*/
		virtual void GameSurface::SystemMessage(std::string message) { message; }

	};

}