//@STATE=作成中
//@DESCRIPTION ---------------------------------------------------------------
// FadeImpl.h: FadeImpl クラスのインターフェイス
//  　フェードイン・フェードアウトシーンクラスです。
// $Log: FadeImpl.h,v $
// Revision 1.1  2001/10/28 21:40:36  fujiwara
// DLLに分割
//
// Revision 1.4  2001/07/09 20:30:08  fujiwara
// 例外処理の組み込み
//
// Revision 1.3  2001/07/01 01:03:44  fujiwara
// const の見直し
// 配置エディタは途中経過
//
// Revision 1.2  2001/05/12 00:50:33  fujiwara
// ＣＶＳを導入し、ログ表示を追加
//
//@DESCRIPTION_END -----------------------------------------------------------
//@AUTHOR=S.F.
// Copyright (C) 2000 Satoshi Fujiwara. All Rights Reserved.
///////////////////////////////////////////////////////////////////////////////

#if !defined(AFX_FADE_H__B6A34AFF_990A_4D57_B2C9_8578B34A36E3__INCLUDED_)
#define AFX_FADE_H__B6A34AFF_990A_4D57_B2C9_8578B34A36E3__INCLUDED_

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

#include "scenetype.h"
#include "AbstractScene.h"
#include "Fade.h"

namespace sf {
	namespace application {
		namespace scene {

			class FadeImpl : public AbstractScene,public Fade  
			{
			public:
				FadeImpl();
				virtual ~FadeImpl();
				
				// Scene インプリメント				
				void move(void);
				const scene::TYPE type() const{return FADE;};

				void endOfScene(Scene * const pScene) {;};
				void exitKeyPressed(Scene * const pScene) {;};
				
				// Fade インプリメント
				// フェードイン・アウトのスピード
				void speed(const float value){ if(!mbMove){ mSpeed = value;};};
				const float speed(){return mSpeed;};
				// フェードインか、フェードアウトか
				const Fade::TYPE fadeType(){return mType;};
				void fadeType(const Fade::TYPE value){if(!mbMove){mType = value;};};
				// スタート時の色
				const system::console::COLOR startColor(void){return mStartColor;};
				void startColor(const system::console::COLOR value ){if(!mbMove){mStartColor = value;};};
				// 終了時の色
				const system::console::COLOR endColor(void){return mEndColor;};
				void endColor(const system::console::COLOR  value){if(!mbMove){mEndColor = value;};};
				// サウンドボリュームも一緒にフェードイン・アウトするかどうか
				const bool  fadeVolumeFlag(){return mbFadeVolume;};
				void fadeVolumeFlag(const bool value){if(!mbMove){mbFadeVolume = value;};};

				void initialize();

				static Scene * const create(const bool bManage)
				{	Scene *pscene = new FadeImpl();
					if(bManage){
						Container::instance()->add(pscene);
					}
					return pscene;
				};

			private:
				system::console::COLOR mStartColor,mEndColor;
				Fade::TYPE mType;
				float mSpeed;
				system::System *mpSystem;
				system::sound::Sound *mpSound;
				float mCurrent,mEnd;
				float mVolumePitch;
				float mVolume;
				bool	mbFadeVolume;
				bool mbMove;
				system::console::ObjRectangle mFadeObj;
			};
		}// scene
	}// application
}//sf

#endif // !defined(AFX_FADE_H__B6A34AFF_990A_4D57_B2C9_8578B34A36E3__INCLUDED_)
