mirror of
https://github.com/jmarshall23/DoomRTX.git
synced 2026-08-19 04:04:54 +02:00
Added recast navmesh.
This commit is contained in:
@@ -320,7 +320,9 @@ extern idGameEdit * gameEdit;
|
||||
===============================================================================
|
||||
*/
|
||||
|
||||
const int GAME_API_VERSION = 8;
|
||||
class idRecastNavigationManager;
|
||||
|
||||
const int GAME_API_VERSION = 9;
|
||||
|
||||
typedef struct {
|
||||
|
||||
@@ -337,6 +339,7 @@ typedef struct {
|
||||
idUserInterfaceManager * uiManager; // user interface manager
|
||||
idDeclManager * declManager; // declaration manager
|
||||
idAASFileManager * AASFileManager; // AAS file manager
|
||||
idRecastNavigationManager * RecastNavigationManager; // Recast/Detour navigation manager
|
||||
idCollisionModelManager * collisionModelManager; // collision model manager
|
||||
|
||||
} gameImport_t;
|
||||
|
||||
@@ -45,6 +45,7 @@ idRenderModelManager * renderModelManager = NULL;
|
||||
idUserInterfaceManager * uiManager = NULL;
|
||||
idDeclManager * declManager = NULL;
|
||||
idAASFileManager * AASFileManager = NULL;
|
||||
idRecastNavigationManager * RecastNavigationManager = NULL;
|
||||
idCollisionModelManager * collisionModelManager = NULL;
|
||||
idCVar * idCVar::staticVars = NULL;
|
||||
|
||||
@@ -100,6 +101,7 @@ extern "C" gameExport_t *GetGameAPI( gameImport_t *import ) {
|
||||
uiManager = import->uiManager;
|
||||
declManager = import->declManager;
|
||||
AASFileManager = import->AASFileManager;
|
||||
RecastNavigationManager = import->RecastNavigationManager;
|
||||
collisionModelManager = import->collisionModelManager;
|
||||
}
|
||||
|
||||
@@ -141,6 +143,7 @@ void TestGameAPI( void ) {
|
||||
testImport.uiManager = ::uiManager;
|
||||
testImport.declManager = ::declManager;
|
||||
testImport.AASFileManager = ::AASFileManager;
|
||||
testImport.RecastNavigationManager = ::RecastNavigationManager;
|
||||
testImport.collisionModelManager = ::collisionModelManager;
|
||||
|
||||
testExport = *GetGameAPI( &testImport );
|
||||
|
||||
@@ -29,6 +29,7 @@ If you have questions concerning this license or the applicable additional terms
|
||||
#include "precompiled.h"
|
||||
#pragma hdrstop
|
||||
|
||||
#include "../Game_local.h"
|
||||
#include "AAS_local.h"
|
||||
|
||||
/*
|
||||
@@ -72,6 +73,28 @@ idAASLocal::Init
|
||||
============
|
||||
*/
|
||||
bool idAASLocal::Init( const idStr &mapName, unsigned int mapFileCRC ) {
|
||||
const idStr navName = idRecastNavMesh::NavFileNameForAASName( mapName );
|
||||
if ( recastNavMesh.IsLoaded() && mapName.Icmp( name ) == 0 ) {
|
||||
common->Printf( "Keeping %s\n", navName.c_str() );
|
||||
recastNavMesh.RemoveAllObstacles();
|
||||
return true;
|
||||
}
|
||||
|
||||
if ( recastNavMesh.Load( mapName, navName, mapFileCRC ) ) {
|
||||
if ( file ) {
|
||||
for ( int i = 0; i < obstacleList.Num(); i++ ) {
|
||||
delete obstacleList[i];
|
||||
}
|
||||
obstacleList.Clear();
|
||||
ShutdownRouting();
|
||||
AASFileManager->FreeAAS( file );
|
||||
file = NULL;
|
||||
}
|
||||
name = mapName;
|
||||
common->Printf( "Loaded Recast navmesh: %s\n", navName.c_str() );
|
||||
return true;
|
||||
}
|
||||
|
||||
if ( file && mapName.Icmp( file->GetName() ) == 0 && mapFileCRC == file->GetCRC() ) {
|
||||
common->Printf( "Keeping %s\n", file->GetName() );
|
||||
RemoveAllObstacles();
|
||||
@@ -95,6 +118,7 @@ idAASLocal::Shutdown
|
||||
============
|
||||
*/
|
||||
void idAASLocal::Shutdown( void ) {
|
||||
recastNavMesh.Shutdown();
|
||||
if ( file ) {
|
||||
ShutdownRouting();
|
||||
RemoveAllObstacles();
|
||||
@@ -109,6 +133,10 @@ idAASLocal::Stats
|
||||
============
|
||||
*/
|
||||
void idAASLocal::Stats( void ) const {
|
||||
if ( recastNavMesh.IsLoaded() ) {
|
||||
recastNavMesh.Stats();
|
||||
return;
|
||||
}
|
||||
if ( !file ) {
|
||||
return;
|
||||
}
|
||||
@@ -123,6 +151,9 @@ idAASLocal::GetSettings
|
||||
============
|
||||
*/
|
||||
const idAASSettings *idAASLocal::GetSettings( void ) const {
|
||||
if ( recastNavMesh.IsLoaded() ) {
|
||||
return recastNavMesh.GetSettings();
|
||||
}
|
||||
if ( !file ) {
|
||||
return NULL;
|
||||
}
|
||||
@@ -135,6 +166,9 @@ idAASLocal::PointAreaNum
|
||||
============
|
||||
*/
|
||||
int idAASLocal::PointAreaNum( const idVec3 &origin ) const {
|
||||
if ( recastNavMesh.IsLoaded() ) {
|
||||
return recastNavMesh.PointAreaNum( origin );
|
||||
}
|
||||
if ( !file ) {
|
||||
return 0;
|
||||
}
|
||||
@@ -147,6 +181,9 @@ idAASLocal::PointReachableAreaNum
|
||||
============
|
||||
*/
|
||||
int idAASLocal::PointReachableAreaNum( const idVec3 &origin, const idBounds &searchBounds, const int areaFlags ) const {
|
||||
if ( recastNavMesh.IsLoaded() ) {
|
||||
return recastNavMesh.PointReachableAreaNum( origin, searchBounds, areaFlags );
|
||||
}
|
||||
if ( !file ) {
|
||||
return 0;
|
||||
}
|
||||
@@ -160,6 +197,9 @@ idAASLocal::BoundsReachableAreaNum
|
||||
============
|
||||
*/
|
||||
int idAASLocal::BoundsReachableAreaNum( const idBounds &bounds, const int areaFlags ) const {
|
||||
if ( recastNavMesh.IsLoaded() ) {
|
||||
return recastNavMesh.BoundsReachableAreaNum( bounds, areaFlags );
|
||||
}
|
||||
if ( !file ) {
|
||||
return 0;
|
||||
}
|
||||
@@ -173,6 +213,10 @@ idAASLocal::PushPointIntoAreaNum
|
||||
============
|
||||
*/
|
||||
void idAASLocal::PushPointIntoAreaNum( int areaNum, idVec3 &origin ) const {
|
||||
if ( recastNavMesh.IsLoaded() ) {
|
||||
recastNavMesh.PushPointIntoAreaNum( areaNum, origin );
|
||||
return;
|
||||
}
|
||||
if ( !file ) {
|
||||
return;
|
||||
}
|
||||
@@ -185,6 +229,9 @@ idAASLocal::AreaCenter
|
||||
============
|
||||
*/
|
||||
idVec3 idAASLocal::AreaCenter( int areaNum ) const {
|
||||
if ( recastNavMesh.IsLoaded() ) {
|
||||
return recastNavMesh.AreaCenter( areaNum );
|
||||
}
|
||||
if ( !file ) {
|
||||
return vec3_origin;
|
||||
}
|
||||
@@ -197,6 +244,9 @@ idAASLocal::AreaFlags
|
||||
============
|
||||
*/
|
||||
int idAASLocal::AreaFlags( int areaNum ) const {
|
||||
if ( recastNavMesh.IsLoaded() ) {
|
||||
return recastNavMesh.AreaFlags( areaNum );
|
||||
}
|
||||
if ( !file ) {
|
||||
return 0;
|
||||
}
|
||||
@@ -209,6 +259,9 @@ idAASLocal::AreaTravelFlags
|
||||
============
|
||||
*/
|
||||
int idAASLocal::AreaTravelFlags( int areaNum ) const {
|
||||
if ( recastNavMesh.IsLoaded() ) {
|
||||
return recastNavMesh.AreaTravelFlags( areaNum );
|
||||
}
|
||||
if ( !file ) {
|
||||
return 0;
|
||||
}
|
||||
@@ -221,6 +274,9 @@ idAASLocal::Trace
|
||||
============
|
||||
*/
|
||||
bool idAASLocal::Trace( aasTrace_t &trace, const idVec3 &start, const idVec3 &end ) const {
|
||||
if ( recastNavMesh.IsLoaded() ) {
|
||||
return recastNavMesh.Trace( trace, start, end );
|
||||
}
|
||||
if ( !file ) {
|
||||
trace.fraction = 0.0f;
|
||||
trace.lastAreaNum = 0;
|
||||
@@ -285,4 +341,4 @@ int idAASLocal::AdjustPositionAndGetArea(idVec3& origin)
|
||||
int area = PointReachableAreaNum(origin, DefaultSearchBounds(), AREA_REACHABLE_WALK);
|
||||
PushPointIntoAreaNum(area, origin);
|
||||
return area;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -175,6 +175,9 @@ idAASLocal::DefaultSearchBounds
|
||||
============
|
||||
*/
|
||||
const idBounds &idAASLocal::DefaultSearchBounds( void ) const {
|
||||
if ( recastNavMesh.IsLoaded() ) {
|
||||
return recastNavMesh.GetSettings()->boundingBoxes[0];
|
||||
}
|
||||
return file->GetSettings().boundingBoxes[0];
|
||||
}
|
||||
|
||||
@@ -184,6 +187,10 @@ idAASLocal::ShowArea
|
||||
============
|
||||
*/
|
||||
void idAASLocal::ShowArea( const idVec3 &origin ) const {
|
||||
if ( recastNavMesh.IsLoaded() ) {
|
||||
recastNavMesh.ShowArea( origin );
|
||||
return;
|
||||
}
|
||||
static int lastAreaNum;
|
||||
int areaNum;
|
||||
const aasArea_t *area;
|
||||
@@ -242,6 +249,10 @@ idAASLocal::ShowWalkPath
|
||||
============
|
||||
*/
|
||||
void idAASLocal::ShowWalkPath( const idVec3 &origin, int goalAreaNum, const idVec3 &goalOrigin ) const {
|
||||
if ( recastNavMesh.IsLoaded() ) {
|
||||
recastNavMesh.ShowPath( origin, goalAreaNum, goalOrigin );
|
||||
return;
|
||||
}
|
||||
int i, areaNum, curAreaNum, travelTime;
|
||||
idReachability *reach;
|
||||
idVec3 org, areaCenter;
|
||||
@@ -288,6 +299,10 @@ idAASLocal::ShowFlyPath
|
||||
============
|
||||
*/
|
||||
void idAASLocal::ShowFlyPath( const idVec3 &origin, int goalAreaNum, const idVec3 &goalOrigin ) const {
|
||||
if ( recastNavMesh.IsLoaded() ) {
|
||||
recastNavMesh.ShowPath( origin, goalAreaNum, goalOrigin );
|
||||
return;
|
||||
}
|
||||
int i, areaNum, curAreaNum, travelTime;
|
||||
idReachability *reach;
|
||||
idVec3 org, areaCenter;
|
||||
@@ -476,6 +491,22 @@ idAASLocal::Test
|
||||
*/
|
||||
void idAASLocal::Test( const idVec3 &origin ) {
|
||||
|
||||
if ( recastNavMesh.IsLoaded() ) {
|
||||
if ( aas_showRecastNavMesh.GetInteger() > 0 ) {
|
||||
recastNavMesh.DebugDraw( aas_showRecastNavMesh.GetInteger() );
|
||||
}
|
||||
if ( aas_showAreas.GetBool() ) {
|
||||
ShowArea( origin );
|
||||
}
|
||||
if ( aas_showPath.GetInteger() > 0 ) {
|
||||
ShowWalkPath( origin, aas_showPath.GetInteger(), AreaCenter( aas_showPath.GetInteger() ) );
|
||||
}
|
||||
if ( aas_showFlyPath.GetInteger() > 0 ) {
|
||||
ShowFlyPath( origin, aas_showFlyPath.GetInteger(), AreaCenter( aas_showFlyPath.GetInteger() ) );
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if ( !file ) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -31,6 +31,7 @@ If you have questions concerning this license or the applicable additional terms
|
||||
|
||||
#include "AAS.h"
|
||||
#include "../Pvs.h"
|
||||
#include "RecastNavMesh.h"
|
||||
|
||||
|
||||
class idRoutingCache {
|
||||
@@ -125,6 +126,7 @@ public:
|
||||
private:
|
||||
idAASFile * file;
|
||||
idStr name;
|
||||
idRecastNavMesh recastNavMesh;
|
||||
|
||||
private: // routing data
|
||||
idRoutingCache *** areaCacheIndex; // for each area in each cluster the travel times to all other areas in the cluster
|
||||
|
||||
@@ -143,6 +143,10 @@ bool idAASLocal::WalkPathValid( int areaNum, const idVec3 &origin, int goalAreaN
|
||||
const aasArea_t *area;
|
||||
idVec3 p, dir;
|
||||
|
||||
if ( recastNavMesh.IsLoaded() ) {
|
||||
return recastNavMesh.PathValid( areaNum, origin, goalAreaNum, goalOrigin, travelFlags, endPos, endAreaNum );
|
||||
}
|
||||
|
||||
if ( file == NULL ) {
|
||||
endPos = goalOrigin;
|
||||
endAreaNum = 0;
|
||||
@@ -283,6 +287,10 @@ bool idAASLocal::WalkPathToGoal( aasPath_t &path, int areaNum, const idVec3 &ori
|
||||
idReachability *reach;
|
||||
idVec3 endPos;
|
||||
|
||||
if ( recastNavMesh.IsLoaded() ) {
|
||||
return recastNavMesh.PathToGoal( path, areaNum, origin, goalAreaNum, goalOrigin, travelFlags );
|
||||
}
|
||||
|
||||
path.type = PATHTYPE_WALK;
|
||||
path.moveGoal = origin;
|
||||
path.moveAreaNum = areaNum;
|
||||
@@ -402,6 +410,10 @@ idAASLocal::FlyPathValid
|
||||
bool idAASLocal::FlyPathValid( int areaNum, const idVec3 &origin, int goalAreaNum, const idVec3 &goalOrigin, int travelFlags, idVec3 &endPos, int &endAreaNum ) const {
|
||||
aasTrace_t trace;
|
||||
|
||||
if ( recastNavMesh.IsLoaded() ) {
|
||||
return recastNavMesh.PathValid( areaNum, origin, goalAreaNum, goalOrigin, travelFlags, endPos, endAreaNum );
|
||||
}
|
||||
|
||||
if ( file == NULL ) {
|
||||
endPos = goalOrigin;
|
||||
endAreaNum = 0;
|
||||
@@ -459,6 +471,10 @@ bool idAASLocal::FlyPathToGoal( aasPath_t &path, int areaNum, const idVec3 &orig
|
||||
idReachability *reach;
|
||||
idVec3 endPos;
|
||||
|
||||
if ( recastNavMesh.IsLoaded() ) {
|
||||
return recastNavMesh.PathToGoal( path, areaNum, origin, goalAreaNum, goalOrigin, travelFlags );
|
||||
}
|
||||
|
||||
path.type = PATHTYPE_WALK;
|
||||
path.moveGoal = origin;
|
||||
path.moveAreaNum = areaNum;
|
||||
|
||||
@@ -435,6 +435,10 @@ idAASLocal::SetAreaState
|
||||
bool idAASLocal::SetAreaState( const idBounds &bounds, const int areaContents, bool disabled ) {
|
||||
idBounds expBounds;
|
||||
|
||||
if ( recastNavMesh.IsLoaded() ) {
|
||||
return recastNavMesh.SetAreaState( bounds, areaContents, disabled );
|
||||
}
|
||||
|
||||
if ( !file ) {
|
||||
return false;
|
||||
}
|
||||
@@ -537,6 +541,10 @@ idAASLocal::AddObstacle
|
||||
aasHandle_t idAASLocal::AddObstacle( const idBounds &bounds ) {
|
||||
idRoutingObstacle *obstacle;
|
||||
|
||||
if ( recastNavMesh.IsLoaded() ) {
|
||||
return recastNavMesh.AddObstacle( bounds );
|
||||
}
|
||||
|
||||
if ( !file ) {
|
||||
return -1;
|
||||
}
|
||||
@@ -557,6 +565,10 @@ idAASLocal::RemoveObstacle
|
||||
============
|
||||
*/
|
||||
void idAASLocal::RemoveObstacle( const aasHandle_t handle ) {
|
||||
if ( recastNavMesh.IsLoaded() ) {
|
||||
recastNavMesh.RemoveObstacle( handle );
|
||||
return;
|
||||
}
|
||||
if ( !file ) {
|
||||
return;
|
||||
}
|
||||
@@ -576,6 +588,11 @@ idAASLocal::RemoveAllObstacles
|
||||
void idAASLocal::RemoveAllObstacles( void ) {
|
||||
int i;
|
||||
|
||||
if ( recastNavMesh.IsLoaded() ) {
|
||||
recastNavMesh.RemoveAllObstacles();
|
||||
return;
|
||||
}
|
||||
|
||||
if ( !file ) {
|
||||
return;
|
||||
}
|
||||
@@ -1002,6 +1019,10 @@ bool idAASLocal::RouteToGoalArea( int areaNum, const idVec3 origin, int goalArea
|
||||
travelTime = 0;
|
||||
*reach = NULL;
|
||||
|
||||
if ( recastNavMesh.IsLoaded() ) {
|
||||
return recastNavMesh.RouteToGoalArea( areaNum, origin, goalAreaNum, travelFlags, travelTime, reach );
|
||||
}
|
||||
|
||||
if ( !file ) {
|
||||
return false;
|
||||
}
|
||||
@@ -1151,6 +1172,10 @@ int idAASLocal::TravelTimeToGoalArea( int areaNum, const idVec3 &origin, int goa
|
||||
int travelTime;
|
||||
idReachability *reach;
|
||||
|
||||
if ( recastNavMesh.IsLoaded() ) {
|
||||
return recastNavMesh.TravelTimeToGoalArea( areaNum, origin, goalAreaNum, travelFlags );
|
||||
}
|
||||
|
||||
if ( !file ) {
|
||||
return 0;
|
||||
}
|
||||
@@ -1175,6 +1200,10 @@ bool idAASLocal::FindNearestGoal( aasGoal_t &goal, int areaNum, const idVec3 ori
|
||||
idVec3 v1, v2, p;
|
||||
float targetDist, dist;
|
||||
|
||||
if ( recastNavMesh.IsLoaded() ) {
|
||||
return recastNavMesh.FindNearestGoal( this, goal, areaNum, origin, target, travelFlags, obstacles, numObstacles, callback );
|
||||
}
|
||||
|
||||
if ( file == NULL || areaNum <= 0 ) {
|
||||
goal.areaNum = areaNum;
|
||||
goal.origin = origin;
|
||||
|
||||
@@ -7,9 +7,9 @@
|
||||
|
||||
This file has been generated with the Type Info Generator v1.1 (c) 2004 id Software
|
||||
|
||||
1186 constants
|
||||
1188 constants
|
||||
133 enums
|
||||
581 classes/structs/unions
|
||||
583 classes/structs/unions
|
||||
38 templates
|
||||
7 max inheritance level for 'idAI_Vagary'
|
||||
|
||||
@@ -643,6 +643,8 @@ static constantInfo_t constantInfo[] = {
|
||||
{ "int", "CONTACT_EDGE", "1" },
|
||||
{ "int", "CONTACT_MODELVERTEX", "2" },
|
||||
{ "int", "CONTACT_TRMVERTEX", "3" },
|
||||
{ "static const recastNavHandle_t", "RECAST_NAV_HANDLE_INVALID", "-1" },
|
||||
{ "static const int", "MAX_RECAST_PATH_AREAS", "256" },
|
||||
{ "int", "ALLOW_YES", "0" },
|
||||
{ "int", "ALLOW_BADPASS", "1" },
|
||||
{ "int", "ALLOW_NOTYET", "2" },
|
||||
@@ -655,7 +657,7 @@ static constantInfo_t constantInfo[] = {
|
||||
{ "int", "TEST_PARTICLE_MUZZLE", "2" },
|
||||
{ "int", "TEST_PARTICLE_FLIGHT", "3" },
|
||||
{ "int", "TEST_PARTICLE_SELECTED", "4" },
|
||||
{ "const int", "GAME_API_VERSION", "8" },
|
||||
{ "const int", "GAME_API_VERSION", "9" },
|
||||
{ "static const int", "MAX_LOGGED_STATS", "60*120" },
|
||||
{ "int", "MSG_OK", "0" },
|
||||
{ "int", "MSG_ABORT", "1" },
|
||||
@@ -4870,6 +4872,18 @@ static classVariableInfo_t idAASFileManager_typeInfo[] = {
|
||||
{ NULL, 0 }
|
||||
};
|
||||
|
||||
static classVariableInfo_t recastPath_t_typeInfo[] = {
|
||||
{ "idVec3", "moveGoal", (intptr_t)(&((recastPath_t *)0)->moveGoal), sizeof( ((recastPath_t *)0)->moveGoal ) },
|
||||
{ "idVec3", "secondaryGoal", (intptr_t)(&((recastPath_t *)0)->secondaryGoal), sizeof( ((recastPath_t *)0)->secondaryGoal ) },
|
||||
{ "int", "moveAreaNum", (intptr_t)(&((recastPath_t *)0)->moveAreaNum), sizeof( ((recastPath_t *)0)->moveAreaNum ) },
|
||||
{ "int", "travelTime", (intptr_t)(&((recastPath_t *)0)->travelTime), sizeof( ((recastPath_t *)0)->travelTime ) },
|
||||
{ NULL, 0 }
|
||||
};
|
||||
|
||||
static classVariableInfo_t idRecastNavigationManager_typeInfo[] = {
|
||||
{ NULL, 0 }
|
||||
};
|
||||
|
||||
static classVariableInfo_t gameReturn_t_typeInfo[] = {
|
||||
{ "char[1024]", "sessionCommand", (intptr_t)(&((gameReturn_t *)0)->sessionCommand), sizeof( ((gameReturn_t *)0)->sessionCommand ) },
|
||||
{ "int", "consistencyHash", (intptr_t)(&((gameReturn_t *)0)->consistencyHash), sizeof( ((gameReturn_t *)0)->consistencyHash ) },
|
||||
@@ -4914,6 +4928,7 @@ static classVariableInfo_t gameImport_t_typeInfo[] = {
|
||||
{ "idUserInterfaceManager *", "uiManager", (intptr_t)(&((gameImport_t *)0)->uiManager), sizeof( ((gameImport_t *)0)->uiManager ) },
|
||||
{ "idDeclManager *", "declManager", (intptr_t)(&((gameImport_t *)0)->declManager), sizeof( ((gameImport_t *)0)->declManager ) },
|
||||
{ "idAASFileManager *", "AASFileManager", (intptr_t)(&((gameImport_t *)0)->AASFileManager), sizeof( ((gameImport_t *)0)->AASFileManager ) },
|
||||
{ "idRecastNavigationManager *", "RecastNavigationManager", (intptr_t)(&((gameImport_t *)0)->RecastNavigationManager), sizeof( ((gameImport_t *)0)->RecastNavigationManager ) },
|
||||
{ "idCollisionModelManager *", "collisionModelManager", (intptr_t)(&((gameImport_t *)0)->collisionModelManager), sizeof( ((gameImport_t *)0)->collisionModelManager ) },
|
||||
{ NULL, 0 }
|
||||
};
|
||||
@@ -5201,11 +5216,11 @@ static classVariableInfo_t frameLookup_t_typeInfo[] = {
|
||||
{ NULL, 0 }
|
||||
};
|
||||
|
||||
static classVariableInfo_t class_285_class_285_typeInfo[] = {
|
||||
// { "const idSoundShader *", "soundShader", (intptr_t)(&((class_285::class_285 *)0)->soundShader), sizeof( ((class_285::class_285 *)0)->soundShader ) },
|
||||
// { "const function_t *", "function", (intptr_t)(&((class_285::class_285 *)0)->function), sizeof( ((class_285::class_285 *)0)->function ) },
|
||||
// { "const idDeclSkin *", "skin", (intptr_t)(&((class_285::class_285 *)0)->skin), sizeof( ((class_285::class_285 *)0)->skin ) },
|
||||
// { "int", "index", (intptr_t)(&((class_285::class_285 *)0)->index), sizeof( ((class_285::class_285 *)0)->index ) },
|
||||
static classVariableInfo_t class_287_class_287_typeInfo[] = {
|
||||
// { "const idSoundShader *", "soundShader", (intptr_t)(&((class_287::class_287 *)0)->soundShader), sizeof( ((class_287::class_287 *)0)->soundShader ) },
|
||||
// { "const function_t *", "function", (intptr_t)(&((class_287::class_287 *)0)->function), sizeof( ((class_287::class_287 *)0)->function ) },
|
||||
// { "const idDeclSkin *", "skin", (intptr_t)(&((class_287::class_287 *)0)->skin), sizeof( ((class_287::class_287 *)0)->skin ) },
|
||||
// { "int", "index", (intptr_t)(&((class_287::class_287 *)0)->index), sizeof( ((class_287::class_287 *)0)->index ) },
|
||||
{ NULL, 0 }
|
||||
};
|
||||
|
||||
@@ -8815,6 +8830,8 @@ static classTypeInfo_t classTypeInfo[] = {
|
||||
{ "idAASSettings", "", sizeof(idAASSettings), idAASSettings_typeInfo },
|
||||
{ "idAASFile", "", sizeof(idAASFile), idAASFile_typeInfo },
|
||||
{ "idAASFileManager", "", sizeof(idAASFileManager), idAASFileManager_typeInfo },
|
||||
{ "recastPath_t", "", sizeof(recastPath_t), recastPath_t_typeInfo },
|
||||
{ "idRecastNavigationManager", "", sizeof(idRecastNavigationManager), idRecastNavigationManager_typeInfo },
|
||||
{ "gameReturn_t", "", sizeof(gameReturn_t), gameReturn_t_typeInfo },
|
||||
{ "idGame", "", sizeof(idGame), idGame_typeInfo },
|
||||
{ "refSound_t", "", sizeof(refSound_t), refSound_t_typeInfo },
|
||||
@@ -8851,7 +8868,7 @@ static classTypeInfo_t classTypeInfo[] = {
|
||||
{ "jointAnimInfo_t", "", sizeof(jointAnimInfo_t), jointAnimInfo_t_typeInfo },
|
||||
{ "jointMod_t", "", sizeof(jointMod_t), jointMod_t_typeInfo },
|
||||
{ "frameLookup_t", "", sizeof(frameLookup_t), frameLookup_t_typeInfo },
|
||||
// { "class_285::class_285", "", sizeof(class_285::class_285), class_285_class_285_typeInfo },
|
||||
// { "class_287::class_287", "", sizeof(class_287::class_287), class_287_class_287_typeInfo },
|
||||
{ "frameCommand_t", "", sizeof(frameCommand_t), frameCommand_t_typeInfo },
|
||||
{ "animFlags_t", "", sizeof(animFlags_t), animFlags_t_typeInfo },
|
||||
{ "idModelExport", "", sizeof(idModelExport), idModelExport_typeInfo },
|
||||
|
||||
@@ -30,6 +30,7 @@ If you have questions concerning this license or the applicable additional terms
|
||||
#pragma hdrstop
|
||||
|
||||
#include "../Game_local.h"
|
||||
#include "../ai/RecastNavMesh.h"
|
||||
|
||||
#include "TypeInfo.h"
|
||||
|
||||
@@ -1476,6 +1477,51 @@ static void Cmd_AASStats_f( const idCmdArgs &args ) {
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
==================
|
||||
Cmd_RecastNavBuild_f
|
||||
==================
|
||||
*/
|
||||
static void Cmd_RecastNavBuild_f( const idCmdArgs &args ) {
|
||||
if ( !gameLocal.CheatsOk( false ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ( args.Argc() < 2 || args.Argc() > 3 ) {
|
||||
gameLocal.Printf( "usage: recastNavBuild <mapfile> [aasType|all]\n" );
|
||||
return;
|
||||
}
|
||||
|
||||
const idStr mapName = args.Argv( 1 );
|
||||
const idStr requestedType = args.Argc() > 2 ? args.Argv( 2 ) : "all";
|
||||
bool builtAny = false;
|
||||
|
||||
if ( requestedType.Icmp( "all" ) != 0 ) {
|
||||
common->SetRefreshOnPrint(true);
|
||||
builtAny = idRecastNavMesh::BuildMapFile( mapName, requestedType );
|
||||
common->SetRefreshOnPrint(false);
|
||||
} else {
|
||||
const idDict *dict = gameLocal.FindEntityDefDict( "aas_types", false );
|
||||
if ( !dict ) {
|
||||
gameLocal.Warning( "Unable to find entityDef for 'aas_types'" );
|
||||
return;
|
||||
}
|
||||
common->SetRefreshOnPrint(true);
|
||||
for ( const idKeyValue *kv = dict->MatchPrefix( "type" ); kv != NULL; kv = dict->MatchPrefix( "type", kv ) ) {
|
||||
if ( idRecastNavMesh::BuildMapFile( mapName, kv->GetValue() ) ) {
|
||||
builtAny = true;
|
||||
}
|
||||
}
|
||||
common->SetRefreshOnPrint(false);
|
||||
}
|
||||
|
||||
if ( builtAny ) {
|
||||
gameLocal.Printf( "Recast navmesh build complete for %s\n", mapName.c_str() );
|
||||
} else {
|
||||
gameLocal.Warning( "Recast navmesh build failed for %s", mapName.c_str() );
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
==================
|
||||
Cmd_TestDamage_f
|
||||
@@ -2366,6 +2412,7 @@ void idGameLocal::InitConsoleCommands( void ) {
|
||||
cmdSystem->AddCommand( "reloadanims", Cmd_ReloadAnims_f, CMD_FL_GAME|CMD_FL_CHEAT, "reloads animations" );
|
||||
cmdSystem->AddCommand( "listAnims", Cmd_ListAnims_f, CMD_FL_GAME, "lists all animations" );
|
||||
cmdSystem->AddCommand( "aasStats", Cmd_AASStats_f, CMD_FL_GAME, "shows AAS stats" );
|
||||
cmdSystem->AddCommand( "recastNavBuild", Cmd_RecastNavBuild_f, CMD_FL_GAME|CMD_FL_CHEAT, "builds Recast navmesh data for a map" );
|
||||
cmdSystem->AddCommand( "testDamage", Cmd_TestDamage_f, CMD_FL_GAME|CMD_FL_CHEAT, "tests a damage def", idCmdSystem::ArgCompletion_Decl<DECL_ENTITYDEF> );
|
||||
cmdSystem->AddCommand( "weaponSplat", Cmd_WeaponSplat_f, CMD_FL_GAME|CMD_FL_CHEAT, "projects a blood splat on the player weapon" );
|
||||
cmdSystem->AddCommand( "saveSelected", Cmd_SaveSelected_f, CMD_FL_GAME|CMD_FL_CHEAT, "saves the selected entity to the .map file" );
|
||||
|
||||
@@ -296,6 +296,7 @@ idCVar g_flushSave( "g_flushSave", "0", CVAR_GAME | CVAR_BOOL, "1 = don
|
||||
|
||||
idCVar aas_test( "aas_test", "0", CVAR_GAME | CVAR_INTEGER, "" );
|
||||
idCVar aas_showAreas( "aas_showAreas", "0", CVAR_GAME | CVAR_BOOL, "" );
|
||||
idCVar aas_showRecastNavMesh( "aas_showRecastNavMesh", "0", CVAR_GAME | CVAR_INTEGER, "0 = off, 1 = draw Recast navmesh, 2 = also draw dynamic blockers" );
|
||||
idCVar aas_showPath( "aas_showPath", "0", CVAR_GAME | CVAR_INTEGER, "" );
|
||||
idCVar aas_showFlyPath( "aas_showFlyPath", "0", CVAR_GAME | CVAR_INTEGER, "" );
|
||||
idCVar aas_showWallEdges( "aas_showWallEdges", "0", CVAR_GAME | CVAR_BOOL, "" );
|
||||
|
||||
@@ -224,6 +224,7 @@ extern idCVar g_flushSave;
|
||||
|
||||
extern idCVar aas_test;
|
||||
extern idCVar aas_showAreas;
|
||||
extern idCVar aas_showRecastNavMesh;
|
||||
extern idCVar aas_showPath;
|
||||
extern idCVar aas_showFlyPath;
|
||||
extern idCVar aas_showWallEdges;
|
||||
|
||||
Reference in New Issue
Block a user