File diff r10695:3124a970a753 → r10696:8dfe83e30d01
src/ai/ai.hpp
Show inline comments
 
new file 100644
 
/* $Id$ */
 

	
 
/** @file ai.hpp Base functions for all AIs. */
 

	
 
#ifndef AI_HPP
 
#define AI_HPP
 

	
 
#include "api/ai_event_types.hpp"
 

	
 
#ifndef AI_CONFIG_HPP
 
struct ltstr { bool operator()(const char *s1, const char *s2) const { return strcmp(s1, s2) < 0; } };
 
#endif /* AI_CONFIG_HPP */
 
typedef std::map<const char *, class AIInfo *, ltstr> AIInfoList;
 

	
 

	
 
void CcAI(bool success, TileIndex tile, uint32 p1, uint32 p2);
 

	
 
class AI {
 
public:
 
	/**
 
	 * Is it possible to start a new AI company?
 
	 * @return True if a new AI company can be started.
 
	 */
 
	static bool CanStartNew();
 

	
 
	/**
 
	 * Start a new AI company.
 
	 * @param company At which slot the AI company should start.
 
	 */
 
	static void StartNew(CompanyID company);
 

	
 
	/**
 
	 * Called every game-tick to let AIs do something.
 
	 */
 
	static void GameLoop();
 

	
 
	/**
 
	 * Get the current AI tick.
 
	 */
 
	static uint GetTick();
 

	
 
	/**
 
	 * Stop a company to be controlled by an AI.
 
	 * @param company The company from which the AI needs to detach.
 
	 * @pre !IsHumanCompany(company).
 
	 */
 
	static void Stop(CompanyID company);
 

	
 
	/**
 
	 * Kill any and all AIs we manage.
 
	 */
 
	static void KillAll();
 

	
 
	/**
 
	 * Initialize the AI system.
 
	 */
 
	static void Initialize();
 

	
 
	/**
 
	 * Uninitialize the AI system
 
	 * @param keepConfig Should we keep AIConfigs, or can we free that memory?
 
	 */
 
	static void Uninitialize(bool keepConfig);
 

	
 
	/**
 
	 * Reset all AIConfigs, and make them reload their AIInfo.
 
	 * If the AIInfo could no longer be found, an error is reported to the user.
 
	 */
 
	static void ResetConfig();
 

	
 
	/**
 
	 * Queue a new event for an AI.
 
	 */
 
	static void NewEvent(CompanyID company, AIEvent *event);
 

	
 
	/**
 
	 * Broadcast a new event to all active AIs.
 
	 */
 
	static void BroadcastNewEvent(AIEvent *event, CompanyID skip_company = MAX_COMPANIES);
 

	
 
	/**
 
	 * Save data from an AI to a savegame.
 
	 */
 
	static void Save(CompanyID company);
 

	
 
	/**
 
	 * Load data for an AI from a savegame.
 
	 */
 
	static void Load(CompanyID company);
 

	
 
	static char *GetConsoleList(char *p, const char *last);
 
	static const AIInfoList *GetInfoList();
 
	static AIInfo *GetCompanyInfo(const char *name);
 
	static bool ImportLibrary(const char *library, const char *class_name, int version, HSQUIRRELVM vm);
 
	static void Rescan();
 

	
 
private:
 
	static uint frame_counter;
 
	static class AIScanner *ai_scanner;
 
};
 

	
 
#endif /* AI_HPP */