summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpeter1138 <peter1138@openttd.org>2006-05-04 19:27:41 +0000
committerpeter1138 <peter1138@openttd.org>2006-05-04 19:27:41 +0000
commitc22e79d5515b158f5e15bc78e73565c1d4aafd12 (patch)
treec1bfd2151940e66ca527249b315144e0fa5eb37c
parente5d936d0fe05621bb6b1448ba5c3e5f264a874f7 (diff)
downloadopenttd-c22e79d5515b158f5e15bc78e73565c1d4aafd12.tar.xz
(svn r4740) - Newstations: add function to evaluate station callbacks
-rw-r--r--newgrf_station.c27
-rw-r--r--newgrf_station.h1
2 files changed, 28 insertions, 0 deletions
diff --git a/newgrf_station.c b/newgrf_station.c
index a0a82df0b..c65034631 100644
--- a/newgrf_station.c
+++ b/newgrf_station.c
@@ -10,6 +10,7 @@
#include "table/strings.h"
#include "station.h"
#include "station_map.h"
+#include "newgrf_callbacks.h"
#include "newgrf_station.h"
#include "newgrf_spritegroup.h"
@@ -345,6 +346,32 @@ SpriteID GetCustomStationRelocation(const StationSpec *statspec, const Station *
}
+uint16 GetStationCallback(uint16 callback, uint32 param1, uint32 param2, const StationSpec *statspec, const Station *st, TileIndex tile)
+{
+ const SpriteGroup *group;
+ ResolverObject object;
+ CargoID ctype = (st == NULL) ? GC_PURCHASE : GC_DEFAULT_NA;
+
+ NewStationResolver(&object, statspec, st, tile);
+
+ object.callback = callback;
+ object.callback_param1 = param1;
+ object.callback_param2 = param2;
+
+ group = Resolve(statspec->spritegroup[ctype], &object);
+ if ((group == NULL || group->type != SGT_CALLBACK) && ctype != GC_DEFAULT_NA) {
+ group = Resolve(statspec->spritegroup[GC_DEFAULT_NA], &object);
+ }
+ if ((group == NULL || group->type != SGT_CALLBACK) && ctype != GC_DEFAULT) {
+ group = Resolve(statspec->spritegroup[GC_DEFAULT], &object);
+ }
+
+ if (group == NULL || group->type != SGT_CALLBACK) return CALLBACK_FAILED;
+
+ return group->g.callback.result;
+}
+
+
/**
* Allocate a StationSpec to a Station. This is called once per build operation.
* @param spec StationSpec to allocate.
diff --git a/newgrf_station.h b/newgrf_station.h
index d14d215d8..cd3900d73 100644
--- a/newgrf_station.h
+++ b/newgrf_station.h
@@ -99,6 +99,7 @@ const StationSpec *GetCustomStationSpec(StationClassID sclass, uint station);
* NULL - that means we are in a build dialog). The station structure is used
* for variational sprite groups. */
SpriteID GetCustomStationRelocation(const StationSpec *statspec, const Station *st, TileIndex tile);
+uint16 GetStationCallback(uint16 callback, uint32 param1, uint32 param2, const StationSpec *statspec, const Station *st, TileIndex tile);
/* Allocate a StationSpec to a Station. This is called once per build operation. */
int AllocateSpecToStation(const StationSpec *statspec, Station *st, bool exec);