OpenTTD Source 20241224-master-gf74b0cf984
AI Class Reference

Main AI class. More...

#include <ai.hpp>

Static Public Member Functions

static bool CanStartNew ()
 Is it possible to start a new AI company?
 
static void StartNew (CompanyID company)
 Start a new AI company.
 
static void GameLoop ()
 Called every game-tick to let AIs do something.
 
static uint GetTick ()
 Get the current AI tick.
 
static void Stop (CompanyID company)
 Stop a company to be controlled by an AI.
 
static void Pause (CompanyID company)
 Suspend the AI and then pause execution of the script.
 
static void Unpause (CompanyID company)
 Resume execution of the AI.
 
static bool IsPaused (CompanyID company)
 Checks if the AI is paused.
 
static void KillAll ()
 Kill any and all AIs we manage.
 
static void Initialize ()
 Initialize the AI system.
 
static void Uninitialize (bool keepConfig)
 Uninitialize the AI system.
 
static void ResetConfig ()
 Reset all AIConfigs, and make them reload their AIInfo.
 
static void NewEvent (CompanyID company, ScriptEvent *event)
 Queue a new event for an AI.
 
static void BroadcastNewEvent (ScriptEvent *event, CompanyID skip_company=MAX_COMPANIES)
 Broadcast a new event to all active AIs.
 
static void Save (CompanyID company)
 Save data from an AI to a savegame.
 
static void GetConsoleList (std::back_insert_iterator< std::string > &output_iterator, bool newest_only)
 Wrapper function for AIScanner::GetAIConsoleList.
 
static void GetConsoleLibraryList (std::back_insert_iterator< std::string > &output_iterator)
 Wrapper function for AIScanner::GetAIConsoleLibraryList.
 
static const ScriptInfoListGetInfoList ()
 Wrapper function for AIScanner::GetAIInfoList.
 
static const ScriptInfoListGetUniqueInfoList ()
 Wrapper function for AIScanner::GetUniqueAIInfoList.
 
static class AIInfoFindInfo (const std::string &name, int version, bool force_exact_match)
 Wrapper function for AIScanner::FindInfo.
 
static class AILibraryFindLibrary (const std::string &library, int version)
 Wrapper function for AIScanner::FindLibrary.
 
static void Rescan ()
 Rescans all searchpaths for available AIs.
 
static AIScannerInfoGetScannerInfo ()
 Gets the ScriptScanner instance that is used to find AIs.
 
static AIScannerLibraryGetScannerLibrary ()
 Gets the ScriptScanner instance that is used to find AI Libraries.
 
static bool HasAI (const struct ContentInfo *ci, bool md5sum)
 Wrapper function for AIScanner::HasAI.
 
static bool HasAILibrary (const ContentInfo *ci, bool md5sum)
 

Static Private Attributes

static uint frame_counter = 0
 Tick counter for the AI code.
 
static class AIScannerInfoscanner_info = nullptr
 ScriptScanner instance that is used to find AIs.
 
static class AIScannerLibraryscanner_library = nullptr
 ScriptScanner instance that is used to find AI Libraries.
 

Detailed Description

Main AI class.

Contains all functions needed to start, stop, save and load AIs.

Definition at line 19 of file ai.hpp.

Member Function Documentation

◆ BroadcastNewEvent()

void AI::BroadcastNewEvent ( ScriptEvent *  event,
CompanyID  skip_company = MAX_COMPANIES 
)
static

◆ CanStartNew()

bool AI::CanStartNew ( )
static

Is it possible to start a new AI company?

Returns
True if a new AI company can be started.

Definition at line 30 of file ai_core.cpp.

References _network_server, _networking, _settings_game, GameSettings::ai, and AISettings::ai_in_multiplayer.

Referenced by OnTick_Companies().

◆ FindInfo()

AIInfo * AI::FindInfo ( const std::string &  name,
int  version,
bool  force_exact_match 
)
static

Wrapper function for AIScanner::FindInfo.

Definition at line 316 of file ai_core.cpp.

References AIScannerInfo::FindInfo(), and scanner_info.

Referenced by AIConfig::FindInfo(), and AIConfig::ResetInfo().

◆ FindLibrary()

AILibrary * AI::FindLibrary ( const std::string &  library,
int  version 
)
static

Wrapper function for AIScanner::FindLibrary.

Definition at line 321 of file ai_core.cpp.

References AIScannerLibrary::FindLibrary(), and scanner_library.

Referenced by AIInstance::FindLibrary().

◆ GameLoop()

◆ GetConsoleLibraryList()

void AI::GetConsoleLibraryList ( std::back_insert_iterator< std::string > &  output_iterator)
static

Wrapper function for AIScanner::GetAIConsoleLibraryList.

Definition at line 301 of file ai_core.cpp.

References ScriptScanner::GetConsoleList(), and scanner_library.

◆ GetConsoleList()

void AI::GetConsoleList ( std::back_insert_iterator< std::string > &  output_iterator,
bool  newest_only 
)
static

Wrapper function for AIScanner::GetAIConsoleList.

Definition at line 296 of file ai_core.cpp.

References ScriptScanner::GetConsoleList(), and scanner_info.

Referenced by ShowHelp().

◆ GetInfoList()

const ScriptInfoList * AI::GetInfoList ( )
static

Wrapper function for AIScanner::GetAIInfoList.

Definition at line 306 of file ai_core.cpp.

References ScriptScanner::GetInfoList(), and scanner_info.

Referenced by ScriptListWindow::ScriptListWindow().

◆ GetScannerInfo()

AIScannerInfo * AI::GetScannerInfo ( )
static

Gets the ScriptScanner instance that is used to find AIs.

Definition at line 355 of file ai_core.cpp.

References scanner_info.

Referenced by ContentInfo::GetTextfile().

◆ GetScannerLibrary()

AIScannerLibrary * AI::GetScannerLibrary ( )
static

Gets the ScriptScanner instance that is used to find AI Libraries.

Definition at line 360 of file ai_core.cpp.

References scanner_library.

Referenced by ContentInfo::GetTextfile().

◆ GetTick()

uint AI::GetTick ( )
static

Get the current AI tick.

Definition at line 102 of file ai_core.cpp.

References frame_counter.

◆ GetUniqueInfoList()

const ScriptInfoList * AI::GetUniqueInfoList ( )
static

Wrapper function for AIScanner::GetUniqueAIInfoList.

Definition at line 311 of file ai_core.cpp.

References ScriptScanner::GetUniqueInfoList(), and scanner_info.

Referenced by ScriptListWindow::ScriptListWindow().

◆ HasAI()

bool AI::HasAI ( const struct ContentInfo ci,
bool  md5sum 
)
static

Wrapper function for AIScanner::HasAI.

Check whether we have an AI (library) with the exact characteristics as ci.

Parameters
cithe characteristics to search on (shortname and md5sum)
md5sumwhether to check the MD5 checksum
Returns
true iff we have an AI (library) matching.

Definition at line 345 of file ai_core.cpp.

References ScriptScanner::HasScript(), and scanner_info.

Referenced by ClientNetworkContentSocketHandler::Receive_SERVER_INFO().

◆ HasAILibrary()

bool AI::HasAILibrary ( const ContentInfo ci,
bool  md5sum 
)
static

Definition at line 350 of file ai_core.cpp.

◆ Initialize()

void AI::Initialize ( )
static

Initialize the AI system.

Definition at line 165 of file ai_core.cpp.

References TarScanner::AI, TarScanner::DoScan(), frame_counter, scanner_info, scanner_library, and Uninitialize().

Referenced by AfterNewGRFScan::OnNewGRFsScanned(), and ShowHelp().

◆ IsPaused()

bool AI::IsPaused ( CompanyID  company)
static

Checks if the AI is paused.

Parameters
companyThe company for which to check if the AI is paused.
Precondition
Company::IsValidAiID(company)
Returns
true if the AI is paused, otherwise false.

Definition at line 145 of file ai_core.cpp.

References _current_company, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::Get(), and Backup< T >::Restore().

Referenced by ScriptDebugWindow::OnClick(), and ScriptDebugWindow::OnInvalidateData().

◆ KillAll()

◆ NewEvent()

◆ Pause()

void AI::Pause ( CompanyID  company)
static

Suspend the AI and then pause execution of the script.

The script will not be resumed from its suspended state until the script has been unpaused.

Parameters
companyThe company for which the AI should be paused.
Precondition
Company::IsValidAiID(company)

Definition at line 124 of file ai_core.cpp.

References _current_company, _network_dedicated, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::Get(), and Backup< T >::Restore().

Referenced by ScriptDebugWindow::OnInvalidateData().

◆ Rescan()

void AI::Rescan ( )
static

Rescans all searchpaths for available AIs.

If a used AI is no longer found it is removed from the config.

Definition at line 326 of file ai_core.cpp.

References TarScanner::AI, TarScanner::DoScan(), InvalidateWindowClassesData(), InvalidateWindowData(), ScriptScanner::RescanDir(), ResetConfig(), scanner_info, scanner_library, SetWindowClassesDirty(), WC_SCRIPT_DEBUG, WC_SCRIPT_LIST, and WC_SCRIPT_SETTINGS.

Referenced by NetworkContentDownloadStatusWindow::Close(), and Uninitialize().

◆ ResetConfig()

void AI::ResetConfig ( )
static

◆ Save()

◆ StartNew()

◆ Stop()

void AI::Stop ( CompanyID  company)
static

Stop a company to be controlled by an AI.

Parameters
companyThe company from which the AI needs to detach.
Precondition
Company::IsValidAiID(company)

Definition at line 107 of file ai_core.cpp.

References _current_company, _network_server, _networking, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::Get(), InvalidateWindowClassesData(), PFE_AI0, Backup< T >::Restore(), PerformanceMeasurer::SetInactive(), and WC_SCRIPT_DEBUG.

Referenced by CmdCompanyCtrl(), KillAll(), and ResetConfig().

◆ Uninitialize()

void AI::Uninitialize ( bool  keepConfig)
static

Uninitialize the AI system.

Parameters
keepConfigShould we keep AIConfigs, or can we free that memory?

Definition at line 179 of file ai_core.cpp.

References _settings_game, _settings_newgame, GameSettings::ai_config, COMPANY_FIRST, KillAll(), MAX_COMPANIES, Rescan(), scanner_info, and scanner_library.

Referenced by Initialize(), AfterNewGRFScan::OnNewGRFsScanned(), ShowHelp(), and ShutdownGame().

◆ Unpause()

void AI::Unpause ( CompanyID  company)
static

Resume execution of the AI.

This function will not actually execute the script, but set a flag so that the script is executed my the usual mechanism that executes the script.

Parameters
companyThe company for which the AI should be unpaused.
Precondition
Company::IsValidAiID(company)

Definition at line 137 of file ai_core.cpp.

References _current_company, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::Get(), and Backup< T >::Restore().

Referenced by ScriptDebugWindow::OnClick().

Field Documentation

◆ frame_counter

uint AI::frame_counter = 0
staticprivate

Tick counter for the AI code.

Definition at line 141 of file ai.hpp.

Referenced by GameLoop(), GetTick(), and Initialize().

◆ scanner_info

AIScannerInfo * AI::scanner_info = nullptr
staticprivate

ScriptScanner instance that is used to find AIs.

Definition at line 142 of file ai.hpp.

Referenced by FindInfo(), GetConsoleList(), GetInfoList(), GetScannerInfo(), GetUniqueInfoList(), HasAI(), Initialize(), Rescan(), StartNew(), and Uninitialize().

◆ scanner_library

AIScannerLibrary * AI::scanner_library = nullptr
staticprivate

ScriptScanner instance that is used to find AI Libraries.

Definition at line 143 of file ai.hpp.

Referenced by FindLibrary(), GetConsoleLibraryList(), GetScannerLibrary(), Initialize(), Rescan(), and Uninitialize().


The documentation for this class was generated from the following files: