//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: // // $NoKeywords: $ //=============================================================================// #ifndef BONUSMAPSDATABASE_H #define BONUSMAPSDATABASE_H #ifdef _WIN32 #pragma once #endif #include "utlvector.h" struct ChallengeDescription_t { char szName[32]; char szComment[256]; int iType; int iBronze; int iSilver; int iGold; int iBest; }; struct BonusMapDescription_t { bool bIsFolder; char szShortName[64]; char szFileName[128]; char szMapFileName[128]; char szChapterName[128]; char szImageName[128]; char szMapName[64]; char szComment[256]; bool bLocked; bool bComplete; CUtlVector *m_pChallenges; BonusMapDescription_t( void ) { bIsFolder = false; szShortName[ 0 ] = '\0'; szFileName[ 0 ] = '\0'; szMapFileName[ 0 ] = '\0'; szChapterName[ 0 ] = '\0'; szImageName[ 0 ] = '\0'; szMapName[ 0 ] = '\0'; szComment[ 0 ] = '\0'; bLocked = false; bComplete = false; m_pChallenges = NULL; } }; struct BonusMapChallenge_t { char szFileName[128]; char szMapName[32]; char szChallengeName[32]; int iBest; }; class KeyValues; //----------------------------------------------------------------------------- // Purpose: Keeps track of bonus maps on disk //----------------------------------------------------------------------------- class CBonusMapsDatabase { public: CBonusMapsDatabase( void ); ~CBonusMapsDatabase(); bool ReadBonusMapSaveData( void ); bool WriteSaveData( void ); const char * GetPath( void ) { return m_szCurrentPath; } void RootPath( void ); void AppendPath( const char *pchAppend ); void BackPath( void ); void SetPath( const char *pchPath, int iDirDepth ); void ClearBonusMapsList( void ); void ScanBonusMaps( void ); void RefreshMapData( void ); int BonusCount( void ); BonusMapDescription_t * GetBonusData( int iIndex ) { return &(m_BonusMaps[ iIndex ]); } int InvalidIndex( void ) { return m_BonusMaps.InvalidIndex(); } bool IsValidIndex( int iIndex ) { return m_BonusMaps.IsValidIndex( iIndex ); } bool GetBlink( void ); void SetBlink( bool bState ); bool BonusesUnlocked( void ); void SetCurrentChallengeNames( const char *pchFileName, const char *pchMapName, const char *pchChallengeName ); void GetCurrentChallengeNames( char *pchFileName, char *pchMapName, char *pchChallengeName ); void SetCurrentChallengeObjectives( int iBronze, int iSilver, int iGold ); void GetCurrentChallengeObjectives( int &iBronze, int &iSilver, int &iGold ); bool SetBooleanStatus( const char *pchName, const char *pchFileName, const char *pchMapName, bool bValue ); bool SetBooleanStatus( const char *pchName, int iIndex, bool bValue ); bool UpdateChallengeBest( const char *pchFileName, const char *pchMapName, const char *pchChallengeName, int iBest ); float GetCompletionPercentage( void ); int NumAdvancedComplete( void ); void NumMedals( int piNumMedals[ 3 ] ); private: void AddBonus( const char *pCurrentPath, const char *pDirFileName, bool bIsFolder ); void BuildSubdirectoryList( const char *pCurrentPath, bool bOutOfRoot ); void BuildBonusMapsList( const char *pCurrentPath, bool bOutOfRoot ); void ParseBonusMapData( char const *pszFileName, char const *pszShortName, bool bIsFolder ); private: KeyValues *m_pBonusMapsManifest; CUtlVector m_BonusMaps; KeyValues *m_pBonusMapSavedData; bool m_bSavedDataChanged; int m_iX360BonusesUnlocked; // Only used on 360 bool m_bHasLoadedSaveData; int m_iDirDepth; char m_szCurrentPath[_MAX_PATH]; float m_fCurrentCompletion; int m_iCompletableLevels; BonusMapChallenge_t m_CurrentChallengeNames; ChallengeDescription_t m_CurrentChallengeObjectives; }; void GetChallengeMedals( ChallengeDescription_t *pChallengeDescription, int &iBest, int &iEarnedMedal, int &iNext, int &iNextMedal ); CBonusMapsDatabase *BonusMapsDatabase( void ); extern const char g_pszMedalNames[4][8]; #endif // BONUSMAPSDATABASE_H