#include "stdafx.h" #include "StageManager.h" #include "IntroStage.h" #include "LoginStage.h" #include "ServerStage.h" #include "SelectStage.h" #include "MakeStage.h" #include "LoadStage.h" #include "MapChange.h" #include "GameStage.h" #include "SceneManager.h" #include "ResourceManager.h" #include "GameResourceManager.h" #include "WorldManager.h" #include "ObjectManager.h" #include "SkillManager.h" #include "DramaturgyManager.h" #include "ShortcutManager.h" #include "UIManager.h" #include "ItemManager.h" #include "TarotManager.h" #include "FilterManager.h" #include "Application.h" #include "CoolTimeManager.h" #include "QuickManager.h" #include "PartyManager.h" #include "CameraManager.h" #include "QuestManager.h" #include "TriggerManager.h" #include "CheatManager.h" #include "PVPManager.h" #include "TitleManager.h" #include "LightAgent.h" #include "GuildManager.h" #include "TipManager.h" #include "ItemMixManager.h" #include "PartyUnionManager.h" #include "TutorialManager.h" #include "ChatManager.h" #include "ThemeManager.h" #include "WebManager.h" #include "InputSystem.h" #include "SoundSystem.h" #include "uicursor.h" #ifdef _GMTOOL #include "GMTool.h" #endif cStageManager* cStageManager::mpStageManager = NULL; //unsigned long size[256][256]; //unsigned long check[256][256]; cStageManager::cStageManager() { // ZeroMemory(check, sizeof(unsigned long)*256*256 ); // ZeroMemory(size, sizeof(unsigned long)*256*256 ); mpStageManager = this; for( int i = 0; i < eStage_Max; ++i ) mpStage[i] = NULL; mCurStage = eStage_Intro; mUserIdx = 0; mLoginIdx = 0; mChannelIdx = 0; mServerIdx = -1; mCurrentMapIdx = 0; mCurrentMapMode = 0; mIsAdultServer = false; /// mpWebManager = NULL; mpThemeManager = NULL; mpUIManager = NULL; mpWorldManager = NULL; mpObjectManager = NULL; mpGameResourceManager = NULL; mpSkillManager = NULL; mpDramaturgyManager = NULL; mpShortcutManager = NULL; mpItemManager = NULL; mpTarotManager = NULL; mpFilterManager = NULL; mpCoolManager = NULL; mpQuickManager = NULL; mpPartyManager = NULL; mpQuestManager = NULL; mpTriggerManager = NULL; mpCheatManager = NULL; mpPvpManager = NULL; mpTitleManager = NULL; mpGuildManager = NULL; mpTipManager = NULL; mpItemMixManager = NULL; mpPartyUnionManager = NULL; mpTutorialManager = NULL; mIOCPCLient = NULL; } cStageManager::~cStageManager() { //Exit(); /* cFileSaver saver; char buf[256] = {0,}; SYSTEMTIME t; ::GetLocalTime(&t); ::sprintf_s(buf, "packet_check_%04d-%02d-%02d %02d-%02d-%02d.txt", t.wYear, t.wMonth, t.wDay, t.wHour, t.wMinute, t.wSecond); if( saver.Open( buf ) == true ) { /// window mode for( unsigned int i=0;i<256; ++i ) { for( unsigned int k=0;k<256; ++k ) { if( check[i][k] != 0 || size[i][k] != 0 ) { ::sprintf_s( buf, "Category[%d] Packet[%d] Count[%d] Size[%d]\r\n", i, k, check[i][k], size[i][k] ); saver.Write( buf, strlen(buf) ); } } } } */ } bool cStageManager::Init( HWND hWnd, unsigned int /*screenWidth*/, unsigned int /*screenHeight*/ ) { /// ½ºÅ×ÀÌÁö »ý¼ºÀü¿¡ ³×Æ®¿öÅ© ¹× °¢Á¾ °ü¸®ÀÚµéÀ» »ý¼º /// ³×Æ®¿öÅ© »ý¼º ¹× ÃʱâÈ­ /// 070330 ³×Æ®¿öÅ© Ŭ·¡½º mIOCPCLient = new cIOCPClient( hWnd, WM_SOCKEVENTMSG2 ); if ( !mIOCPCLient || !mIOCPCLient->Initialize( ) ) return false; mpDramaturgyManager = new cDramaturgyManager; if( !mpDramaturgyManager ) { SAFE_DELETE(mpDramaturgyManager); assert( 0 && "failed to init dramaturgy manager" ); return false; } /// ÇÊÅͰü¸®ÀÚ »ý¼º ¹× ÃʱâÈ­ mpFilterManager = new cFilterManager; if( mpFilterManager == 0 || mpFilterManager->Init() == false ) { return false; } /// °ÔÀÓ ¸®¼Ò½º °ü¸®ÀÚ »ý¼º ¹× ÃʱâÈ­ mpGameResourceManager = new cGameResourceManager; if( !mpGameResourceManager || !mpGameResourceManager->Init() ) { return false; } mpUIManager = new cUIManager; if( !mpUIManager || mpUIManager->Init() == false ) { return false; } mpCoolManager = new cCoolTimeManager; if( mpCoolManager == 0 ) { return false; } /// ¾ÆÀÌÅÛ °ü¸®ÀÚ »ý¼º ¹× ÃʱâÈ­ mpItemManager = new cItemManager; if( mpItemManager == 0 ) { return false; } /// Äü½½·Ô °ü¸®ÀÚ »ý¼º ¹× ÃʱâÈ­ mpQuickManager = new cQuickManager; if( mpQuickManager == 0 ) { return false; } /// Ÿ·Ô °ü¸®ÀÚ »ý¼º ¹× ÃʱâÈ­ mpTarotManager = new cTarotManager; if( mpTarotManager == 0 || mpTarotManager->Init() == false ) { return false; } /// 070201 ¿õÁÖ, ´ÜÃàŰ °ü¸®ÀÚ »ý¼º mpShortcutManager = new cShortcutManager; if( !mpShortcutManager ) { return false; } /// ÆÄƼ°ü¸®ÀÚ »ý¼º ¹× ÃʱâÈ­ mpPartyManager = new cPartyManager; if( mpPartyManager == 0 ) { return false; } mpTriggerManager = new cTriggerManager; if( mpTriggerManager == 0 /*|| mpTriggerManager->Init() == false*/ ) { return false; } mpQuestManager = new cQuestManager; if( mpQuestManager == 0 /*|| mpQuestManager->Init() == false*/ ) { return false; } /// ¿ùµå °ü¸®ÀÚ »ý¼º ¹× ÃʱâÈ­ mpWorldManager = new cWorldManager; if( !mpWorldManager )//|| !mpWorldManager->Init() ) { return false; } /// ¿ÀºêÁ§Æ® °ü¸®ÀÚ »ý¼º ¹× ÃʱâÈ­ mpObjectManager = new cObjectManager; if( !mpObjectManager || !mpObjectManager->Init() ) { return false; } /// ½ºÅ³ °ü¸®ÀÚ¸¦ »ý¼º ¹× ÃʱâÈ­ mpSkillManager = new cSkillManager; if( !mpSkillManager || !mpSkillManager->Init() ) { return false; } /// ġƮ °ü¸®ÀÚ¸¦ »ý¼º mpCheatManager = new cCheatManager; /// PVP °ü¸®ÀÚ¸¦ »ý¼º mpPvpManager = new cPVPManager; if( !mpPvpManager ) { return false; } /// ȣĪ °ü¸®ÀÚ »ý¼º mpTitleManager = new cTitleManager; if( !mpTitleManager ) { return false; } /// ±æµå °ü¸®ÀÚ »ý¼º mpGuildManager = new cGuildManager; if( !mpGuildManager || !mpGuildManager->Init() ) { return false; } /// ÆÁ °ü¸®ÀÚ »ý¼º mpTipManager = new cTipManager; if( !mpTipManager || !mpTipManager->Init() ) { return false; } /// ¾ÆÀÌÅÛ Á¶ÇÕ °ü¸®ÀÚ mpItemMixManager = new cItemMixManager; if( !mpItemMixManager ) { return false; } /// ÆÄƼ ¿¬ÇÕ °ü¸®ÀÚ mpPartyUnionManager = new cPartyUnionManager; if( !mpPartyUnionManager ) { return false; } mpTutorialManager = new cTutorialManager; if( !mpTutorialManager || !mpTutorialManager->Init() ) { return false; } mpThemeManager = new cThemeManager; if( !mpThemeManager ) { return false; } mpWebManager = new cWebManager; if( !mpWebManager || !mpWebManager->Init( THEAPP->GetWindowInstance(), THEAPP->GetHWND() ) ) { return false; } /// °¢ ½ºÅ×ÀÌÁö »ý¼º mCurStage = eStage_Intro; mpStage[eStage_Intro] = new cIntroStage; mpStage[eStage_Login] = new cLoginStage; mpStage[eStage_Server] = new cServerStage; mpStage[eStage_Select] = new cSelectStage; mpStage[eStage_Make] = new cMakeStage; mpStage[eStage_Load] = new cLoadStage; mpStage[eStage_MapChange] = new cMapChangeStage; mpStage[eStage_Game] = new cGameStage; /// ¹è°æÀ½ ·Îµå SOUNDSYS->LoadBGMList(); /// °¢ stage ÃʱâÈ­ for( int i = 0; i < eStage_Max; ++i ) { mpStage[i]->Init( this ); } /// stage open mpStage[mCurStage]->InitStage(); mpStage[mCurStage]->Open(); return true; } void cStageManager::Exit() { if( mpGameResourceManager ) mpGameResourceManager->LoadEnd(); /// »ý¼º ¿ª¼øÀ¸·Î... if( mpStage[mCurStage] ) mpStage[mCurStage]->Close(); for( int i = 0; i < eStage_Max; ++i ) { SAFE_EXIT_DELETE( mpStage[i] ); } SAFE_DELETE( mpWebManager ); SAFE_DELETE( mpThemeManager ); SAFE_DELETE( mpTutorialManager ); SAFE_DELETE( mpPartyUnionManager ); SAFE_DELETE( mpItemMixManager ); SAFE_DELETE( mpTipManager ); SAFE_DELETE( mpGuildManager ); SAFE_DELETE( mpTitleManager ); SAFE_DELETE( mpPvpManager ); SAFE_DELETE( mpCheatManager ); SAFE_DELETE( mpSkillManager ); SAFE_EXIT_DELETE( mpObjectManager ); SAFE_EXIT_DELETE( mpWorldManager ); SAFE_DELETE( mpQuestManager ); SAFE_DELETE( mpTriggerManager ); SAFE_DELETE( mpPartyManager ); SAFE_DELETE( mpShortcutManager ); SAFE_DELETE( mpTarotManager ); SAFE_DELETE( mpQuickManager ); SAFE_DELETE( mpItemManager ); SAFE_DELETE( mpCoolManager ); SAFE_DELETE( mpUIManager ); SAFE_EXIT_DELETE( mpGameResourceManager ); SAFE_DELETE( mpFilterManager ); SAFE_DELETE( mpDramaturgyManager ); SAFE_DELETE( mIOCPCLient ); } static char buffer[256] = {0,}; void cStageManager::Process( unsigned long deltaTime, unsigned long accumTime ) { SOUNDSYS->ProcessStageBGM( accumTime ); /// skill mpSkillManager->Process( deltaTime, accumTime ); /// °ü¸® °´Ã¼µéÀÇ º¯È¯ mpObjectManager->Process( deltaTime, accumTime ); if( mCurStage == eStage_Login ) mpStage[eStage_Intro]->Process( deltaTime, accumTime ); /// mpStage[mCurStage]->Process( deltaTime, accumTime ); /// ÄðŸÀÓ mpCoolManager->Process( accumTime ); /// Äù½ºÆ® mpQuestManager->Process( accumTime ); mpPvpManager->Process( deltaTime, accumTime ); /// mpPartyManager->Process( accumTime ); /// mpPartyUnionManager->Process( accumTime ); /// mpTutorialManager->Process( deltaTime, accumTime ); /// ui mpUIManager->Process( deltaTime, accumTime ); } void cStageManager::ProcessWorld( unsigned long deltaTime, unsigned long accumTime ) { /// ¹Ù´Ú°ú ½ºÄ«À̵¼¿¡ ´ëÇÑ Ã³¸® ( º°µµ ·£´õ¸µ µÇ¾îÁú °´Ã¼¸¦ ±¸ºÐÇÑ´Ù. ) if( mCurStage == eStage_Game ) mpWorldManager->Process( deltaTime, accumTime ); } void cStageManager::NetworkMsgParser( unsigned long connectionindex, char* pMsg, unsigned long length ) { /* MSGROOT* msg = (MSGROOT*)pMsg; if( msg ) { check[msg->Category][msg->Protocol]++; size[msg->Category][msg->Protocol] += length; } */ mpStage[mCurStage]->NetworkMsgParser( connectionindex, pMsg, length ); } void cStageManager::MsgBoxEventParser( unsigned int event, unsigned int result, void* exData ) { mpStage[mCurStage]->MsgBoxEventParser( event, result, exData ); } void cStageManager::ProcessKeyPressed( cKeyboardAgent* pKeyboard ) { assert(pKeyboard); if( SHORTCUTMAN->ProcessKeyPressed( pKeyboard ) == false ) { mpStage[mCurStage]->ProcessKeyPressed( pKeyboard ); } } void cStageManager::ProcessKeyUpDown( unsigned long time, cKeyboardAgent* pKeyboard ) { assert(pKeyboard); if( SHORTCUTMAN->ProcessKeyUpDown( pKeyboard ) == false ) { mpStage[mCurStage]->ProcessKeyUpDown( time, pKeyboard ); } } void cStageManager::ProcessMouseEvent( unsigned long time, cMouseAgent* pMouse ) { assert(pMouse); if( pMouse->LButtonDoubleClick() ) { /// LBtnDoubleClick À̺¥Æ® ó¸® mpStage[mCurStage]->ProcessLButtonDClick( pMouse ); } else { if( pMouse->LButtonDown() ) { /// LBtnClick À̺¥Æ® ó¸® mpStage[mCurStage]->ProcessLButtonClick( pMouse ); } else if( pMouse->RButtonDown() ) { mpStage[mCurStage]->ProcessRButtonDown( pMouse ); } else if( pMouse->RButtonUp() ) { mpStage[mCurStage]->ProcessRButtonUp( pMouse ); } else if( pMouse->IsDrag() ) { /// mouse over¿¡ ´ëÇÑ Ã³¸® mpStage[mCurStage]->ProcessMouseover( time, pMouse ); } else { mpStage[mCurStage]->ProcessMouseover( time, pMouse ); } } } void cStageManager::ChangeStage( eSTAGE stage ) { if( mCurStage == stage ) return; /// ½ºÅ×ÀÌÁöÀÇ ¹è°æ »ç¿îµå °ü¸® ManagedBGM( mCurStage, stage ); mpStage[mCurStage]->Close(); /// ±âÁ¸ ½ºÅ×ÀÌÁö¿¡¼­ »ç¿ëÇÑ Á¤º¸¸¦ Á¦°ÅÇÑ´Ù. INPUTSYS->InputInfoClearAll(); if( stage != eStage_Game ) { LIGHTAGENT->Close(); SOUNDSYS->Close(); } if( mCurStage == eStage_Game || stage == eStage_Load ) { WORLDMAN->ClearSkyDome(); SCENEMAN->Clear(); RESOURCEMAN->Close(); } mpStage[stage]->InitStage(); mpStage[stage]->Open(); ManagedStageMap( mCurStage, stage ); mCurStage = stage; #ifdef _GMTOOL if( mCurStage == eStage_Game ) { GMTOOL->SetGMToolVisible( true ); } else GMTOOL->SetGMToolVisible( false ); if( mCurStage == eStage_Select ) { GMTOOL->Clear(); } #endif CURSOR->SetCursor( eCURSOR_DEFAULT ); } void cStageManager::SetTwitterUid(char* uid) { strncpy( mTwitterUid, uid, MAX_TWITTER_UID ); } void cStageManager::SetTwitterPwd(char* pwd) { strncpy( mTwitterPwd, pwd, MAX_TWITTER_PWD ); } void cStageManager::ManagedBGM( eSTAGE curStage, eSTAGE newStage ) { switch( newStage ) { case eStage_Login: { if( curStage != eStage_Server && curStage != eStage_Select ) { /// ¹è°æ »ç¿îµå ½ÃÀÛ SOUNDSYS->PlayBGMSound( true ); } } break; case eStage_Select: { if( curStage == eStage_Game ) { /// ¹è°æ »ç¿îµå ½ÃÀÛ SOUNDSYS->PlayBGMSound( true ); } } break; case eStage_Load: case eStage_MapChange: case eStage_Game: { /// ¸ðµç ¹è°æ »ç¿îµå Á¾·á SOUNDSYS->PlayBGMSound( false ); } break; default: break; } } void cStageManager::ManagedStageMap( eSTAGE curStage, eSTAGE newStage ) { switch( newStage ) { case eStage_Login: { CAMERAMAN->ChangeCamera( 1 ); if( curStage != eStage_Select && curStage != eStage_Server ) { SCENEMAN->Clear(); cLoginStage* p = (cLoginStage*)mpStage[eStage_Login]; if( p ) p->CreateLoginMap(); } } break; case eStage_Select: { CAMERAMAN->ChangeCamera( 1 ); if( curStage == eStage_Game ) { SCENEMAN->Clear(); cSelectStage* p = (cSelectStage*)mpStage[eStage_Select]; if( p ) p->CreateSelectMap( true ); } else { cSelectStage* p = (cSelectStage*)mpStage[eStage_Select]; if( p ) p->CreateSelectMap( false ); } } break; case eStage_Load: { CAMERAMAN->ChangeCamera( 0 ); SCENEMAN->Clear(); cSelectStage* p = (cSelectStage*)mpStage[eStage_Select]; if( p ) p->ClearSelectMap(); } break; default: break; } } void cStageManager::AddScreenShotMsg( const charT* fileName ) { if( CHATMANAGER == 0 ) return; if( mCurStage == eStage_Game && mpStage[eStage_Game] ) { cStringT msg; msg.Format( GAMERESOURCEMAN->GetGameText( 10000 ), fileName ); CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, msg.Cstr() ); } } void cStageManager::AddVideoCaptureMsg( const charT* fileName ) { if( CHATMANAGER == 0 ) return; if( mCurStage == eStage_Game && mpStage[eStage_Game] ) { cStringT msg; msg.Format( GAMERESOURCEMAN->GetGameText( 10001 ), fileName ); CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, msg.Cstr() ); } } void cStageManager::SetChannelIdx( unsigned long idx ) { #ifdef GMTOOL /// ä³Î À̵¿ üũ if( mChannelIdx != idx ) { GMTOOL->InitChannelChange(); } #endif mChannelIdx = idx; }