Merge branch 'master' into jgrpp-beta

# Conflicts:
#	src/engine_base.h
#	src/gfxinit.cpp
#	src/graph_gui.cpp
#	src/lang/brazilian_portuguese.txt
#	src/lang/dutch.txt
#	src/lang/french.txt
#	src/lang/korean.txt
#	src/lang/norwegian_bokmal.txt
#	src/lang/portuguese.txt
#	src/lang/russian.txt
#	src/lang/spanish.txt
#	src/lang/spanish_MX.txt
#	src/network/core/address.cpp
#	src/network/core/game_info.h
#	src/network/core/os_abstraction.h
#	src/network/core/udp.cpp
#	src/network/network_client.cpp
#	src/network/network_client.h
#	src/network/network_internal.h
#	src/newgrf_engine.cpp
#	src/settings_gui.cpp
#	src/station_cmd.cpp
#	src/string_func.h
#	src/town_gui.cpp
#	src/video/video_driver.cpp
#	src/widget_type.h
This commit is contained in:
Jonathan G Rennison
2021-09-18 01:28:57 +01:00
50 changed files with 974 additions and 527 deletions

View File

@@ -31,62 +31,29 @@
bool _sprite_group_resolve_check_veh_check = false;
bool _sprite_group_resolve_check_veh_curvature_check = false;
struct WagonOverride {
EngineID *train_id;
uint trains;
CargoID cargo;
const SpriteGroup *group;
};
void SetWagonOverrideSprites(EngineID engine, CargoID cargo, const SpriteGroup *group, EngineID *train_id, uint trains)
{
Engine *e = Engine::Get(engine);
WagonOverride *wo;
assert(cargo < NUM_CARGO + 2); // Include CT_DEFAULT and CT_PURCHASE pseudo cargoes.
e->overrides_count++;
e->overrides = ReallocT(e->overrides, e->overrides_count);
wo = &e->overrides[e->overrides_count - 1];
WagonOverride *wo = &e->overrides.emplace_back();
wo->group = group;
wo->cargo = cargo;
wo->trains = trains;
wo->train_id = MallocT<EngineID>(trains);
memcpy(wo->train_id, train_id, trains * sizeof *train_id);
wo->engines.assign(train_id, train_id + trains);
}
const SpriteGroup *GetWagonOverrideSpriteSet(EngineID engine, CargoID cargo, EngineID overriding_engine)
{
const Engine *e = Engine::Get(engine);
for (uint i = 0; i < e->overrides_count; i++) {
const WagonOverride *wo = &e->overrides[i];
if (wo->cargo != cargo && wo->cargo != CT_DEFAULT) continue;
for (uint j = 0; j < wo->trains; j++) {
if (wo->train_id[j] == overriding_engine) return wo->group;
}
for (const WagonOverride &wo : e->overrides) {
if (wo.cargo != cargo && wo.cargo != CT_DEFAULT) continue;
if (std::find(wo.engines.begin(), wo.engines.end(), overriding_engine) != wo.engines.end()) return wo.group;
}
return nullptr;
}
/**
* Unload all wagon override sprite groups.
*/
void UnloadWagonOverrides(Engine *e)
{
for (uint i = 0; i < e->overrides_count; i++) {
WagonOverride *wo = &e->overrides[i];
free(wo->train_id);
}
free(e->overrides);
e->overrides_count = 0;
e->overrides = nullptr;
}
void SetCustomEngineSprites(EngineID engine, byte cargo, const SpriteGroup *group)
{
Engine *e = Engine::Get(engine);
@@ -1623,8 +1590,8 @@ void AnalyseEngineCallbacks()
for (uint i = 0; i < NUM_CARGO + 2; i++) {
process_sg(e->grf_prop.spritegroup[i]);
}
for (uint i = 0; i < e->overrides_count; i++) {
process_sg(e->overrides[i].group);
for (const WagonOverride &wo : e->overrides) {
process_sg(wo.group);
}
e->callbacks_used = callbacks_used;
e->cb36_properties_used = cb36_properties_used;