diff options
author | glx <glx@openttd.org> | 2008-03-03 20:41:47 +0000 |
---|---|---|
committer | glx <glx@openttd.org> | 2008-03-03 20:41:47 +0000 |
commit | cf0e6d4cb48b733b1f6ca8819c05638218899f76 (patch) | |
tree | 9237d64ccd4f59ade42d44a218663f2f2617430a /src | |
parent | 5049fbb08145c0b9cd20436b2f53c3395af78cdb (diff) | |
download | openttd-cf0e6d4cb48b733b1f6ca8819c05638218899f76.tar.xz |
(svn r12330) -Feature: [NewGRF] vehicle variable FE bit 5 and 6
Diffstat (limited to 'src')
-rw-r--r-- | src/newgrf_engine.cpp | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/src/newgrf_engine.cpp b/src/newgrf_engine.cpp index 0140b6a06..648f46919 100644 --- a/src/newgrf_engine.cpp +++ b/src/newgrf_engine.cpp @@ -23,6 +23,8 @@ #include "vehicle_func.h" #include "core/random_func.hpp" #include "direction_func.h" +#include "rail_map.h" +#include "rail.h" int _traininfo_vehicle_pitch = 0; @@ -624,12 +626,18 @@ static uint32 VehicleGetVariable(const ResolverObject *object, byte variable, by case 0xFF: { uint16 modflags = 0; - /* @todo: There are some other bits that should be implemented: - * bit 5: Whether the rail vehicle is powered or not (mostly useful for wagons). - * bit 6: This is an electrically powered rail vehicle which is running on normal rail. - * bit 8: (Maybe?) Toggled whenever the train reverses. - */ - + if (v->type == VEH_TRAIN) { + /* @todo: There are some other bits that should be implemented: + * bit 8: (Maybe?) Toggled whenever the train reverses. + */ + const Vehicle *u = IsTrainWagon(v) && HasBit(v->vehicle_flags, VRF_POWEREDWAGON) ? v->First() : v; + RailType railtype = GetRailType(v->tile); + bool powered = IsTrainEngine(v) || (IsTrainWagon(v) && HasBit(v->vehicle_flags, VRF_POWEREDWAGON)); + bool has_power = powered && HasPowerOnRail(u->u.rail.railtype, railtype); + bool is_electric = powered && u->u.rail.railtype == RAILTYPE_ELECTRIC; + if (has_power) SetBit(modflags, 5); + if (is_electric && !has_power) SetBit(modflags, 6); + } if (HasBit(v->vehicle_flags, VF_BUILT_AS_PROTOTYPE)) SetBit(modflags, 10); return variable == 0xFE ? modflags : GB(modflags, 8, 8); |