mirror of https://github.com/OpenTTD/OpenTTD.git
Codechange: Use vector/span when loading wagon overrides. (#12604)
Replaces manual memory allocation and passing pointer with size.
This commit is contained in:
parent
96d82b4363
commit
1424a184d8
|
@ -5611,8 +5611,7 @@ static bool IsValidGroupID(uint16_t groupid, const char *function)
|
||||||
|
|
||||||
static void VehicleMapSpriteGroup(ByteReader *buf, uint8_t feature, uint8_t idcount)
|
static void VehicleMapSpriteGroup(ByteReader *buf, uint8_t feature, uint8_t idcount)
|
||||||
{
|
{
|
||||||
static EngineID *last_engines;
|
static std::vector<EngineID> last_engines; // Engine IDs are remembered in case the next action is a wagon override.
|
||||||
static uint last_engines_count;
|
|
||||||
bool wagover = false;
|
bool wagover = false;
|
||||||
|
|
||||||
/* Test for 'wagon override' flag */
|
/* Test for 'wagon override' flag */
|
||||||
|
@ -5621,21 +5620,18 @@ static void VehicleMapSpriteGroup(ByteReader *buf, uint8_t feature, uint8_t idco
|
||||||
/* Strip off the flag */
|
/* Strip off the flag */
|
||||||
idcount = GB(idcount, 0, 7);
|
idcount = GB(idcount, 0, 7);
|
||||||
|
|
||||||
if (last_engines_count == 0) {
|
if (last_engines.empty()) {
|
||||||
GrfMsg(0, "VehicleMapSpriteGroup: WagonOverride: No engine to do override with");
|
GrfMsg(0, "VehicleMapSpriteGroup: WagonOverride: No engine to do override with");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
GrfMsg(6, "VehicleMapSpriteGroup: WagonOverride: {} engines, {} wagons",
|
GrfMsg(6, "VehicleMapSpriteGroup: WagonOverride: {} engines, {} wagons", last_engines.size(), idcount);
|
||||||
last_engines_count, idcount);
|
|
||||||
} else {
|
} else {
|
||||||
if (last_engines_count != idcount) {
|
last_engines.resize(idcount);
|
||||||
last_engines = ReallocT(last_engines, idcount);
|
|
||||||
last_engines_count = idcount;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<EngineID> engines;
|
std::vector<EngineID> engines;
|
||||||
|
engines.reserve(idcount);
|
||||||
for (uint i = 0; i < idcount; i++) {
|
for (uint i = 0; i < idcount; i++) {
|
||||||
Engine *e = GetNewEngine(_cur.grffile, (VehicleType)feature, buf->ReadExtendedByte());
|
Engine *e = GetNewEngine(_cur.grffile, (VehicleType)feature, buf->ReadExtendedByte());
|
||||||
if (e == nullptr) {
|
if (e == nullptr) {
|
||||||
|
@ -5667,7 +5663,7 @@ static void VehicleMapSpriteGroup(ByteReader *buf, uint8_t feature, uint8_t idco
|
||||||
GrfMsg(7, "VehicleMapSpriteGroup: [{}] Engine {}...", i, engine);
|
GrfMsg(7, "VehicleMapSpriteGroup: [{}] Engine {}...", i, engine);
|
||||||
|
|
||||||
if (wagover) {
|
if (wagover) {
|
||||||
SetWagonOverrideSprites(engine, cid, _cur.spritegroups[groupid], last_engines, last_engines_count);
|
SetWagonOverrideSprites(engine, cid, _cur.spritegroups[groupid], last_engines);
|
||||||
} else {
|
} else {
|
||||||
SetCustomEngineSprites(engine, cid, _cur.spritegroups[groupid]);
|
SetCustomEngineSprites(engine, cid, _cur.spritegroups[groupid]);
|
||||||
}
|
}
|
||||||
|
@ -5683,7 +5679,7 @@ static void VehicleMapSpriteGroup(ByteReader *buf, uint8_t feature, uint8_t idco
|
||||||
EngineID engine = engines[i];
|
EngineID engine = engines[i];
|
||||||
|
|
||||||
if (wagover) {
|
if (wagover) {
|
||||||
SetWagonOverrideSprites(engine, SpriteGroupCargo::SG_DEFAULT, _cur.spritegroups[groupid], last_engines, last_engines_count);
|
SetWagonOverrideSprites(engine, SpriteGroupCargo::SG_DEFAULT, _cur.spritegroups[groupid], last_engines);
|
||||||
} else {
|
} else {
|
||||||
SetCustomEngineSprites(engine, SpriteGroupCargo::SG_DEFAULT, _cur.spritegroups[groupid]);
|
SetCustomEngineSprites(engine, SpriteGroupCargo::SG_DEFAULT, _cur.spritegroups[groupid]);
|
||||||
SetEngineGRF(engine, _cur.grffile);
|
SetEngineGRF(engine, _cur.grffile);
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
|
|
||||||
#include "safeguards.h"
|
#include "safeguards.h"
|
||||||
|
|
||||||
void SetWagonOverrideSprites(EngineID engine, CargoID cargo, const SpriteGroup *group, EngineID *train_id, uint trains)
|
void SetWagonOverrideSprites(EngineID engine, CargoID cargo, const SpriteGroup *group, std::span<EngineID> engine_ids)
|
||||||
{
|
{
|
||||||
Engine *e = Engine::Get(engine);
|
Engine *e = Engine::Get(engine);
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@ void SetWagonOverrideSprites(EngineID engine, CargoID cargo, const SpriteGroup *
|
||||||
WagonOverride *wo = &e->overrides.emplace_back();
|
WagonOverride *wo = &e->overrides.emplace_back();
|
||||||
wo->group = group;
|
wo->group = group;
|
||||||
wo->cargo = cargo;
|
wo->cargo = cargo;
|
||||||
wo->engines.assign(train_id, train_id + trains);
|
wo->engines.assign(engine_ids.begin(), engine_ids.end());
|
||||||
}
|
}
|
||||||
|
|
||||||
const SpriteGroup *GetWagonOverrideSpriteSet(EngineID engine, CargoID cargo, EngineID overriding_engine)
|
const SpriteGroup *GetWagonOverrideSpriteSet(EngineID engine, CargoID cargo, EngineID overriding_engine)
|
||||||
|
|
|
@ -76,7 +76,7 @@ static const uint VEHICLEINFO_FULL_VEHICLE_WIDTH = 32;
|
||||||
|
|
||||||
struct VehicleSpriteSeq;
|
struct VehicleSpriteSeq;
|
||||||
|
|
||||||
void SetWagonOverrideSprites(EngineID engine, CargoID cargo, const struct SpriteGroup *group, EngineID *train_id, uint trains);
|
void SetWagonOverrideSprites(EngineID engine, CargoID cargo, const struct SpriteGroup *group, std::span<EngineID> engine_ids);
|
||||||
const SpriteGroup *GetWagonOverrideSpriteSet(EngineID engine, CargoID cargo, EngineID overriding_engine);
|
const SpriteGroup *GetWagonOverrideSpriteSet(EngineID engine, CargoID cargo, EngineID overriding_engine);
|
||||||
void SetCustomEngineSprites(EngineID engine, uint8_t cargo, const struct SpriteGroup *group);
|
void SetCustomEngineSprites(EngineID engine, uint8_t cargo, const struct SpriteGroup *group);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue