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.
113 lines
4.1 KiB
113 lines
4.1 KiB
5 years ago
|
//========= 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 );
|
||
|
|