Files
@ r25247:ac01ac3a49c2
Branch filter:
Location: cpp/openttd-patchpack/source/src/ai/ai_config.cpp - annotation
r25247:ac01ac3a49c2
4.2 KiB
text/x-c
Codechange: encapsulate the logic about how many bytes can be sent from a buffer in to a Packet
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 | r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r21410:ae5961f02724 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r18510:9d33e9643f80 r10696:8dfe83e30d01 r21383:942c32fb8b0e r21383:942c32fb8b0e r18510:9d33e9643f80 r18510:9d33e9643f80 r18510:9d33e9643f80 r18731:c13dfe2bb0a3 r18510:9d33e9643f80 r18510:9d33e9643f80 r18510:9d33e9643f80 r18510:9d33e9643f80 r18510:9d33e9643f80 r18510:9d33e9643f80 r18510:9d33e9643f80 r18510:9d33e9643f80 r18510:9d33e9643f80 r23607:36c15679007d r19400:b409042e8924 r18510:9d33e9643f80 r10696:8dfe83e30d01 r23309:2b7537b92737 r23309:2b7537b92737 r23309:2b7537b92737 r23309:2b7537b92737 r23309:2b7537b92737 r23309:2b7537b92737 r24597:afde5721a3b6 r23309:2b7537b92737 r23309:2b7537b92737 r18510:9d33e9643f80 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r18510:9d33e9643f80 r14828:12f0b09ddc04 r10696:8dfe83e30d01 r14828:12f0b09ddc04 r10696:8dfe83e30d01 r23607:36c15679007d r10696:8dfe83e30d01 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r18510:9d33e9643f80 r18510:9d33e9643f80 r18510:9d33e9643f80 r18510:9d33e9643f80 r18510:9d33e9643f80 r18510:9d33e9643f80 r18510:9d33e9643f80 r18510:9d33e9643f80 r18510:9d33e9643f80 r18510:9d33e9643f80 r18510:9d33e9643f80 r18510:9d33e9643f80 r18510:9d33e9643f80 r23607:36c15679007d r18510:9d33e9643f80 r18510:9d33e9643f80 r18510:9d33e9643f80 r18510:9d33e9643f80 r18510:9d33e9643f80 r18510:9d33e9643f80 r18510:9d33e9643f80 r18510:9d33e9643f80 r18510:9d33e9643f80 r18510:9d33e9643f80 r18510:9d33e9643f80 r18510:9d33e9643f80 r18510:9d33e9643f80 r18510:9d33e9643f80 r18510:9d33e9643f80 r18510:9d33e9643f80 r18510:9d33e9643f80 r18510:9d33e9643f80 r14187:fd7084a22bff r10696:8dfe83e30d01 r23607:36c15679007d r18510:9d33e9643f80 r19833:1731199b3b6a r10730:c4f9653e3345 r19834:0a601872b900 r19831:07fe1952f9c0 r19831:07fe1952f9c0 r19831:07fe1952f9c0 r19831:07fe1952f9c0 r10730:c4f9653e3345 r10730:c4f9653e3345 r10730:c4f9653e3345 r18510:9d33e9643f80 r18510:9d33e9643f80 r10696:8dfe83e30d01 r18510:9d33e9643f80 r18510:9d33e9643f80 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r10696:8dfe83e30d01 r23607:36c15679007d r18510:9d33e9643f80 r10730:c4f9653e3345 r10724:cec22216aab8 r18510:9d33e9643f80 r18510:9d33e9643f80 r18510:9d33e9643f80 r18510:9d33e9643f80 r21410:ae5961f02724 r18510:9d33e9643f80 r18510:9d33e9643f80 r18510:9d33e9643f80 r10730:c4f9653e3345 r10696:8dfe83e30d01 r18510:9d33e9643f80 r10712:3ee31720391b r23258:9bd1e33db33f r23258:9bd1e33db33f r23258:9bd1e33db33f r23258:9bd1e33db33f r23258:9bd1e33db33f r23258:9bd1e33db33f r23258:9bd1e33db33f r23258:9bd1e33db33f r23258:9bd1e33db33f r24597:afde5721a3b6 r23258:9bd1e33db33f | /*
* This file is part of OpenTTD.
* 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.
* 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.
* 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/>.
*/
/** @file ai_config.cpp Implementation of AIConfig. */
#include "../stdafx.h"
#include "../settings_type.h"
#include "../string_func.h"
#include "ai.hpp"
#include "ai_config.hpp"
#include "ai_info.hpp"
#include "../safeguards.h"
/** Configuration for AI start date, every AI has this setting. */
ScriptConfigItem _start_date_config = {
"start_date",
"", // STR_AI_SETTINGS_START_DELAY
AI::START_NEXT_MIN,
AI::START_NEXT_MAX,
AI::START_NEXT_MEDIUM,
AI::START_NEXT_EASY,
AI::START_NEXT_MEDIUM,
AI::START_NEXT_HARD,
AI::START_NEXT_DEVIATION,
30,
SCRIPTCONFIG_NONE,
nullptr,
false
};
AIConfig::AIConfig(const AIConfig *config) : ScriptConfig(config)
{
/* Override start_date as per AIConfig::AddRandomDeviation().
* This is necessary because the ScriptConfig constructor will instead call
* ScriptConfig::AddRandomDeviation(). */
int start_date = config->GetSetting("start_date");
this->SetSetting("start_date", start_date != 0 ? std::max(1, this->GetSetting("start_date")) : 0);
}
/* static */ AIConfig *AIConfig::GetConfig(CompanyID company, ScriptSettingSource source)
{
AIConfig **config;
if (source == SSS_FORCE_NEWGAME || (source == SSS_DEFAULT && _game_mode == GM_MENU)) {
config = &_settings_newgame.ai_config[company];
} else {
config = &_settings_game.ai_config[company];
}
if (*config == nullptr) *config = new AIConfig();
return *config;
}
class AIInfo *AIConfig::GetInfo() const
{
return static_cast<class AIInfo *>(ScriptConfig::GetInfo());
}
ScriptInfo *AIConfig::FindInfo(const char *name, int version, bool force_exact_match)
{
return static_cast<ScriptInfo *>(AI::FindInfo(name, version, force_exact_match));
}
bool AIConfig::ResetInfo(bool force_exact_match)
{
this->info = (ScriptInfo *)AI::FindInfo(this->name, force_exact_match ? this->version : -1, force_exact_match);
return this->info != nullptr;
}
void AIConfig::PushExtraConfigList()
{
this->config_list->push_back(_start_date_config);
}
void AIConfig::ClearConfigList()
{
/* The special casing for start_date is here to ensure that the
* start_date setting won't change even if you chose another Script. */
int start_date = this->GetSetting("start_date");
ScriptConfig::ClearConfigList();
this->SetSetting("start_date", start_date);
}
int AIConfig::GetSetting(const char *name) const
{
if (this->info == nullptr) {
SettingValueList::const_iterator it = this->settings.find(name);
if (it == this->settings.end()) {
assert(strcmp("start_date", name) == 0);
switch (GetGameSettings().script.settings_profile) {
case SP_EASY: return AI::START_NEXT_EASY;
case SP_MEDIUM: return AI::START_NEXT_MEDIUM;
case SP_HARD: return AI::START_NEXT_HARD;
case SP_CUSTOM: return AI::START_NEXT_MEDIUM;
default: NOT_REACHED();
}
}
return (*it).second;
}
return ScriptConfig::GetSetting(name);
}
void AIConfig::SetSetting(const char *name, int value)
{
if (this->info == nullptr) {
if (strcmp("start_date", name) != 0) return;
value = Clamp(value, AI::START_NEXT_MIN, AI::START_NEXT_MAX);
SettingValueList::iterator it = this->settings.find(name);
if (it != this->settings.end()) {
(*it).second = value;
} else {
this->settings[stredup(name)] = value;
}
return;
}
ScriptConfig::SetSetting(name, value);
}
void AIConfig::AddRandomDeviation()
{
int start_date = this->GetSetting("start_date");
ScriptConfig::AddRandomDeviation();
/* start_date = 0 is a special case, where random deviation does not occur.
* If start_date was not already 0, then a minimum value of 1 must apply. */
this->SetSetting("start_date", start_date != 0 ? std::max(1, this->GetSetting("start_date")) : 0);
}
|