/*!
 * @file GameElement.h
 * @brief GameElementクラスと付随要素のプロトタイプ
 * @date 2014/02/01
 * @author Deskull
 * 2013-2014 Sikabane Works.
 */

#pragma once

#include "Deeangband.h"

/*!
 * @struct Color
 * @brief 色指定の構造体
 */
typedef struct 
{
	int r; //!<赤
	int g; //!<緑
	int b; //!<青
	int a; //!<アルファチャンネル
} Color;

/*! 
 * @class GameElement
 * @brief ゲームの諸要素の管理を行うスーパークラス
 */
class GameElement
{
private:

	ID id;   //!< ID
	TAG tag; //!< タグ
	GameWorld *gameWorld; //!< 所属元のGameWorld

public:

	/*! 
	 * @brief GameElementクラスコンストラクタ
	 * @param id 要素のID
	 * @param TAG 要素のタグ
	 * @param gameWorld 所属元gameWorld参照ポインタ
	 */
	GameElement::GameElement(void); 

	GameElement::GameElement(ID id, TAG tag, GameWorld *gameWorld); 

	virtual GameElement::~GameElement(void); 

	/*! 
	 * @brief ダミーデータによる初期化
	 * @return なし
	 */
	virtual void GameElement::SetDammyData(void) {}

	/*!
	 * @brief IDを設定する
	 */
	void GameElement::SetID(ID newID); 

	/*!
	 * @brief IDを取得する
	 */
	ID GameElement::GetID();

	/*!
	 * @brief タグを設定する
	 */
	void GameElement::SetTag(TAG newTag);

	/*!
	 * @brief タグを取得する
	 */
	TAG GameElement::GetTAG();

	/*!
	 * @brief 所属元のGameWorldインスタンスを返す
	 * @return GameWorldインスタンスの参照ポインタ
	 */
	GameWorld *GameElement::GetGameWorld();
};
