void BotControl::MaintainBotQuota (void) { // this function keeps number of bots up to date, and don't allow to maintain bot creation // while creation process in process. if (!m_creationTab.IsEmpty () && m_maintainTime < engine->GetTime ()) { CreateItem last = m_creationTab.Pop (); int resultOfCall = CreateBot (last.name, last.skill, last.personality, last.team, last.member); // check the result of creation if (resultOfCall == 0) { m_creationTab.RemoveAll (); // something wrong with waypoints, reset tab of creation yb_quota.SetInt (0); // reset quota } else if (resultOfCall == 2) { m_creationTab.RemoveAll (); // maximum players reached, so set quota to maximum players yb_quota.SetInt (GetBotsNum ()); } m_maintainTime = engine->GetTime () + 0.2f; } // now keep bot number up to date if (m_maintainTime < engine->GetTime ()) { int botNumber = GetBotsNum (); int humanNumber = GetHumansNum (); if (botNumber > yb_quota.GetInt ()) RemoveRandom (); if (yb_autovacate.GetBool ()) { if (botNumber < yb_quota.GetInt () && botNumber < engine->GetMaxClients () - 1) AddRandom (); if (humanNumber >= engine->GetMaxClients ()) RemoveRandom (); } else { if (botNumber < yb_quota.GetInt () && botNumber < engine->GetMaxClients ()) AddRandom (); } int botQuota = yb_autovacate.GetBool () ? (engine->GetMaxClients () - 1 - (humanNumber + 1)) : engine->GetMaxClients (); // check valid range of quota if (yb_quota.GetInt () > botQuota) yb_quota.SetInt (botQuota); else if (yb_quota.GetInt () < 0) yb_quota.SetInt (0); m_maintainTime = engine->GetTime () + 0.25f; } }
SPELUNKBOT_API double Update(double botSelector, double botXPos, double botYPos) { if (!bot) { CreateBot(botSelector); } else { // Use Update to select a bot to run bot->Reset(); bot->UpdateBotPosition(botXPos, botYPos); bot->Update(); } return 1; }
void AShooterGameMode::CreateBotControllers() { UWorld* World = GetWorld(); int32 ExistingBots = 0; for (FConstControllerIterator It = World->GetControllerIterator(); It; ++It) { AShooterAIController* AIC = Cast<AShooterAIController>(*It); if (AIC) { ++ExistingBots; } } // Create any necessary AIControllers. Hold off on Pawn creation until pawns are actually necessary or need recreating. int32 BotNum = ExistingBots; for (int32 i = 0; i < MaxBots - ExistingBots; ++i) { CreateBot(BotNum + i); } }