diff --git a/src/ai/ai_config.hpp b/src/ai/ai_config.hpp --- a/src/ai/ai_config.hpp +++ b/src/ai/ai_config.hpp @@ -11,48 +11,28 @@ #ifndef AI_CONFIG_HPP #define AI_CONFIG_HPP -#ifdef ENABLE_AI -#include -#include "ai_info.hpp" -#include "../core/string_compare_type.hpp" -#include "../company_type.h" +#include "../script/script_config.hpp" -/** - * AI settings for one company slot. - */ -class AIConfig { -private: - /** List with name=>value pairs of all AI-specific settings */ - typedef std::map SettingValueList; +class AIConfig : public ScriptConfig { +public: + /** + * Get the config of a company. + */ + static AIConfig *GetConfig(CompanyID company, ScriptSettingSource source = SSS_DEFAULT); -public: AIConfig() : - name(NULL), - version(-1), - info(NULL), - config_list(NULL), - is_random_ai(false) + ScriptConfig() {} - /** - * Create a new AI config that is a copy of an existing config. - * @param config The object to copy. - */ - AIConfig(const AIConfig *config); - - /** Delete an AI configuration. */ - ~AIConfig(); + AIConfig(const AIConfig *config) : + ScriptConfig(config) + {} - /** - * Set another AI to be loaded in this slot. - * @param name The name of the AI. - * @param version The version of the AI to load, or -1 of latest. - * @param force_exact_match If true try to find the exact same version - * as specified. If false any compatible version is ok. - * @param is_random Is the AI chosen randomly? - */ - void ChangeAI(const char *name, int version = -1, bool force_exact_match = false, bool is_random = false); + class AIInfo *GetInfo() const; + + /* virtual */ int GetSetting(const char *name) const; + /* virtual */ void SetSetting(const char *name, int value); /** * When ever the AI Scanner is reloaded, all infos become invalid. This @@ -64,95 +44,10 @@ public: */ bool ResetInfo(bool force_exact_match); - /** - * Get the AIInfo linked to this AIConfig. - */ - class AIInfo *GetInfo() const; - - /** - * Get the config list for this AIConfig. - */ - const AIConfigItemList *GetConfigList(); - - /** - * Where to get the config from, either default (depends on current game - * mode) or force either newgame or normal - */ - enum AISettingSource { - AISS_DEFAULT, ///< Get the AI config from the current game mode - AISS_FORCE_NEWGAME, ///< Get the newgame AI config - AISS_FORCE_GAME, ///< Get the AI config from the current game - }; - - /** - * Get the config of a company. - */ - static AIConfig *GetConfig(CompanyID company, AISettingSource source = AISS_DEFAULT); - - /** - * Get the value of a setting for this config. It might fallback to his - * 'info' to find the default value (if not set or if not-custom difficulty - * level). - * @return The (default) value of the setting, or -1 if the setting was not - * found. - */ - int GetSetting(const char *name) const; - - /** - * Set the value of a setting for this config. - */ - void SetSetting(const char *name, int value); - - /** - * Reset all settings to their default value. - */ - void ResetSettings(); - - /** - * Randomize all settings the AI requested to be randomized. - */ - void AddRandomDeviation(); - - /** - * Is this config attached to an AI? - */ - bool HasAI() const; - - /** - * Is the current AI a randomly chosen AI? - */ - bool IsRandomAI() const; - - /** - * Get the name of the AI. - */ - const char *GetName() const; - - /** - * Get the version of the AI. - */ - int GetVersion() const; - - /** - * Convert a string which is stored in the config file or savegames to - * custom settings of this AI. - */ - void StringToSettings(const char *value); - - /** - * Convert the custom settings to a string that can be stored in the config - * file or savegames. - */ - void SettingsToString(char *string, size_t size) const; - -private: - const char *name; ///< Name of the AI - int version; ///< Version of the AI - class AIInfo *info; ///< AIInfo object for related to this AI version - SettingValueList settings; ///< List with all setting=>value pairs that are configure for this AI - AIConfigItemList *config_list; ///< List with all settings defined by this AI - bool is_random_ai; ///< True if the AI in this slot was randomly chosen. +protected: + /* virtual */ void PushExtraConfigList(); + /* virtual */ void ClearConfigList(); + /* virtual */ ScriptInfo *FindInfo(const char *name, int version, bool force_exact_match); }; -#endif /* ENABLE_AI */ #endif /* AI_CONFIG_HPP */