00001 /* $Id: ai_info.hpp 19081 2010-02-10 16:24:05Z rubidium $ */ 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 00013 #define AI_INFO 00014 00015 #ifdef ENABLE_AI 00016 00017 #include <list> 00018 #include "../core/smallmap_type.hpp" 00019 #include "../script/script_info.hpp" 00020 00021 enum AIConfigFlags { 00022 AICONFIG_NONE = 0x0, 00023 AICONFIG_RANDOM = 0x1, 00024 AICONFIG_BOOLEAN = 0x2, 00025 AICONFIG_INGAME = 0x4, 00026 }; 00027 00028 typedef SmallMap<int, char *> LabelMapping; 00029 00030 struct AIConfigItem { 00031 const char *name; 00032 const char *description; 00033 int min_value; 00034 int max_value; 00035 int custom_value; 00036 int easy_value; 00037 int medium_value; 00038 int hard_value; 00039 int random_deviation; 00040 int step_size; 00041 AIConfigFlags flags; 00042 LabelMapping *labels; 00043 }; 00044 00045 extern AIConfigItem _start_date_config; 00046 00047 typedef std::list<AIConfigItem> AIConfigItemList; 00048 00049 class AIFileInfo : public ScriptFileInfo { 00050 public: 00054 static SQInteger Constructor(HSQUIRRELVM vm, AIFileInfo *info); 00055 00056 protected: 00057 class AIScanner *base; 00058 }; 00059 00060 class AIInfo : public AIFileInfo { 00061 public: 00062 static const char *GetClassName() { return "AIInfo"; } 00063 00064 AIInfo(); 00065 ~AIInfo(); 00066 00070 static SQInteger Constructor(HSQUIRRELVM vm); 00071 static SQInteger DummyConstructor(HSQUIRRELVM vm); 00072 00076 bool GetSettings(); 00077 00081 const AIConfigItemList *GetConfigList() const; 00082 00086 const AIConfigItem *GetConfigItem(const char *name) const; 00087 00091 bool CanLoadFromVersion(int version) const; 00092 00096 SQInteger AddSetting(HSQUIRRELVM vm); 00097 00101 SQInteger AddLabels(HSQUIRRELVM vm); 00102 00106 int GetSettingDefaultValue(const char *name) const; 00107 00111 bool UseAsRandomAI() const { return this->use_as_random; } 00112 00116 const char *GetAPIVersion() const { return this->api_version; } 00117 00118 private: 00119 AIConfigItemList config_list; 00120 int min_loadable_version; 00121 bool use_as_random; 00122 const char *api_version; 00123 }; 00124 00125 class AILibrary : public AIFileInfo { 00126 public: 00127 AILibrary() : AIFileInfo(), category(NULL) {}; 00128 ~AILibrary(); 00129 00133 static SQInteger Constructor(HSQUIRRELVM vm); 00134 00135 static SQInteger Import(HSQUIRRELVM vm); 00136 00140 const char *GetCategory() const { return this->category; } 00141 00142 private: 00143 const char *category; 00144 }; 00145 00146 #endif /* ENABLE_AI */ 00147 #endif /* AI_INFO */