00001 /* $Id: ai_info.hpp 21595 2010-12-22 11:46:41Z alberth $ */ 00002 00003 /* 00004 * This file is part of OpenTTD. 00005 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. 00006 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 00007 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>. 00008 */ 00009 00012 #ifndef AI_INFO_HPP 00013 #define AI_INFO_HPP 00014 00015 #ifdef ENABLE_AI 00016 00017 #include <list> 00018 #include "../core/smallmap_type.hpp" 00019 #include "../script/script_info.hpp" 00020 00022 enum AIConfigFlags { 00023 AICONFIG_NONE = 0x0, 00024 AICONFIG_RANDOM = 0x1, 00025 AICONFIG_BOOLEAN = 0x2, 00026 AICONFIG_INGAME = 0x4, 00027 }; 00028 00029 typedef SmallMap<int, char *> LabelMapping; 00030 00032 struct AIConfigItem { 00033 const char *name; 00034 const char *description; 00035 int min_value; 00036 int max_value; 00037 int custom_value; 00038 int easy_value; 00039 int medium_value; 00040 int hard_value; 00041 int random_deviation; 00042 int step_size; 00043 AIConfigFlags flags; 00044 LabelMapping *labels; 00045 }; 00046 00047 extern AIConfigItem _start_date_config; 00048 00049 typedef std::list<AIConfigItem> AIConfigItemList; 00050 00052 class AIFileInfo : public ScriptFileInfo { 00053 public: 00057 static SQInteger Constructor(HSQUIRRELVM vm, AIFileInfo *info); 00058 00059 protected: 00060 class AIScanner *base; 00061 }; 00062 00064 class AIInfo : public AIFileInfo { 00065 public: 00066 static const char *GetClassName() { return "AIInfo"; } 00067 00068 AIInfo(); 00069 ~AIInfo(); 00070 00074 static SQInteger Constructor(HSQUIRRELVM vm); 00075 00079 static SQInteger DummyConstructor(HSQUIRRELVM vm); 00080 00084 bool GetSettings(); 00085 00089 const AIConfigItemList *GetConfigList() const; 00090 00094 const AIConfigItem *GetConfigItem(const char *name) const; 00095 00099 bool CanLoadFromVersion(int version) const; 00100 00104 SQInteger AddSetting(HSQUIRRELVM vm); 00105 00109 SQInteger AddLabels(HSQUIRRELVM vm); 00110 00114 int GetSettingDefaultValue(const char *name) const; 00115 00119 bool UseAsRandomAI() const { return this->use_as_random; } 00120 00124 const char *GetAPIVersion() const { return this->api_version; } 00125 00126 private: 00127 AIConfigItemList config_list; 00128 int min_loadable_version; 00129 bool use_as_random; 00130 const char *api_version; 00131 }; 00132 00134 class AILibrary : public AIFileInfo { 00135 public: 00136 AILibrary() : AIFileInfo(), category(NULL) {}; 00137 ~AILibrary(); 00138 00142 static SQInteger Constructor(HSQUIRRELVM vm); 00143 00149 static SQInteger Import(HSQUIRRELVM vm); 00150 00154 const char *GetCategory() const { return this->category; } 00155 00156 private: 00157 const char *category; 00158 }; 00159 00160 #endif /* ENABLE_AI */ 00161 #endif /* AI_INFO_HPP */