//@STATE=作成中
//@DESCRIPTION ---------------------------------------------------------------
// AbstarctScene クラス
//	Sceneクラス(interfaceに相当)の抽象(abstract)クラス
//  ありがちなメソッドを具象化
// $Log: AbstractScene.h,v $
// Revision 1.1  2001/10/28 21:40:35  fujiwara
// DLLに分割
//
// Revision 1.4  2001/07/09 20:30:07  fujiwara
// 例外処理の組み込み
//
// Revision 1.3  2001/07/01 01:03:43  fujiwara
// const の見直し
// 配置エディタは途中経過
//
// Revision 1.2  2001/05/12 00:48:13  fujiwara
// ＣＶＳを導入し、ログ表示を追加
//
//@DESCRIPTION_END -----------------------------------------------------------
//@AUTHOR=S.F.
// Copyright (C) 2000 Satoshi Fujiwara. All Rights Reserved.

#if !defined(AFX_ABSTRACTSCENE_H__760660AB_BD65_461F_B374_0600A79A0A44__INCLUDED_)
#define AFX_ABSTRACTSCENE_H__760660AB_BD65_461F_B374_0600A79A0A44__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "scene.h"
namespace sf {
	namespace application {
		namespace scene {
			class AbstractScene : public Scene,public Listener
			{
			public:
				// LIFECYCLE //
				AbstractScene();
				virtual ~AbstractScene();
				// OPERATORS //

				// OPERATIONS//
				virtual void move(void) = 0;
				
				virtual void sleep(void){mbActive = false;};
				virtual void active(void){mbActive = true;};
				virtual const bool  isActive(void) const {return mbActive;};

				virtual void addListener(Listener * const pListener);
				virtual void removeListener(Listener * const pListener);
				// イベント呼び出しメソッド 
				virtual void callSceneEvent(void(Listener::*pMethod)(Scene* const));
			protected:
				std::list<Listener*> mListenerList;
				system::console::Console *mpConsole;
				system::System *mpSystem;
				system::sound::Sound *mpSound;
				system::input::Input *mpInput;
				application::Main * mpMain;
				bool mbActive;
				bool mbInitialized;
			};
		}// scene
	}// application
}// system

#endif // !defined(AFX_ABSTRACTSCENE_H__760660AB_BD65_461F_B374_0600A79A0A44__INCLUDED_)
