csgo-2018-source/hammer/manifest.h

163 lines
5.2 KiB
C
Raw Normal View History

2021-07-25 12:11:47 +08:00
//========= Copyright <20> 1996-2009, Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
//=====================================================================================//
#ifndef MANIFEST_H
#define MANIFEST_H
#pragma once
#include "KeyValues.h"
#include "UtlVector.h"
#include "MapDoc.h"
class BoundBox;
class CSelection;
class CMapWorld;
class CManifestInstance;
typedef struct SManifestLoadPrefs TManifestLoadPrefs;
class CManifestMap
{
public:
CManifestMap( void );
bool IsEditable( void );
CMapDoc *m_Map;
CString m_RelativeMapFileName, m_AbsoluteMapFileName;
CString m_FriendlyName;
bool m_bTopLevelMap;
bool m_bReadOnly;
bool m_bIsVersionControlled;
bool m_bCheckedOut;
bool m_bDefaultCheckin;
int m_InternalID;
CManifestInstance *m_Entity;
// user prefs ( which don't impact the bsp process )
bool m_bVisible;
bool m_bPrimaryMap;
bool m_bProtected;
};
class CManifestInstance : public CMapEntity
{
public:
DECLARE_MAPCLASS( CManifestInstance, CMapEntity )
CManifestInstance( void );
CManifestInstance( CManifestMap *pManifestMap );
virtual bool IsEditable( void );
CManifestMap *GetManifestMap( void ) { return m_pManifestMap; }
private:
CManifestMap *m_pManifestMap;
};
class CManifest : public CMapDoc
{
friend class CManifestCheckin;
protected:
DECLARE_DYNCREATE(CManifest)
public:
CManifest( void );
~CManifest( void );
static ChunkFileResult_t LoadKeyInfoCallback( const char *szKey, const char *szValue, CManifest *pDoc );
static ChunkFileResult_t LoadManifestInfoCallback( CChunkFile *pFile, CManifest *pDoc );
static ChunkFileResult_t LoadKeyCallback( const char *szKey, const char *szValue, CManifestMap *pManifestMap );
static ChunkFileResult_t LoadManifestVMFCallback( CChunkFile *pFile, CManifest *pDoc );
static ChunkFileResult_t LoadManifestMapsCallback( CChunkFile *pFile, CManifest *pDoc );
static ChunkFileResult_t LoadKeyPrefsCallback( const char *szKey, const char *szValue, TManifestLoadPrefs *pManifestLoadPrefs );
static ChunkFileResult_t LoadManifestVMFPrefsCallback( CChunkFile *pFile, CManifest *pDoc );
static ChunkFileResult_t LoadManifestMapsPrefsCallback( CChunkFile *pFile, CManifest *pDoc );
static ChunkFileResult_t LoadManifestCordoningPrefsCallback( CChunkFile *pFile, CManifest *pDoc );
bool Load( const char *pszFileName );
bool Save( const char *pszFileName, bool bForce );
bool IsValid( void ) { return m_bIsValid; }
virtual void Initialize( void );
virtual void Update( void );
virtual void SetModifiedFlag( BOOL bModified = TRUE );
virtual bool IsManifest( void ) { return true; }
void GetFullMapPath( const char *pManifestMapFileName, char *pOutputPath );
void SetManifestPrefsModifiedFlag( bool bModified = true );
int GetNumMaps( void ) { return m_Maps.Count(); }
CManifestMap *GetMap( int index ) { return m_Maps[ index ]; }
CManifestMap *FindMap( CMapDoc *pMap );
CManifestMap *FindMapByID( int InternalID );
void SetPrimaryMap( CManifestMap *pManifestMap );
CManifestMap *GetPrimaryMap( void ) { return m_pPrimaryMap; }
void SetVisibility( CManifestMap *pManifestMap, bool bIsVisible );
void MoveSelectionToSubmap( CManifestMap *pManifestMap, bool CenterContents );
CManifestMap *MoveSelectionToNewSubmap( CString &FriendlyName, CString &FileName, bool CenterContents );
CManifestMap *CreateNewMap( const char *AbsoluteFileName, const char *RelativeFileName, bool bSetID );
CManifestMap *AddNewSubmap( CString &FriendlyName, CString &FileName );
bool AddExistingMap( const char *pszFileName, bool bFromInstance );
bool AddExistingMap( void );
bool RemoveSubMap( CManifestMap *pManifestMap );
bool CheckOut( );
bool AddToVersionControl( );
void CheckFileStatus( );
CSelection *GetSelection( void ) { return m_pSelection; }
void ClearSelection( void );
virtual void UpdateInstanceMap( CMapDoc *pInstanceMapDoc );
virtual void AddObjectToWorld(CMapClass *pObject, CMapClass *pParent = NULL);
CMapWorld *GetManifestWorld( void ) { return m_ManifestWorld; }
bool m_bReadOnly;
bool m_bIsVersionControlled;
bool m_bCheckedOut;
bool m_bDefaultCheckin;
protected:
virtual BOOL OnOpenDocument(LPCTSTR lpszPathName);
virtual BOOL OnSaveDocument(LPCTSTR lpszPathName);
virtual void DeleteContents( void );
private:
void AddManifestObjectToWorld( CMapClass *pObject, CMapClass *pParent = NULL );
void RemoveManifestObjectFromWorld( CMapClass *pObject, bool bRemoveChildren );
bool LoadVMFManifest( const char *pszFileName );
bool LoadVMFManifestUserPrefs( const char *pszFileName );
bool SaveVMFManifest( const char *pszFileName );
bool SaveVMFManifestMaps( const char *pszFileName );
bool SaveVMFManifestUserPrefs( const char *pszFileName );
int m_NextInternalID;
bool m_bIsValid;
bool m_bRelocateSave;
CUtlVector< CManifestMap * > m_Maps;
CManifestMap *m_pPrimaryMap;
char m_ManifestDir[ MAX_PATH ];
CMenu m_ManifestMenu;
CMapWorld *m_ManifestWorld;
bool m_bManifestChanged, m_bManifestUserPrefsChanged;
CHistory *m_pSaveUndo;
CHistory *m_pSaveRedo;
protected:
//{{AFX_MSG(CMapDoc)
afx_msg void OnFileSaveAs();
//}}AFX_MSG
public:
DECLARE_MESSAGE_MAP()
};
#endif // #define MANIFEST_H