(svn r4740) - Newstations: add function to evaluate station callbacks
authorpeter1138
Thu, 04 May 2006 19:27:41 +0000
changeset 3752 7c28dc5a1698
parent 3751 ce6408fdb788
child 3753 2509d0dc21a7
(svn r4740) - Newstations: add function to evaluate station callbacks
newgrf_station.c
newgrf_station.h
--- a/newgrf_station.c	Thu May 04 19:21:16 2006 +0000
+++ b/newgrf_station.c	Thu May 04 19:27:41 2006 +0000
@@ -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 @@
 }
 
 
+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.
--- a/newgrf_station.h	Thu May 04 19:21:16 2006 +0000
+++ b/newgrf_station.h	Thu May 04 19:27:41 2006 +0000
@@ -99,6 +99,7 @@
  * 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);