Fix door detection, prep for test

This commit is contained in:
RGreenlees 2024-03-20 22:55:11 +00:00 committed by pierow
parent b3cb4ceda1
commit 661ed9c1ac
5 changed files with 97 additions and 44 deletions

View File

@ -2405,7 +2405,7 @@ void CheckAndHandleDoorObstruction(AvHAIPlayer* pBot)
{
bot_path_node ThisPathNode = pBot->BotNavInfo.CurrentPath[i];
BlockingDoorEdict = UTIL_GetDoorBlockingPathPoint(ThisPathNode.FromLocation, ThisPathNode.Location, SAMPLE_POLYAREA_GROUND, nullptr);
BlockingDoorEdict = UTIL_GetDoorBlockingPathPoint(ThisPathNode.FromLocation, ThisPathNode.Location, ThisPathNode.flag, nullptr);
NumIterations++;
@ -2451,7 +2451,7 @@ void CheckAndHandleDoorObstruction(AvHAIPlayer* pBot)
{
// Wait for the door to finish opening
pBot->desiredMovementDir = g_vecZero;
BotLookAt(pBot, BlockingDoorEdict);
BotLookAt(pBot, CurrentPathNode.Location);
}
return;
}
@ -2497,7 +2497,7 @@ void CheckAndHandleDoorObstruction(AvHAIPlayer* pBot)
}
DoorTrigger* Trigger = UTIL_GetNearestDoorTrigger(pBot->Edict->v.origin, Door, nullptr, true);
DoorTrigger* Trigger = UTIL_GetNearestDoorTrigger(pBot->CurrentFloorPosition, Door, nullptr, true);
if (Trigger && Trigger->NextActivationTime < gpGlobals->time)
{
@ -7730,7 +7730,7 @@ void UTIL_UpdateDoors(bool bInitial)
}
Vector DoorCentre = UTIL_GetCentreOfEntity(it->DoorEdict);
DoorCentre.z -= 16.0f;
DoorCentre.z -= 24.0f;
dtNavMeshQuery* Query = NavMeshes[BUILDING_NAV_MESH].navQuery;
nav_profile StructureProfile = GetBaseNavProfile(STRUCTURE_BASE_NAV_PROFILE);
@ -7738,7 +7738,7 @@ void UTIL_UpdateDoors(bool bInitial)
dtPolyRef Polys[8];
int polyCount;
float DoorHalfExtents[3] = { it->DoorEdict->v.size.x, it->DoorEdict->v.size.z, it->DoorEdict->v.size.y };
float DoorHalfExtents[3] = { HalfExtents.x, HalfExtents.z, HalfExtents.y };
float DoorCentreFlt[3] = { DoorCentre.x, DoorCentre.z, -DoorCentre.y };
Query->queryPolygons(DoorCentreFlt, DoorHalfExtents, &StructureProfile.Filters, Polys, &polyCount, 8);
@ -7797,7 +7797,7 @@ void UTIL_UpdateDoors(bool bInitial)
}
Vector DoorCentre = UTIL_GetCentreOfEntity(it->DoorEdict);
DoorCentre.z -= 16.0f;
DoorCentre.z -= 24.0f;
dtNavMeshQuery* Query = NavMeshes[BUILDING_NAV_MESH].navQuery;
nav_profile StructureProfile = GetBaseNavProfile(STRUCTURE_BASE_NAV_PROFILE);
@ -7805,7 +7805,7 @@ void UTIL_UpdateDoors(bool bInitial)
dtPolyRef Polys[8];
int polyCount;
float DoorHalfExtents[3] = {it->DoorEdict->v.size.x, it->DoorEdict->v.size.z, it->DoorEdict->v.size.y};
float DoorHalfExtents[3] = { HalfExtents.x, HalfExtents.z, HalfExtents.y};
float DoorCentreFlt[3] = { DoorCentre.x, DoorCentre.z, -DoorCentre.y };
Query->queryPolygons(DoorCentreFlt, DoorHalfExtents, &StructureProfile.Filters, Polys, &polyCount, 8);
@ -7819,7 +7819,7 @@ void UTIL_UpdateDoors(bool bInitial)
else
{
Vector DoorCentre = UTIL_GetCentreOfEntity(it->DoorEdict);
DoorCentre.z -= 16.0f;
DoorCentre.z -= 24.0f;
dtNavMeshQuery* Query = NavMeshes[BUILDING_NAV_MESH].navQuery;
nav_profile StructureProfile = GetBaseNavProfile(STRUCTURE_BASE_NAV_PROFILE);

View File

@ -1038,12 +1038,12 @@ void BotEvolveLifeform(AvHAIPlayer* pBot, Vector DesiredEvolveLocation, AvHMessa
if (vIsZero(EvolvePoint))
{
EvolvePoint = UTIL_ProjectPointToNavmesh(DesiredEvolveLocation, Vector(400.0f, 400.0f, 400.0f), GetBaseNavProfile(STRUCTURE_BASE_NAV_PROFILE));
EvolvePoint = UTIL_ProjectPointToNavmesh(DesiredEvolveLocation, Vector(500.0f, 500.0f, 500.0f), GetBaseNavProfile(STRUCTURE_BASE_NAV_PROFILE));
}
if (vIsZero(EvolvePoint))
{
EvolvePoint = UTIL_ProjectPointToNavmesh(DesiredEvolveLocation, Vector(400.0f, 400.0f, 400.0f), GetBaseNavProfile(GORGE_BASE_NAV_PROFILE));
EvolvePoint = UTIL_AdjustPointAwayFromNavWall(pBot->CurrentFloorPosition, 50.0f);
}
if (vDist2DSq(pBot->Edict->v.origin, EvolvePoint) > sqrf(32.0f))
@ -1052,8 +1052,6 @@ void BotEvolveLifeform(AvHAIPlayer* pBot, Vector DesiredEvolveLocation, AvHMessa
return;
}
if (pBot->Player->GetResources() >= EvolveCost)
{
pBot->Impulse = TargetLifeform;
@ -1062,14 +1060,14 @@ void BotEvolveLifeform(AvHAIPlayer* pBot, Vector DesiredEvolveLocation, AvHMessa
void BotEvolveUpgrade(AvHAIPlayer* pBot, Vector DesiredEvolveLocation, AvHMessageID TargetUpgrade)
{
Vector EvolvePoint = UTIL_ProjectPointToNavmesh(DesiredEvolveLocation, GetBaseNavProfile(STRUCTURE_BASE_NAV_PROFILE));
Vector EvolvePoint = UTIL_ProjectPointToNavmesh(DesiredEvolveLocation, Vector(500.0f, 500.0f, 500.0f), GetBaseNavProfile(STRUCTURE_BASE_NAV_PROFILE));
if (vIsZero(EvolvePoint))
{
EvolvePoint = DesiredEvolveLocation;
EvolvePoint = UTIL_AdjustPointAwayFromNavWall(pBot->CurrentFloorPosition, (GetPlayerRadius(pBot->Edict) * 2.0f));
}
if (vDist2DSq(pBot->Edict->v.origin, EvolvePoint) > sqrf(32.0f))
if (vDist2DSq(pBot->CurrentFloorPosition, EvolvePoint) > sqrf(8.0f))
{
MoveTo(pBot, EvolvePoint, MOVESTYLE_NORMAL);
return;
@ -4183,20 +4181,92 @@ void AIPlayerNSAlienThink(AvHAIPlayer* pBot)
AvHMessageID AlienGetDesiredUpgrade(AvHAIPlayer* pBot, HiveTechStatus DesiredTech)
{
if (DesiredTech == HIVE_TECH_DEFENCE)
{
switch (pBot->Player->GetUser3())
{
case AVH_USER3_ALIEN_PLAYER1:
case AVH_USER3_ALIEN_PLAYER2:
case AVH_USER3_ALIEN_PLAYER3: // Gorges can heal themselves so regen not worth it. Redemption probably not worth it at 10 res cost to evolve
return ALIEN_EVOLUTION_ONE; // Lerks are fragile so best get carapace while the bot is still not great at staying alive with them...
case AVH_USER3_ALIEN_PLAYER4:
case AVH_USER3_ALIEN_PLAYER5:
{
if (randbool())
{
return ALIEN_EVOLUTION_ONE;
}
else
{
if (!PlayerHasWeapon(pBot->Player, WEAPON_FADE_METABOLIZE) && randbool())
{
return ALIEN_EVOLUTION_TWO;
}
else
{
return ALIEN_EVOLUTION_THREE;
}
}
}
default:
return MESSAGE_NULL;
}
}
if (DesiredTech == HIVE_TECH_MOVEMENT)
{
switch (pBot->Player->GetUser3())
{
case AVH_USER3_ALIEN_PLAYER1:
{
if (randbool())
{
return ALIEN_EVOLUTION_SEVEN;
}
else
{
return ALIEN_EVOLUTION_NINE;
}
}
case AVH_USER3_ALIEN_PLAYER2:
case AVH_USER3_ALIEN_PLAYER3:
case AVH_USER3_ALIEN_PLAYER4:
case AVH_USER3_ALIEN_PLAYER5:
return ALIEN_EVOLUTION_EIGHT;
default:
return MESSAGE_NULL;
}
}
if (DesiredTech == HIVE_TECH_SENSORY)
{
switch (pBot->Player->GetUser3())
{
case AVH_USER3_ALIEN_PLAYER2:
return ALIEN_EVOLUTION_TEN;
case AVH_USER3_ALIEN_PLAYER1:
{
if (randbool())
{
return ALIEN_EVOLUTION_TEN;
}
else
{
return ALIEN_EVOLUTION_ELEVEN;
}
}
case AVH_USER3_ALIEN_PLAYER3:
case AVH_USER3_ALIEN_PLAYER4:
case AVH_USER3_ALIEN_PLAYER5:
return ALIEN_EVOLUTION_ELEVEN;
default:
return MESSAGE_NULL;
}
}
return MESSAGE_NULL;
}

View File

@ -631,7 +631,7 @@ void AIMGR_UpdateAIPlayers()
int NumBotsThinkThisFrame = 0;
int BotsPerFrame = ceil(BOT_THINK_RATE_HZ * NumRegularBots * FrameDelta);
int BotsPerFrame = max(1.0f, round(BOT_THINK_RATE_HZ * NumRegularBots * FrameDelta));
int BotIndex = 0;
@ -897,8 +897,6 @@ void AIMGR_ResetRound()
UTIL_PopulateDoors();
UTIL_PopulateWeldableObstacles();
UTIL_UpdateDoors(true);
bool bTileCacheFullyUpdated = UTIL_UpdateTileCache();
while (!bTileCacheFullyUpdated)

View File

@ -1415,7 +1415,7 @@ BOOL AvHGamerules::ClientCommand( CBasePlayer *pPlayer, const char *pcmd )
theSuccess = true;
}
}
else if (FStrEq(pcmd, "ai_setdebugaiplayer"))
else if (FStrEq(pcmd, "bot_setdebugaiplayer"))
{
CBaseEntity* SpectatedPlayer = theAvHPlayer->GetSpectatingEntity();
@ -1430,7 +1430,7 @@ BOOL AvHGamerules::ClientCommand( CBasePlayer *pPlayer, const char *pcmd )
theSuccess = true;
}
else if (FStrEq(pcmd, "ai_cometome"))
else if (FStrEq(pcmd, "bot_cometome"))
{
vector<AvHAIPlayer*> AIPlayers = AIMGR_GetAllAIPlayers();
@ -1444,31 +1444,16 @@ BOOL AvHGamerules::ClientCommand( CBasePlayer *pPlayer, const char *pcmd )
theSuccess = true;
}
else if (FStrEq(pcmd, "ai_drawtempobstacles"))
else if (FStrEq(pcmd, "bot_drawtempobstacles"))
{
AIDEBUG_DrawTemporaryObstacles(10.0f);
theSuccess = true;
}
else if (FStrEq(pcmd, "ai_drawoffmeshconns"))
else if (FStrEq(pcmd, "bot_drawoffmeshconns"))
{
AIDEBUG_DrawOffMeshConnections(10.0f);
theSuccess = true;
}
else if (FStrEq(pcmd, "ai_saysomething"))
{
vector<AvHAIPlayer*> AIPlayers = AIMGR_GetAllAIPlayers();
for (auto it = AIPlayers.begin(); it != AIPlayers.end(); it++)
{
AvHAIPlayer* thisBot = (*it);
{
BotSay(thisBot, false, 1.0f, "Regular Chat");
BotSay(thisBot, true, 2.0f, "Team Chat");
}
}
theSuccess = true;
}
else if( FStrEq( pcmd, kcRemoveUpgrade) )

View File

@ -358,7 +358,7 @@ AvHGamerules::AvHGamerules() : mTeamA(TEAM_ONE), mTeamB(TEAM_TWO)
RegisterServerVariable(&avh_botdebugmode);
RegisterServerVariable(&avh_botcommandermode);
REGISTER_SERVER_FUNCTION("sv_addaiplayer", []()
REGISTER_SERVER_FUNCTION("sv_botadd", []()
{
if (!AIMGR_IsBotEnabled())
{
@ -381,7 +381,7 @@ AvHGamerules::AvHGamerules() : mTeamA(TEAM_ONE), mTeamB(TEAM_TWO)
AIMGR_AddAIPlayerToTeam(DesiredTeam);
});
REGISTER_SERVER_FUNCTION("sv_removeaiplayer", []()
REGISTER_SERVER_FUNCTION("sv_botremove", []()
{
if (!AIMGR_IsBotEnabled())
{
@ -404,7 +404,7 @@ AvHGamerules::AvHGamerules() : mTeamA(TEAM_ONE), mTeamB(TEAM_TWO)
AIMGR_RemoveAIPlayerFromTeam(DesiredTeam);
});
REGISTER_SERVER_FUNCTION("sv_reloadnavmesh", []()
REGISTER_SERVER_FUNCTION("sv_botreloadnav", []()
{
if (avh_botsenabled.value > 0)
{
@ -416,7 +416,7 @@ AvHGamerules::AvHGamerules() : mTeamA(TEAM_ONE), mTeamB(TEAM_TWO)
}
});
REGISTER_SERVER_FUNCTION("sv_regenbotini", []()
REGISTER_SERVER_FUNCTION("sv_botregenini", []()
{
AIMGR_RegenBotIni();
});