//@STATE=作成中
//@DESCRIPTION ---------------------------------------------------------------
// Controller.h: Controller クラスのインターフェイス
// 配置コマンドリストおよびその制御を行うインターフェース
//	履歴：
//@DESCRIPTION_END -----------------------------------------------------------
//@AUTHOR=S.F.
///////////////////////////////////////////////////////////////////////////////

#if !defined(AFX_CONTROLLER_H__3BA9FFD8_ADFD_419D_B1AA_700CEA340332__INCLUDED_)
#define AFX_CONTROLLER_H__3BA9FFD8_ADFD_419D_B1AA_700CEA340332__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "../sfinterface.h"

namespace sf {
	namespace application {
	namespace command {

// 配置コマンドの制御 //
class Controller  
{
public:
	// 型定義 
	typedef std::multimap<float,command::Interface * > CommandList;
	typedef command::Interface * const (*CreateFuncPtr)(void);

	// LIFECYCLE 
	Controller(){};
	virtual ~Controller(){};
		
	// OPERATIONS
	
	// 配置データを破棄する
	virtual void unload(void) = 0;
	// 配置データファイルのロード
	virtual void load(const char * const pFileName) = 0;
	// 配置データファイルのセーブ
	virtual void save(const char * const pFileName = NULL) = 0;
	// 配置データを実行 		
	virtual void exec(const float position) = 0;
	// 指定した位置にイテレータを移動
	virtual void restart(const float position) = 0;
	virtual void insertCommand(const float position,command::Interface * const pInterface) = 0;
	// シリアルNoで配置データを削除
	virtual void deleteCommand(const int serialNo) = 0 ;
	// 配置マップの位置で敵を削除 
	virtual void deleteCommand(const float x,const float y,const float position,const command::TYPE type) = 0;
	// コマンドオブジェクトの生成 
	static command::Interface * const create(const command::TYPE type) = 0;
	// ACCESS //

	// Gameオブジェクトへのポインタ
	virtual sf::application::scene::Game * const game() = 0;
	virtual void game(sf::application::scene::Game * const pGame) = 0;

	virtual CommandList& commandList() = 0;
};

		}
	}
}


#endif // !defined(AFX_CONTROLLER_H__3BA9FFD8_ADFD_419D_B1AA_700CEA340332__INCLUDED_)
