You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
167 lines
4.0 KiB
167 lines
4.0 KiB
//========= 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<ChallengeDescription_t> *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<BonusMapDescription_t> 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
|