mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-07 17:29:36 +00:00
1
This commit is contained in:
@@ -0,0 +1,140 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose: Utility function for creating HalfLife1-style prefab libraries from
|
||||
// a directory full of RMF and MAP files.
|
||||
//
|
||||
// $NoKeywords: $
|
||||
//=============================================================================//
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "hammer.h"
|
||||
#include "Prefabs.h"
|
||||
#include "Prefab3d.h"
|
||||
|
||||
// memdbgon must be the last include file in a .cpp file!!!
|
||||
#include <tier0/memdbgon.h>
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: One function - gets all the .rmf and .map files in the current dir,
|
||||
// merges them with same-name .txt files, and creates a prefab library
|
||||
// as specified in pszName.
|
||||
// Input : pszName -
|
||||
//-----------------------------------------------------------------------------
|
||||
void MakePrefabLibrary(LPCTSTR pszName)
|
||||
{
|
||||
CPrefabLibrary *pLibrary = new CPrefabLibraryRMF;
|
||||
int nPrefabs = 0;
|
||||
|
||||
printf("Making prefab library %s.ol\n", pszName);
|
||||
|
||||
pLibrary->SetName(pszName);
|
||||
|
||||
// disable caching of prefabs
|
||||
CPrefab::EnableCaching(FALSE);
|
||||
|
||||
// get files
|
||||
static BOOL bFirst = TRUE;
|
||||
Again:
|
||||
WIN32_FIND_DATA fd;
|
||||
HANDLE hnd = FindFirstFile(bFirst ? "*.rmf" : "*.map", &fd);
|
||||
|
||||
if(hnd != INVALID_HANDLE_VALUE) do
|
||||
{
|
||||
// check file type
|
||||
CPrefab *pPrefab = NULL;
|
||||
int iLoadResult = -1;
|
||||
|
||||
switch (CPrefab::CheckFileType(fd.cFileName))
|
||||
{
|
||||
case CPrefab::pftUnknown:
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
case CPrefab::pftRMF:
|
||||
{
|
||||
CPrefabRMF *pNew = new CPrefabRMF;
|
||||
iLoadResult = pNew->Init(fd.cFileName, TRUE, CPrefab::lsRMF);
|
||||
pPrefab = (CPrefab *)pNew;
|
||||
break;
|
||||
}
|
||||
|
||||
case CPrefab::pftMAP:
|
||||
{
|
||||
CPrefabRMF *pNew = new CPrefabRMF;
|
||||
iLoadResult = pNew->Init(fd.cFileName, TRUE, CPrefab::lsMAP);
|
||||
pPrefab = (CPrefab *)pNew;
|
||||
break;
|
||||
}
|
||||
|
||||
case CPrefab::pftScript:
|
||||
{
|
||||
Assert(0); // not supported yet
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(iLoadResult == -1)
|
||||
{
|
||||
// pPrefab might be null but delete doesn't care
|
||||
delete pPrefab;
|
||||
pPrefab = NULL;
|
||||
}
|
||||
|
||||
if(!pPrefab)
|
||||
continue;
|
||||
|
||||
printf(" including %s\n", fd.cFileName);
|
||||
++nPrefabs;
|
||||
|
||||
// find text file - set info with it
|
||||
CString strTextFile = fd.cFileName;
|
||||
int iPos = strTextFile.Find('.');
|
||||
strTextFile.GetBuffer(0)[iPos] = 0;
|
||||
strTextFile.ReleaseBuffer();
|
||||
strTextFile += ".txt";
|
||||
|
||||
if(GetFileAttributes(strTextFile) != 0xFFFFFFFF)
|
||||
{
|
||||
std::ifstream tfile(strTextFile);
|
||||
char szBuffer[1024], szBuffer2[1024];
|
||||
memset(szBuffer, 0, sizeof szBuffer);
|
||||
// read file
|
||||
tfile.read(szBuffer, 1023);
|
||||
// get rid of \r and \n chars
|
||||
char *p1 = szBuffer, *p2 = szBuffer2;
|
||||
while(p1[0])
|
||||
{
|
||||
if(p1[0] != '\n' && p1[0] != '\r')
|
||||
{
|
||||
p2[0] = p1[0];
|
||||
++p2;
|
||||
}
|
||||
++p1;
|
||||
}
|
||||
p2[0] = 0;
|
||||
// set the prefab's info
|
||||
pPrefab->SetNotes(szBuffer2);
|
||||
}
|
||||
|
||||
// add to new library
|
||||
pLibrary->Add(pPrefab);
|
||||
|
||||
} while(FindNextFile(hnd, &fd));
|
||||
|
||||
if(bFirst)
|
||||
{
|
||||
bFirst = FALSE;
|
||||
goto Again;
|
||||
}
|
||||
|
||||
// now rewrite library
|
||||
pLibrary->Save();
|
||||
|
||||
CPrefab::FreeAllData(); // free memory
|
||||
// re-enable prefab caching
|
||||
CPrefab::EnableCaching(TRUE);
|
||||
|
||||
printf("%d prefabs in library.\n", nPrefabs);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user