forked from mirror/OpenTTD
(svn r24367) -Feature: [NewGRF] Customisable signals for rail types.
This commit is contained in:
@@ -77,7 +77,7 @@ static const SpriteGroup *RailTypeResolveReal(const ResolverObject *object, cons
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline void NewRailTypeResolver(ResolverObject *res, TileIndex tile, TileContext context, const GRFFile *grffile)
|
||||
static inline void NewRailTypeResolver(ResolverObject *res, TileIndex tile, TileContext context, const GRFFile *grffile, uint32 param1 = 0, uint32 param2 = 0)
|
||||
{
|
||||
res->GetRandomBits = &RailTypeGetRandomBits;
|
||||
res->GetTriggers = &RailTypeGetTriggers;
|
||||
@@ -89,8 +89,8 @@ static inline void NewRailTypeResolver(ResolverObject *res, TileIndex tile, Tile
|
||||
res->u.routes.context = context;
|
||||
|
||||
res->callback = CBID_NO_CALLBACK;
|
||||
res->callback_param1 = 0;
|
||||
res->callback_param2 = 0;
|
||||
res->callback_param1 = param1;
|
||||
res->callback_param2 = param2;
|
||||
res->ResetState();
|
||||
|
||||
res->grffile = grffile;
|
||||
@@ -121,6 +121,32 @@ SpriteID GetCustomRailSprite(const RailtypeInfo *rti, TileIndex tile, RailTypeSp
|
||||
return group->GetResult();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the sprite to draw for a given signal.
|
||||
* @param rti The rail type data (spec).
|
||||
* @param tile The tile to get the sprite for.
|
||||
* @param type Signal type.
|
||||
* @param var Signal variant.
|
||||
* @param state Signal state.
|
||||
* @param gui Is the sprite being used on the map or in the GUI?
|
||||
* @return The sprite to draw.
|
||||
*/
|
||||
SpriteID GetCustomSignalSprite(const RailtypeInfo *rti, TileIndex tile, SignalType type, SignalVariant var, SignalState state, bool gui)
|
||||
{
|
||||
if (rti->group[RTSG_SIGNALS] == NULL) return 0;
|
||||
|
||||
ResolverObject object;
|
||||
|
||||
uint32 param1 = gui ? 0x10 : 0x00;
|
||||
uint32 param2 = (type << 16) | (var << 8) | state;
|
||||
NewRailTypeResolver(&object, tile, TCX_NORMAL, rti->grffile[RTSG_SIGNALS], param1, param2);
|
||||
|
||||
const SpriteGroup *group = SpriteGroup::Resolve(rti->group[RTSG_SIGNALS], &object);
|
||||
if (group == NULL || group->GetNumResults() == 0) return 0;
|
||||
|
||||
return group->GetResult();
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform a reverse railtype lookup to get the GRF internal ID.
|
||||
* @param railtype The global (OpenTTD) railtype.
|
||||
|
Reference in New Issue
Block a user