Fix handling of effect vehicles in CallVehicleTicks

Move effect vehicles into separate cache vector
Call effect vehicle ticks before other vehicle types

See #76
This commit is contained in:
Jonathan G Rennison
2019-02-15 18:14:15 +00:00
parent 884fa9a9d4
commit e28e2f638e
2 changed files with 17 additions and 5 deletions

View File

@@ -691,14 +691,14 @@ TransparencyOption EffectVehicle::GetTransparencyOption() const
return _effect_transparency_options[this->subtype];
}
extern std::vector<Vehicle *> _tick_other_veh_cache;
extern std::vector<EffectVehicle *> _tick_effect_veh_cache;
extern bool _tick_caches_valid;
void EffectVehicle::AddEffectVehicleToTickCache()
{
if (!_tick_caches_valid) return;
_tick_other_veh_cache.erase(std::remove(_tick_other_veh_cache.begin(), _tick_other_veh_cache.end(), nullptr), _tick_other_veh_cache.end());
_tick_other_veh_cache.insert(std::upper_bound(_tick_other_veh_cache.begin(), _tick_other_veh_cache.end(), this, [&](const Vehicle *a, const Vehicle *b) {
_tick_effect_veh_cache.erase(std::remove(_tick_effect_veh_cache.begin(), _tick_effect_veh_cache.end(), nullptr), _tick_effect_veh_cache.end());
_tick_effect_veh_cache.insert(std::upper_bound(_tick_effect_veh_cache.begin(), _tick_effect_veh_cache.end(), this, [&](const Vehicle *a, const Vehicle *b) {
return a->index < b->index;
}), this);
}
@@ -706,7 +706,7 @@ void EffectVehicle::AddEffectVehicleToTickCache()
void EffectVehicle::RemoveEffectVehicleFromTickCache()
{
if (!_tick_caches_valid) return;
for (auto &v : _tick_other_veh_cache) {
for (auto &v : _tick_effect_veh_cache) {
if (v == this) v = nullptr;
}
}