88 lines
2.2 KiB
C++
88 lines
2.2 KiB
C++
//====== Copyright c 1996-2007, Valve Corporation, All rights reserved. =======//
|
|
//
|
|
// Purpose:
|
|
//
|
|
// $NoKeywords: $
|
|
//
|
|
//=============================================================================//
|
|
|
|
#ifndef VMFMESHDATASUPPORT_H
|
|
#define VMFMESHDATASUPPORT_H
|
|
#ifdef _WIN32
|
|
#pragma once
|
|
#endif
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Special implementation of custom load/save chunks for entities
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
#include "vmfentitysupport.h"
|
|
|
|
class CVmfMeshDataSupport_SaveLoadHandler : public IMapEntitySaveLoadHandler
|
|
{
|
|
public:
|
|
CVmfMeshDataSupport_SaveLoadHandler();
|
|
~CVmfMeshDataSupport_SaveLoadHandler();
|
|
|
|
public:
|
|
virtual int GetCustomSectionVer() { return 1; }
|
|
|
|
public:
|
|
virtual void SetCurrentEntity( IMapEntity_Type_t *pEntity ) { m_pEntity = pEntity; }
|
|
|
|
public:
|
|
virtual ChunkFileResult_t LoadKeyValueBegin( CChunkFile *pFile );
|
|
virtual ChunkFileResult_t LoadKeyValue( const char *szKey, const char *szValue );
|
|
virtual ChunkFileResult_t LoadKeyValueEnd( CChunkFile *pFile, ChunkFileResult_t eLoadResult );
|
|
|
|
protected:
|
|
ChunkFileResult_t LoadKeyValue_Hdr( const char *szKey, const char *szValue );
|
|
ChunkFileResult_t LoadKeyValue_Ver1( const char *szKey, const char *szValue );
|
|
|
|
protected:
|
|
ChunkFileResult_t WriteDataChunk( CChunkFile *pFile, char const *szHash );
|
|
ChunkFileResult_t WriteBufferData( CChunkFile *pFile, CUtlBuffer &bufData, char const *szPrefix );
|
|
void LoadInitHeader();
|
|
bool LoadHaveHeader();
|
|
ChunkFileResult_t LoadHaveLines( int numHaveLines );
|
|
ChunkFileResult_t LoadSaveFullData();
|
|
|
|
protected:
|
|
virtual ChunkFileResult_t OnFileDataLoaded( CUtlBuffer &bufData ) = 0;
|
|
virtual ChunkFileResult_t OnFileDataWriting( CChunkFile *pFile, char const *szHash );
|
|
|
|
protected:
|
|
enum State
|
|
{
|
|
LOAD_VERSION = 0,
|
|
LOAD_HDR_END
|
|
};
|
|
enum StateVer1
|
|
{
|
|
LOAD_HASH = LOAD_HDR_END + 1,
|
|
LOAD_PREFIX,
|
|
LOAD_HEADER,
|
|
LOAD_DATA
|
|
};
|
|
int m_eLoadState;
|
|
int m_iLoadVer;
|
|
|
|
struct Header_t
|
|
{
|
|
char sHash[ MAX_PATH ];
|
|
char sPrefix[ MAX_PATH ];
|
|
int numBytes;
|
|
int numEncBytes;
|
|
int numLines;
|
|
int numHaveLines;
|
|
}
|
|
m_hLoadHeader;
|
|
|
|
CUtlBuffer m_bufLoadData;
|
|
IMapEntity_Type_t *m_pEntity;
|
|
};
|
|
|
|
#endif // #ifndef VMFMESHDATASUPPORT_H
|