//------------------------------------------------------------------------------ /** ¿ùµå »óÀÇ ¿ÀºêÁ§Æ® Ư¼ºÀ» Á¤ÀÇ @author @since @remarks - SceneBase¿¡ ±âº»ÀûÀ¸·Î ÇÒÀÏÀ» ¿Ã·ÁÁÖ´Â ÀÛ¾÷ ÁøÇàÁß. ( À翵 ) . À¯´Ö process / Render . Object Process / Render . Packet Parse --> °¢ Scene¿¡¼­ Overide ÇÏ¿© »ç¿ë. - */ //======================================================================================================================= #ifndef _SceneBase_H #define _SceneBase_H #include "GameFramework.h" struct BASE_PLAYERINFO; struct CHARINFO_FOR_PACKET; #define MAX_SCENE_NAME 0xFF #include "FTextParser.h" #include "FTextSentence.h" #include "FTextRender.h" #include "GameFunc.h" enum { IMG_LOADING_BACKGROUND = 0, IMG_LOADING_BAR, IMG_LOADING_BAR_START, IMG_LOADING_BAR_CENTER, IMG_LOADING_BAR_END, IMG_MAX_COUNT, }; enum { IMG_LOADING_KALBUS = 1000, //!< žµ¹¶§´Â ¸¶Áö¸· À̹ÌÁö¶ó°í »ý°¢ÇÑ´Ù. }; enum eFADE_STATE { eFADE_STATE_NONE, eFADE_STATE_IN, eFADE_STATE_OUT, }; class SceneBase { protected: BOOL m_bEnableRender; // ÇÁ·Î¼¼½º°¡ Çѹøµµ ½ÇÇàµÇÁö ¾ÊÀº »óÅ·Π·£´õ¸µÀ» ½ÇÇàÇÒ °æ¿ì°¡ ÀÖ´Ù. // ±×·¡¼­ ÇÁ·Î¼¼½º°¡ ½ÇÇàµÉ¶§ TRUE ·Î ¼ÂÆÃµÇ°í, // ·£´õ¸µ½Ã ÀÌ º¯¼ö°¡ FALSE ÀÌ¸é ·£´õ¸µÇÏÁö ¾Ê´Â´Ù HANDLE m_hTexture[IMG_MAX_COUNT]; // ·Îµù È­¸é HANDLE m_hLoadingGageTexture; // ·Îµù °ÔÀÌÁö HANDLE m_hLoadingGageBackTexture; // ·Îµù °ÔÀÌÁö Back protected: // Scene »óÀÇ Global protected FuncµéÀ» µî·ÏÇÏÀÚ public: SceneBase( void ) : m_SceneType(SCENE_TYPE_NONE), m_bEnableRender(FALSE),m_fLoadingCount(0.0f),m_fMaxCount(1.0f),m_bChangeImage(FALSE),m_bUsePlayerCollision(FALSE),m_eFadeState(eFADE_STATE_NONE) { InitLoadingImg(); } virtual ~SceneBase( void ) {} BOOL IsEnablePkScene(); BOOL InPVPScene(); // °¢ ¾ÀÀÇ ³»¿ë virtual void Activate( void ) {} // Ȱ¼ºÈ­ µÇ¾úÀ» ¶§ virtual BOOL Init( void ); virtual DWORD AddBattleTimeSerial() { return 0;} virtual DWORD GetBattleTimeSerial() { return 0;} virtual BOOL Process( DWORD dwTick ); // ¸ÞÀÎ °è»ê virtual void StartFadeIn(); virtual void SetViewport(); // ºäÆ÷Æ® virtual BOOL Render( DWORD dwTick ); // ¸ÞÀÎ ·£´õ¸µ virtual BOOL PreInterfaceRender(DWORD dwTick); // ÀÎÅÍÆäÀ̽º ÀÌÀü ±×¸±°Í(2D) virtual BOOL PostInterfaceRender(DWORD dwTick); // ÀÎÅÍÆäÀ̽º ÀÌÈÄ ±×¸±°Í(2D) virtual void Release( void ); // Á¾·á void UserInterfaceManagersParsePacket( MSG_BASE * pMsg ); void UserInterfaceManagersParsePacketWorld (MSG_BASE * pMsg); virtual void ParsePacket( MSG_BASE * pMsg ); // ³×Æ®¿öÅ© ÆÐŶ ó¸® virtual void ParsePacketInChat( MSG_BASE * pMsg ); // üÆÃ ¼­¹ö ÆÐŶ ó¸® virtual BOOL PeekChangeScene(); virtual void ChangeSceneReady(DWORD waitingSec, SCENE_TYPE sceneType); virtual void ClearSceneReady(); virtual DWORD GetChangeSceneTickOver(); virtual DWORD ProcessChangeSceneOverTick(DWORD dwTick); virtual DWORD GetCurrentTick(); virtual BOOL SceneWndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam ,SI_MESSAGE *stMessage); virtual void OnConnectWorldServer() {} virtual void OnDeviceReset(); virtual void PopupExp(INT64 /*expoffset*/, int bonusExpRatio = 0, int ExpType = 0 ) {} virtual void IncreaseLoadingProcess(); void InitLoadingImg(); void LoadingImg( BOOL bIsChangeImage = TRUE ,int iForceIndex = -1); // 0¹øÂ° ¹è°æ À妽ºµµ Àֱ⶧¹®¿¡ -1·Î ¹Ù²ß´Ï´Ù. void LoadingCI( BOOL bIsChangeImage = TRUE ); void ReleaseLoadingImg(); void RenderLoadingImg(); void RenderLoadingGage(); void ChangeImage(bool bCheck, int iLoadingImg = -1) {m_bChangeImage = bCheck; m_iForceIndex = iLoadingImg; } void SetReadyDeadFlag(BOOL bFlag); void ShowBillingAlarm(DWORD dwRestTerm); void ShowDisconnectAlarm(DWORD dwErrCode); void loadInitMessage(); void EnablePlayerCollision(BOOL bUse){m_bUsePlayerCollision=bUse;} BOOL IsEnablePlayerCollision(){return m_bUsePlayerCollision;} virtual void ProcessFade(DWORD dwTick); eFADE_STATE GetFadeState(); const TCHAR *GetRevengeName(){ return m_ptszRevengeName;} SCENE_TYPE GetType() const { return m_SceneType; } DWORD GetpacketStatus() { return m_packetStatus; } virtual int OnEndRendering( DWORD dwTick ); #ifdef __NA_0_20080415_PROCESS_END_PROECSS virtual int OnEndProcess( DWORD dwTick ); #endif virtual RELATIONKIND::TYPE GetRelationKindOfCharacter( Character* pObject, BOOL bForceEnemy ) { return RELATIONKIND::Friend; } virtual void InserCenterTextMessage( char * szText, DWORD eType ) {} virtual void InsertKillMessage( TCHAR* first_user_id, DWORD first_user_color, TCHAR* second_user_id, DWORD second_user_color, TCHAR* format_string) // ÀüÀå ų ¸Þ¼¼Áö { } #ifdef _NA_007114_20140313_CHAOSZONE_GOLDRUSH virtual void InsertMonsterKillMessage( TCHAR* first_user_id, DWORD first_user_color, TCHAR* monster_id, DWORD second_user_color, TCHAR* format_string) // °ñµå·¯½Ã ų ¸Þ¼¼Áö { } #endif // _NA_007114_20140313_CHAOSZONE_GOLDRUSH private: void loadLoadingMessage(); protected: // °ÔÀÓ ¼­¹ö ÆÐŶ Proc virtual void OnRecvCG_CONNECTION( MSG_BASE * pMsg ); virtual void OnRecvCG_CHARINFO( MSG_BASE * pMsg ); virtual void OnRecvCG_MAP( MSG_BASE * pMsg ); virtual void OnRecvCG_SYNC( MSG_BASE * pMsg ); virtual void OnRecvCG_BATTLE( MSG_BASE * pMsg ); virtual void OnRecvCG_SKILL( MSG_BASE * pMsg ); virtual void OnRecvCG_CONVERSATION( MSG_BASE * pMsg ); virtual void OnRecvCG_ETC( MSG_BASE * pMsg ); virtual void OnRecvCG_GM( MSG_BASE * pMsg ); virtual void OnRecvCG_Chao( MSG_BASE * pMsg ); virtual void OnRecvCG_Party( MSG_BASE * pMsg); void OnRecvCG_ArmorKit(MSG_BASE * pMsg); // äÆÃ ¼­¹ö ÆÐŶ Proc virtual void OnRecvCW_CHAT( MSG_BASE * pMsg ); virtual void OnRecvCW_CRYPTOGRAPHY( MSG_BASE * pMsg ); #ifdef _NA_008283_20150511_NOTIFICATIONS_SYSTEM virtual void OnRecvCW_NOTIFICATION( MSG_BASE* message ); #endif // _NA_008283_20150511_NOTIFICATIONS_SYSTEM void OnRecvCG_CRYPTOGRAPHY(MSG_BASE * pMsg); #ifdef _JBH_ADD_AGE_LIMIT_MARK virtual void RenderGameRatingMark(); virtual void LoadingGameRatingMarkTexture(); virtual void ReleaseGameRatingMarkTexture(); #endif FTextParser m_FTextParser; FTextSentence m_FTextSentence; FTextRender m_FTextRender; FTextParser m_TipFTextPraser; FTextSentence m_TipFTextSentence; FTextRender m_TipFTextRender; // 4:3 ºñÀ² À̹ÌÁö¸¦ ±âº»À¸·Î »ç¿ëÇϰí wide Àϰæ¿ì¿¡´Â ³ôÀ̸¦ ©¶ó¼­ »ç¿ëÇÑ´Ù. const static int kLoadingImageWidth = 1024; const static int kLoadingImageHeight = 768; #ifdef _JBH_ADD_AGE_LIMIT_MARK HANDLE m_hGameRatingMarkTexture; #endif //_JBH_ADD_AGE_LIMIT_MARK // Auth ¼­¹ö ÆÐŶ Proc // Å¥¸Å´ÏÀú proc protected: virtual void OnRecvCG_CONNECTION__CG_PREPARE_WORLD_CONNECT_ACK( MSG_BASE * pMsg ); virtual void OnRecvCG_CONNECTION__CG_PREPARE_WORLD_CONNECT_NAK( MSG_BASE * pMsg ); public: virtual void KeyManagerProc(DWORD wParam,DWORD lParam); protected: SCENE_TYPE m_SceneType; DWORD m_packetStatus; //ÆÐŶ »óÅ °ü¸®-Áö¿Ï Ãß°¡ BOOL m_bChangeSceneReady; //ChangeSceneReady DWORD m_dwChangeSceneTick; //ChangeSceneReady°¡ È£ÃâµÈ ½ÃÁ¡ÀÇ Tick DWORD m_dwChangeSceneOverTick; // DWORD m_dwChangeSceneSecond; // SCENE_TYPE m_ChangeSceneType; // DWORD m_dwBaseTick; // Tick BOOL m_bReadyDeadFlag; TCHAR m_ptszRevengeName[MAX_CHARNAME_LENGTH+1]; float m_fLoadingCount; float m_fMaxCount; BOOL m_bUsePlayerCollision; //Ç÷¹À̾ÀÇ Ãæµ¹ 󸮸¦ ÇÒ°ÍÀΰ¡.ÆÐ½º ¿£ÁøÀÌ Àû¿ëµÈ ¸Ê¸¸ °¡´ÉÇÔ DWORD m_dwCurFadeTime; BOOL m_bFristRender; BOOL m_bChangeImage; eFADE_STATE m_eFadeState; int m_iForceIndex; private: // Attributes // ... }; //------------------------------------------------------------------------------ /** °¢Á¾ °ø¿ë ÃʱâÈ­ */ inline BOOL SceneBase::Init() { m_dwCurFadeTime=0; m_packetStatus=0; m_bChangeSceneReady = FALSE; m_dwBaseTick = 0; m_dwChangeSceneTick = 0; m_dwChangeSceneOverTick = 0; m_dwChangeSceneSecond = 0; m_bReadyDeadFlag = FALSE; m_bUsePlayerCollision =FALSE; m_bFristRender=TRUE; ZeroMemory(m_ptszRevengeName,sizeof(m_ptszRevengeName)); return TRUE; } inline void SceneBase::SetReadyDeadFlag(BOOL bFlag) { m_bReadyDeadFlag = bFlag; } //------------------------------------------------------------------------------ /** */ inline BOOL SceneBase::PeekChangeScene() { return m_bChangeSceneReady; } //------------------------------------------------------------------------------ /** */ inline void SceneBase::ChangeSceneReady(DWORD waitingSec, SCENE_TYPE sceneType) { m_bChangeSceneReady = TRUE; m_dwChangeSceneTick = GetCurrentTick(); m_dwChangeSceneOverTick = GetCurrentTick() + (waitingSec * 1000); m_ChangeSceneType = sceneType; } //------------------------------------------------------------------------------ /** */ inline DWORD SceneBase::GetChangeSceneTickOver() { return m_dwChangeSceneOverTick; } //------------------------------------------------------------------------------ /** */ inline DWORD SceneBase::ProcessChangeSceneOverTick(DWORD dwTick) { m_dwChangeSceneTick += dwTick; return m_dwChangeSceneTick; } //------------------------------------------------------------------------------ /** */ inline DWORD SceneBase::GetCurrentTick() { return m_dwBaseTick; } //------------------------------------------------------------------------------ /** */ inline void SceneBase::ClearSceneReady() { m_bChangeSceneReady = FALSE; } //------------------------------------------------------------------------------ /** */ inline int SceneBase::OnEndRendering( DWORD /*dwTick*/ ) { return 0; } extern int g_iLoadingImage; //#define _WRITE_SCENE_LOG #ifdef _WRITE_SCENE_LOG static void xxInitSceneLog(int t) { if( FILE* fp = fopen("c:\\ddafds.txt", "w") ) { fprintf(fp, "init\n"); fclose(fp); } }; static void xxWriteSceneLog( const char* message, ... ) { char buffer[2048]; va_list args; va_start(args, message); _vsntprintf( buffer, 2048-1, message, args ); va_end(args); if( FILE* fp = fopen("c:\\ddafds.txt", "a") ) { fprintf(fp, buffer); fprintf(fp, "\n"); fclose(fp); } }; #else #define xxInitSceneLog #define xxWriteSceneLog #endif // _WRITE_SCENE_LOG #endif // _SceneBase_H