Added recast navmesh.

This commit is contained in:
Justin Marshall
2026-05-22 21:59:30 -07:00
parent d24553b366
commit b0788b922e
31 changed files with 11241 additions and 20 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+3 -1
View File
@@ -346,6 +346,7 @@ typeinfo.exe</Command>
<ClCompile Include="game\ai\AAS_debug.cpp" /> <ClCompile Include="game\ai\AAS_debug.cpp" />
<ClCompile Include="game\ai\AAS_pathing.cpp" /> <ClCompile Include="game\ai\AAS_pathing.cpp" />
<ClCompile Include="game\ai\AAS_routing.cpp" /> <ClCompile Include="game\ai\AAS_routing.cpp" />
<ClCompile Include="game\ai\RecastNavMesh.cpp" />
<ClCompile Include="game\ai\AI.cpp" /> <ClCompile Include="game\ai\AI.cpp" />
<ClCompile Include="game\ai\AI_events.cpp" /> <ClCompile Include="game\ai\AI_events.cpp" />
<ClCompile Include="game\ai\AI_pathing.cpp" /> <ClCompile Include="game\ai\AI_pathing.cpp" />
@@ -461,6 +462,7 @@ typeinfo.exe</Command>
<ClInclude Include="game\ai\AASCallback_FindAttackPosition.h" /> <ClInclude Include="game\ai\AASCallback_FindAttackPosition.h" />
<ClInclude Include="game\ai\AASCallback_FindCoverArea.h" /> <ClInclude Include="game\ai\AASCallback_FindCoverArea.h" />
<ClInclude Include="game\ai\AAS_local.h" /> <ClInclude Include="game\ai\AAS_local.h" />
<ClInclude Include="game\ai\RecastNavMesh.h" />
<ClInclude Include="game\ai\AI.h" /> <ClInclude Include="game\ai\AI.h" />
<ClInclude Include="game\anim\Anim.h" /> <ClInclude Include="game\anim\Anim.h" />
<ClInclude Include="game\anim\Anim_Testmodel.h" /> <ClInclude Include="game\anim\Anim_Testmodel.h" />
@@ -559,4 +561,4 @@ typeinfo.exe</Command>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets"> <ImportGroup Label="ExtensionTargets">
</ImportGroup> </ImportGroup>
</Project> </Project>
+7 -1
View File
@@ -36,6 +36,9 @@
<ClCompile Include="game\ai\AAS_routing.cpp"> <ClCompile Include="game\ai\AAS_routing.cpp">
<Filter>AI</Filter> <Filter>AI</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="game\ai\RecastNavMesh.cpp">
<Filter>AI</Filter>
</ClCompile>
<ClCompile Include="game\ai\AI.cpp"> <ClCompile Include="game\ai\AI.cpp">
<Filter>AI</Filter> <Filter>AI</Filter>
</ClCompile> </ClCompile>
@@ -287,6 +290,9 @@
<ClInclude Include="game\ai\AAS_local.h"> <ClInclude Include="game\ai\AAS_local.h">
<Filter>AI</Filter> <Filter>AI</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="game\ai\RecastNavMesh.h">
<Filter>AI</Filter>
</ClInclude>
<ClInclude Include="game\ai\AI.h"> <ClInclude Include="game\ai\AI.h">
<Filter>AI</Filter> <Filter>AI</Filter>
</ClInclude> </ClInclude>
@@ -492,4 +498,4 @@
<ItemGroup> <ItemGroup>
<None Include="game\Game.def" /> <None Include="game\Game.def" />
</ItemGroup> </ItemGroup>
</Project> </Project>
+4 -1
View File
@@ -320,7 +320,9 @@ extern idGameEdit * gameEdit;
=============================================================================== ===============================================================================
*/ */
const int GAME_API_VERSION = 8; class idRecastNavigationManager;
const int GAME_API_VERSION = 9;
typedef struct { typedef struct {
@@ -337,6 +339,7 @@ typedef struct {
idUserInterfaceManager * uiManager; // user interface manager idUserInterfaceManager * uiManager; // user interface manager
idDeclManager * declManager; // declaration manager idDeclManager * declManager; // declaration manager
idAASFileManager * AASFileManager; // AAS file manager idAASFileManager * AASFileManager; // AAS file manager
idRecastNavigationManager * RecastNavigationManager; // Recast/Detour navigation manager
idCollisionModelManager * collisionModelManager; // collision model manager idCollisionModelManager * collisionModelManager; // collision model manager
} gameImport_t; } gameImport_t;
+3
View File
@@ -45,6 +45,7 @@ idRenderModelManager * renderModelManager = NULL;
idUserInterfaceManager * uiManager = NULL; idUserInterfaceManager * uiManager = NULL;
idDeclManager * declManager = NULL; idDeclManager * declManager = NULL;
idAASFileManager * AASFileManager = NULL; idAASFileManager * AASFileManager = NULL;
idRecastNavigationManager * RecastNavigationManager = NULL;
idCollisionModelManager * collisionModelManager = NULL; idCollisionModelManager * collisionModelManager = NULL;
idCVar * idCVar::staticVars = NULL; idCVar * idCVar::staticVars = NULL;
@@ -100,6 +101,7 @@ extern "C" gameExport_t *GetGameAPI( gameImport_t *import ) {
uiManager = import->uiManager; uiManager = import->uiManager;
declManager = import->declManager; declManager = import->declManager;
AASFileManager = import->AASFileManager; AASFileManager = import->AASFileManager;
RecastNavigationManager = import->RecastNavigationManager;
collisionModelManager = import->collisionModelManager; collisionModelManager = import->collisionModelManager;
} }
@@ -141,6 +143,7 @@ void TestGameAPI( void ) {
testImport.uiManager = ::uiManager; testImport.uiManager = ::uiManager;
testImport.declManager = ::declManager; testImport.declManager = ::declManager;
testImport.AASFileManager = ::AASFileManager; testImport.AASFileManager = ::AASFileManager;
testImport.RecastNavigationManager = ::RecastNavigationManager;
testImport.collisionModelManager = ::collisionModelManager; testImport.collisionModelManager = ::collisionModelManager;
testExport = *GetGameAPI( &testImport ); testExport = *GetGameAPI( &testImport );
+57 -1
View File
@@ -29,6 +29,7 @@ If you have questions concerning this license or the applicable additional terms
#include "precompiled.h" #include "precompiled.h"
#pragma hdrstop #pragma hdrstop
#include "../Game_local.h"
#include "AAS_local.h" #include "AAS_local.h"
/* /*
@@ -72,6 +73,28 @@ idAASLocal::Init
============ ============
*/ */
bool idAASLocal::Init( const idStr &mapName, unsigned int mapFileCRC ) { 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() ) { if ( file && mapName.Icmp( file->GetName() ) == 0 && mapFileCRC == file->GetCRC() ) {
common->Printf( "Keeping %s\n", file->GetName() ); common->Printf( "Keeping %s\n", file->GetName() );
RemoveAllObstacles(); RemoveAllObstacles();
@@ -95,6 +118,7 @@ idAASLocal::Shutdown
============ ============
*/ */
void idAASLocal::Shutdown( void ) { void idAASLocal::Shutdown( void ) {
recastNavMesh.Shutdown();
if ( file ) { if ( file ) {
ShutdownRouting(); ShutdownRouting();
RemoveAllObstacles(); RemoveAllObstacles();
@@ -109,6 +133,10 @@ idAASLocal::Stats
============ ============
*/ */
void idAASLocal::Stats( void ) const { void idAASLocal::Stats( void ) const {
if ( recastNavMesh.IsLoaded() ) {
recastNavMesh.Stats();
return;
}
if ( !file ) { if ( !file ) {
return; return;
} }
@@ -123,6 +151,9 @@ idAASLocal::GetSettings
============ ============
*/ */
const idAASSettings *idAASLocal::GetSettings( void ) const { const idAASSettings *idAASLocal::GetSettings( void ) const {
if ( recastNavMesh.IsLoaded() ) {
return recastNavMesh.GetSettings();
}
if ( !file ) { if ( !file ) {
return NULL; return NULL;
} }
@@ -135,6 +166,9 @@ idAASLocal::PointAreaNum
============ ============
*/ */
int idAASLocal::PointAreaNum( const idVec3 &origin ) const { int idAASLocal::PointAreaNum( const idVec3 &origin ) const {
if ( recastNavMesh.IsLoaded() ) {
return recastNavMesh.PointAreaNum( origin );
}
if ( !file ) { if ( !file ) {
return 0; return 0;
} }
@@ -147,6 +181,9 @@ idAASLocal::PointReachableAreaNum
============ ============
*/ */
int idAASLocal::PointReachableAreaNum( const idVec3 &origin, const idBounds &searchBounds, const int areaFlags ) const { int idAASLocal::PointReachableAreaNum( const idVec3 &origin, const idBounds &searchBounds, const int areaFlags ) const {
if ( recastNavMesh.IsLoaded() ) {
return recastNavMesh.PointReachableAreaNum( origin, searchBounds, areaFlags );
}
if ( !file ) { if ( !file ) {
return 0; return 0;
} }
@@ -160,6 +197,9 @@ idAASLocal::BoundsReachableAreaNum
============ ============
*/ */
int idAASLocal::BoundsReachableAreaNum( const idBounds &bounds, const int areaFlags ) const { int idAASLocal::BoundsReachableAreaNum( const idBounds &bounds, const int areaFlags ) const {
if ( recastNavMesh.IsLoaded() ) {
return recastNavMesh.BoundsReachableAreaNum( bounds, areaFlags );
}
if ( !file ) { if ( !file ) {
return 0; return 0;
} }
@@ -173,6 +213,10 @@ idAASLocal::PushPointIntoAreaNum
============ ============
*/ */
void idAASLocal::PushPointIntoAreaNum( int areaNum, idVec3 &origin ) const { void idAASLocal::PushPointIntoAreaNum( int areaNum, idVec3 &origin ) const {
if ( recastNavMesh.IsLoaded() ) {
recastNavMesh.PushPointIntoAreaNum( areaNum, origin );
return;
}
if ( !file ) { if ( !file ) {
return; return;
} }
@@ -185,6 +229,9 @@ idAASLocal::AreaCenter
============ ============
*/ */
idVec3 idAASLocal::AreaCenter( int areaNum ) const { idVec3 idAASLocal::AreaCenter( int areaNum ) const {
if ( recastNavMesh.IsLoaded() ) {
return recastNavMesh.AreaCenter( areaNum );
}
if ( !file ) { if ( !file ) {
return vec3_origin; return vec3_origin;
} }
@@ -197,6 +244,9 @@ idAASLocal::AreaFlags
============ ============
*/ */
int idAASLocal::AreaFlags( int areaNum ) const { int idAASLocal::AreaFlags( int areaNum ) const {
if ( recastNavMesh.IsLoaded() ) {
return recastNavMesh.AreaFlags( areaNum );
}
if ( !file ) { if ( !file ) {
return 0; return 0;
} }
@@ -209,6 +259,9 @@ idAASLocal::AreaTravelFlags
============ ============
*/ */
int idAASLocal::AreaTravelFlags( int areaNum ) const { int idAASLocal::AreaTravelFlags( int areaNum ) const {
if ( recastNavMesh.IsLoaded() ) {
return recastNavMesh.AreaTravelFlags( areaNum );
}
if ( !file ) { if ( !file ) {
return 0; return 0;
} }
@@ -221,6 +274,9 @@ idAASLocal::Trace
============ ============
*/ */
bool idAASLocal::Trace( aasTrace_t &trace, const idVec3 &start, const idVec3 &end ) const { bool idAASLocal::Trace( aasTrace_t &trace, const idVec3 &start, const idVec3 &end ) const {
if ( recastNavMesh.IsLoaded() ) {
return recastNavMesh.Trace( trace, start, end );
}
if ( !file ) { if ( !file ) {
trace.fraction = 0.0f; trace.fraction = 0.0f;
trace.lastAreaNum = 0; trace.lastAreaNum = 0;
@@ -285,4 +341,4 @@ int idAASLocal::AdjustPositionAndGetArea(idVec3& origin)
int area = PointReachableAreaNum(origin, DefaultSearchBounds(), AREA_REACHABLE_WALK); int area = PointReachableAreaNum(origin, DefaultSearchBounds(), AREA_REACHABLE_WALK);
PushPointIntoAreaNum(area, origin); PushPointIntoAreaNum(area, origin);
return area; return area;
} }
+31
View File
@@ -175,6 +175,9 @@ idAASLocal::DefaultSearchBounds
============ ============
*/ */
const idBounds &idAASLocal::DefaultSearchBounds( void ) const { const idBounds &idAASLocal::DefaultSearchBounds( void ) const {
if ( recastNavMesh.IsLoaded() ) {
return recastNavMesh.GetSettings()->boundingBoxes[0];
}
return file->GetSettings().boundingBoxes[0]; return file->GetSettings().boundingBoxes[0];
} }
@@ -184,6 +187,10 @@ idAASLocal::ShowArea
============ ============
*/ */
void idAASLocal::ShowArea( const idVec3 &origin ) const { void idAASLocal::ShowArea( const idVec3 &origin ) const {
if ( recastNavMesh.IsLoaded() ) {
recastNavMesh.ShowArea( origin );
return;
}
static int lastAreaNum; static int lastAreaNum;
int areaNum; int areaNum;
const aasArea_t *area; const aasArea_t *area;
@@ -242,6 +249,10 @@ idAASLocal::ShowWalkPath
============ ============
*/ */
void idAASLocal::ShowWalkPath( const idVec3 &origin, int goalAreaNum, const idVec3 &goalOrigin ) const { 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; int i, areaNum, curAreaNum, travelTime;
idReachability *reach; idReachability *reach;
idVec3 org, areaCenter; idVec3 org, areaCenter;
@@ -288,6 +299,10 @@ idAASLocal::ShowFlyPath
============ ============
*/ */
void idAASLocal::ShowFlyPath( const idVec3 &origin, int goalAreaNum, const idVec3 &goalOrigin ) const { 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; int i, areaNum, curAreaNum, travelTime;
idReachability *reach; idReachability *reach;
idVec3 org, areaCenter; idVec3 org, areaCenter;
@@ -476,6 +491,22 @@ idAASLocal::Test
*/ */
void idAASLocal::Test( const idVec3 &origin ) { 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 ) { if ( !file ) {
return; return;
} }
+2
View File
@@ -31,6 +31,7 @@ If you have questions concerning this license or the applicable additional terms
#include "AAS.h" #include "AAS.h"
#include "../Pvs.h" #include "../Pvs.h"
#include "RecastNavMesh.h"
class idRoutingCache { class idRoutingCache {
@@ -125,6 +126,7 @@ public:
private: private:
idAASFile * file; idAASFile * file;
idStr name; idStr name;
idRecastNavMesh recastNavMesh;
private: // routing data private: // routing data
idRoutingCache *** areaCacheIndex; // for each area in each cluster the travel times to all other areas in the cluster idRoutingCache *** areaCacheIndex; // for each area in each cluster the travel times to all other areas in the cluster
+16
View File
@@ -143,6 +143,10 @@ bool idAASLocal::WalkPathValid( int areaNum, const idVec3 &origin, int goalAreaN
const aasArea_t *area; const aasArea_t *area;
idVec3 p, dir; idVec3 p, dir;
if ( recastNavMesh.IsLoaded() ) {
return recastNavMesh.PathValid( areaNum, origin, goalAreaNum, goalOrigin, travelFlags, endPos, endAreaNum );
}
if ( file == NULL ) { if ( file == NULL ) {
endPos = goalOrigin; endPos = goalOrigin;
endAreaNum = 0; endAreaNum = 0;
@@ -283,6 +287,10 @@ bool idAASLocal::WalkPathToGoal( aasPath_t &path, int areaNum, const idVec3 &ori
idReachability *reach; idReachability *reach;
idVec3 endPos; idVec3 endPos;
if ( recastNavMesh.IsLoaded() ) {
return recastNavMesh.PathToGoal( path, areaNum, origin, goalAreaNum, goalOrigin, travelFlags );
}
path.type = PATHTYPE_WALK; path.type = PATHTYPE_WALK;
path.moveGoal = origin; path.moveGoal = origin;
path.moveAreaNum = areaNum; 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 { bool idAASLocal::FlyPathValid( int areaNum, const idVec3 &origin, int goalAreaNum, const idVec3 &goalOrigin, int travelFlags, idVec3 &endPos, int &endAreaNum ) const {
aasTrace_t trace; aasTrace_t trace;
if ( recastNavMesh.IsLoaded() ) {
return recastNavMesh.PathValid( areaNum, origin, goalAreaNum, goalOrigin, travelFlags, endPos, endAreaNum );
}
if ( file == NULL ) { if ( file == NULL ) {
endPos = goalOrigin; endPos = goalOrigin;
endAreaNum = 0; endAreaNum = 0;
@@ -459,6 +471,10 @@ bool idAASLocal::FlyPathToGoal( aasPath_t &path, int areaNum, const idVec3 &orig
idReachability *reach; idReachability *reach;
idVec3 endPos; idVec3 endPos;
if ( recastNavMesh.IsLoaded() ) {
return recastNavMesh.PathToGoal( path, areaNum, origin, goalAreaNum, goalOrigin, travelFlags );
}
path.type = PATHTYPE_WALK; path.type = PATHTYPE_WALK;
path.moveGoal = origin; path.moveGoal = origin;
path.moveAreaNum = areaNum; path.moveAreaNum = areaNum;
+29
View File
@@ -435,6 +435,10 @@ idAASLocal::SetAreaState
bool idAASLocal::SetAreaState( const idBounds &bounds, const int areaContents, bool disabled ) { bool idAASLocal::SetAreaState( const idBounds &bounds, const int areaContents, bool disabled ) {
idBounds expBounds; idBounds expBounds;
if ( recastNavMesh.IsLoaded() ) {
return recastNavMesh.SetAreaState( bounds, areaContents, disabled );
}
if ( !file ) { if ( !file ) {
return false; return false;
} }
@@ -537,6 +541,10 @@ idAASLocal::AddObstacle
aasHandle_t idAASLocal::AddObstacle( const idBounds &bounds ) { aasHandle_t idAASLocal::AddObstacle( const idBounds &bounds ) {
idRoutingObstacle *obstacle; idRoutingObstacle *obstacle;
if ( recastNavMesh.IsLoaded() ) {
return recastNavMesh.AddObstacle( bounds );
}
if ( !file ) { if ( !file ) {
return -1; return -1;
} }
@@ -557,6 +565,10 @@ idAASLocal::RemoveObstacle
============ ============
*/ */
void idAASLocal::RemoveObstacle( const aasHandle_t handle ) { void idAASLocal::RemoveObstacle( const aasHandle_t handle ) {
if ( recastNavMesh.IsLoaded() ) {
recastNavMesh.RemoveObstacle( handle );
return;
}
if ( !file ) { if ( !file ) {
return; return;
} }
@@ -576,6 +588,11 @@ idAASLocal::RemoveAllObstacles
void idAASLocal::RemoveAllObstacles( void ) { void idAASLocal::RemoveAllObstacles( void ) {
int i; int i;
if ( recastNavMesh.IsLoaded() ) {
recastNavMesh.RemoveAllObstacles();
return;
}
if ( !file ) { if ( !file ) {
return; return;
} }
@@ -1002,6 +1019,10 @@ bool idAASLocal::RouteToGoalArea( int areaNum, const idVec3 origin, int goalArea
travelTime = 0; travelTime = 0;
*reach = NULL; *reach = NULL;
if ( recastNavMesh.IsLoaded() ) {
return recastNavMesh.RouteToGoalArea( areaNum, origin, goalAreaNum, travelFlags, travelTime, reach );
}
if ( !file ) { if ( !file ) {
return false; return false;
} }
@@ -1151,6 +1172,10 @@ int idAASLocal::TravelTimeToGoalArea( int areaNum, const idVec3 &origin, int goa
int travelTime; int travelTime;
idReachability *reach; idReachability *reach;
if ( recastNavMesh.IsLoaded() ) {
return recastNavMesh.TravelTimeToGoalArea( areaNum, origin, goalAreaNum, travelFlags );
}
if ( !file ) { if ( !file ) {
return 0; return 0;
} }
@@ -1175,6 +1200,10 @@ bool idAASLocal::FindNearestGoal( aasGoal_t &goal, int areaNum, const idVec3 ori
idVec3 v1, v2, p; idVec3 v1, v2, p;
float targetDist, dist; float targetDist, dist;
if ( recastNavMesh.IsLoaded() ) {
return recastNavMesh.FindNearestGoal( this, goal, areaNum, origin, target, travelFlags, obstacles, numObstacles, callback );
}
if ( file == NULL || areaNum <= 0 ) { if ( file == NULL || areaNum <= 0 ) {
goal.areaNum = areaNum; goal.areaNum = areaNum;
goal.origin = origin; goal.origin = origin;
+26 -9
View File
@@ -7,9 +7,9 @@
This file has been generated with the Type Info Generator v1.1 (c) 2004 id Software This file has been generated with the Type Info Generator v1.1 (c) 2004 id Software
1186 constants 1188 constants
133 enums 133 enums
581 classes/structs/unions 583 classes/structs/unions
38 templates 38 templates
7 max inheritance level for 'idAI_Vagary' 7 max inheritance level for 'idAI_Vagary'
@@ -643,6 +643,8 @@ static constantInfo_t constantInfo[] = {
{ "int", "CONTACT_EDGE", "1" }, { "int", "CONTACT_EDGE", "1" },
{ "int", "CONTACT_MODELVERTEX", "2" }, { "int", "CONTACT_MODELVERTEX", "2" },
{ "int", "CONTACT_TRMVERTEX", "3" }, { "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_YES", "0" },
{ "int", "ALLOW_BADPASS", "1" }, { "int", "ALLOW_BADPASS", "1" },
{ "int", "ALLOW_NOTYET", "2" }, { "int", "ALLOW_NOTYET", "2" },
@@ -655,7 +657,7 @@ static constantInfo_t constantInfo[] = {
{ "int", "TEST_PARTICLE_MUZZLE", "2" }, { "int", "TEST_PARTICLE_MUZZLE", "2" },
{ "int", "TEST_PARTICLE_FLIGHT", "3" }, { "int", "TEST_PARTICLE_FLIGHT", "3" },
{ "int", "TEST_PARTICLE_SELECTED", "4" }, { "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" }, { "static const int", "MAX_LOGGED_STATS", "60*120" },
{ "int", "MSG_OK", "0" }, { "int", "MSG_OK", "0" },
{ "int", "MSG_ABORT", "1" }, { "int", "MSG_ABORT", "1" },
@@ -4870,6 +4872,18 @@ static classVariableInfo_t idAASFileManager_typeInfo[] = {
{ NULL, 0 } { 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[] = { static classVariableInfo_t gameReturn_t_typeInfo[] = {
{ "char[1024]", "sessionCommand", (intptr_t)(&((gameReturn_t *)0)->sessionCommand), sizeof( ((gameReturn_t *)0)->sessionCommand ) }, { "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 ) }, { "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 ) }, { "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 ) }, { "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 ) }, { "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 ) }, { "idCollisionModelManager *", "collisionModelManager", (intptr_t)(&((gameImport_t *)0)->collisionModelManager), sizeof( ((gameImport_t *)0)->collisionModelManager ) },
{ NULL, 0 } { NULL, 0 }
}; };
@@ -5201,11 +5216,11 @@ static classVariableInfo_t frameLookup_t_typeInfo[] = {
{ NULL, 0 } { NULL, 0 }
}; };
static classVariableInfo_t class_285_class_285_typeInfo[] = { static classVariableInfo_t class_287_class_287_typeInfo[] = {
// { "const idSoundShader *", "soundShader", (intptr_t)(&((class_285::class_285 *)0)->soundShader), sizeof( ((class_285::class_285 *)0)->soundShader ) }, // { "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_285::class_285 *)0)->function), sizeof( ((class_285::class_285 *)0)->function ) }, // { "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_285::class_285 *)0)->skin), sizeof( ((class_285::class_285 *)0)->skin ) }, // { "const idDeclSkin *", "skin", (intptr_t)(&((class_287::class_287 *)0)->skin), sizeof( ((class_287::class_287 *)0)->skin ) },
// { "int", "index", (intptr_t)(&((class_285::class_285 *)0)->index), sizeof( ((class_285::class_285 *)0)->index ) }, // { "int", "index", (intptr_t)(&((class_287::class_287 *)0)->index), sizeof( ((class_287::class_287 *)0)->index ) },
{ NULL, 0 } { NULL, 0 }
}; };
@@ -8815,6 +8830,8 @@ static classTypeInfo_t classTypeInfo[] = {
{ "idAASSettings", "", sizeof(idAASSettings), idAASSettings_typeInfo }, { "idAASSettings", "", sizeof(idAASSettings), idAASSettings_typeInfo },
{ "idAASFile", "", sizeof(idAASFile), idAASFile_typeInfo }, { "idAASFile", "", sizeof(idAASFile), idAASFile_typeInfo },
{ "idAASFileManager", "", sizeof(idAASFileManager), idAASFileManager_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 }, { "gameReturn_t", "", sizeof(gameReturn_t), gameReturn_t_typeInfo },
{ "idGame", "", sizeof(idGame), idGame_typeInfo }, { "idGame", "", sizeof(idGame), idGame_typeInfo },
{ "refSound_t", "", sizeof(refSound_t), refSound_t_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 }, { "jointAnimInfo_t", "", sizeof(jointAnimInfo_t), jointAnimInfo_t_typeInfo },
{ "jointMod_t", "", sizeof(jointMod_t), jointMod_t_typeInfo }, { "jointMod_t", "", sizeof(jointMod_t), jointMod_t_typeInfo },
{ "frameLookup_t", "", sizeof(frameLookup_t), frameLookup_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 }, { "frameCommand_t", "", sizeof(frameCommand_t), frameCommand_t_typeInfo },
{ "animFlags_t", "", sizeof(animFlags_t), animFlags_t_typeInfo }, { "animFlags_t", "", sizeof(animFlags_t), animFlags_t_typeInfo },
{ "idModelExport", "", sizeof(idModelExport), idModelExport_typeInfo }, { "idModelExport", "", sizeof(idModelExport), idModelExport_typeInfo },
+47
View File
@@ -30,6 +30,7 @@ If you have questions concerning this license or the applicable additional terms
#pragma hdrstop #pragma hdrstop
#include "../Game_local.h" #include "../Game_local.h"
#include "../ai/RecastNavMesh.h"
#include "TypeInfo.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 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( "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( "listAnims", Cmd_ListAnims_f, CMD_FL_GAME, "lists all animations" );
cmdSystem->AddCommand( "aasStats", Cmd_AASStats_f, CMD_FL_GAME, "shows AAS stats" ); 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( "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( "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" ); cmdSystem->AddCommand( "saveSelected", Cmd_SaveSelected_f, CMD_FL_GAME|CMD_FL_CHEAT, "saves the selected entity to the .map file" );
+1
View 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_test( "aas_test", "0", CVAR_GAME | CVAR_INTEGER, "" );
idCVar aas_showAreas( "aas_showAreas", "0", CVAR_GAME | CVAR_BOOL, "" ); 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_showPath( "aas_showPath", "0", CVAR_GAME | CVAR_INTEGER, "" );
idCVar aas_showFlyPath( "aas_showFlyPath", "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, "" ); idCVar aas_showWallEdges( "aas_showWallEdges", "0", CVAR_GAME | CVAR_BOOL, "" );
+1
View File
@@ -224,6 +224,7 @@ extern idCVar g_flushSave;
extern idCVar aas_test; extern idCVar aas_test;
extern idCVar aas_showAreas; extern idCVar aas_showAreas;
extern idCVar aas_showRecastNavMesh;
extern idCVar aas_showPath; extern idCVar aas_showPath;
extern idCVar aas_showFlyPath; extern idCVar aas_showFlyPath;
extern idCVar aas_showWallEdges; extern idCVar aas_showWallEdges;
+1 -1
View File
@@ -6,7 +6,7 @@
</PropertyGroup> </PropertyGroup>
<ItemDefinitionGroup> <ItemDefinitionGroup>
<ClCompile> <ClCompile>
<AdditionalIncludeDirectories>sound/vorbis/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>sound/vorbis/include;..\external\recastnavigation\Recast\Include;..\external\recastnavigation\Detour\Include;..\external\recastnavigation\DetourCrowd\Include;..\external\recastnavigation\DetourTileCache\Include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>__DOOM__;__DOOM_DLL__;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>__DOOM__;__DOOM_DLL__;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PrecompiledHeader> <PrecompiledHeader>
</PrecompiledHeader> </PrecompiledHeader>
+1 -1
View File
@@ -19,4 +19,4 @@
<Command>..\build\Win32\"$(Configuration)"\TypeInfo.exe</Command> <Command>..\build\Win32\"$(Configuration)"\TypeInfo.exe</Command>
</PreBuildEvent> </PreBuildEvent>
</ItemDefinitionGroup> </ItemDefinitionGroup>
</Project> </Project>
+74
View File
@@ -711,6 +711,7 @@
<ClInclude Include="tools\compilers\aas\AASFile.h" /> <ClInclude Include="tools\compilers\aas\AASFile.h" />
<ClInclude Include="tools\compilers\aas\AASFile_local.h" /> <ClInclude Include="tools\compilers\aas\AASFile_local.h" />
<ClInclude Include="tools\compilers\aas\AASFileManager.h" /> <ClInclude Include="tools\compilers\aas\AASFileManager.h" />
<ClInclude Include="tools\compilers\recast\RecastNavigation.h" />
<ClInclude Include="tools\compilers\aas\AASReach.h" /> <ClInclude Include="tools\compilers\aas\AASReach.h" />
<ClInclude Include="tools\compilers\aas\Brush.h" /> <ClInclude Include="tools\compilers\aas\Brush.h" />
<ClInclude Include="tools\compilers\aas\BrushBSP.h" /> <ClInclude Include="tools\compilers\aas\BrushBSP.h" />
@@ -2144,6 +2145,79 @@
<ClCompile Include="tools\compilers\aas\AASFile_optimize.cpp" /> <ClCompile Include="tools\compilers\aas\AASFile_optimize.cpp" />
<ClCompile Include="tools\compilers\aas\AASFile_sample.cpp" /> <ClCompile Include="tools\compilers\aas\AASFile_sample.cpp" />
<ClCompile Include="tools\compilers\aas\AASFileManager.cpp" /> <ClCompile Include="tools\compilers\aas\AASFileManager.cpp" />
<ClCompile Include="tools\compilers\recast\RecastNavigation.cpp" />
<ClCompile Include="..\external\recastnavigation\Detour\Source\DetourAlloc.cpp">
<PrecompiledHeader>NotUsing</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\external\recastnavigation\Detour\Source\DetourAssert.cpp">
<PrecompiledHeader>NotUsing</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\external\recastnavigation\Detour\Source\DetourCommon.cpp">
<PrecompiledHeader>NotUsing</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\external\recastnavigation\Detour\Source\DetourNavMesh.cpp">
<PrecompiledHeader>NotUsing</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\external\recastnavigation\Detour\Source\DetourNavMeshBuilder.cpp">
<PrecompiledHeader>NotUsing</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\external\recastnavigation\Detour\Source\DetourNavMeshQuery.cpp">
<PrecompiledHeader>NotUsing</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\external\recastnavigation\Detour\Source\DetourNode.cpp">
<PrecompiledHeader>NotUsing</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\external\recastnavigation\DetourCrowd\Source\DetourCrowd.cpp">
<PrecompiledHeader>NotUsing</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\external\recastnavigation\DetourCrowd\Source\DetourLocalBoundary.cpp">
<PrecompiledHeader>NotUsing</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\external\recastnavigation\DetourCrowd\Source\DetourObstacleAvoidance.cpp">
<PrecompiledHeader>NotUsing</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\external\recastnavigation\DetourCrowd\Source\DetourPathCorridor.cpp">
<PrecompiledHeader>NotUsing</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\external\recastnavigation\DetourCrowd\Source\DetourPathQueue.cpp">
<PrecompiledHeader>NotUsing</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\external\recastnavigation\DetourCrowd\Source\DetourProximityGrid.cpp">
<PrecompiledHeader>NotUsing</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\external\recastnavigation\Recast\Source\Recast.cpp">
<PrecompiledHeader>NotUsing</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\external\recastnavigation\Recast\Source\RecastAlloc.cpp">
<PrecompiledHeader>NotUsing</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\external\recastnavigation\Recast\Source\RecastArea.cpp">
<PrecompiledHeader>NotUsing</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\external\recastnavigation\Recast\Source\RecastAssert.cpp">
<PrecompiledHeader>NotUsing</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\external\recastnavigation\Recast\Source\RecastContour.cpp">
<PrecompiledHeader>NotUsing</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\external\recastnavigation\Recast\Source\RecastFilter.cpp">
<PrecompiledHeader>NotUsing</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\external\recastnavigation\Recast\Source\RecastLayers.cpp">
<PrecompiledHeader>NotUsing</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\external\recastnavigation\Recast\Source\RecastMesh.cpp">
<PrecompiledHeader>NotUsing</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\external\recastnavigation\Recast\Source\RecastMeshDetail.cpp">
<PrecompiledHeader>NotUsing</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\external\recastnavigation\Recast\Source\RecastRasterization.cpp">
<PrecompiledHeader>NotUsing</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\external\recastnavigation\Recast\Source\RecastRegion.cpp">
<PrecompiledHeader>NotUsing</PrecompiledHeader>
</ClCompile>
<ClCompile Include="tools\compilers\aas\AASReach.cpp" /> <ClCompile Include="tools\compilers\aas\AASReach.cpp" />
<ClCompile Include="tools\compilers\aas\Brush.cpp" /> <ClCompile Include="tools\compilers\aas\Brush.cpp" />
<ClCompile Include="tools\compilers\aas\BrushBSP.cpp" /> <ClCompile Include="tools\compilers\aas\BrushBSP.cpp" />
+91 -1
View File
@@ -67,6 +67,9 @@
<Filter Include="Tools\Compilers\AAS"> <Filter Include="Tools\Compilers\AAS">
<UniqueIdentifier>{07d88fa0-f779-44b7-87b1-2c0d8214aa3f}</UniqueIdentifier> <UniqueIdentifier>{07d88fa0-f779-44b7-87b1-2c0d8214aa3f}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="Tools\Compilers\Recast">
<UniqueIdentifier>{f756f167-a1f5-4057-a88b-acaa61d7d746}</UniqueIdentifier>
</Filter>
<Filter Include="Tools\Compilers\DMap"> <Filter Include="Tools\Compilers\DMap">
<UniqueIdentifier>{6984ce76-c3bf-4003-97cf-64b50f951fe8}</UniqueIdentifier> <UniqueIdentifier>{6984ce76-c3bf-4003-97cf-64b50f951fe8}</UniqueIdentifier>
</Filter> </Filter>
@@ -118,6 +121,15 @@
<Filter Include="Tools\Compilers\NN"> <Filter Include="Tools\Compilers\NN">
<UniqueIdentifier>{17e28816-27c1-473b-b124-b9c1bc9427aa}</UniqueIdentifier> <UniqueIdentifier>{17e28816-27c1-473b-b124-b9c1bc9427aa}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="External">
<UniqueIdentifier>{c9064943-6813-48eb-b813-009fd9e43815}</UniqueIdentifier>
</Filter>
<Filter Include="External\Recast">
<UniqueIdentifier>{14f2f6c0-6253-4149-909f-107b4e69f1aa}</UniqueIdentifier>
</Filter>
<Filter Include="External\Detour">
<UniqueIdentifier>{bc492f36-f168-4265-8299-e710f177d9fe}</UniqueIdentifier>
</Filter>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="cm\CollisionModel.h"> <ClInclude Include="cm\CollisionModel.h">
@@ -471,6 +483,9 @@
<ClInclude Include="tools\compilers\aas\AASFileManager.h"> <ClInclude Include="tools\compilers\aas\AASFileManager.h">
<Filter>Tools\Compilers\AAS</Filter> <Filter>Tools\Compilers\AAS</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="tools\compilers\recast\RecastNavigation.h">
<Filter>Tools\Compilers\Recast</Filter>
</ClInclude>
<ClInclude Include="tools\compilers\aas\AASReach.h"> <ClInclude Include="tools\compilers\aas\AASReach.h">
<Filter>Tools\Compilers\AAS</Filter> <Filter>Tools\Compilers\AAS</Filter>
</ClInclude> </ClInclude>
@@ -1115,6 +1130,9 @@
<ClCompile Include="tools\compilers\aas\AASFileManager.cpp"> <ClCompile Include="tools\compilers\aas\AASFileManager.cpp">
<Filter>Tools\Compilers\AAS</Filter> <Filter>Tools\Compilers\AAS</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="tools\compilers\recast\RecastNavigation.cpp">
<Filter>Tools\Compilers\Recast</Filter>
</ClCompile>
<ClCompile Include="tools\compilers\aas\AASReach.cpp"> <ClCompile Include="tools\compilers\aas\AASReach.cpp">
<Filter>Tools\Compilers\AAS</Filter> <Filter>Tools\Compilers\AAS</Filter>
</ClCompile> </ClCompile>
@@ -1718,6 +1736,78 @@
<ClCompile Include="tools\radiant\ModelViewDock.cpp"> <ClCompile Include="tools\radiant\ModelViewDock.cpp">
<Filter>Tools\Radiant</Filter> <Filter>Tools\Radiant</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\external\recastnavigation\Recast\Source\Recast.cpp">
<Filter>External\Recast</Filter>
</ClCompile>
<ClCompile Include="..\external\recastnavigation\Recast\Source\RecastAlloc.cpp">
<Filter>External\Recast</Filter>
</ClCompile>
<ClCompile Include="..\external\recastnavigation\Recast\Source\RecastArea.cpp">
<Filter>External\Recast</Filter>
</ClCompile>
<ClCompile Include="..\external\recastnavigation\Recast\Source\RecastAssert.cpp">
<Filter>External\Recast</Filter>
</ClCompile>
<ClCompile Include="..\external\recastnavigation\Recast\Source\RecastContour.cpp">
<Filter>External\Recast</Filter>
</ClCompile>
<ClCompile Include="..\external\recastnavigation\Recast\Source\RecastFilter.cpp">
<Filter>External\Recast</Filter>
</ClCompile>
<ClCompile Include="..\external\recastnavigation\Recast\Source\RecastLayers.cpp">
<Filter>External\Recast</Filter>
</ClCompile>
<ClCompile Include="..\external\recastnavigation\Recast\Source\RecastMesh.cpp">
<Filter>External\Recast</Filter>
</ClCompile>
<ClCompile Include="..\external\recastnavigation\Recast\Source\RecastMeshDetail.cpp">
<Filter>External\Recast</Filter>
</ClCompile>
<ClCompile Include="..\external\recastnavigation\Recast\Source\RecastRasterization.cpp">
<Filter>External\Recast</Filter>
</ClCompile>
<ClCompile Include="..\external\recastnavigation\Recast\Source\RecastRegion.cpp">
<Filter>External\Recast</Filter>
</ClCompile>
<ClCompile Include="..\external\recastnavigation\Detour\Source\DetourAlloc.cpp">
<Filter>External\Detour</Filter>
</ClCompile>
<ClCompile Include="..\external\recastnavigation\Detour\Source\DetourAssert.cpp">
<Filter>External\Detour</Filter>
</ClCompile>
<ClCompile Include="..\external\recastnavigation\Detour\Source\DetourCommon.cpp">
<Filter>External\Detour</Filter>
</ClCompile>
<ClCompile Include="..\external\recastnavigation\DetourCrowd\Source\DetourCrowd.cpp">
<Filter>External\Detour</Filter>
</ClCompile>
<ClCompile Include="..\external\recastnavigation\DetourCrowd\Source\DetourLocalBoundary.cpp">
<Filter>External\Detour</Filter>
</ClCompile>
<ClCompile Include="..\external\recastnavigation\Detour\Source\DetourNavMesh.cpp">
<Filter>External\Detour</Filter>
</ClCompile>
<ClCompile Include="..\external\recastnavigation\Detour\Source\DetourNavMeshBuilder.cpp">
<Filter>External\Detour</Filter>
</ClCompile>
<ClCompile Include="..\external\recastnavigation\Detour\Source\DetourNavMeshQuery.cpp">
<Filter>External\Detour</Filter>
</ClCompile>
<ClCompile Include="..\external\recastnavigation\Detour\Source\DetourNode.cpp">
<Filter>External\Detour</Filter>
</ClCompile>
<ClCompile Include="..\external\recastnavigation\DetourCrowd\Source\DetourObstacleAvoidance.cpp">
<Filter>External\Detour</Filter>
</ClCompile>
<ClCompile Include="..\external\recastnavigation\DetourCrowd\Source\DetourPathCorridor.cpp">
<Filter>External\Detour</Filter>
</ClCompile>
<ClCompile Include="..\external\recastnavigation\DetourCrowd\Source\DetourPathQueue.cpp">
<Filter>External\Detour</Filter>
</ClCompile>
<ClCompile Include="..\external\recastnavigation\DetourCrowd\Source\DetourProximityGrid.cpp">
<Filter>External\Detour</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="openal\idal.py"> <None Include="openal\idal.py">
@@ -2441,4 +2531,4 @@
<Filter>Sys\RC\res</Filter> <Filter>Sys\RC\res</Filter>
</Image> </Image>
</ItemGroup> </ItemGroup>
</Project> </Project>
+2 -2
View File
@@ -15,9 +15,9 @@
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LocalDebuggerCommand>D:\projects\Doom3\Doom3.exe</LocalDebuggerCommand> <LocalDebuggerCommand>D:\projects\Doom3\Doom3.exe</LocalDebuggerCommand>
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
<LocalDebuggerCommandArguments>+set r_fullscreen 0 +set r_mode 9 +set sv_pure 0 </LocalDebuggerCommandArguments> <LocalDebuggerCommandArguments>+set r_fullscreen 0 +set r_mode 9 +set sv_pure 0</LocalDebuggerCommandArguments>
<LocalDebuggerWorkingDirectory>D:\projects\Doom3</LocalDebuggerWorkingDirectory> <LocalDebuggerWorkingDirectory>D:\projects\Doom3</LocalDebuggerWorkingDirectory>
<LocalDebuggerCommandArgumentsHistory>+set r_fullscreen 0 +set r_mode 9 +set sv_pure 0 +set fs_game e3|+set r_fullscreen 0 +set r_mode 11 +set sv_pure 0 +set fs_game e3|+set r_fullscreen 0 +set r_mode 11 +set sv_pure 0 +set fs_game e3|+set r_fullscreen 0 +set r_mode 11 +set sv_pure 0 |+set r_fullscreen 0 +set r_mode 9 +set sv_pure 0 |</LocalDebuggerCommandArgumentsHistory> <LocalDebuggerCommandArgumentsHistory>+set r_fullscreen 0 +set r_mode 11 +set sv_pure 0 +set fs_game e3|+set r_fullscreen 0 +set r_mode 11 +set sv_pure 0 |+set r_fullscreen 0 +set r_mode 9 +set sv_pure 0 |+set r_fullscreen 0 +set r_mode 9 +set sv_pure 0 +set fs_game rage|+set r_fullscreen 0 +set r_mode 9 +set sv_pure 0|</LocalDebuggerCommandArgumentsHistory>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Q4 Debug|x64'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Q4 Debug|x64'">
<LocalDebuggerCommand>D:\projects\Doom3\Quake4.exe</LocalDebuggerCommand> <LocalDebuggerCommand>D:\projects\Doom3\Quake4.exe</LocalDebuggerCommand>
+1
View File
@@ -3566,6 +3566,7 @@ void idCommonLocal::LoadGameDLL( void ) {
gameImport.uiManager = ::uiManager; gameImport.uiManager = ::uiManager;
gameImport.declManager = ::declManager; gameImport.declManager = ::declManager;
gameImport.AASFileManager = ::AASFileManager; gameImport.AASFileManager = ::AASFileManager;
gameImport.RecastNavigationManager = ::RecastNavigationManager;
gameImport.collisionModelManager = ::collisionModelManager; gameImport.collisionModelManager = ::collisionModelManager;
#ifdef QUAKE4 #ifdef QUAKE4
gameImport.session = ::session; gameImport.session = ::session;
+1
View File
@@ -197,6 +197,7 @@ const int MAX_EXPRESSION_REGISTERS = 4096;
// AAS files and manager // AAS files and manager
#include "../tools/compilers/aas/AASFile.h" #include "../tools/compilers/aas/AASFile.h"
#include "../tools/compilers/aas/AASFileManager.h" #include "../tools/compilers/aas/AASFileManager.h"
#include "../tools/compilers/recast/RecastNavigation.h"
#if defined(QUAKE4) #if defined(QUAKE4)
#include "../../quake4/bse/BSEInterface.h" #include "../../quake4/bse/BSEInterface.h"
+1 -1
View File
@@ -5355,7 +5355,7 @@ void RayGen()
} }
float outputAo = isSkeletal ? lerp(ao, 1.0, 0.55) : ao; float outputAo = isSkeletal ? lerp(ao, 1.0, 0.55) : ao;
finalColor *= clamp(outputAo + 0.6, 0.0, 1.0); finalColor *= clamp(outputAo + 0.3, 0.0, 1.0);
// Volumetric light scattering is radiance in the camera ray, not surface // Volumetric light scattering is radiance in the camera ray, not surface
// reflectance, so add it after surface albedo/specular composition. Because // reflectance, so add it after surface albedo/specular composition. Because
+1 -1
View File
@@ -1507,7 +1507,7 @@ struct GLState
uint32_t frameGenerationMultiplier = 0; uint32_t frameGenerationMultiplier = 0;
uint32_t pathTracingSamplesPerPixel = 1; uint32_t pathTracingSamplesPerPixel = 1;
uint32_t pathTracingFallbackSamplesPerPixel = 2; uint32_t pathTracingFallbackSamplesPerPixel = 2;
uint32_t pathTracingMaxBounces = 2; uint32_t pathTracingMaxBounces = 3;
glScreenSpaceDecal_t screenSpaceDecals[QD3D12_MaxScreenSpaceDecals] = {}; glScreenSpaceDecal_t screenSpaceDecals[QD3D12_MaxScreenSpaceDecals] = {};
uint32_t screenSpaceDecalCount = 0; uint32_t screenSpaceDecalCount = 0;
ComPtr<ID3D12Resource> screenSpaceDecalBuffer; ComPtr<ID3D12Resource> screenSpaceDecalBuffer;
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,66 @@
/*
===========================================================================
IceTech GPL Source Code
Copyright (C) 2026 Justin Marshall
===========================================================================
*/
#ifndef __RECAST_NAVIGATION_H__
#define __RECAST_NAVIGATION_H__
typedef int recastNavHandle_t;
typedef int recastObstacleHandle_t;
static const recastNavHandle_t RECAST_NAV_HANDLE_INVALID = -1;
static const int MAX_RECAST_PATH_AREAS = 256;
typedef struct recastPath_s {
idVec3 moveGoal;
idVec3 secondaryGoal;
int moveAreaNum;
int travelTime;
} recastPath_t;
class idRecastNavigationManager {
public:
virtual ~idRecastNavigationManager( void ) {}
virtual recastNavHandle_t Alloc( void ) = 0;
virtual void Free( recastNavHandle_t handle ) = 0;
virtual bool Load( recastNavHandle_t handle, const char *aasName, const char *fileName, unsigned int mapFileCRC ) = 0;
virtual bool BuildMapFile( const char *mapName, const char *aasType ) = 0;
virtual void Stats( recastNavHandle_t handle ) const = 0;
virtual void DebugDraw( recastNavHandle_t handle, idRenderWorld *renderWorld, int drawMode, int lifetime ) const = 0;
virtual bool IsLoaded( recastNavHandle_t handle ) const = 0;
virtual const char * GetName( recastNavHandle_t handle ) const = 0;
virtual int NumPolys( recastNavHandle_t handle ) const = 0;
virtual const idAASSettings *GetSettings( recastNavHandle_t handle ) const = 0;
virtual int PointAreaNum( recastNavHandle_t handle, const idVec3 &origin ) const = 0;
virtual int PointReachableAreaNum( recastNavHandle_t handle, const idVec3 &origin, const idBounds &searchBounds, const int areaFlags ) const = 0;
virtual int BoundsReachableAreaNum( recastNavHandle_t handle, const idBounds &bounds, const int areaFlags ) const = 0;
virtual void PushPointIntoAreaNum( recastNavHandle_t handle, int areaNum, idVec3 &origin ) const = 0;
virtual idVec3 AreaCenter( recastNavHandle_t handle, int areaNum ) const = 0;
virtual int AreaFlags( recastNavHandle_t handle, int areaNum ) const = 0;
virtual int AreaTravelFlags( recastNavHandle_t handle, int areaNum ) const = 0;
virtual bool Trace( recastNavHandle_t handle, aasTrace_t &trace, const idVec3 &start, const idVec3 &end ) const = 0;
virtual bool SetAreaState( recastNavHandle_t handle, const idBounds &bounds, const int areaContents, bool disabled ) = 0;
virtual recastObstacleHandle_t AddObstacle( recastNavHandle_t handle, const idBounds &bounds ) = 0;
virtual void RemoveObstacle( recastNavHandle_t handle, const recastObstacleHandle_t obstacleHandle ) = 0;
virtual void RemoveAllObstacles( recastNavHandle_t handle ) = 0;
virtual int TravelTimeToGoalArea( recastNavHandle_t handle, int areaNum, const idVec3 &origin, int goalAreaNum, int travelFlags ) const = 0;
virtual bool RouteToGoalArea( recastNavHandle_t handle, int areaNum, const idVec3 origin, int goalAreaNum, int travelFlags, recastPath_t &route ) const = 0;
virtual bool PathToGoal( recastNavHandle_t handle, recastPath_t &path, int areaNum, const idVec3 &origin, int goalAreaNum, const idVec3 &goalOrigin, int travelFlags ) const = 0;
virtual bool PathValid( recastNavHandle_t handle, int areaNum, const idVec3 &origin, int goalAreaNum, const idVec3 &goalOrigin, int travelFlags, idVec3 &endPos, int &endAreaNum ) const = 0;
virtual bool PathAreaList( recastNavHandle_t handle, int areaNum, const idVec3 &origin, int goalAreaNum, const idVec3 &goalOrigin, int travelFlags, int *areas, int &numAreas, int maxAreas ) const = 0;
};
extern idRecastNavigationManager *RecastNavigationManager;
#endif /* !__RECAST_NAVIGATION_H__ */
File diff suppressed because it is too large Load Diff