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.
112 lines
4.1 KiB
112 lines
4.1 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
// $NoKeywords: $ |
|
//=============================================================================// |
|
|
|
#include "bsplib.h" |
|
#include "ibsppack.h" |
|
#include "cmdlib.h" |
|
#include "zip_utils.h" |
|
|
|
class CBSPPack : public IBSPPack |
|
{ |
|
public: |
|
void LoadBSPFile( IFileSystem *pFileSystem, char *filename ); |
|
void WriteBSPFile( char *filename ); |
|
void ClearPackFile( void ); |
|
void AddFileToPack( const char *relativename, const char *fullpath ); |
|
void AddBufferToPack( const char *relativename, void *data, int length, bool bTextMode ); |
|
void SetHDRMode( bool bHDR ); |
|
bool SwapBSPFile( IFileSystem *pFileSystem, const char *filename, const char *swapFilename, bool bSwapOnLoad, VTFConvertFunc_t pVTFConvertFunc, VHVFixupFunc_t pVHVFixupFunc, CompressFunc_t pCompressFunc ); |
|
bool RepackBSP( CUtlBuffer &inputBuffer, CUtlBuffer &outputBuffer, eRepackBSPFlags repackFlags ); |
|
bool GetPakFileLump( IFileSystem *pFileSystem, const char *pBSPFilename, void **pPakData, int *pPakSize ); |
|
bool SetPakFileLump( IFileSystem *pFileSystem, const char *pBSPFilename, const char *pNewFilename, void *pPakData, int pakSize ); |
|
bool GetBSPDependants( IFileSystem *pFileSystem, const char *pBSPFilename, CUtlVector< CUtlString > *pList ); |
|
}; |
|
|
|
void CBSPPack::LoadBSPFile( IFileSystem *pFileSystem, char *filename ) |
|
{ |
|
MathLib_Init( 2.2f, 2.2f, 0.0f, 2.0f ); |
|
|
|
// This is shady, but the engine is the only client here and we want the same search paths it has. |
|
g_pFileSystem = g_pFullFileSystem = pFileSystem; |
|
|
|
::LoadBSPFile( filename ); |
|
} |
|
|
|
void CBSPPack::WriteBSPFile( char *filename ) |
|
{ |
|
::WriteBSPFile( filename ); |
|
} |
|
|
|
void CBSPPack::ClearPackFile( void ) |
|
{ |
|
::ClearPakFile( GetPakFile() ); |
|
} |
|
|
|
void CBSPPack::AddFileToPack( const char *relativename, const char *fullpath ) |
|
{ |
|
// Compressing at this point would work, but the usual usage is creating a BSP and using RepackBSP() to apply lump |
|
// and pack compression as a final pass |
|
::AddFileToPak( GetPakFile(), relativename, fullpath, IZip::eCompressionType_None ); |
|
} |
|
|
|
void CBSPPack::AddBufferToPack( const char *relativename, void *data, int length, bool bTextMode ) |
|
{ |
|
// Compressing at this point would work, but the usual usage is creating a BSP and using RepackBSP() to apply lump |
|
// and pack compression as a final pass |
|
::AddBufferToPak( GetPakFile(), relativename, data, length, bTextMode, IZip::eCompressionType_None ); |
|
} |
|
|
|
void CBSPPack::SetHDRMode( bool bHDR ) |
|
{ |
|
::SetHDRMode( bHDR ); |
|
} |
|
|
|
bool CBSPPack::SwapBSPFile( |
|
IFileSystem *pFileSystem, |
|
const char *filename, |
|
const char *swapFilename, |
|
bool bSwapOnLoad, |
|
VTFConvertFunc_t pVTFConvertFunc, |
|
VHVFixupFunc_t pVHVFixupFunc, |
|
CompressFunc_t pCompressFunc ) |
|
{ |
|
// This is shady, but the engine is the only client here and we want the same search paths it has. |
|
g_pFileSystem = g_pFullFileSystem = pFileSystem; |
|
|
|
return ::SwapBSPFile( filename, swapFilename, bSwapOnLoad, pVTFConvertFunc, pVHVFixupFunc, pCompressFunc ); |
|
} |
|
|
|
bool CBSPPack::RepackBSP( CUtlBuffer &inputBuffer, CUtlBuffer &outputBuffer, eRepackBSPFlags repackFlags ) |
|
{ |
|
return ::RepackBSP( inputBuffer, outputBuffer, |
|
( repackFlags & eRepackBSP_CompressLumps ) ? RepackBSPCallback_LZMA : NULL, |
|
( repackFlags & eRepackBSP_CompressPackfile ) ? IZip::eCompressionType_LZMA : IZip::eCompressionType_None ); |
|
} |
|
|
|
bool CBSPPack::GetPakFileLump( IFileSystem *pFileSystem, const char *pBSPFilename, void **pPakData, int *pPakSize ) |
|
{ |
|
g_pFileSystem = g_pFullFileSystem = pFileSystem; |
|
|
|
return ::GetPakFileLump( pBSPFilename, pPakData, pPakSize ); |
|
} |
|
|
|
bool CBSPPack::SetPakFileLump( IFileSystem *pFileSystem, const char *pBSPFilename, const char *pNewFilename, void *pPakData, int pakSize ) |
|
{ |
|
g_pFileSystem = g_pFullFileSystem = pFileSystem; |
|
|
|
return ::SetPakFileLump( pBSPFilename, pNewFilename, pPakData, pakSize ); |
|
} |
|
|
|
bool CBSPPack::GetBSPDependants( IFileSystem *pFileSystem, const char *pBSPFilename, CUtlVector< CUtlString > *pList ) |
|
{ |
|
g_pFileSystem = g_pFullFileSystem = pFileSystem; |
|
|
|
return ::GetBSPDependants( pBSPFilename, pList ); |
|
} |
|
|
|
EXPOSE_SINGLE_INTERFACE( CBSPPack, IBSPPack, IBSPPACK_VERSION_STRING ); |
|
|
|
|