diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/ai/ai_config.cpp | 7 | ||||
-rw-r--r-- | src/ai/ai_info.cpp | 8 | ||||
-rw-r--r-- | src/ai/ai_info.hpp | 5 |
3 files changed, 19 insertions, 1 deletions
diff --git a/src/ai/ai_config.cpp b/src/ai/ai_config.cpp index dc7a3e48d..cc309b62f 100644 --- a/src/ai/ai_config.cpp +++ b/src/ai/ai_config.cpp @@ -88,7 +88,12 @@ int AIConfig::GetSetting(const char *name) void AIConfig::SetSetting(const char *name, int value) { /* You can only set ai specific settings if an AI is selected. */ - assert(strcmp(name, "start_date") == 0 || this->info != NULL); + assert(this->info != NULL); + + const AIConfigItem *config_item = this->info->GetConfigItem(name); + if (config_item == NULL) return; + + value = Clamp(value, config_item->min_value, config_item->max_value); SettingValueList::iterator it = this->settings.find(name); if (it != this->settings.end()) { diff --git a/src/ai/ai_info.cpp b/src/ai/ai_info.cpp index 9e439cce2..c68972c45 100644 --- a/src/ai/ai_info.cpp +++ b/src/ai/ai_info.cpp @@ -295,6 +295,14 @@ const AIConfigItemList *AIInfo::GetConfigList() return &this->config_list; } +const AIConfigItem *AIInfo::GetConfigItem(const char *name) +{ + for (AIConfigItemList::iterator it = this->config_list.begin(); it != this->config_list.end(); it++) { + if (strcmp((*it).name, name) == 0) return &(*it); + } + return NULL; +} + int AIInfo::GetSettingDefaultValue(const char *name) { for (AIConfigItemList::iterator it = this->config_list.begin(); it != this->config_list.end(); it++) { diff --git a/src/ai/ai_info.hpp b/src/ai/ai_info.hpp index 205e89b38..9d283966d 100644 --- a/src/ai/ai_info.hpp +++ b/src/ai/ai_info.hpp @@ -127,6 +127,11 @@ public: const AIConfigItemList *GetConfigList(); /** + * Get the description of a certain ai config option. + */ + const AIConfigItem *GetConfigItem(const char *name); + + /** * Set a setting. */ SQInteger AddSetting(HSQUIRRELVM vm); |