diff options
author | yexo <yexo@openttd.org> | 2009-04-21 19:13:32 +0000 |
---|---|---|
committer | yexo <yexo@openttd.org> | 2009-04-21 19:13:32 +0000 |
commit | 3949050714463bf13ffb6da231019de6db22a8e5 (patch) | |
tree | b6dc258527d34f2a1db659be97eb7f48e16a7da6 /src/ai/ai_scanner.cpp | |
parent | d4d163e127a90aecc64ddcfb37c96acbde91d658 (diff) | |
download | openttd-3949050714463bf13ffb6da231019de6db22a8e5.tar.xz |
(svn r16113) -Feature [NoAI]: Add UseAsRandomAI as function in info.nut. When an AI returns false, it'll never be chosen as random AI.
Diffstat (limited to 'src/ai/ai_scanner.cpp')
-rw-r--r-- | src/ai/ai_scanner.cpp | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/src/ai/ai_scanner.cpp b/src/ai/ai_scanner.cpp index ab9036cf7..a588f5b9b 100644 --- a/src/ai/ai_scanner.cpp +++ b/src/ai/ai_scanner.cpp @@ -243,20 +243,31 @@ void AIScanner::RegisterAI(AIInfo *info) AIInfo *AIScanner::SelectRandomAI() { - if (this->info_single_list.size() == 0) { + uint num_random_ais = 0; + for (AIInfoList::iterator it = this->info_single_list.begin(); it != this->info_single_list.end(); it++) { + if (it->second->UseAsRandomAI()) num_random_ais++; + } + + if (num_random_ais == 0) { DEBUG(ai, 0, "No suitable AI found, loading 'dummy' AI."); return this->info_dummy; } /* Find a random AI */ uint pos; - if (_networking) pos = InteractiveRandomRange((uint16)this->info_single_list.size()); - else pos = RandomRange((uint16)this->info_single_list.size()); + if (_networking) { + pos = InteractiveRandomRange(num_random_ais); + } else { + pos = RandomRange(num_random_ais); + } /* Find the Nth item from the array */ AIInfoList::iterator it = this->info_single_list.begin(); - for (; pos > 0; pos--) it++; - AIInfoList::iterator first_it = it; + while (!it->second->UseAsRandomAI()) it++; + for (; pos > 0; pos--) { + it++; + while (!it->second->UseAsRandomAI()) it++; + } return (*it).second; } |