diff options
author | michi_cc <michi_cc@openttd.org> | 2010-08-03 17:48:07 +0000 |
---|---|---|
committer | michi_cc <michi_cc@openttd.org> | 2010-08-03 17:48:07 +0000 |
commit | 4d927af48800f90c45cbc5300a510b61947066b8 (patch) | |
tree | 2ed591f5d5e9d3e1cc7b277dbaf11a53470597b9 /src/newgrf_canal.cpp | |
parent | bd2f7e998c93d170e6fbf44ccdd01f95c24ce06f (diff) | |
download | openttd-4d927af48800f90c45cbc5300a510b61947066b8.tar.xz |
(svn r20353) -Add: [NewGRF] Support for callback 0x147 ("add sprite offset") for canals.
Diffstat (limited to 'src/newgrf_canal.cpp')
-rw-r--r-- | src/newgrf_canal.cpp | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/newgrf_canal.cpp b/src/newgrf_canal.cpp index 10fb06ffa..500e93ae0 100644 --- a/src/newgrf_canal.cpp +++ b/src/newgrf_canal.cpp @@ -105,3 +105,45 @@ SpriteID GetCanalSprite(CanalFeature feature, TileIndex tile) return group->GetResult(); } + +/** + * Run a specific callback for canals. + * @param callback Callback ID. + * @param param1 Callback parameter 1. + * @param param2 Callback parameter 2. + * @param feature For which feature to run the callback. + * @param tile Tile index of canal. + * @return Callback result or CALLBACK_FAILED if the callback failed. + */ +uint16 GetCanalCallback(CallbackID callback, uint32 param1, uint32 param2, CanalFeature feature, TileIndex tile) +{ + ResolverObject object; + const SpriteGroup *group; + + NewCanalResolver(&object, tile, _water_feature[feature].grffile); + + object.callback = callback; + object.callback_param1 = param1; + object.callback_param2 = param2; + + group = SpriteGroup::Resolve(_water_feature[feature].group, &object); + if (group == NULL) return CALLBACK_FAILED; + + return group->GetCallbackResult(); +} + +/** + * Get the new sprite offset for a water tile. + * @param tile Tile index of the canal/water tile. + * @param feature For which feature to get the new sprite offset. + * @param cur_offset Current sprite offset. + * @return New sprite offset. + */ +uint GetCanalSpriteOffset(CanalFeature feature, TileIndex tile, uint cur_offset) +{ + if (HasBit(_water_feature[feature].callback_mask, CBM_CANAL_SPRITE_OFFSET)) { + uint16 cb = GetCanalCallback(CBID_CANALS_SPRITE_OFFSET, cur_offset, 0, feature, tile); + if (cb != CALLBACK_FAILED) return cur_offset + cb; + } + return cur_offset; +} |