forked from mirror/OpenTTD
(svn r20126) -Fix [FS#3883]: Make railtype Terrain Type variable aware of RAIL_GROUND_HALF_SNOW. That is, resolve the sprites for upper and lower part of the foundation independently.
This commit is contained in:
@@ -49,7 +49,7 @@ static uint32 RailTypeGetVariable(const ResolverObject *object, byte variable, b
|
||||
}
|
||||
|
||||
switch (variable) {
|
||||
case 0x40: return GetTerrainType(tile);
|
||||
case 0x40: return GetTerrainType(tile, object->u.routes.upper_halftile);
|
||||
case 0x41: return 0;
|
||||
case 0x42: return IsLevelCrossingTile(tile) && IsCrossingBarred(tile);
|
||||
case 0x43:
|
||||
@@ -70,7 +70,7 @@ static const SpriteGroup *RailTypeResolveReal(const ResolverObject *object, cons
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline void NewRailTypeResolver(ResolverObject *res, TileIndex tile)
|
||||
static inline void NewRailTypeResolver(ResolverObject *res, TileIndex tile, bool upper_halftile)
|
||||
{
|
||||
res->GetRandomBits = &RailTypeGetRandomBits;
|
||||
res->GetTriggers = &RailTypeGetTriggers;
|
||||
@@ -79,6 +79,7 @@ static inline void NewRailTypeResolver(ResolverObject *res, TileIndex tile)
|
||||
res->ResolveReal = &RailTypeResolveReal;
|
||||
|
||||
res->u.routes.tile = tile;
|
||||
res->u.routes.upper_halftile = upper_halftile;
|
||||
|
||||
res->callback = CBID_NO_CALLBACK;
|
||||
res->callback_param1 = 0;
|
||||
@@ -89,7 +90,7 @@ static inline void NewRailTypeResolver(ResolverObject *res, TileIndex tile)
|
||||
res->count = 0;
|
||||
}
|
||||
|
||||
SpriteID GetCustomRailSprite(const RailtypeInfo *rti, TileIndex tile, RailTypeSpriteGroup rtsg)
|
||||
SpriteID GetCustomRailSprite(const RailtypeInfo *rti, TileIndex tile, RailTypeSpriteGroup rtsg, bool upper_halftile)
|
||||
{
|
||||
assert(rtsg < RTSG_END);
|
||||
|
||||
@@ -98,7 +99,7 @@ SpriteID GetCustomRailSprite(const RailtypeInfo *rti, TileIndex tile, RailTypeSp
|
||||
const SpriteGroup *group;
|
||||
ResolverObject object;
|
||||
|
||||
NewRailTypeResolver(&object, tile);
|
||||
NewRailTypeResolver(&object, tile, upper_halftile);
|
||||
|
||||
group = SpriteGroup::Resolve(rti->group[rtsg], &object);
|
||||
if (group == NULL || group->GetNumResults() == 0) return 0;
|
||||
@@ -128,5 +129,5 @@ uint8 GetReverseRailTypeTranslation(RailType railtype, const GRFFile *grffile)
|
||||
*/
|
||||
void GetRailTypeResolver(ResolverObject *ro, uint index)
|
||||
{
|
||||
NewRailTypeResolver(ro, index);
|
||||
NewRailTypeResolver(ro, index, false);
|
||||
}
|
||||
|
Reference in New Issue
Block a user