Base class for all vehicles that move through ground. More...
#include <ground_vehicle.hpp>
Public Types | |
typedef GroundVehicle< T, Type > | GroundVehicleBase |
Our type. | |
Public Member Functions | |
GroundVehicle () | |
The constructor at SpecializedVehicle must be called. | |
void | PowerChanged () |
Recalculates the cached total power of a vehicle. | |
void | CargoChanged () |
Recalculates the cached weight of a vehicle and its parts. | |
int | GetAcceleration () const |
Calculates the acceleration of the vehicle under its current conditions. | |
uint | Crash (bool flooded) |
Common code executed for crashed ground vehicles. | |
int32 | GetSlopeResistance () const |
Calculates the total slope resistance for this vehicle. | |
void | UpdateZPositionAndInclination () |
Updates vehicle's Z position and inclination. | |
void | UpdateZPosition () |
Updates vehicle's Z position. | |
byte | UpdateInclination (bool new_tile, bool update_delta) |
Checks if the vehicle is in a slope and sets the required flags in that case. | |
void | SetFrontEngine () |
Set front engine state. | |
void | ClearFrontEngine () |
Remove the front engine state. | |
void | SetArticulatedPart () |
Set a vehicle to be an articulated part. | |
void | ClearArticulatedPart () |
Clear a vehicle from being an articulated part. | |
void | SetWagon () |
Set a vehicle to be a wagon. | |
void | ClearWagon () |
Clear wagon property. | |
void | SetEngine () |
Set engine status. | |
void | ClearEngine () |
Clear engine status. | |
void | SetFreeWagon () |
Set a vehicle as a free wagon. | |
void | ClearFreeWagon () |
Clear a vehicle from being a free wagon. | |
void | SetMultiheaded () |
Set a vehicle as a multiheaded engine. | |
void | ClearMultiheaded () |
Clear multiheaded engine property. | |
bool | IsFreeWagon () const |
Check if the vehicle is a free wagon (got no engine in front of it). | |
bool | IsEngine () const |
Check if a vehicle is an engine (can be first in a consist). | |
bool | IsWagon () const |
Check if a vehicle is a wagon. | |
bool | IsMultiheaded () const |
Check if the vehicle is a multiheaded engine. | |
bool | IsRearDualheaded () const |
Tell if we are dealing with the rear end of a multiheaded engine. | |
void | SetLastSpeed () |
Update the GUI variant of the current speed of the vehicle. | |
Data Fields | |
GroundVehicleCache | gcache |
Cache of often calculated values. | |
uint16 | gv_flags |
Protected Member Functions | |
uint | DoUpdateSpeed (uint accel, int min_speed, int max_speed) |
Update the speed of the vehicle. |
Base class for all vehicles that move through ground.
Child classes must define all of the following functions. These functions are not defined as pure virtual functions at this class to improve performance.
virtual uint16 GetPower() const = 0; virtual uint16 GetPoweredPartPower(const T *head) const = 0; virtual uint16 GetWeight() const = 0; virtual byte GetTractiveEffort() const = 0; virtual byte GetAirDrag() const = 0; virtual byte GetAirDragArea() const = 0; virtual AccelStatus GetAccelerationStatus() const = 0; virtual uint16 GetCurrentSpeed() const = 0; virtual uint32 GetRollingFriction() const = 0; virtual int GetAccelerationType() const = 0; virtual int32 GetSlopeSteepness() const = 0; virtual int GetDisplayMaxSpeed() const = 0; virtual uint16 GetMaxTrackSpeed() const = 0; virtual bool TileMayHaveSlopedTrack() const = 0;
Definition at line 80 of file ground_vehicle.hpp.
void GroundVehicle< T, Type >::CargoChanged | ( | ) |
Recalculates the cached weight of a vehicle and its parts.
Should be called each time the cargo on the consist changes.
Definition at line 80 of file ground_vehicle.cpp.
References GroundVehicleCache::cached_axle_resistance, GroundVehicleCache::cached_weight, SpecializedVehicle< T, Type >::First(), GroundVehicle< T, Type >::gcache, and GroundVehicle< T, Type >::PowerChanged().
uint GroundVehicle< T, Type >::Crash | ( | bool | flooded | ) | [inline, virtual] |
Common code executed for crashed ground vehicles.
flooded | was this vehicle flooded? |
Reimplemented from Vehicle.
Definition at line 100 of file ground_vehicle.hpp.
Referenced by GroundVehicle< RoadVehicle, VEH_ROAD >::Crash().
uint GroundVehicle< T, Type >::DoUpdateSpeed | ( | uint | accel, | |
int | min_speed, | |||
int | max_speed | |||
) | [inline, protected] |
Update the speed of the vehicle.
It updates the cur_speed and subspeed variables depending on the state of the vehicle; in this case the current acceleration, minimum and maximum speeds of the vehicle. It returns the distance that that the vehicle can drive this tick. Vehicle::GetAdvanceDistance() determines the distance to drive before moving a step on the map.
accel | The acceleration we would like to give this vehicle. | |
min_speed | The minimum speed here, in vehicle specific units. | |
max_speed | The maximum speed here, in vehicle specific units. |
Definition at line 363 of file ground_vehicle.hpp.
int GroundVehicle< T, Type >::GetAcceleration | ( | ) | const |
Calculates the acceleration of the vehicle under its current conditions.
Definition at line 106 of file ground_vehicle.cpp.
References AS_ACCEL, GroundVehicleCache::cached_air_drag, GroundVehicleCache::cached_axle_resistance, GroundVehicleCache::cached_max_te, GroundVehicleCache::cached_power, GroundVehicleCache::cached_weight, SpecializedVehicle< T, Type >::From(), GroundVehicle< T, Type >::gcache, GroundVehicle< T, Type >::GetSlopeResistance(), max(), and min().
int32 GroundVehicle< T, Type >::GetSlopeResistance | ( | ) | const [inline] |
Calculates the total slope resistance for this vehicle.
Definition at line 114 of file ground_vehicle.hpp.
Referenced by GroundVehicle< T, Type >::GetAcceleration().
bool GroundVehicle< T, Type >::IsEngine | ( | ) | const [inline] |
Check if a vehicle is an engine (can be first in a consist).
Definition at line 316 of file ground_vehicle.hpp.
Referenced by GroundVehicle< RoadVehicle, VEH_ROAD >::IsRearDualheaded().
bool GroundVehicle< T, Type >::IsFreeWagon | ( | ) | const [inline] |
Check if the vehicle is a free wagon (got no engine in front of it).
Definition at line 310 of file ground_vehicle.hpp.
bool GroundVehicle< T, Type >::IsMultiheaded | ( | ) | const [inline] |
Check if the vehicle is a multiheaded engine.
Definition at line 328 of file ground_vehicle.hpp.
Referenced by FINAL::GetPower(), and GroundVehicle< RoadVehicle, VEH_ROAD >::IsRearDualheaded().
bool GroundVehicle< T, Type >::IsRearDualheaded | ( | ) | const [inline] |
Tell if we are dealing with the rear end of a multiheaded engine.
Definition at line 334 of file ground_vehicle.hpp.
bool GroundVehicle< T, Type >::IsWagon | ( | ) | const [inline] |
Check if a vehicle is a wagon.
Definition at line 322 of file ground_vehicle.hpp.
void GroundVehicle< T, Type >::PowerChanged | ( | ) |
Recalculates the cached total power of a vehicle.
Should be called when the consist is changed.
Definition at line 22 of file ground_vehicle.cpp.
References GroundVehicleCache::cached_air_drag, GroundVehicleCache::cached_max_te, GroundVehicleCache::cached_max_track_speed, GroundVehicleCache::cached_power, SpecializedVehicle< T, Type >::First(), SpecializedVehicle< T, Type >::From(), GroundVehicle< T, Type >::gcache, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_vehicle_pool >::index, max(), min(), SetWindowDirty(), SetWindowWidgetDirty(), Vehicle::vehstatus, WC_VEHICLE_DETAILS, WC_VEHICLE_VIEW, and WID_VV_START_STOP.
Referenced by GroundVehicle< T, Type >::CargoChanged().
void GroundVehicle< T, Type >::SetLastSpeed | ( | ) | [inline] |
Update the GUI variant of the current speed of the vehicle.
Also mark the widget dirty when that is needed, i.e. when the speed of this vehicle has changed.
Definition at line 341 of file ground_vehicle.hpp.
byte GroundVehicle< T, Type >::UpdateInclination | ( | bool | new_tile, | |
bool | update_delta | |||
) | [inline] |
Checks if the vehicle is in a slope and sets the required flags in that case.
new_tile | True if the vehicle reached a new tile. | |
update_delta | Indicates to also update the delta. |
Definition at line 232 of file ground_vehicle.hpp.
void GroundVehicle< T, Type >::UpdateZPosition | ( | ) | [inline] |
Updates vehicle's Z position.
Inclination can't change in the middle of a tile. The faster code is used for trains and road vehicles unless they are reversing on a sloped tile.
Definition at line 160 of file ground_vehicle.hpp.
Referenced by GroundVehicle< RoadVehicle, VEH_ROAD >::UpdateInclination().
void GroundVehicle< T, Type >::UpdateZPositionAndInclination | ( | ) | [inline] |
Updates vehicle's Z position and inclination.
Used when the vehicle entered given tile.
Definition at line 135 of file ground_vehicle.hpp.
Referenced by GroundVehicle< RoadVehicle, VEH_ROAD >::UpdateInclination().
uint16 GroundVehicle< T, Type >::gv_flags |
Definition at line 82 of file ground_vehicle.hpp.
Referenced by GroundVehicle< RoadVehicle, VEH_ROAD >::UpdateZPosition(), and GroundVehicle< RoadVehicle, VEH_ROAD >::UpdateZPositionAndInclination().