#pragma once
#include<DxLib/DxLib.h>
#include<Window.h>
#include<Screen.h>
#include<Input.h>

const double PAI = 3.1415926535897931;
const double DEG = PAI / 180;

namespace DXFW
{
///	<summary>
///	クラス説明
///	</summary>
///	<example>
///	[サンプルコード:未完成]<BR>
/// サンプル説明<BR>
///	<code>
///	int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow )<BR>
///	{<BR>
///		if( !Dx::Initialise() ) return -1;<BR>
///		Dx::End();<BR>
///		return 0;<BR>
/// }<BR>
/// </code>	
/// </example>
class Dx
{
private:
	Dx();
	~Dx();
public:

	///<summary>ライブラリの初期化</summary>
	///ライブラリを初期化する。
	///初期化に失敗した場合、ソフトを強制的に終了する。
	///一部の設定関数は初期化前に呼び出す必要がある。
	static void Initialise( char* ウィンドウ名 , int 幅 , int 高さ , int 色深度 = 32 )
	{
		Window::SetMainText( ウィンドウ名 );
		Window::SetGraphMode( 幅 , 高さ , 色深度 );

		if( !Window::Single().isFullScreen )
		{
			DxLib::ChangeWindowMode( true );
		}

		if( DxLib::DxLib_Init() == -1 ) exit(1);

		DxLib::SetDrawScreen( DX_SCREEN_BACK ); 
	}
			
	///<summary>ライブラリの終了処理</summary>
	///ライブラリの使用を終了する。
	///この関数を使用した後は速やかにプログラムを終了させて下さい。
	static bool End()
	{
		return !DxLib::DxLib_End();
	}

	static bool Update()
	{
		Screen::Flip();
		Screen::Clear();
		Input::Update();
		return Dx::ProcessMessage();
	}

	///<summary>Windowsのメッセージ処理</summary>
	///Windowsのメッセージループ処理を行う。
	///目安として1/60秒に一回程度、この関数を呼び出す必要がある。
	///falseを返した場合、速やかにプログラムを終了させて下さい。
	static bool ProcessMessage()
	{
		return !DxLib::ProcessMessage();
	}
			
	///<summary>ログ出力の有無を設定</summary>
	///DXライブラリのデバッグ情報ログ・ファイル『App.log』を出力設定する。
	///この関数は、Initialise前に呼び出す必要がある。
	static bool SetOutputLog( bool isOut)
	{
		return !DxLib::SetOutApplicationLogValidFlag( isOut );
	}
			
	///<summary>ビデオRAM使用を設定</summary>
	///この関数は、Initialise前に呼び出す必要がある。
	static bool SetMemToVram( bool isVram)
	{
		return !SetScreenMemToVramFlag( isVram );
	}

	///<summary>非アクティブ時も処理を続行するか設定</summary>
	///通常は非アクティブ時は処理を停止します。
	static bool SetAlwaysRun( bool isAlways )
	{
		return !DxLib::SetAlwaysRunFlag( isAlways );
	}
};
}







