diff options
author | frosch <frosch@openttd.org> | 2010-01-03 20:55:00 +0000 |
---|---|---|
committer | frosch <frosch@openttd.org> | 2010-01-03 20:55:00 +0000 |
commit | a9d4147eb28618727c7f8ad013146d04350d3ffe (patch) | |
tree | 7e12fcbfcc09072b26c37158cb1a123b2a4571ae /src/viewport.cpp | |
parent | 8a50a4112c4cf425b3d47c189f80c4e053c047bc (diff) | |
download | openttd-a9d4147eb28618727c7f8ad013146d04350d3ffe.tar.xz |
(svn r18702) -Fix [FS#3467]: Enable DrawGroundSpriteAt() to deal with foundations as DrawGroundSprite() does, and use this for drawing one-way-road-signs and clear-land-fences.
Diffstat (limited to 'src/viewport.cpp')
-rw-r--r-- | src/viewport.cpp | 35 |
1 files changed, 26 insertions, 9 deletions
diff --git a/src/viewport.cpp b/src/viewport.cpp index 2e7753b44..7b417f942 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -467,7 +467,7 @@ void HandleZoomMessage(Window *w, const ViewPort *vp, byte widget_zoom_in, byte } /** - * Draws a ground sprite at a specific world-coordinate. + * Shedules a tile sprite for drawing. * * @param image the image to draw. * @param pal the provided palette. @@ -477,9 +477,8 @@ void HandleZoomMessage(Window *w, const ViewPort *vp, byte widget_zoom_in, byte * @param sub Only draw a part of the sprite. * @param extra_offs_x Pixel X offset for the sprite position. * @param extra_offs_y Pixel Y offset for the sprite position. - * */ -void DrawGroundSpriteAt(SpriteID image, SpriteID pal, int32 x, int32 y, byte z, const SubSprite *sub, int extra_offs_x, int extra_offs_y) +static void AddTileSpriteToDraw(SpriteID image, SpriteID pal, int32 x, int32 y, int z, const SubSprite *sub = NULL, int extra_offs_x = 0, int extra_offs_y = 0) { assert((image & SPRITE_MASK) < MAX_SPRITES); @@ -521,27 +520,45 @@ static void AddChildSpriteToFoundation(SpriteID image, SpriteID pal, const SubSp } /** - * Draws a ground sprite for the current tile. + * Draws a ground sprite at a specific world-coordinate relative to the current tile. * If the current tile is drawn on top of a foundation the sprite is added as child sprite to the "foundation"-ParentSprite. * * @param image the image to draw. * @param pal the provided palette. + * @param x position x (world coordinates) of the sprite relative to current tile. + * @param y position y (world coordinates) of the sprite relative to current tile. + * @param z position z (world coordinates) of the sprite relative to current tile. * @param sub Only draw a part of the sprite. * @param extra_offs_x Pixel X offset for the sprite position. * @param extra_offs_y Pixel Y offset for the sprite position. */ -void DrawGroundSprite(SpriteID image, SpriteID pal, const SubSprite *sub, int extra_offs_x, int extra_offs_y) +void DrawGroundSpriteAt(SpriteID image, SpriteID pal, int32 x, int32 y, int z, const SubSprite *sub, int extra_offs_x, int extra_offs_y) { /* Switch to first foundation part, if no foundation was drawn */ if (_vd.foundation_part == FOUNDATION_PART_NONE) _vd.foundation_part = FOUNDATION_PART_NORMAL; if (_vd.foundation[_vd.foundation_part] != -1) { - AddChildSpriteToFoundation(image, pal, sub, _vd.foundation_part, extra_offs_x, extra_offs_y); + Point pt = RemapCoords(x, y, z); + AddChildSpriteToFoundation(image, pal, sub, _vd.foundation_part, pt.x + extra_offs_x, pt.y + extra_offs_y); } else { - DrawGroundSpriteAt(image, pal, _cur_ti->x, _cur_ti->y, _cur_ti->z, sub, extra_offs_x, extra_offs_y); + AddTileSpriteToDraw(image, pal, _cur_ti->x + x, _cur_ti->y + y, _cur_ti->z + z, sub, extra_offs_x, extra_offs_y); } } +/** + * Draws a ground sprite for the current tile. + * If the current tile is drawn on top of a foundation the sprite is added as child sprite to the "foundation"-ParentSprite. + * + * @param image the image to draw. + * @param pal the provided palette. + * @param sub Only draw a part of the sprite. + * @param extra_offs_x Pixel X offset for the sprite position. + * @param extra_offs_y Pixel Y offset for the sprite position. + */ +void DrawGroundSprite(SpriteID image, SpriteID pal, const SubSprite *sub, int extra_offs_x, int extra_offs_y) +{ + DrawGroundSpriteAt(image, pal, 0, 0, 0, sub, extra_offs_x, extra_offs_y); +} /** * Called when a foundation has been drawn for the current tile. @@ -805,7 +822,7 @@ static void DrawSelectionSprite(SpriteID image, SpriteID pal, const TileInfo *ti /* FIXME: This is not totally valid for some autorail highlights, that extent over the edges of the tile. */ if (_vd.foundation[foundation_part] == -1) { /* draw on real ground */ - DrawGroundSpriteAt(image, pal, ti->x, ti->y, ti->z + z_offset); + AddTileSpriteToDraw(image, pal, ti->x, ti->y, ti->z + z_offset); } else { /* draw on top of foundation */ AddChildSpriteToFoundation(image, pal, NULL, foundation_part, 0, -z_offset); @@ -1024,7 +1041,7 @@ static void ViewportAddLandscape() if (x_cur == ((int)MapMaxX() - 1) * TILE_SIZE || y_cur == ((int)MapMaxY() - 1) * TILE_SIZE) { uint maxh = max<uint>(TileHeight(tile), 1); for (uint h = 0; h < maxh; h++) { - DrawGroundSpriteAt(SPR_SHADOW_CELL, PAL_NONE, ti.x, ti.y, h * TILE_HEIGHT); + AddTileSpriteToDraw(SPR_SHADOW_CELL, PAL_NONE, ti.x, ti.y, h * TILE_HEIGHT); } } |