/* _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
|
|   avbbs.cpp
|
+ -------------------------------------------------------------------------------------------------
|
+ _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ */

#include "Common.h"

#include <time.h>

#include "gameManager.h"
#include "systemManager.h"
#include "windowManager.h"

#include "avbbs.h"

//! エントリポイント
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
	avbbsClass::getInstance()->init(hInstance, lpCmdLine, nCmdShow);
	avbbsClass::getInstance()->run();

	return(1);
}


//! コンストラクタ
avbbsClass::avbbsClass(void)
{
}

//! デストラクタ
avbbsClass::~avbbsClass()
{
	release();
}

//! 解放
void avbbsClass::release(void)
{
	SAFE_DELETE(m_pGameMan);
}

//! 初期化
void avbbsClass::init(HINSTANCE hInst, char* cmdLine, int cmdShow)
{
	// 乱数生成
	srand((unsigned)time(NULL));

	m_pWindowMan = WindowManager::getInstance();
	m_pSystemMan = SystemManager::getInstance();
	m_pGameMan = new GameManager();

	m_pWindowMan->init(hInst, cmdLine, cmdShow);
	m_pWindowMan->createWindow(WINDOW_W, WINDOW_H);
	m_pSystemMan->init();
	m_pGameMan->init();
}

//! 実行
void avbbsClass::run(void)
{
	MSG msg;
	while(true){
        if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){
			if(msg.message == WM_QUIT) break;

			TranslateMessage(&msg);
			DispatchMessage(&msg);
        }else{
			m_pSystemMan->update();
			m_pGameMan->update();
			m_pGameMan->draw();
		}
    }

	release();
}

//! インスタンス取得
avbbsClass* avbbsClass::getInstance(void)
{
	static avbbsClass avbbs;
	return(&avbbs);
}
