Dmap: always write a .cm file, especially when overwriting from a mod dir

This commit is contained in:
Robert Beckebans 2022-06-26 15:28:15 +02:00
parent 844bbb577f
commit a664f8599e
5 changed files with 10 additions and 12 deletions

View file

@ -93,7 +93,7 @@ public:
virtual ~idCollisionModelManager() {}
// Loads collision models from a map file.
virtual void LoadMap( const idMapFile* mapFile ) = 0;
virtual void LoadMap( const idMapFile* mapFile, bool ignoreOldCollisionFile ) = 0;
// Frees all the collision models.
virtual void FreeMap() = 0;

View file

@ -4256,7 +4256,7 @@ void idCollisionModelManagerLocal::ListModels()
idCollisionModelManagerLocal::BuildModels
================
*/
void idCollisionModelManagerLocal::BuildModels( const idMapFile* mapFile )
void idCollisionModelManagerLocal::BuildModels( const idMapFile* mapFile, bool ignoreOldCollisionFile )
{
int i;
const idMapEntity* mapEnt;
@ -4264,9 +4264,8 @@ void idCollisionModelManagerLocal::BuildModels( const idMapFile* mapFile )
idTimer timer;
timer.Start();
if( !LoadCollisionModelFile( mapFile->GetName(), mapFile->GetGeometryCRC() ) )
if( ignoreOldCollisionFile || !LoadCollisionModelFile( mapFile->GetName(), mapFile->GetGeometryCRC() ) )
{
if( !mapFile->GetNumEntities() )
{
return;
@ -4355,7 +4354,7 @@ void idCollisionModelManagerLocal::Preload( const char* mapName )
idCollisionModelManagerLocal::LoadMap
================
*/
void idCollisionModelManagerLocal::LoadMap( const idMapFile* mapFile )
void idCollisionModelManagerLocal::LoadMap( const idMapFile* mapFile, bool ignoreOldCollisionFile )
{
if( mapFile == NULL )
@ -4398,7 +4397,7 @@ void idCollisionModelManagerLocal::LoadMap( const idMapFile* mapFile )
common->UpdateLevelLoadPacifier();
// build collision models
BuildModels( mapFile );
BuildModels( mapFile, ignoreOldCollisionFile );
common->UpdateLevelLoadPacifier();

View file

@ -326,7 +326,7 @@ class idCollisionModelManagerLocal : public idCollisionModelManager
{
public:
// load collision models from a map file
void LoadMap( const idMapFile* mapFile );
void LoadMap( const idMapFile* mapFile, bool ignoreOldCollisionFile );
// frees all the collision models
void FreeMap();
@ -502,7 +502,7 @@ private: // CollisionMap_load.cpp
void RemapEdges( cm_node_t* node, int* edgeRemap );
void OptimizeArrays( cm_model_t* model );
void FinishModel( cm_model_t* model );
void BuildModels( const idMapFile* mapFile );
void BuildModels( const idMapFile* mapFile, bool ignoreOldCollisionFile );
cmHandle_t FindModel( const char* name );
cm_model_t* CollisionModelForMapEntity( const idMapEntity* mapEnt ); // brush/patch model from .map
cm_model_t* LoadRenderModel( const char* fileName ); // ASE/LWO models

View file

@ -976,7 +976,7 @@ void idGameLocal::LoadMap( const char* mapName, int randseed )
mapFileName = mapFile->GetName();
// load the collision map
collisionModelManager->LoadMap( mapFile );
collisionModelManager->LoadMap( mapFile, false );
collisionModelManager->Preload( mapName );
numClients = 0;

View file

@ -456,17 +456,16 @@ void Dmap( const idCmdArgs& args )
if( !leaked )
{
if( !noCM )
{
// make sure the collision model manager is not used by the game
cmdSystem->BufferCommandText( CMD_EXEC_NOW, "disconnect" );
// create the collision map
start = Sys_Milliseconds();
collisionModelManager->LoadMap( dmapGlobals.dmapFile );
// write always a fresh .cm file
collisionModelManager->LoadMap( dmapGlobals.dmapFile, true );
collisionModelManager->FreeMap();
end = Sys_Milliseconds();