diff options
author | peter1138 <peter1138@openttd.org> | 2006-05-04 19:27:41 +0000 |
---|---|---|
committer | peter1138 <peter1138@openttd.org> | 2006-05-04 19:27:41 +0000 |
commit | 34668ff09d21211527f81b2e89599903163db58d (patch) | |
tree | c1bfd2151940e66ca527249b315144e0fa5eb37c | |
parent | 4963eb80b783c22479e48a721cd2d8742eb7c793 (diff) | |
download | openttd-34668ff09d21211527f81b2e89599903163db58d.tar.xz |
(svn r4740) - Newstations: add function to evaluate station callbacks
-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); |