#include "stdafx.h" #include "Application.h" //#include "DXVersion.h" #include "AppWindow.h" #include "AppTimer.h" #include "FilePackSystem.h" #include "RenderSystem.h" #include "SoundSystem.h" #include "InputSystem.h" #include "ResourceManager.h" #include "CameraManager.h" #include "SceneManager.h" #include "ObjectManager.h" #include "WorldManager.h" cApplication* cApplication::mSingleton = 0; cString cApplication::mLangaugeFolder = "korea"; cApplication::cApplication() : mFileSystem( 0 ) , mRenderSystem( 0 ) #ifdef MAP_EDITOR , mSoundSystem( 0 ) #endif , mInputSystem( 0 ) , mResourceManager( 0 ) , mCameraManager( 0 ) , mSceneManager( 0 ) , mObjectManager( 0 ) , mWorldManager( 0 ) { assert( mSingleton == 0 && "bad singleton!" ); mSingleton = this; /// Àü¿ª ŸÀÌ¸Ó »ý¼º mTimer = new cAppTimer; mTimer->Reset(); mAccumTime = 0; mDeltaTime = 0; mActive = true; } cApplication::~cApplication() { delete mWorldManager; delete mObjectManager; delete mSceneManager; delete mCameraManager; delete mResourceManager; delete mInputSystem; delete mRenderSystem; delete mFileSystem; #ifdef MAP_EDITOR delete mSoundSystem; #endif delete mWindow; delete mTimer; mSingleton = 0; } void cApplication::Clear() { if( mWorldManager ) mWorldManager->Clear(); if( mSceneManager ) mSceneManager->Clear(); if( mResourceManager ) mResourceManager->Clear(); } bool cApplication::Init( HWND wnd ) { /// Àü¿ª À©µµ¿ì¸¦ »ý¼º mWindow = new cAppWindow( wnd ); /// ÆÄÀÏ ½Ã½ºÅÛÀ» »ý¼º mFileSystem = new cFilePackSystem; if( !mFileSystem || !mFileSystem->Init() ) { return false; } /// ·»´õ¸µ ½Ã½ºÅÛÀ» »ý¼º mRenderSystem = new cRenderSystem( mWindow ); if( mRenderSystem->Init() == false ) { AfxMessageBox( "Failed to init render system" ); return false; } #ifdef MAP_EDITOR /// »ç¿îµå ½Ã½ºÅÛÀ» »ý¼º mSoundSystem = new cSoundSystem; if( mSoundSystem->Init( wnd ) == false ) { AfxMessageBox( "Failed to init sound system" ); return false; } #endif /// ÀÔ·Â ½Ã½ºÅÛÀ» »ý¼º mInputSystem = new cInputSystem; /// ÀÚ¿ø °ü¸®ÀÚ¸¦ »ý¼º mResourceManager = new cResourceManager; if( mResourceManager->Init() == false ) return false; //mpResourceManager->SetBaseDir( baseDir ); /// Ä«¸Þ¶ó °ü¸®ÀÚ¸¦ »ý¼º mCameraManager = new cCameraManager; /// Àå¸é °ü¸®ÀÚ¸¦ »ý¼º mSceneManager = new cSceneManager; /// ¿ùµå °ü¸®ÀÚ¸¦ »ý¼º mWorldManager = new cWorldManager; /// ¿ÀºêÁ§Æ® °ü¸®ÀÚ¸¦ »ý¼º ¹× ÃʱâÈ­ mObjectManager = new cObjectManager; if( mObjectManager->Init() == false ) { AfxMessageBox( "Failed to init object manager" ); return false; } /// ŸÀÌ¸Ó ½ÃÀÛ mTimer->Start(); return true; } void cApplication::Exit() { if( mObjectManager ) mObjectManager->Exit(); /// ŸÀÌ¸Ó ÁßÁö mTimer->Stop(); } void cApplication::Process( bool playing ) { NiSleep(1); /// °æ°ú ½Ã°£ ¹× ´©Àû ½Ã°£À» °è»ê mDeltaTime = mTimer->GetDeltaTime(); mAccumTime += mDeltaTime; /// ¿ÀºêÁ§Æ® °ü¸®ÀÚ¸¦ ó¸® mObjectManager->Process( mDeltaTime ); /// ÀÔ·Â °ü¸®ÀÚ¸¦ ó¸® mInputSystem->Process(); /// Ä«¸Þ¶ó °ü¸®ÀÚ¸¦ ó¸® mCameraManager->Process( mDeltaTime ); /// Àå¸é °ü¸®ÀÚ¸¦ ó¸® mSceneManager->Process( mDeltaTime, mAccumTime, playing ); /// ¿ùµå °ü¸®ÀÚ¸¦ ó¸® mWorldManager->Process( mDeltaTime, mAccumTime, playing ); } void cApplication::Render() { mRenderSystem->Render(); }