mirror of
https://github.com/id-Software/DOOM-3-BFG.git
synced 2025-03-14 22:50:45 +00:00
Merge branch 'master' into 635-nvrhi2
This commit is contained in:
commit
fbc07156d2
7 changed files with 44 additions and 23 deletions
|
@ -93,29 +93,36 @@ 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;
|
||||
|
||||
virtual void Preload( const char* mapName ) = 0;
|
||||
|
||||
// Gets the clip handle for a model.
|
||||
virtual cmHandle_t LoadModel( const char* modelName ) = 0;
|
||||
virtual cmHandle_t LoadModel( const char* modelName, const bool precache ) = 0;
|
||||
|
||||
// Sets up a trace model for collision with other trace models.
|
||||
virtual cmHandle_t SetupTrmModel( const idTraceModel& trm, const idMaterial* material ) = 0;
|
||||
|
||||
// Creates a trace model from a collision model, returns true if succesfull.
|
||||
virtual bool TrmFromModel( const char* modelName, idTraceModel& trm ) = 0;
|
||||
|
||||
// Gets the name of a model.
|
||||
virtual const char* GetModelName( cmHandle_t model ) const = 0;
|
||||
|
||||
// Gets the bounds of a model.
|
||||
virtual bool GetModelBounds( cmHandle_t model, idBounds& bounds ) const = 0;
|
||||
|
||||
// Gets all contents flags of brushes and polygons of a model ored together.
|
||||
virtual bool GetModelContents( cmHandle_t model, int& contents ) const = 0;
|
||||
|
||||
// Gets a vertex of a model.
|
||||
virtual bool GetModelVertex( cmHandle_t model, int vertexNum, idVec3& vertex ) const = 0;
|
||||
|
||||
// Gets an edge of a model.
|
||||
virtual bool GetModelEdge( cmHandle_t model, int edgeNum, idVec3& start, idVec3& end ) const = 0;
|
||||
|
||||
// Gets a polygon of a model.
|
||||
virtual bool GetModelPolygon( cmHandle_t model, int polygonNum, idFixedWinding& winding ) const = 0;
|
||||
|
||||
|
@ -123,14 +130,17 @@ public:
|
|||
virtual void Translation( trace_t* results, const idVec3& start, const idVec3& end,
|
||||
const idTraceModel* trm, const idMat3& trmAxis, int contentMask,
|
||||
cmHandle_t model, const idVec3& modelOrigin, const idMat3& modelAxis ) = 0;
|
||||
|
||||
// Rotates a trace model and reports the first collision if any.
|
||||
virtual void Rotation( trace_t* results, const idVec3& start, const idRotation& rotation,
|
||||
const idTraceModel* trm, const idMat3& trmAxis, int contentMask,
|
||||
cmHandle_t model, const idVec3& modelOrigin, const idMat3& modelAxis ) = 0;
|
||||
|
||||
// Returns the contents touched by the trace model or 0 if the trace model is in free space.
|
||||
virtual int Contents( const idVec3& start,
|
||||
const idTraceModel* trm, const idMat3& trmAxis, int contentMask,
|
||||
cmHandle_t model, const idVec3& modelOrigin, const idMat3& modelAxis ) = 0;
|
||||
|
||||
// Stores all contact points of the trace model with the model, returns the number of contacts.
|
||||
virtual int Contacts( contactInfo_t* contacts, const int maxContacts, const idVec3& start, const idVec6& dir, const float depth,
|
||||
const idTraceModel* trm, const idMat3& trmAxis, int contentMask,
|
||||
|
@ -138,13 +148,17 @@ public:
|
|||
|
||||
// Tests collision detection.
|
||||
virtual void DebugOutput( const idVec3& origin ) = 0;
|
||||
|
||||
// Draws a model.
|
||||
virtual void DrawModel( cmHandle_t model, const idVec3& modelOrigin, const idMat3& modelAxis,
|
||||
const idVec3& viewOrigin, const float radius ) = 0;
|
||||
|
||||
// Prints model information, use -1 handle for accumulated model info.
|
||||
virtual void ModelInfo( cmHandle_t model ) = 0;
|
||||
|
||||
// Lists all loaded models.
|
||||
virtual void ListModels() = 0;
|
||||
|
||||
// Writes a collision model file for the given map entity.
|
||||
virtual bool WriteCollisionModelForMapEntity( const idMapEntity* mapEnt, const char* filename, const bool testTraceModel = true ) = 0;
|
||||
};
|
||||
|
|
|
@ -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;
|
||||
|
@ -4340,7 +4339,7 @@ void idCollisionModelManagerLocal::Preload( const char* mapName )
|
|||
const preloadEntry_s& p = manifest.GetPreloadByIndex( i );
|
||||
if( p.resType == PRELOAD_COLLISION )
|
||||
{
|
||||
LoadModel( p.resourceName );
|
||||
LoadModel( p.resourceName, false );
|
||||
numLoaded++;
|
||||
}
|
||||
}
|
||||
|
@ -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();
|
||||
|
||||
|
@ -4544,7 +4543,7 @@ bool idCollisionModelManagerLocal::GetModelPolygon( cmHandle_t model, int polygo
|
|||
idCollisionModelManagerLocal::LoadModel
|
||||
==================
|
||||
*/
|
||||
cmHandle_t idCollisionModelManagerLocal::LoadModel( const char* modelName )
|
||||
cmHandle_t idCollisionModelManagerLocal::LoadModel( const char* modelName, const bool precache )
|
||||
{
|
||||
int handle;
|
||||
|
||||
|
@ -4602,6 +4601,12 @@ cmHandle_t idCollisionModelManagerLocal::LoadModel( const char* modelName )
|
|||
}
|
||||
}
|
||||
|
||||
// if only precaching .cm files do not waste memory converting render models
|
||||
if( precache )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
// try to load a .ASE or .LWO model and convert it to a collision model
|
||||
models[ numModels ] = LoadRenderModel( modelName );
|
||||
if( models[ numModels ] != NULL )
|
||||
|
@ -4781,7 +4786,7 @@ bool idCollisionModelManagerLocal::TrmFromModel( const char* modelName, idTraceM
|
|||
{
|
||||
cmHandle_t handle;
|
||||
|
||||
handle = LoadModel( modelName );
|
||||
handle = LoadModel( modelName, false );
|
||||
if( !handle )
|
||||
{
|
||||
common->Printf( "idCollisionModelManagerLocal::TrmFromModel: model %s not found.\n", modelName );
|
||||
|
|
|
@ -326,13 +326,13 @@ 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();
|
||||
|
||||
void Preload( const char* mapName );
|
||||
// get clip handle for model
|
||||
cmHandle_t LoadModel( const char* modelName );
|
||||
cmHandle_t LoadModel( const char* modelName, const bool precache );
|
||||
// sets up a trace model for collision with other trace models
|
||||
cmHandle_t SetupTrmModel( const idTraceModel& trm, const idMaterial* material );
|
||||
// create trace model from a collision model, returns true if succesfull
|
||||
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
@ -1894,7 +1894,7 @@ void idGameLocal::CacheDictionaryMedia( const idDict* dict )
|
|||
renderModelManager->FindModel( kv->GetValue() );
|
||||
|
||||
// precache .cm files only
|
||||
collisionModelManager->LoadModel( kv->GetValue() );
|
||||
collisionModelManager->LoadModel( kv->GetValue(), true );
|
||||
}
|
||||
}
|
||||
kv = dict->MatchPrefix( "model", kv );
|
||||
|
|
|
@ -851,8 +851,9 @@ void idTarget_SetModel::Spawn()
|
|||
{
|
||||
// precache the render model
|
||||
renderModelManager->FindModel( model );
|
||||
|
||||
// precache .cm files only
|
||||
collisionModelManager->LoadModel( model );
|
||||
collisionModelManager->LoadModel( model, true );
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -329,7 +329,7 @@ bool idClipModel::LoadModel( const char* name )
|
|||
FreeTraceModel( traceModelIndex );
|
||||
traceModelIndex = -1;
|
||||
}
|
||||
collisionModelHandle = collisionModelManager->LoadModel( name );
|
||||
collisionModelHandle = collisionModelManager->LoadModel( name, false );
|
||||
if( collisionModelHandle )
|
||||
{
|
||||
collisionModelManager->GetModelBounds( collisionModelHandle, bounds );
|
||||
|
@ -560,7 +560,7 @@ void idClipModel::Restore( idRestoreGame* savefile )
|
|||
savefile->ReadString( collisionModelName );
|
||||
if( collisionModelName.Length() )
|
||||
{
|
||||
collisionModelHandle = collisionModelManager->LoadModel( collisionModelName );
|
||||
collisionModelHandle = collisionModelManager->LoadModel( collisionModelName, false );
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -788,7 +788,7 @@ idClipModel::CheckModel
|
|||
*/
|
||||
cmHandle_t idClipModel::CheckModel( const char* name )
|
||||
{
|
||||
return collisionModelManager->LoadModel( name );
|
||||
return collisionModelManager->LoadModel( name, false );
|
||||
}
|
||||
|
||||
|
||||
|
@ -887,9 +887,11 @@ void idClip::Init()
|
|||
memset( clipSectors, 0, MAX_SECTORS * sizeof( clipSector_t ) );
|
||||
numClipSectors = 0;
|
||||
touchCount = -1;
|
||||
|
||||
// get world map bounds
|
||||
h = collisionModelManager->LoadModel( "worldMap" );
|
||||
h = collisionModelManager->LoadModel( "worldMap", false );
|
||||
collisionModelManager->GetModelBounds( h, worldBounds );
|
||||
|
||||
// create world sectors
|
||||
CreateClipSectors_r( 0, worldBounds, maxSector );
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
|
Loading…
Reference in a new issue