2009-01-12 17:11:45 +00:00
|
|
|
/* $Id$ */
|
|
|
|
|
|
|
|
/** @file ai.hpp Base functions for all AIs. */
|
|
|
|
|
|
|
|
#ifndef AI_HPP
|
|
|
|
#define AI_HPP
|
|
|
|
|
|
|
|
#include "api/ai_event_types.hpp"
|
2009-01-13 22:58:03 +00:00
|
|
|
#include "../date_type.h"
|
2009-02-03 18:08:07 +00:00
|
|
|
#include "../core/string_compare_type.hpp"
|
2009-04-25 23:51:15 +00:00
|
|
|
#include <map>
|
2009-01-12 17:11:45 +00:00
|
|
|
|
2009-02-03 18:08:07 +00:00
|
|
|
typedef std::map<const char *, class AIInfo *, StringCompare> AIInfoList;
|
2009-01-12 17:11:45 +00:00
|
|
|
|
|
|
|
|
|
|
|
void CcAI(bool success, TileIndex tile, uint32 p1, uint32 p2);
|
|
|
|
|
|
|
|
class AI {
|
|
|
|
public:
|
2009-01-13 14:00:26 +00:00
|
|
|
/**
|
|
|
|
* The default months AIs start after eachother.
|
|
|
|
*/
|
|
|
|
enum StartNext {
|
2009-01-14 21:32:06 +00:00
|
|
|
START_NEXT_EASY = DAYS_IN_YEAR * 2,
|
|
|
|
START_NEXT_MEDIUM = DAYS_IN_YEAR,
|
|
|
|
START_NEXT_HARD = DAYS_IN_YEAR / 2,
|
2009-01-13 22:36:44 +00:00
|
|
|
START_NEXT_MIN = 1,
|
2009-01-13 18:04:12 +00:00
|
|
|
START_NEXT_MAX = 3600,
|
|
|
|
START_NEXT_DEVIATION = 60,
|
2009-01-13 14:00:26 +00:00
|
|
|
};
|
|
|
|
|
2009-01-12 17:11:45 +00:00
|
|
|
/**
|
|
|
|
* 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.
|
2009-06-10 22:05:01 +00:00
|
|
|
* @pre Company::IsValidAiID(company)
|
2009-01-12 17:11:45 +00:00
|
|
|
*/
|
|
|
|
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.
|
|
|
|
*/
|
2009-01-13 01:46:46 +00:00
|
|
|
static void Load(CompanyID company, int version);
|
2009-01-12 17:11:45 +00:00
|
|
|
|
2009-01-13 14:00:26 +00:00
|
|
|
/**
|
2009-01-13 18:04:12 +00:00
|
|
|
* Get the number of days before the next AI should start.
|
2009-01-13 14:00:26 +00:00
|
|
|
*/
|
|
|
|
static int GetStartNextTime();
|
|
|
|
|
2009-01-12 17:11:45 +00:00
|
|
|
static char *GetConsoleList(char *p, const char *last);
|
|
|
|
static const AIInfoList *GetInfoList();
|
2009-01-20 16:49:10 +00:00
|
|
|
static const AIInfoList *GetUniqueInfoList();
|
2009-01-13 01:46:46 +00:00
|
|
|
static AIInfo *FindInfo(const char *name, int version);
|
2009-01-12 17:11:45 +00:00
|
|
|
static bool ImportLibrary(const char *library, const char *class_name, int version, HSQUIRRELVM vm);
|
|
|
|
static void Rescan();
|
2009-01-17 16:53:32 +00:00
|
|
|
#if defined(ENABLE_NETWORK)
|
|
|
|
static bool HasAI(const struct ContentInfo *ci, bool md5sum);
|
|
|
|
#endif
|
2009-01-12 17:11:45 +00:00
|
|
|
private:
|
|
|
|
static uint frame_counter;
|
|
|
|
static class AIScanner *ai_scanner;
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif /* AI_HPP */
|