diff --git a/src/openttd.cpp b/src/openttd.cpp index 223d514b4b..86d49edd7a 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -1635,7 +1635,7 @@ void CheckCaches(bool force_check, std::function log) if (memcmp(&tra_cache[length], &Train::From(u)->tcache, sizeof(TrainCache)) != 0) { CCLOGV("train cache mismatch: %c%c%c%c%c%c%c%c%c", tra_cache[length].cached_override != Train::From(u)->tcache.cached_override ? 'o' : '-', - tra_cache[length].cached_tilt != Train::From(u)->tcache.cached_tilt ? 't' : '-', + tra_cache[length].cached_tflags != Train::From(u)->tcache.cached_tflags ? 'f' : '-', tra_cache[length].cached_num_engines != Train::From(u)->tcache.cached_num_engines ? 'e' : '-', tra_cache[length].cached_centre_mass != Train::From(u)->tcache.cached_centre_mass ? 'm' : '-', tra_cache[length].cached_veh_weight != Train::From(u)->tcache.cached_veh_weight ? 'w' : '-', diff --git a/src/pbs.cpp b/src/pbs.cpp index f276edd4be..588808a8b8 100644 --- a/src/pbs.cpp +++ b/src/pbs.cpp @@ -330,7 +330,7 @@ static void CheckCurveLookAhead(const Train *v, TrainReservationLookAhead *looka const RailtypeInfo *rti = GetRailTypeInfo(rt); max_speed += (max_speed / 2) * rti->curve_speed; - if (v->tcache.cached_tilt) { + if (v->tcache.cached_tflags & TCF_TILT) { /* Apply max_speed bonus of 20% for a tilting train */ max_speed += max_speed / 5; } diff --git a/src/saveload/vehicle_sl.cpp b/src/saveload/vehicle_sl.cpp index 4cf9ba297b..9ea1660cfc 100644 --- a/src/saveload/vehicle_sl.cpp +++ b/src/saveload/vehicle_sl.cpp @@ -1146,7 +1146,7 @@ struct vehicle_venc { struct train_venc { VehicleID id; GroundVehicleCache gvcache; - bool cached_tilt; + uint8 cached_tflags; uint8 cached_num_engines; uint16 cached_centre_mass; uint16 cached_veh_weight; @@ -1214,7 +1214,7 @@ void Save_VENC() for (Train *t : Train::Iterate()) { SlWriteUint32(t->index); write_gv_cache(t->gcache); - SlWriteByte(t->tcache.cached_tilt); + SlWriteByte(t->tcache.cached_tflags); SlWriteByte(t->tcache.cached_num_engines); SlWriteUint16(t->tcache.cached_centre_mass); SlWriteUint16(t->tcache.cached_veh_weight); @@ -1275,7 +1275,7 @@ void Load_VENC() for (train_venc &venc : _train_vencs) { venc.id = SlReadUint32(); read_gv_cache(venc.gvcache); - venc.cached_tilt = SlReadByte(); + venc.cached_tflags = SlReadByte(); venc.cached_num_engines = SlReadByte(); venc.cached_centre_mass = SlReadUint16(); venc.cached_veh_weight = SlReadUint16(); @@ -1362,7 +1362,7 @@ void SlProcessVENC() Train *t = Train::GetIfValid(venc.id); if (t == nullptr) continue; check_gv_cache(t->gcache, venc.gvcache, t); - CheckVehicleVENCProp(t->tcache.cached_tilt, venc.cached_tilt, t, "cached_tilt"); + CheckVehicleVENCProp(t->tcache.cached_tflags, (TrainCacheFlags)venc.cached_tflags, t, "cached_tflags"); CheckVehicleVENCProp(t->tcache.cached_num_engines, venc.cached_num_engines, t, "cached_num_engines"); CheckVehicleVENCProp(t->tcache.cached_centre_mass, venc.cached_centre_mass, t, "cached_centre_mass"); CheckVehicleVENCProp(t->tcache.cached_veh_weight, venc.cached_veh_weight, t, "cached_veh_weight"); diff --git a/src/table/newgrf_debug_data.h b/src/table/newgrf_debug_data.h index 831f324e68..ca7f725dee 100644 --- a/src/table/newgrf_debug_data.h +++ b/src/table/newgrf_debug_data.h @@ -151,8 +151,8 @@ class NIHVehicle : public NIHelper { } if (v->type == VEH_TRAIN) { const Train *t = Train::From(v); - seprintf(buffer, lastof(buffer), " T cache: tilt: %u, engines: %u, decel: %u, uncapped decel: %u, centre mass: %u", - t->tcache.cached_tilt, t->tcache.cached_num_engines, t->tcache.cached_deceleration, t->tcache.cached_uncapped_decel, t->tcache.cached_centre_mass); + seprintf(buffer, lastof(buffer), " T cache: tilt: %d, engines: %u, decel: %u, uncapped decel: %u, centre mass: %u", + (t->tcache.cached_tflags & TCF_TILT) ? 1 : 0, t->tcache.cached_num_engines, t->tcache.cached_deceleration, t->tcache.cached_uncapped_decel, t->tcache.cached_centre_mass); print(buffer); seprintf(buffer, lastof(buffer), " T cache: veh weight: %u, user data: %u, curve speed: %u", t->tcache.cached_veh_weight, t->tcache.user_def_data, t->tcache.cached_max_curve_speed); diff --git a/src/train.h b/src/train.h index 2d9363050e..5bc82a47dc 100644 --- a/src/train.h +++ b/src/train.h @@ -93,6 +93,13 @@ inline int GetTrainRealisticBrakingTargetDecelerationLimit(int acceleration_type return 120 + (acceleration_type * 48); } +/** Flags for TrainCache::cached_tflags */ +enum TrainCacheFlags : byte { + TCF_NONE = 0, ///< No flags + TCF_TILT = 0x01, ///< Train can tilt; feature provides a bonus in curves. +}; +DECLARE_ENUM_AS_BIT_SET(TrainCacheFlags) + /** Variables that are cached to improve performance and such */ struct TrainCache { /* Cached wagon override spritegroup */ @@ -102,7 +109,7 @@ struct TrainCache { int cached_max_curve_speed; ///< max consist speed limited by curves /* cached values, recalculated on load and each time a vehicle is added to/removed from the consist. */ - bool cached_tilt; ///< train can tilt; feature provides a bonus in curves + TrainCacheFlags cached_tflags;///< train cached flags uint8 cached_num_engines; ///< total number of engines, including rear ends of multiheaded engines uint16 cached_centre_mass; ///< Cached position of the centre of mass, from the front uint16 cached_veh_weight; ///< Cached individual vehicle weight diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index fb91afc803..1c5327a8fd 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -338,7 +338,7 @@ void Train::ConsistChanged(ConsistChangeFlags allowed_changes) /* store consist weight/max speed in cache */ this->vcache.cached_max_speed = max_speed; - this->tcache.cached_tilt = train_can_tilt; + this->tcache.cached_tflags = (train_can_tilt ? TCF_TILT : TCF_NONE); this->tcache.cached_max_curve_speed = this->GetCurveSpeedLimit(); /* recalculate cached weights and power too (we do this *after* the rest, so it is known which wagons are powered and need extra weight added) */ @@ -368,7 +368,7 @@ void Train::ConsistChanged(ConsistChangeFlags allowed_changes) u->tcache.cached_centre_mass = 0; u->tcache.cached_deceleration = 0; u->tcache.cached_uncapped_decel = 0; - u->tcache.cached_tilt = false; + u->tcache.cached_tflags = TCF_NONE; u->tcache.cached_max_curve_speed = 0; } } @@ -615,7 +615,7 @@ int Train::GetCurveSpeedLimit() const const RailtypeInfo *rti = GetRailTypeInfo(GetRailType(this->tile)); max_speed += (max_speed / 2) * rti->curve_speed; - if (this->tcache.cached_tilt) { + if (this->tcache.cached_tflags & TCF_TILT) { /* Apply max_speed bonus of 20% for a tilting train */ max_speed += max_speed / 5; }