Mercurial > hg > openttd
changeset 18765:5fbaf80f0375 draft
(svn r23613) -Add: allow IsDeveloperOnly in info.nut, to indicate if you can select this GS via the GUI (optional, defaults to false)
author | truebrain <truebrain@openttd.org> |
---|---|
date | Mon, 19 Dec 2011 20:57:08 +0000 |
parents | bd2a1a20a792 |
children | 327b85ab521d |
files | src/game/game_info.cpp src/game/game_info.hpp src/script/api/script_info_docs.hpp src/script/script_info.hpp src/script/script_scanner.cpp |
diffstat | 5 files changed, 36 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/src/game/game_info.cpp +++ b/src/game/game_info.cpp @@ -67,7 +67,12 @@ } else { info->min_loadable_version = info->GetVersion(); } - + /* When there is an IsSelectable function, call it. */ + if (info->engine->MethodExists(*info->SQ_instance, "IsDeveloperOnly")) { + if (!info->engine->CallBoolMethod(*info->SQ_instance, "IsDeveloperOnly", &info->is_developer_only, MAX_GET_OPS)) return SQ_ERROR; + } else { + info->is_developer_only = false; + } /* Try to get the API version the AI is written for. */ if (!info->CheckMethod("GetAPIVersion")) return SQ_ERROR; if (!info->engine->CallStringMethodStrdup(*info->SQ_instance, "GetAPIVersion", &info->api_version, MAX_GET_OPS)) return SQ_ERROR; @@ -85,6 +90,7 @@ GameInfo::GameInfo() : min_loadable_version(0), + is_developer_only(false), api_version(NULL) { }
--- a/src/game/game_info.hpp +++ b/src/game/game_info.hpp @@ -41,8 +41,11 @@ */ const char *GetAPIVersion() const { return this->api_version; } + /* virtual */ bool IsDeveloperOnly() const { return this->is_developer_only; } + private: int min_loadable_version; ///< The Game can load savegame data if the version is equal or greater than this. + bool is_developer_only; ///< Is the script selectable by non-developers? const char *api_version; ///< API version used by this Game. };
--- a/src/script/api/script_info_docs.hpp +++ b/src/script/api/script_info_docs.hpp @@ -130,6 +130,19 @@ bool UseAsRandomAI(); /** + * Can a non-developer select Script for a new game. + * + * The idea behind this function is to 'forbid' using your script with a new + * game if you for example specificly wrote it for a certain scenario. + * + * @return True if the Script can be selected from the GUI as non-developer. + * @note This function is optional. Default is false. + * + * @api -ai + */ + bool IsDeveloperOnly(); + + /** * Gets the name of main class of the Script so OpenTTD knows * what class to instantiate. *
--- a/src/script/script_info.hpp +++ b/src/script/script_info.hpp @@ -142,6 +142,10 @@ */ int GetSettingDefaultValue(const char *name) const; + /** + * Can this script be selected by developers only? + */ + virtual bool IsDeveloperOnly() const { return false; } protected: class Squirrel *engine; ///< Engine used to register for Squirrel.
--- a/src/script/script_scanner.cpp +++ b/src/script/script_scanner.cpp @@ -13,6 +13,7 @@ #include "../debug.h" #include "../string_func.h" #include "../fileio_func.h" +#include "../settings_type.h" #include <sys/stat.h> #include "../script/squirrel.hpp" @@ -144,12 +145,14 @@ this->info_list[strdup(script_name)] = info; - /* Add the script to the 'unique' script list, where only the highest version - * of the script is registered. */ - if (this->info_single_list.find(script_original_name) == this->info_single_list.end()) { - this->info_single_list[strdup(script_original_name)] = info; - } else if (this->info_single_list[script_original_name]->GetVersion() < info->GetVersion()) { - this->info_single_list[script_original_name] = info; + if (!info->IsDeveloperOnly() || _settings_client.gui.ai_developer_tools) { + /* Add the script to the 'unique' script list, where only the highest version + * of the script is registered. */ + if (this->info_single_list.find(script_original_name) == this->info_single_list.end()) { + this->info_single_list[strdup(script_original_name)] = info; + } else if (this->info_single_list[script_original_name]->GetVersion() < info->GetVersion()) { + this->info_single_list[script_original_name] = info; + } } }