diff options
author | michi_cc <michi_cc@openttd.org> | 2012-12-23 01:00:25 +0000 |
---|---|---|
committer | michi_cc <michi_cc@openttd.org> | 2012-12-23 01:00:25 +0000 |
commit | 245e32a10efb0dc924289a8cdec089cd13f3b47d (patch) | |
tree | 59f7728808701336fff2999efbd8c1d81e18c2a2 /src/train_cmd.cpp | |
parent | c41027fbaeb3ba722c1477e10d4d3fa7c25a0bff (diff) | |
download | openttd-245e32a10efb0dc924289a8cdec089cd13f3b47d.tar.xz |
(svn r24839) -Feature [FS#5271]: [NewGRF] Support oversized purchase list sprites. (Based on patch by Eddi)
Diffstat (limited to 'src/train_cmd.cpp')
-rw-r--r-- | src/train_cmd.cpp | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index 7cbf4c19b..3e72a37a6 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -528,6 +528,39 @@ void DrawTrainEngine(int left, int right, int preferred_x, int y, EngineID engin } /** + * Get the size of the sprite of a train sprite heading west, or both heads (used for lists). + * @param engine The engine to get the sprite from. + * @param[out] width The width of the sprite. + * @param[out] height The height of the sprite. + * @param[out] xoffs Number of pixels to shift the sprite to the right. + * @param[out] yoffs Number of pixels to shift the sprite downwards. + * @param image_type Context the sprite is used in. + */ +void GetTrainSpriteSize(EngineID engine, uint &width, uint &height, int &xoffs, int &yoffs, EngineImageType image_type) +{ + int y = 0; + + SpriteID sprite = GetRailIcon(engine, false, y, image_type); + const Sprite *real_sprite = GetSprite(sprite, ST_NORMAL); + + width = UnScaleByZoom(real_sprite->width, ZOOM_LVL_GUI); + height = UnScaleByZoom(real_sprite->height, ZOOM_LVL_GUI); + xoffs = UnScaleByZoom(real_sprite->x_offs, ZOOM_LVL_GUI); + yoffs = UnScaleByZoom(real_sprite->y_offs, ZOOM_LVL_GUI); + + if (RailVehInfo(engine)->railveh_type == RAILVEH_MULTIHEAD) { + sprite = GetRailIcon(engine, true, y, image_type); + real_sprite = GetSprite(sprite, ST_NORMAL); + + /* Calculate values relative to an imaginary center between the two sprites. */ + width = TRAININFO_DEFAULT_VEHICLE_WIDTH + UnScaleByZoom(real_sprite->width, ZOOM_LVL_GUI) + UnScaleByZoom(real_sprite->x_offs, ZOOM_LVL_GUI) - xoffs; + height = max<uint>(height, UnScaleByZoom(real_sprite->height, ZOOM_LVL_GUI)); + xoffs = xoffs - TRAININFO_DEFAULT_VEHICLE_WIDTH / 2; + yoffs = min(yoffs, UnScaleByZoom(real_sprite->y_offs, ZOOM_LVL_GUI)); + } +} + +/** * Build a railroad wagon. * @param tile tile of the depot where rail-vehicle is built. * @param flags type of operation. |