# HG changeset patch # User Peter Nelson # Date 2024-01-08 21:40:09 # Node ID 913b64f47f6615984cc5897e5e703022f0e1bc72 # Parent a991b75e9b008debc24feb9e8f7e2461a79a6d0b Codechange: Rename and move SpriteGroup-specific cargo types into a namespace. These 'cargo types' have special defined uses and must not be used elsewhere. This makes it clearer that they are special. diff --git a/src/newgrf.cpp b/src/newgrf.cpp --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -5508,8 +5508,8 @@ static void NewSpriteGroup(ByteReader *b static CargoID TranslateCargo(uint8_t feature, uint8_t ctype) { /* Special cargo types for purchase list and stations */ - if ((feature == GSF_STATIONS || feature == GSF_ROADSTOPS) && ctype == 0xFE) return CT_DEFAULT_NA; - if (ctype == 0xFF) return CT_PURCHASE; + if ((feature == GSF_STATIONS || feature == GSF_ROADSTOPS) && ctype == 0xFE) return SpriteGroupCargo::SG_DEFAULT_NA; + if (ctype == 0xFF) return SpriteGroupCargo::SG_PURCHASE; if (_cur.grffile->cargo_list.empty()) { /* No cargo table, so use bitnum values */ @@ -5637,9 +5637,9 @@ static void VehicleMapSpriteGroup(ByteRe EngineID engine = engines[i]; if (wagover) { - SetWagonOverrideSprites(engine, CT_DEFAULT, _cur.spritegroups[groupid], last_engines, last_engines_count); + SetWagonOverrideSprites(engine, SpriteGroupCargo::SG_DEFAULT, _cur.spritegroups[groupid], last_engines, last_engines_count); } else { - SetCustomEngineSprites(engine, CT_DEFAULT, _cur.spritegroups[groupid]); + SetCustomEngineSprites(engine, SpriteGroupCargo::SG_DEFAULT, _cur.spritegroups[groupid]); SetEngineGRF(engine, _cur.grffile); } } @@ -5722,7 +5722,7 @@ static void StationMapSpriteGroup(ByteRe continue; } - statspec->grf_prop.spritegroup[CT_DEFAULT] = _cur.spritegroups[groupid]; + statspec->grf_prop.spritegroup[SpriteGroupCargo::SG_DEFAULT] = _cur.spritegroups[groupid]; statspec->grf_prop.grffile = _cur.grffile; statspec->grf_prop.local_id = station; StationClass::Assign(statspec); @@ -6092,7 +6092,7 @@ static void RoadStopMapSpriteGroup(ByteR continue; } - roadstopspec->grf_prop.spritegroup[CT_DEFAULT] = _cur.spritegroups[groupid]; + roadstopspec->grf_prop.spritegroup[SpriteGroupCargo::SG_DEFAULT] = _cur.spritegroups[groupid]; roadstopspec->grf_prop.grffile = _cur.grffile; roadstopspec->grf_prop.local_id = roadstop; RoadStopClass::Assign(roadstopspec); diff --git a/src/newgrf_cargo.h b/src/newgrf_cargo.h --- a/src/newgrf_cargo.h +++ b/src/newgrf_cargo.h @@ -14,9 +14,16 @@ #include "cargo_type.h" #include "gfx_type.h" -static const CargoID CT_DEFAULT = NUM_CARGO + 0; -static const CargoID CT_PURCHASE = NUM_CARGO + 1; -static const CargoID CT_DEFAULT_NA = NUM_CARGO + 2; +/** + * Sprite Group Cargo types. + * These special cargo types are used when resolving sprite groups when non-cargo-specific sprites or callbacks are needed, + * e.g. in purchase lists, or if no specific cargo type sprite group is supplied. + */ +namespace SpriteGroupCargo { + static constexpr CargoID SG_DEFAULT = NUM_CARGO; ///< Default type used when no more-specific cargo matches. + static constexpr CargoID SG_PURCHASE = NUM_CARGO + 1; ///< Used in purchase lists before an item exists. + static constexpr CargoID SG_DEFAULT_NA = NUM_CARGO + 2; ///< Used only by stations and roads when no more-specific cargo matches. +}; /* Forward declarations of structs used */ struct CargoSpec; diff --git a/src/newgrf_engine.cpp b/src/newgrf_engine.cpp --- a/src/newgrf_engine.cpp +++ b/src/newgrf_engine.cpp @@ -31,7 +31,7 @@ void SetWagonOverrideSprites(EngineID en { Engine *e = Engine::Get(engine); - assert(cargo < NUM_CARGO + 2); // Include CT_DEFAULT and CT_PURCHASE pseudo cargoes. + assert(cargo < NUM_CARGO + 2); // Include SpriteGroupCargo::SG_DEFAULT and SpriteGroupCargo::SG_PURCHASE pseudo cargoes. WagonOverride *wo = &e->overrides.emplace_back(); wo->group = group; @@ -44,7 +44,7 @@ const SpriteGroup *GetWagonOverrideSprit const Engine *e = Engine::Get(engine); for (const WagonOverride &wo : e->overrides) { - if (wo.cargo != cargo && wo.cargo != CT_DEFAULT) continue; + if (wo.cargo != cargo && wo.cargo != SpriteGroupCargo::SG_DEFAULT) continue; if (std::find(wo.engines.begin(), wo.engines.end(), overriding_engine) != wo.engines.end()) return wo.group; } return nullptr; @@ -1044,7 +1044,7 @@ VehicleResolverObject::VehicleResolverOb cached_relative_count(0) { if (wagon_override == WO_SELF) { - this->root_spritegroup = GetWagonOverrideSpriteSet(engine_type, CT_DEFAULT, engine_type); + this->root_spritegroup = GetWagonOverrideSpriteSet(engine_type, SpriteGroupCargo::SG_DEFAULT, engine_type); } else { if (wagon_override != WO_NONE && v != nullptr && v->IsGroundVehicle()) { assert(v->engine_type == engine_type); // overrides make little sense with fake scopes @@ -1061,9 +1061,9 @@ VehicleResolverObject::VehicleResolverOb if (this->root_spritegroup == nullptr) { const Engine *e = Engine::Get(engine_type); - CargoID cargo = v != nullptr ? v->cargo_type : CT_PURCHASE; + CargoID cargo = v != nullptr ? v->cargo_type : SpriteGroupCargo::SG_PURCHASE; assert(cargo < lengthof(e->grf_prop.spritegroup)); - this->root_spritegroup = e->grf_prop.spritegroup[cargo] != nullptr ? e->grf_prop.spritegroup[cargo] : e->grf_prop.spritegroup[CT_DEFAULT]; + this->root_spritegroup = e->grf_prop.spritegroup[cargo] != nullptr ? e->grf_prop.spritegroup[cargo] : e->grf_prop.spritegroup[SpriteGroupCargo::SG_DEFAULT]; } } } diff --git a/src/newgrf_roadstop.cpp b/src/newgrf_roadstop.cpp --- a/src/newgrf_roadstop.cpp +++ b/src/newgrf_roadstop.cpp @@ -196,11 +196,11 @@ RoadStopResolverObject::RoadStopResolver this->town_scope = nullptr; - CargoID ctype = CT_DEFAULT_NA; + CargoID ctype = SpriteGroupCargo::SG_DEFAULT_NA; if (st == nullptr) { /* No station, so we are in a purchase list */ - ctype = CT_PURCHASE; + ctype = SpriteGroupCargo::SG_PURCHASE; } else if (Station::IsExpected(st)) { const Station *station = Station::From(st); /* Pick the first cargo that we have waiting */ @@ -214,7 +214,7 @@ RoadStopResolverObject::RoadStopResolver } if (roadstopspec->grf_prop.spritegroup[ctype] == nullptr) { - ctype = CT_DEFAULT; + ctype = SpriteGroupCargo::SG_DEFAULT; } /* Remember the cargo type we've picked */ diff --git a/src/newgrf_station.cpp b/src/newgrf_station.cpp --- a/src/newgrf_station.cpp +++ b/src/newgrf_station.cpp @@ -496,12 +496,12 @@ uint32_t Waypoint::GetNewGRFVariable(con switch (this->station_scope.cargo_type) { case INVALID_CARGO: - case CT_DEFAULT_NA: - case CT_PURCHASE: + case SpriteGroupCargo::SG_DEFAULT_NA: + case SpriteGroupCargo::SG_PURCHASE: cargo = 0; break; - case CT_DEFAULT: + case SpriteGroupCargo::SG_DEFAULT: for (const GoodsEntry &ge : st->goods) { cargo += ge.cargo.TotalCount(); } @@ -557,11 +557,11 @@ StationResolverObject::StationResolverOb /* Invalidate all cached vars */ _svc.valid = 0; - CargoID ctype = CT_DEFAULT_NA; + CargoID ctype = SpriteGroupCargo::SG_DEFAULT_NA; if (this->station_scope.st == nullptr) { /* No station, so we are in a purchase list */ - ctype = CT_PURCHASE; + ctype = SpriteGroupCargo::SG_PURCHASE; } else if (Station::IsExpected(this->station_scope.st)) { const Station *st = Station::From(this->station_scope.st); /* Pick the first cargo that we have waiting */ @@ -575,7 +575,7 @@ StationResolverObject::StationResolverOb } if (this->station_scope.statspec->grf_prop.spritegroup[ctype] == nullptr) { - ctype = CT_DEFAULT; + ctype = SpriteGroupCargo::SG_DEFAULT; } /* Remember the cargo type we've picked */