Replace TrainCache::cached_tilt with a flags field

pull/251/head
Jonathan G Rennison 3 years ago
parent 555861510f
commit b514d29db1

@ -1635,7 +1635,7 @@ void CheckCaches(bool force_check, std::function<void(const char *)> 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' : '-',

@ -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;
}

@ -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");

@ -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);

@ -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

@ -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;
}

Loading…
Cancel
Save