summaryrefslogtreecommitdiff
path: root/src/newgrf_railtype.cpp
diff options
context:
space:
mode:
authormichi_cc <michi_cc@openttd.org>2012-07-01 23:12:50 +0000
committermichi_cc <michi_cc@openttd.org>2012-07-01 23:12:50 +0000
commitb0d21d2fadc9e7df11a2758e3e5cc411af2b0452 (patch)
tree533cf8897f15d02ccc19156034692ee32fa27976 /src/newgrf_railtype.cpp
parenta6244ed0dc39f520283abf2530154f0ae3996f2f (diff)
downloadopenttd-b0d21d2fadc9e7df11a2758e3e5cc411af2b0452.tar.xz
(svn r24367) -Feature: [NewGRF] Customisable signals for rail types.
Diffstat (limited to 'src/newgrf_railtype.cpp')
-rw-r--r--src/newgrf_railtype.cpp32
1 files changed, 29 insertions, 3 deletions
diff --git a/src/newgrf_railtype.cpp b/src/newgrf_railtype.cpp
index d4f6dcd4c..5f4c3d921 100644
--- a/src/newgrf_railtype.cpp
+++ b/src/newgrf_railtype.cpp
@@ -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;
@@ -122,6 +122,32 @@ SpriteID GetCustomRailSprite(const RailtypeInfo *rti, TileIndex tile, RailTypeSp
}
/**
+ * 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.
* @param grffile The GRF to do the lookup for.