csgo-2018-source/engine/MapReslistGenerator.h

131 lines
3.9 KiB
C
Raw Permalink Normal View History

2021-07-25 12:11:47 +08:00
//========= Copyright <20> 1996-2005, Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
//=============================================================================//
#ifndef MAPRESLISTGENERATOR_H
#define MAPRESLISTGENERATOR_H
#ifdef _WIN32
#pragma once
#endif
#include "filesystem.h"
#include "utlvector.h"
#include "utlsymbol.h"
#include "utlstring.h"
// Map list creation
// Map entry
struct maplist_map_t
{
char name[64];
};
// General purpose maplist generator.
// aMaps: Utlvector you'd like filled with the maps.
// bUseMapListFile: true if you want to use a maplist file, vs parsing the maps directory or using +map
// pMapFile: If you're using a maplist file, this should be the filename of it
// pSystemMsg: Used to preface and debug messages
// iCurrentMap: The map in the list to begin at. Handles the -startmap parameter for you.
bool BuildGeneralMapList( CUtlVector<maplist_map_t> *aMaps, bool bUseMapListFile, const char *pMapFile, char *pSystemMsg, int *iCurrentMap );
// initialization
void MapReslistGenerator_Init();
void MapReslistGenerator_Shutdown();
void MapReslistGenerator_BuildMapList();
//-----------------------------------------------------------------------------
// Purpose: Handles collating lists of resources on level load
// Used to generate reslists for steam
//-----------------------------------------------------------------------------
class CMapReslistGenerator
{
public:
CMapReslistGenerator();
// initializes the object to enable reslist generation
void EnableReslistGeneration( bool usemaplistfile );
// starts the reslist generation (starts cycling maps)
void StartReslistGeneration();
void BuildMapList();
void Shutdown();
// call every frame if we're enabled, just so that the next map can be triggered at the right time
void RunFrame();
// returns true if reslist generation is enabled
bool IsEnabled() { return m_bLoggingEnabled; }
bool IsLoggingToMap() { return m_bLoggingEnabled && !m_bLogToEngineList; }
bool IsCreatingForXbox();
// call to mark level load/end
void OnLevelLoadStart(const char *levelName);
void OnLevelLoadEnd();
void OnLevelShutdown();
void OnPlayerSpawn();
void OnFullyConnected();
// call to mark resources as being precached
void OnResourcePrecached(const char *relativePathFileName);
void OnModelPrecached(const char *relativePathFileName);
void OnSoundPrecached(const char *relativePathFileName);
char const *LogPrefix();
void EnableDeletionsTracking();
void TrackDeletions( const char *fullPathFileName );
bool ShouldRebuildCaches();
char const *GetResListDirectory() const;
void SetAutoQuit( bool bState );
private:
static void TrackDeletionsLoggingFunc(const char *fullPathFileName, const char *options);
static void FileSystemLoggingFunc(const char *fullPathFileName, const char *options);
void OnResourcePrecachedFullPath(const char *fullPathFileName);
void BuildEngineLogFromReslist();
void LogToEngineReslist( char const *pLine );
void WriteMapLog();
void SetPrefix( char const *mapname );
void SpewTrackedDeletionsLog();
void DoQuit();
bool m_bTrackingDeletions;
bool m_bLoggingEnabled;
bool m_bUsingMapList;
bool m_bRestartOnTransition;
bool m_bCreatingForXbox;
// true for engine, false for map
bool m_bLogToEngineList;
bool m_bAutoQuit;
// list of all maps to scan
CUtlVector<maplist_map_t> m_Maps;
int m_iCurrentMap;
float m_flNextMapRunTime;
CUtlSymbolTable m_AlreadyWrittenFileNames;
int m_iPauseTimeBetweenMaps;
char m_szPrefix[64];
char m_szLevelName[MAX_PATH];
CUtlSymbolTable m_DeletionList;
CUtlRBTree< CUtlSymbol > m_DeletionListWarnings;
CUtlSymbolTable m_DeletionListWarningsSymbols;
CUtlRBTree< CUtlString, int > m_MapLog;
CUtlRBTree< CUtlString, int > m_EngineLog;
CUtlString m_sResListDir;
};
// singleton accessor
CMapReslistGenerator &MapReslistGenerator();
#endif // MAPRESLISTGENERATOR_H