diff options
-rw-r--r-- | newgrf_station.c | 27 | ||||
-rw-r--r-- | newgrf_station.h | 1 |
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); |