1
0
Fork 0

Codechange: Pass GRFConfig by reference where feasible. (#13388)

In places where a GRFConfig is passed by pointer and not checked for nullptr, use a reference instead.
pull/13390/head
Peter Nelson 2025-01-26 22:41:08 +00:00 committed by GitHub
parent e894a5880c
commit 9b947a37b8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 110 additions and 112 deletions

View File

@ -186,7 +186,7 @@ static void LoadSpriteTables()
static const char *master_filename = "OPENTTD.GRF";
GRFConfig *master = new GRFConfig(master_filename);
master->palette |= GRFP_GRF_DOS;
FillGRFDetails(master, false, BASESET_DIR);
FillGRFDetails(*master, false, BASESET_DIR);
ClrBit(master->flags, GCF_INIT_ONLY);
/* Baseset extra graphics */
@ -381,7 +381,7 @@ GRFConfig &GraphicsSet::GetOrCreateExtraConfig() const
case PAL_WINDOWS: this->extra_cfg->palette |= GRFP_GRF_WINDOWS; break;
default: break;
}
FillGRFDetails(this->extra_cfg.get(), false, BASESET_DIR);
FillGRFDetails(*this->extra_cfg, false, BASESET_DIR);
}
return *this->extra_cfg;
}

View File

@ -180,20 +180,20 @@ const NetworkServerGameInfo &GetCurrentNetworkServerGameInfo()
* @param config The GRF to handle.
* @param name The name of the NewGRF, empty when unknown.
*/
static void HandleIncomingNetworkGameInfoGRFConfig(GRFConfig *config, std::string_view name)
static void HandleIncomingNetworkGameInfoGRFConfig(GRFConfig &config, std::string_view name)
{
/* Find the matching GRF file */
const GRFConfig *f = FindGRFConfig(config->ident.grfid, FGCM_EXACT, &config->ident.md5sum);
const GRFConfig *f = FindGRFConfig(config.ident.grfid, FGCM_EXACT, &config.ident.md5sum);
if (f == nullptr) {
AddGRFTextToList(config->name, name.empty() ? GetString(STR_CONFIG_ERROR_INVALID_GRF_UNKNOWN) : name);
config->status = GCS_NOT_FOUND;
AddGRFTextToList(config.name, name.empty() ? GetString(STR_CONFIG_ERROR_INVALID_GRF_UNKNOWN) : name);
config.status = GCS_NOT_FOUND;
} else {
config->filename = f->filename;
config->name = f->name;
config->info = f->info;
config->url = f->url;
config.filename = f->filename;
config.name = f->name;
config.info = f->info;
config.url = f->url;
}
SetBit(config->flags, GCF_COPY);
SetBit(config.flags, GCF_COPY);
}
/**
@ -337,7 +337,7 @@ void DeserializeNetworkGameInfo(Packet &p, NetworkGameInfo &info, const GameInfo
GRFConfig *c = new GRFConfig();
c->ident = grf.ident;
HandleIncomingNetworkGameInfoGRFConfig(c, grf.name);
HandleIncomingNetworkGameInfoGRFConfig(*c, grf.name);
/* Append GRFConfig to the list */
*dst = c;

View File

@ -6862,9 +6862,9 @@ static void CfgApply(ByteReader &buf)
* best result as no NewGRF author can complain about that.
* @param c The NewGRF to disable.
*/
static void DisableStaticNewGRFInfluencingNonStaticNewGRFs(GRFConfig *c)
static void DisableStaticNewGRFInfluencingNonStaticNewGRFs(GRFConfig &c)
{
GRFError *error = DisableGrf(STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC, c);
GRFError *error = DisableGrf(STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC, &c);
error->data = _cur.grfconfig->GetName();
}
@ -6949,7 +6949,7 @@ static void SkipIf(ByteReader &buf)
GRFConfig *c = GetGRFConfig(cond_val, mask);
if (c != nullptr && HasBit(c->flags, GCF_STATIC) && !HasBit(_cur.grfconfig->flags, GCF_STATIC) && _networking) {
DisableStaticNewGRFInfluencingNonStaticNewGRFs(c);
DisableStaticNewGRFInfluencingNonStaticNewGRFs(*c);
c = nullptr;
}
@ -7591,7 +7591,7 @@ static void ParamSet(ByteReader &buf)
GRFConfig *c = GetGRFConfig(data);
if (c != nullptr && HasBit(c->flags, GCF_STATIC) && !HasBit(_cur.grfconfig->flags, GCF_STATIC) && _networking) {
/* Disable the read GRF if it is a static NewGRF. */
DisableStaticNewGRFInfluencingNonStaticNewGRFs(c);
DisableStaticNewGRFInfluencingNonStaticNewGRFs(*c);
src1 = 0;
} else if (file == nullptr || c == nullptr || c->status == GCS_DISABLED) {
src1 = 0;
@ -8905,9 +8905,9 @@ static void BuildCargoTranslationMap()
* Prepare loading a NewGRF file with its config
* @param config The NewGRF configuration struct with name, id, parameters and alike.
*/
static void InitNewGRFFile(const GRFConfig *config)
static void InitNewGRFFile(const GRFConfig &config)
{
GRFFile *newfile = GetFileByFilename(config->filename);
GRFFile *newfile = GetFileByFilename(config.filename);
if (newfile != nullptr) {
/* We already loaded it once. */
_cur.grffile = newfile;
@ -8922,10 +8922,10 @@ static void InitNewGRFFile(const GRFConfig *config)
* Constructor for GRFFile
* @param config GRFConfig to copy name, grfid and parameters from.
*/
GRFFile::GRFFile(const GRFConfig *config)
GRFFile::GRFFile(const GRFConfig &config)
{
this->filename = config->filename;
this->grfid = config->ident.grfid;
this->filename = config.filename;
this->grfid = config.ident.grfid;
/* Initialise local settings to defaults */
this->traininfo_vehicle_pitch = 0;
@ -8952,7 +8952,7 @@ GRFFile::GRFFile(const GRFConfig *config)
this->tramtype_map[0] = ROADTYPE_TRAM;
/* Copy the initial parameter list */
this->param = config->param;
this->param = config.param;
}
/**
@ -9620,12 +9620,12 @@ static void DecodeSpecialSprite(uint8_t *buf, uint num, GrfLoadingStage stage)
* @param stage The loading stage of the NewGRF.
* @param file The file to load the GRF data from.
*/
static void LoadNewGRFFileFromFile(GRFConfig *config, GrfLoadingStage stage, SpriteFile &file)
static void LoadNewGRFFileFromFile(GRFConfig &config, GrfLoadingStage stage, SpriteFile &file)
{
_cur.file = &file;
_cur.grfconfig = config;
_cur.grfconfig = &config;
Debug(grf, 2, "LoadNewGRFFile: Reading NewGRF-file '{}'", config->filename);
Debug(grf, 2, "LoadNewGRFFile: Reading NewGRF-file '{}'", config.filename);
uint8_t grf_container_version = file.GetContainerVersion();
if (grf_container_version == 0) {
@ -9709,9 +9709,9 @@ static void LoadNewGRFFileFromFile(GRFConfig *config, GrfLoadingStage stage, Spr
* @param temporary The NewGRF/sprite file is to be loaded temporarily and should be closed immediately,
* contrary to loading the SpriteFile and having it cached by the SpriteCache.
*/
void LoadNewGRFFile(GRFConfig *config, GrfLoadingStage stage, Subdirectory subdir, bool temporary)
void LoadNewGRFFile(GRFConfig &config, GrfLoadingStage stage, Subdirectory subdir, bool temporary)
{
const std::string &filename = config->filename;
const std::string &filename = config.filename;
/* A .grf file is activated only if it was active when the game was
* started. If a game is loaded, only its active .grfs will be
@ -9725,11 +9725,11 @@ void LoadNewGRFFile(GRFConfig *config, GrfLoadingStage stage, Subdirectory subdi
if (stage != GLS_FILESCAN && stage != GLS_SAFETYSCAN && stage != GLS_LABELSCAN) {
_cur.grffile = GetFileByFilename(filename);
if (_cur.grffile == nullptr) UserError("File '{}' lost in cache.\n", filename);
if (stage == GLS_RESERVE && config->status != GCS_INITIALISED) return;
if (stage == GLS_ACTIVATION && !HasBit(config->flags, GCF_RESERVED)) return;
if (stage == GLS_RESERVE && config.status != GCS_INITIALISED) return;
if (stage == GLS_ACTIVATION && !HasBit(config.flags, GCF_RESERVED)) return;
}
bool needs_palette_remap = config->palette & GRFP_USE_MASK;
bool needs_palette_remap = config.palette & GRFP_USE_MASK;
if (temporary) {
SpriteFile temporarySpriteFile(filename, subdir, needs_palette_remap);
LoadNewGRFFileFromFile(config, stage, temporarySpriteFile);
@ -10119,7 +10119,7 @@ void LoadNewGRF(SpriteID load_index, uint num_baseset)
continue;
}
if (stage == GLS_LABELSCAN) InitNewGRFFile(c);
if (stage == GLS_LABELSCAN) InitNewGRFFile(*c);
if (!HasBit(c->flags, GCF_STATIC) && !HasBit(c->flags, GCF_SYSTEM)) {
if (num_non_static == NETWORK_MAX_GRF_COUNT) {
@ -10133,7 +10133,7 @@ void LoadNewGRF(SpriteID load_index, uint num_baseset)
num_grfs++;
LoadNewGRFFile(c, stage, subdir, false);
LoadNewGRFFile(*c, stage, subdir, false);
if (stage == GLS_RESERVE) {
SetBit(c->flags, GCF_RESERVED);
} else if (stage == GLS_ACTIVATION) {

View File

@ -148,7 +148,7 @@ struct GRFFile : ZeroedMemoryAllocator {
uint32_t grf_features; ///< Bitset of GrfSpecFeature the grf uses
PriceMultipliers price_base_multipliers; ///< Price base multipliers as set by the grf.
GRFFile(const struct GRFConfig *config);
GRFFile(const struct GRFConfig &config);
/** Get GRF Parameter with range checking */
uint32_t GetParam(uint number) const
@ -193,7 +193,7 @@ inline bool HasGrfMiscBit(GrfMiscBit bit)
/* Indicates which are the newgrf features currently loaded ingame */
extern GRFLoadedFeatures _loaded_newgrf_features;
void LoadNewGRFFile(struct GRFConfig *config, GrfLoadingStage stage, Subdirectory subdir, bool temporary);
void LoadNewGRFFile(struct GRFConfig &config, GrfLoadingStage stage, Subdirectory subdir, bool temporary);
void LoadNewGRF(SpriteID load_index, uint num_baseset);
void ReloadNewGRFData(); // in saveload/afterload.cpp
void ResetNewGRFData();

View File

@ -258,14 +258,14 @@ size_t GRFGetSizeOfDataSection(FileHandle &f)
* @param subdir The subdirectory to look in.
* @return MD5 sum was successfully computed
*/
static bool CalcGRFMD5Sum(GRFConfig *config, Subdirectory subdir)
static bool CalcGRFMD5Sum(GRFConfig &config, Subdirectory subdir)
{
Md5 checksum;
uint8_t buffer[1024];
size_t len, size;
/* open the file */
auto f = FioFOpenFile(config->filename, "rb", subdir, &size);
auto f = FioFOpenFile(config.filename, "rb", subdir, &size);
if (!f.has_value()) return false;
long start = ftell(*f);
@ -280,7 +280,7 @@ static bool CalcGRFMD5Sum(GRFConfig *config, Subdirectory subdir)
size -= len;
checksum.Append(buffer, len);
}
checksum.Finish(config->ident.md5sum);
checksum.Finish(config.ident.md5sum);
return true;
}
@ -293,27 +293,27 @@ static bool CalcGRFMD5Sum(GRFConfig *config, Subdirectory subdir)
* @param subdir the subdirectory to search in.
* @return Operation was successfully completed.
*/
bool FillGRFDetails(GRFConfig *config, bool is_static, Subdirectory subdir)
bool FillGRFDetails(GRFConfig &config, bool is_static, Subdirectory subdir)
{
if (!FioCheckFileExists(config->filename, subdir)) {
config->status = GCS_NOT_FOUND;
if (!FioCheckFileExists(config.filename, subdir)) {
config.status = GCS_NOT_FOUND;
return false;
}
/* Find and load the Action 8 information */
LoadNewGRFFile(config, GLS_FILESCAN, subdir, true);
config->SetSuitablePalette();
config->FinalizeParameterInfo();
config.SetSuitablePalette();
config.FinalizeParameterInfo();
/* Skip if the grfid is 0 (not read) or if it is an internal GRF */
if (config->ident.grfid == 0 || HasBit(config->flags, GCF_SYSTEM)) return false;
if (config.ident.grfid == 0 || HasBit(config.flags, GCF_SYSTEM)) return false;
if (is_static) {
/* Perform a 'safety scan' for static GRFs */
LoadNewGRFFile(config, GLS_SAFETYSCAN, subdir, true);
/* GCF_UNSAFE is set if GLS_SAFETYSCAN finds unsafe actions */
if (HasBit(config->flags, GCF_UNSAFE)) return false;
if (HasBit(config.flags, GCF_UNSAFE)) return false;
}
return CalcGRFMD5Sum(config, subdir);
@ -540,7 +540,7 @@ bool GRFFileScanner::AddFile(const std::string &filename, size_t basepath_length
GRFConfig *c = new GRFConfig(filename.c_str() + basepath_length);
bool added = true;
if (FillGRFDetails(c, false)) {
if (FillGRFDetails(*c, false)) {
if (_all_grfs == nullptr) {
_all_grfs = c;
} else {
@ -704,10 +704,10 @@ GRFConfig *GetGRFConfig(uint32_t grfid, uint32_t mask)
/** Build a string containing space separated parameter values, and terminate */
std::string GRFBuildParamList(const GRFConfig *c)
std::string GRFBuildParamList(const GRFConfig &c)
{
std::string result;
for (const uint32_t &value : c->param) {
for (const uint32_t &value : c.param) {
if (!result.empty()) result += ' ';
result += std::to_string(value);
}

View File

@ -235,12 +235,12 @@ void AppendToGRFConfigList(GRFConfigList &dst, GRFConfig *el);
void ClearGRFConfigList(GRFConfigList &config);
void ResetGRFConfig(bool defaults);
GRFListCompatibility IsGoodGRFConfigList(GRFConfigList &grfconfig);
bool FillGRFDetails(GRFConfig *config, bool is_static, Subdirectory subdir = NEWGRF_DIR);
std::string GRFBuildParamList(const GRFConfig *c);
bool FillGRFDetails(GRFConfig &config, bool is_static, Subdirectory subdir = NEWGRF_DIR);
std::string GRFBuildParamList(const GRFConfig &c);
/* In newgrf_gui.cpp */
void ShowNewGRFSettings(bool editable, bool show_params, bool exec_changes, GRFConfigList &config);
void OpenGRFParameterWindow(bool is_baseset, GRFConfig *c, bool editable);
void OpenGRFParameterWindow(bool is_baseset, GRFConfig &c, bool editable);
void UpdateNewGRFScanStatus(uint num, const char *name);
void UpdateNewGRFConfigPalette(int32_t new_value = 0);

View File

@ -68,47 +68,47 @@ void ShowNewGRFError()
}
}
static void ShowNewGRFInfo(const GRFConfig *c, const Rect &r, bool show_params)
static void ShowNewGRFInfo(const GRFConfig &c, const Rect &r, bool show_params)
{
Rect tr = r.Shrink(WidgetDimensions::scaled.frametext);
if (c->error.has_value()) {
SetDParamStr(0, c->error->custom_message); // is skipped by built-in messages
SetDParamStr(1, c->filename);
SetDParamStr(2, c->error->data);
for (uint i = 0; i < c->error->param_value.size(); i++) {
SetDParam(3 + i, c->error->param_value[i]);
if (c.error.has_value()) {
SetDParamStr(0, c.error->custom_message); // is skipped by built-in messages
SetDParamStr(1, c.filename);
SetDParamStr(2, c.error->data);
for (uint i = 0; i < c.error->param_value.size(); i++) {
SetDParam(3 + i, c.error->param_value[i]);
}
SetDParamStr(0, GetString(c->error->message != STR_NULL ? c->error->message : STR_JUST_RAW_STRING));
tr.top = DrawStringMultiLine(tr, c->error->severity);
SetDParamStr(0, GetString(c.error->message != STR_NULL ? c.error->message : STR_JUST_RAW_STRING));
tr.top = DrawStringMultiLine(tr, c.error->severity);
}
/* Draw filename or not if it is not known (GRF sent over internet) */
if (!c->filename.empty()) {
SetDParamStr(0, c->filename);
if (!c.filename.empty()) {
SetDParamStr(0, c.filename);
tr.top = DrawStringMultiLine(tr, STR_NEWGRF_SETTINGS_FILENAME);
}
/* Prepare and draw GRF ID */
SetDParamStr(0, fmt::format("{:08X}", BSWAP32(c->ident.grfid)));
SetDParamStr(0, fmt::format("{:08X}", BSWAP32(c.ident.grfid)));
tr.top = DrawStringMultiLine(tr, STR_NEWGRF_SETTINGS_GRF_ID);
if ((_settings_client.gui.newgrf_developer_tools || _settings_client.gui.newgrf_show_old_versions) && c->version != 0) {
SetDParam(0, c->version);
if ((_settings_client.gui.newgrf_developer_tools || _settings_client.gui.newgrf_show_old_versions) && c.version != 0) {
SetDParam(0, c.version);
tr.top = DrawStringMultiLine(tr, STR_NEWGRF_SETTINGS_VERSION);
}
if ((_settings_client.gui.newgrf_developer_tools || _settings_client.gui.newgrf_show_old_versions) && c->min_loadable_version != 0) {
SetDParam(0, c->min_loadable_version);
if ((_settings_client.gui.newgrf_developer_tools || _settings_client.gui.newgrf_show_old_versions) && c.min_loadable_version != 0) {
SetDParam(0, c.min_loadable_version);
tr.top = DrawStringMultiLine(tr, STR_NEWGRF_SETTINGS_MIN_VERSION);
}
/* Prepare and draw MD5 sum */
SetDParamStr(0, FormatArrayAsHex(c->ident.md5sum));
SetDParamStr(0, FormatArrayAsHex(c.ident.md5sum));
tr.top = DrawStringMultiLine(tr, STR_NEWGRF_SETTINGS_MD5SUM);
/* Show GRF parameter list */
if (show_params) {
if (!c->param.empty()) {
if (!c.param.empty()) {
SetDParam(0, STR_JUST_RAW_STRING);
SetDParamStr(1, GRFBuildParamList(c));
} else {
@ -117,23 +117,23 @@ static void ShowNewGRFInfo(const GRFConfig *c, const Rect &r, bool show_params)
tr.top = DrawStringMultiLine(tr, STR_NEWGRF_SETTINGS_PARAMETER);
/* Draw the palette of the NewGRF */
if (c->palette & GRFP_BLT_32BPP) {
SetDParam(0, (c->palette & GRFP_USE_WINDOWS) ? STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP : STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP);
if (c.palette & GRFP_BLT_32BPP) {
SetDParam(0, (c.palette & GRFP_USE_WINDOWS) ? STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP : STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP);
} else {
SetDParam(0, (c->palette & GRFP_USE_WINDOWS) ? STR_NEWGRF_SETTINGS_PALETTE_LEGACY : STR_NEWGRF_SETTINGS_PALETTE_DEFAULT);
SetDParam(0, (c.palette & GRFP_USE_WINDOWS) ? STR_NEWGRF_SETTINGS_PALETTE_LEGACY : STR_NEWGRF_SETTINGS_PALETTE_DEFAULT);
}
tr.top = DrawStringMultiLine(tr, STR_NEWGRF_SETTINGS_PALETTE);
}
/* Show flags */
if (c->status == GCS_NOT_FOUND) tr.top = DrawStringMultiLine(tr, STR_NEWGRF_SETTINGS_NOT_FOUND);
if (c->status == GCS_DISABLED) tr.top = DrawStringMultiLine(tr, STR_NEWGRF_SETTINGS_DISABLED);
if (HasBit(c->flags, GCF_INVALID)) tr.top = DrawStringMultiLine(tr, STR_NEWGRF_SETTINGS_INCOMPATIBLE);
if (HasBit(c->flags, GCF_COMPATIBLE)) tr.top = DrawStringMultiLine(tr, STR_NEWGRF_COMPATIBLE_LOADED);
if (c.status == GCS_NOT_FOUND) tr.top = DrawStringMultiLine(tr, STR_NEWGRF_SETTINGS_NOT_FOUND);
if (c.status == GCS_DISABLED) tr.top = DrawStringMultiLine(tr, STR_NEWGRF_SETTINGS_DISABLED);
if (HasBit(c.flags, GCF_INVALID)) tr.top = DrawStringMultiLine(tr, STR_NEWGRF_SETTINGS_INCOMPATIBLE);
if (HasBit(c.flags, GCF_COMPATIBLE)) tr.top = DrawStringMultiLine(tr, STR_NEWGRF_COMPATIBLE_LOADED);
/* Draw GRF info if it exists */
if (!StrEmpty(c->GetDescription())) {
SetDParamStr(0, c->GetDescription());
if (!StrEmpty(c.GetDescription())) {
SetDParamStr(0, c.GetDescription());
tr.top = DrawStringMultiLine(tr, STR_JUST_RAW_STRING, TC_BLACK);
} else {
tr.top = DrawStringMultiLine(tr, STR_NEWGRF_SETTINGS_NO_INFO);
@ -145,7 +145,7 @@ static void ShowNewGRFInfo(const GRFConfig *c, const Rect &r, bool show_params)
*/
struct NewGRFParametersWindow : public Window {
static GRFParameterInfo dummy_parameter_info; ///< Dummy info in case a newgrf didn't provide info about some parameter.
GRFConfig *grf_config; ///< Set the parameters of this GRFConfig.
GRFConfig &grf_config; ///< Set the parameters of this GRFConfig.
int32_t clicked_button; ///< The row in which a button was clicked or INT_MAX when none is selected.
bool clicked_increase; ///< True if the increase button was clicked, false for the decrease button.
bool clicked_dropdown; ///< Whether the dropdown is open.
@ -156,7 +156,7 @@ struct NewGRFParametersWindow : public Window {
bool action14present; ///< True if action14 information is present.
bool editable; ///< Allow editing parameters.
NewGRFParametersWindow(WindowDesc &desc, bool is_baseset, GRFConfig *c, bool editable) : Window(desc),
NewGRFParametersWindow(WindowDesc &desc, bool is_baseset, GRFConfig &c, bool editable) : Window(desc),
grf_config(c),
clicked_button(INT32_MAX),
clicked_dropdown(false),
@ -164,7 +164,7 @@ struct NewGRFParametersWindow : public Window {
clicked_row(INT32_MAX),
editable(editable)
{
this->action14present = (c->num_valid_params != c->param.size() || !c->param_info.empty());
this->action14present = (this->grf_config.num_valid_params != this->grf_config.param.size() || !this->grf_config.param_info.empty());
this->CreateNestedTree();
this->GetWidget<NWidgetCore>(WID_NP_CAPTION)->SetStringTip(is_baseset ? STR_BASEGRF_PARAMETERS_CAPTION : STR_NEWGRF_PARAMETERS_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS);
@ -196,7 +196,7 @@ struct NewGRFParametersWindow : public Window {
*/
bool HasParameterInfo(uint nr) const
{
return nr < this->grf_config->param_info.size() && this->grf_config->param_info[nr].has_value();
return nr < this->grf_config.param_info.size() && this->grf_config.param_info[nr].has_value();
}
/**
@ -207,7 +207,7 @@ struct NewGRFParametersWindow : public Window {
*/
GRFParameterInfo &GetParameterInfo(uint nr) const
{
return this->HasParameterInfo(nr) ? this->grf_config->param_info[nr].value() : GetDummyParameterInfo(nr);
return this->HasParameterInfo(nr) ? this->grf_config.param_info[nr].value() : GetDummyParameterInfo(nr);
}
void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override
@ -240,7 +240,7 @@ struct NewGRFParametersWindow : public Window {
case WID_NP_DESCRIPTION:
/* Minimum size of 4 lines. The 500 is the default size of the window. */
Dimension suggestion = {500U - WidgetDimensions::scaled.frametext.Horizontal(), (uint)GetCharacterHeight(FS_NORMAL) * 4 + WidgetDimensions::scaled.frametext.Vertical()};
for (const auto &par_info : this->grf_config->param_info) {
for (const auto &par_info : this->grf_config.param_info) {
if (!par_info.has_value()) continue;
const char *desc = GetGRFStringFromGRFText(par_info->desc);
if (desc == nullptr) continue;
@ -284,12 +284,12 @@ struct NewGRFParametersWindow : public Window {
int text_y_offset = (this->line_height - GetCharacterHeight(FS_NORMAL)) / 2;
for (int32_t i = this->vscroll->GetPosition(); this->vscroll->IsVisible(i) && i < this->vscroll->GetCount(); i++) {
GRFParameterInfo &par_info = this->GetParameterInfo(i);
uint32_t current_value = this->grf_config->GetValue(par_info);
uint32_t current_value = this->grf_config.GetValue(par_info);
bool selected = (i == this->clicked_row);
if (par_info.type == PTYPE_BOOL) {
DrawBoolButton(buttons_left, ir.top + button_y_offset, current_value != 0, this->editable);
SetDParam(2, this->grf_config->GetValue(par_info) == 0 ? STR_CONFIG_SETTING_OFF : STR_CONFIG_SETTING_ON);
SetDParam(2, this->grf_config.GetValue(par_info) == 0 ? STR_CONFIG_SETTING_OFF : STR_CONFIG_SETTING_ON);
} else if (par_info.type == PTYPE_UINT_ENUM) {
if (par_info.complete_labels) {
DrawDropDownButton(buttons_left, ir.top + button_y_offset, COLOUR_YELLOW, this->clicked_row == i && this->clicked_dropdown, this->editable);
@ -335,22 +335,20 @@ struct NewGRFParametersWindow : public Window {
{
switch (widget) {
case WID_NP_NUMPAR_DEC:
if (this->editable && !this->action14present && !this->grf_config->param.empty()) {
this->grf_config->param.pop_back();
if (this->editable && !this->action14present && !this->grf_config.param.empty()) {
this->grf_config.param.pop_back();
this->InvalidateData();
SetWindowDirty(WC_GAME_OPTIONS, WN_GAME_OPTIONS_NEWGRF_STATE);
}
break;
case WID_NP_NUMPAR_INC: {
GRFConfig *c = this->grf_config;
if (this->editable && !this->action14present && c->param.size() < c->num_valid_params) {
this->grf_config->param.emplace_back(0);
case WID_NP_NUMPAR_INC:
if (this->editable && !this->action14present && this->grf_config.param.size() < this->grf_config.num_valid_params) {
this->grf_config.param.emplace_back(0);
this->InvalidateData();
SetWindowDirty(WC_GAME_OPTIONS, WN_GAME_OPTIONS_NEWGRF_STATE);
}
break;
}
case WID_NP_BACKGROUND: {
if (!this->editable) break;
@ -371,7 +369,7 @@ struct NewGRFParametersWindow : public Window {
GRFParameterInfo &par_info = this->GetParameterInfo(num);
/* One of the arrows is clicked */
uint32_t old_val = this->grf_config->GetValue(par_info);
uint32_t old_val = this->grf_config.GetValue(par_info);
if (par_info.type != PTYPE_BOOL && IsInsideMM(x, 0, SETTING_BUTTON_WIDTH) && par_info.complete_labels) {
if (this->clicked_dropdown) {
/* unclick the dropdown */
@ -416,7 +414,7 @@ struct NewGRFParametersWindow : public Window {
}
}
if (val != old_val) {
this->grf_config->SetValue(par_info, val);
this->grf_config.SetValue(par_info, val);
this->clicked_button = num;
this->unclick_timeout.Reset();
@ -432,7 +430,7 @@ struct NewGRFParametersWindow : public Window {
case WID_NP_RESET:
if (!this->editable) break;
this->grf_config->SetParameterDefaults();
this->grf_config.SetParameterDefaults();
this->InvalidateData();
SetWindowDirty(WC_GAME_OPTIONS, WN_GAME_OPTIONS_NEWGRF_STATE);
break;
@ -448,7 +446,7 @@ struct NewGRFParametersWindow : public Window {
if (!str.has_value() || str->empty()) return;
int32_t value = atoi(str->c_str());
GRFParameterInfo &par_info = this->GetParameterInfo(this->clicked_row);
this->grf_config->SetValue(par_info, value);
this->grf_config.SetValue(par_info, value);
this->SetDirty();
}
@ -457,7 +455,7 @@ struct NewGRFParametersWindow : public Window {
if (widget != WID_NP_SETTING_DROPDOWN) return;
assert(this->clicked_dropdown);
GRFParameterInfo &par_info = this->GetParameterInfo(this->clicked_row);
this->grf_config->SetValue(par_info, index);
this->grf_config.SetValue(par_info, index);
this->SetDirty();
}
@ -487,11 +485,11 @@ struct NewGRFParametersWindow : public Window {
{
if (!gui_scope) return;
if (!this->action14present) {
this->SetWidgetDisabledState(WID_NP_NUMPAR_DEC, !this->editable || this->grf_config->param.empty());
this->SetWidgetDisabledState(WID_NP_NUMPAR_INC, !this->editable || std::size(this->grf_config->param) >= this->grf_config->num_valid_params);
this->SetWidgetDisabledState(WID_NP_NUMPAR_DEC, !this->editable || this->grf_config.param.empty());
this->SetWidgetDisabledState(WID_NP_NUMPAR_INC, !this->editable || std::size(this->grf_config.param) >= this->grf_config.num_valid_params);
}
this->vscroll->SetCount(this->action14present ? this->grf_config->num_valid_params : GRFConfig::MAX_NUM_PARAMS);
this->vscroll->SetCount(this->action14present ? this->grf_config.num_valid_params : GRFConfig::MAX_NUM_PARAMS);
if (this->clicked_row != INT32_MAX && this->clicked_row >= this->vscroll->GetCount()) {
this->clicked_row = INT32_MAX;
this->CloseChildWindows(WC_QUERY_STRING);
@ -547,7 +545,7 @@ static WindowDesc _newgrf_parameters_desc(
_nested_newgrf_parameter_widgets
);
void OpenGRFParameterWindow(bool is_baseset, GRFConfig *c, bool editable)
void OpenGRFParameterWindow(bool is_baseset, GRFConfig &c, bool editable)
{
CloseWindowByClass(WC_GRF_PARAMETERS);
new NewGRFParametersWindow(_newgrf_parameters_desc, is_baseset, c, editable);
@ -818,12 +816,12 @@ struct NewGRFWindow : public Window, NewGRFScanCallback {
* @param c grf to display.
* @return Palette for the sprite.
*/
inline PaletteID GetPalette(const GRFConfig *c) const
inline PaletteID GetPalette(const GRFConfig &c) const
{
PaletteID pal;
/* Pick a colour */
switch (c->status) {
switch (c.status) {
case GCS_NOT_FOUND:
case GCS_DISABLED:
pal = PALETTE_TO_RED;
@ -838,9 +836,9 @@ struct NewGRFWindow : public Window, NewGRFScanCallback {
/* Do not show a "not-failure" colour when it actually failed to load */
if (pal != PALETTE_TO_RED) {
if (HasBit(c->flags, GCF_STATIC)) {
if (HasBit(c.flags, GCF_STATIC)) {
pal = PALETTE_TO_GREY;
} else if (HasBit(c->flags, GCF_COMPATIBLE)) {
} else if (HasBit(c.flags, GCF_COMPATIBLE)) {
pal = PALETTE_TO_ORANGE;
}
}
@ -874,7 +872,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback {
if (this->vscroll->IsVisible(i)) {
const char *text = c->GetName();
bool h = (this->active_sel == c);
PaletteID pal = this->GetPalette(c);
PaletteID pal = this->GetPalette(*c);
if (h) {
GfxFillRect(br.left, tr.top, br.right, tr.top + step_height - 1, PC_DARK_BLUE);
@ -932,7 +930,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback {
const GRFConfig *selected = this->active_sel;
if (selected == nullptr) selected = this->avail_sel;
if (selected != nullptr) {
ShowNewGRFInfo(selected, r, this->show_params);
ShowNewGRFInfo(*selected, r, this->show_params);
}
break;
}
@ -1134,7 +1132,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback {
case WID_NS_SET_PARAMETERS: { // Edit parameters
if (this->active_sel == nullptr || !this->show_params || this->active_sel->num_valid_params == 0) break;
OpenGRFParameterWindow(false, this->active_sel, this->editable);
OpenGRFParameterWindow(false, *this->active_sel, this->editable);
this->InvalidateData(GOID_NEWGRF_CHANGES_MADE);
break;
}

View File

@ -1108,7 +1108,7 @@ static GRFConfig *GRFLoadConfig(const IniFile &ini, const char *grpname, bool is
}
/* Check if item is valid */
if (!FillGRFDetails(c, is_static) || HasBit(c->flags, GCF_INVALID)) {
if (!FillGRFDetails(*c, is_static) || HasBit(c->flags, GCF_INVALID)) {
if (c->status == GCS_NOT_FOUND) {
SetDParam(1, STR_CONFIG_ERROR_INVALID_GRF_NOT_FOUND);
} else if (HasBit(c->flags, GCF_UNSAFE)) {
@ -1242,7 +1242,7 @@ static void GraphicsSetSaveConfig(IniFile &ini)
const GRFConfig *extra_cfg = used_set->GetExtraConfig();
if (extra_cfg != nullptr && !extra_cfg->param.empty()) {
group.GetOrCreateItem("extra_version").SetValue(fmt::format("{}", extra_cfg->version));
group.GetOrCreateItem("extra_params").SetValue(GRFBuildParamList(extra_cfg));
group.GetOrCreateItem("extra_params").SetValue(GRFBuildParamList(*extra_cfg));
}
}
@ -1256,7 +1256,7 @@ static void GRFSaveConfig(IniFile &ini, const char *grpname, const GRFConfig *li
for (c = list; c != nullptr; c = c->next) {
std::string key = fmt::format("{:08X}|{}|{}", BSWAP32(c->ident.grfid),
FormatArrayAsHex(c->ident.md5sum), c->filename);
group.GetOrCreateItem(key).SetValue(GRFBuildParamList(c));
group.GetOrCreateItem(key).SetValue(GRFBuildParamList(*c));
}
}

View File

@ -815,7 +815,7 @@ struct GameOptionsWindow : Window {
if (used_set == nullptr || !used_set->IsConfigurable()) break;
GRFConfig &extra_cfg = used_set->GetOrCreateExtraConfig();
if (extra_cfg.param.empty()) extra_cfg.SetParameterDefaults();
OpenGRFParameterWindow(true, &extra_cfg, _game_mode == GM_MENU);
OpenGRFParameterWindow(true, extra_cfg, _game_mode == GM_MENU);
if (_game_mode == GM_MENU) this->reload = true;
break;
}