summaryrefslogtreecommitdiff
path: root/src/newgrf_canal.cpp
diff options
context:
space:
mode:
authormichi_cc <michi_cc@openttd.org>2010-08-03 17:48:07 +0000
committermichi_cc <michi_cc@openttd.org>2010-08-03 17:48:07 +0000
commit4d927af48800f90c45cbc5300a510b61947066b8 (patch)
tree2ed591f5d5e9d3e1cc7b277dbaf11a53470597b9 /src/newgrf_canal.cpp
parentbd2f7e998c93d170e6fbf44ccdd01f95c24ce06f (diff)
downloadopenttd-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.cpp42
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;
+}