Team Fortress 2 Source Code as on 22/4/2020
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.
|
|
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//
#include "map_shared.h"
#include "bsplib.h"
#include "cmdlib.h"
CMapError g_MapError; int g_nMapFileVersion;
//-----------------------------------------------------------------------------
// Purpose:
// Input : *szKey -
// *szValue -
// *pLoadEntity -
// Output : ChunkFileResult_t
//-----------------------------------------------------------------------------
ChunkFileResult_t LoadEntityKeyCallback(const char *szKey, const char *szValue, LoadEntity_t *pLoadEntity) { if (!stricmp(szKey, "classname")) { if (!stricmp(szValue, "func_detail")) { pLoadEntity->nBaseContents = CONTENTS_DETAIL; } else if (!stricmp(szValue, "func_ladder")) { pLoadEntity->nBaseContents = CONTENTS_LADDER; } else if (!stricmp(szValue, "func_water")) { pLoadEntity->nBaseContents = CONTENTS_WATER; } } else if (!stricmp(szKey, "id")) { // UNDONE: flag entity errors by ID instead of index
//g_MapError.EntityState( atoi( szValue ) );
// rename this field since DME code uses this name
SetKeyValue( pLoadEntity->pEntity, "hammerid", szValue ); return(ChunkFile_Ok); } else if( !stricmp( szKey, "mapversion" ) ) { // .vmf map revision number
g_MapRevision = atoi( szValue ); SetKeyValue( pLoadEntity->pEntity, szKey, szValue ); return ( ChunkFile_Ok ); }
SetKeyValue( pLoadEntity->pEntity, szKey, szValue );
return(ChunkFile_Ok); }
static ChunkFileResult_t LoadEntityCallback( CChunkFile *pFile, int nParam ) { if (num_entities == MAX_MAP_ENTITIES) { // Exits.
g_MapError.ReportError ("num_entities == MAX_MAP_ENTITIES"); }
entity_t *mapent = &entities[num_entities]; num_entities++; memset(mapent, 0, sizeof(*mapent)); mapent->numbrushes = 0;
LoadEntity_t LoadEntity; LoadEntity.pEntity = mapent;
// No default flags/contents
LoadEntity.nBaseFlags = 0; LoadEntity.nBaseContents = 0;
//
// Read the entity chunk.
//
ChunkFileResult_t eResult = pFile->ReadChunk((KeyHandler_t)LoadEntityKeyCallback, &LoadEntity);
return eResult; }
bool LoadEntsFromMapFile( char const *pFilename ) { //
// Dummy this up for the texture handling. This can be removed when old .MAP file
// support is removed.
//
g_nMapFileVersion = 400;
//
// Open the file.
//
CChunkFile File; ChunkFileResult_t eResult = File.Open( pFilename, ChunkFile_Read );
if(eResult == ChunkFile_Ok) { num_entities = 0;
//
// Set up handlers for the subchunks that we are interested in.
//
CChunkHandlerMap Handlers; Handlers.AddHandler("entity", (ChunkHandler_t)LoadEntityCallback, 0);
File.PushHandlers(&Handlers);
//
// Read the sub-chunks. We ignore keys in the root of the file.
//
while (eResult == ChunkFile_Ok) { eResult = File.ReadChunk(); }
File.PopHandlers(); return true; } else { Error("Error in LoadEntsFromMapFile (in-memory file): %s.\n", File.GetErrorText(eResult)); return false; } }
|