Data Structures | Typedefs | Enumerations | Functions | Variables

viewport.cpp File Reference

Handling of all viewports. More...

#include "stdafx.h"
#include "landscape.h"
#include "viewport_func.h"
#include "station_base.h"
#include "waypoint_base.h"
#include "town.h"
#include "signs_base.h"
#include "signs_func.h"
#include "vehicle_base.h"
#include "vehicle_gui.h"
#include "blitter/factory.hpp"
#include "strings_func.h"
#include "zoom_func.h"
#include "vehicle_func.h"
#include "company_func.h"
#include "waypoint_func.h"
#include "window_func.h"
#include "tilehighlight_func.h"
#include "window_gui.h"
#include "linkgraph/linkgraph_gui.h"
#include "viewport_sprite_sorter.h"
#include "table/strings.h"
#include "table/palettes.h"
#include "table/autorail.h"
#include "table/animcursors.h"

Go to the source code of this file.

Data Structures

struct  StringSpriteToDraw
struct  TileSpriteToDraw
struct  ChildScreenSpriteToDraw
struct  ViewportDrawer
 Data structure storing rendering information. More...
struct  ViewportSSCSS
 Helper class for getting the best sprite sorter. More...

Typedefs

typedef SmallVector
< TileSpriteToDraw, 64 > 
TileSpriteToDrawVector
typedef SmallVector
< StringSpriteToDraw, 4 > 
StringSpriteToDrawVector
typedef SmallVector
< ParentSpriteToDraw, 64 > 
ParentSpriteToDrawVector
typedef SmallVector
< ChildScreenSpriteToDraw, 16 > 
ChildScreenSpriteToDrawVector

Enumerations

enum  FoundationPart { FOUNDATION_PART_NONE = 0xFF, FOUNDATION_PART_NORMAL = 0, FOUNDATION_PART_HALFTILE = 1, FOUNDATION_PART_END }
 

Enumeration of multi-part foundations.

More...
enum  SpriteCombineMode { SPRITE_COMBINE_NONE, SPRITE_COMBINE_PENDING, SPRITE_COMBINE_ACTIVE }
 

Mode of "sprite combining".

More...

Functions

static void MarkViewportDirty (const ViewPort *vp, int left, int top, int right, int bottom)
 Marks a viewport as dirty for repaint if it displays (a part of) the area the needs to be repainted.
static Point MapXYZToViewport (const ViewPort *vp, int x, int y, int z)
void DeleteWindowViewport (Window *w)
void InitializeWindowViewport (Window *w, int x, int y, int width, int height, uint32 follow_flags, ZoomLevel zoom)
 Initialize viewport of the window for use.
static void DoSetViewportPosition (const Window *w, int left, int top, int width, int height)
static void SetViewportPosition (Window *w, int x, int y)
ViewPortIsPtInWindowViewport (const Window *w, int x, int y)
 Is a xy position inside the viewport of the window?
static Point TranslateXYToTileCoord (const ViewPort *vp, int x, int y)
 Translate screen coordinate in a viewport to a tile coordinate.
static Point GetTileFromScreenXY (int x, int y, int zoom_x, int zoom_y)
Point GetTileBelowCursor ()
Point GetTileZoomCenterWindow (bool in, Window *w)
void HandleZoomMessage (Window *w, const ViewPort *vp, byte widget_zoom_in, byte widget_zoom_out)
 Update the status of the zoom-buttons according to the zoom-level of the viewport.
static void AddTileSpriteToDraw (SpriteID image, PaletteID pal, int32 x, int32 y, int z, const SubSprite *sub=NULL, int extra_offs_x=0, int extra_offs_y=0)
 Schedules a tile sprite for drawing.
static void AddChildSpriteToFoundation (SpriteID image, PaletteID pal, const SubSprite *sub, FoundationPart foundation_part, int extra_offs_x, int extra_offs_y)
 Adds a child sprite to the active foundation.
void DrawGroundSpriteAt (SpriteID image, PaletteID pal, int32 x, int32 y, int z, const SubSprite *sub, int extra_offs_x, int extra_offs_y)
 Draws a ground sprite at a specific world-coordinate relative to the current tile.
void DrawGroundSprite (SpriteID image, PaletteID pal, const SubSprite *sub, int extra_offs_x, int extra_offs_y)
 Draws a ground sprite for the current tile.
void OffsetGroundSprite (int x, int y)
 Called when a foundation has been drawn for the current tile.
static void AddCombinedSprite (SpriteID image, PaletteID pal, int x, int y, int z, const SubSprite *sub)
 Adds a child sprite to a parent sprite.
void AddSortableSpriteToDraw (SpriteID image, PaletteID pal, int x, int y, int w, int h, int dz, int z, bool transparent, int bb_offset_x, int bb_offset_y, int bb_offset_z, const SubSprite *sub)
 Draw a (transparent) sprite at given coordinates with a given bounding box.
void StartSpriteCombine ()
 Starts a block of sprites, which are "combined" into a single bounding box.
void EndSpriteCombine ()
 Terminates a block of sprites started by StartSpriteCombine.
static bool IsInRangeInclusive (int begin, int end, int check)
 Check if the parameter "check" is inside the interval between begin and end, including both begin and end.
bool IsInsideRotatedRectangle (int x, int y)
 Checks whether a point is inside the selected a diagonal rectangle given by _thd.size and _thd.pos.
void AddChildSpriteScreen (SpriteID image, PaletteID pal, int x, int y, bool transparent, const SubSprite *sub, bool scale)
 Add a child sprite to a parent sprite.
static void AddStringToDraw (int x, int y, StringID string, uint64 params_1, uint64 params_2, Colours colour, uint16 width)
static void DrawSelectionSprite (SpriteID image, PaletteID pal, const TileInfo *ti, int z_offset, FoundationPart foundation_part)
 Draws sprites between ground sprite and everything above.
static void DrawTileSelectionRect (const TileInfo *ti, PaletteID pal)
 Draws a selection rectangle on a tile.
static bool IsPartOfAutoLine (int px, int py)
static void DrawAutorailSelection (const TileInfo *ti, uint autorail_type)
 Draws autorail highlights.
static void DrawTileSelection (const TileInfo *ti)
 Checks if the specified tile is selected and if so draws selection using correct selectionstyle.
static void ViewportAddLandscape ()
void ViewportAddString (const DrawPixelInfo *dpi, ZoomLevel small_from, const ViewportSign *sign, StringID string_normal, StringID string_small, StringID string_small_shadow, uint64 params_1, uint64 params_2, Colours colour)
 Add a string to draw in the viewport.
static void ViewportAddTownNames (DrawPixelInfo *dpi)
static void ViewportAddStationNames (DrawPixelInfo *dpi)
static void ViewportAddSigns (DrawPixelInfo *dpi)
static void ViewportDrawTileSprites (const TileSpriteToDrawVector *tstdv)
static bool ViewportSortParentSpritesChecker ()
 This fallback sprite checker always exists.
static void ViewportSortParentSprites (ParentSpriteToSortVector *psdv)
 Sort parent sprites pointer array.
static void ViewportDrawParentSprites (const ParentSpriteToSortVector *psd, const ChildScreenSpriteToDrawVector *csstdv)
static void ViewportDrawBoundingBoxes (const ParentSpriteToSortVector *psd)
 Draws the bounding boxes of all ParentSprites.
static void ViewportDrawDirtyBlocks ()
 Draw/colour the blocks that have been redrawn.
static void ViewportDrawStrings (ZoomLevel zoom, const StringSpriteToDrawVector *sstdv)
void ViewportDoDraw (const ViewPort *vp, int left, int top, int right, int bottom)
static void ViewportDrawChk (const ViewPort *vp, int left, int top, int right, int bottom)
 Make sure we don't draw a too big area at a time.
static void ViewportDraw (const ViewPort *vp, int left, int top, int right, int bottom)
static void ClampViewportToMap (const ViewPort *vp, int &x, int &y)
void UpdateViewportPosition (Window *w)
 Update the viewport position being displayed.
void MarkAllViewportsDirty (int left, int top, int right, int bottom)
 Mark all viewports that display an area as dirty (in need of repaint).
void ConstrainAllViewportsZoom ()
void MarkTileDirtyByTile (TileIndex tile)
 Mark a tile given by its index dirty for repaint.
static void SetSelectionTilesDirty ()
 Marks the selected tiles as dirty.
void SetSelectionRed (bool b)
static bool CheckClickOnViewportSign (const ViewPort *vp, int x, int y, const ViewportSign *sign)
 Test whether a sign is below the mouse.
static bool CheckClickOnTown (const ViewPort *vp, int x, int y)
static bool CheckClickOnStation (const ViewPort *vp, int x, int y)
static bool CheckClickOnSign (const ViewPort *vp, int x, int y)
static bool CheckClickOnLandscape (const ViewPort *vp, int x, int y)
static void PlaceObject ()
bool HandleViewportClicked (const ViewPort *vp, int x, int y)
void RebuildViewportOverlay (Window *w)
bool ScrollWindowTo (int x, int y, int z, Window *w, bool instant)
 Scrolls the viewport in a window to a given location.
bool ScrollWindowToTile (TileIndex tile, Window *w, bool instant)
 Scrolls the viewport in a window to a given location.
bool ScrollMainWindowToTile (TileIndex tile, bool instant)
 Scrolls the viewport of the main window to a given location.
void SetRedErrorSquare (TileIndex tile)
 Set a tile to display a red error square.
void SetTileSelectSize (int w, int h)
 Highlight w by h tiles at the cursor.
void SetTileSelectBigSize (int ox, int oy, int sx, int sy)
static HighLightStyle GetAutorailHT (int x, int y)
 returns the best autorail highlight type from map coordinates
void UpdateTileSelection ()
 Updates tile highlighting for all cases.
static void ShowMeasurementTooltips (StringID str, uint paramcount, const uint64 params[], TooltipCloseCondition close_cond=TCC_LEFT_CLICK)
 Displays the measurement tooltips when selecting multiple tiles.
void VpStartPlaceSizing (TileIndex tile, ViewportPlaceMethod method, ViewportDragDropSelectionProcess process)
 highlighting tiles while only going over them with the mouse
void VpSetPlaceSizingLimit (int limit)
void VpSetPresizeRange (TileIndex from, TileIndex to)
 Highlights all tiles between a set of two tiles.
static void VpStartPreSizing ()
static HighLightStyle Check2x1AutoRail (int mode)
 returns information about the 2x1 piece to be build.
static bool SwapDirection (HighLightStyle style, TileIndex start_tile, TileIndex end_tile)
 Check if the direction of start and end tile should be swapped based on the dragging-style.
static int CalcHeightdiff (HighLightStyle style, uint distance, TileIndex start_tile, TileIndex end_tile)
 Calculates height difference between one tile and another.
static void CheckUnderflow (int &test, int &other, int mult)
 Check for underflowing the map.
static void CheckOverflow (int &test, int &other, int max, int mult)
 Check for overflowing the map.
static void CalcRaildirsDrawstyle (int x, int y, int method)
 while dragging
void VpSelectTilesWithMethod (int x, int y, ViewportPlaceMethod method)
 Selects tiles while dragging.
EventState VpHandlePlaceSizingDrag ()
 Handle the mouse while dragging for placement/resizing.
void SetObjectToPlaceWnd (CursorID icon, PaletteID pal, HighLightStyle mode, Window *w)
void SetObjectToPlace (CursorID icon, PaletteID pal, HighLightStyle mode, WindowClass window_class, WindowNumber window_num)
void ResetObjectToPlace ()
Point GetViewportStationMiddle (const ViewPort *vp, const Station *st)
void InitializeSpriteSorter ()
 Choose the "best" sprite sorter and set _vp_sprite_sorter.

Variables

Point _tile_fract_coords
static ViewportDrawer _vd
TileHighlightData _thd
static TileInfo_cur_ti
bool _draw_bounding_boxes = false
bool _draw_dirty_blocks = false
uint _dirty_block_colour = 0
static VpSpriteSorter _vp_sprite_sorter = NULL
static Point _vp_move_offs
static const HighLightStyle _autorail_type [6][2]
static const StringID measure_strings_length [] = {STR_NULL, STR_MEASURE_LENGTH, STR_MEASURE_LENGTH_HEIGHTDIFF}
static ViewportSSCSS _vp_sprite_sorters []
 List of sorters ordered from best to worst.

Detailed Description

Handling of all viewports.

 * The in-game coordinate system looks like this *
 *                                               *
 *                    ^ Z                        *
 *                    |                          *
 *                    |                          *
 *                    |                          *
 *                    |                          *
 *                 /     \                       *
 *              /           \                    *
 *           /                 \                 *
 *        /                       \              *
 *   X <                             > Y         *
 * 

Definition in file viewport.cpp.


Enumeration Type Documentation

Enumeration of multi-part foundations.

Enumerator:
FOUNDATION_PART_NONE 

Neither foundation nor groundsprite drawn yet.

FOUNDATION_PART_NORMAL 

First part (normal foundation or no foundation).

FOUNDATION_PART_HALFTILE 

Second part (halftile foundation).

Definition at line 83 of file viewport.cpp.

Mode of "sprite combining".

See also:
StartSpriteCombine
Enumerator:
SPRITE_COMBINE_NONE 

Every AddSortableSpriteToDraw start its own bounding box.

SPRITE_COMBINE_PENDING 

Sprite combining will start with the next unclipped sprite.

SPRITE_COMBINE_ACTIVE 

Sprite combining is active. AddSortableSpriteToDraw outputs child sprites.

Definition at line 94 of file viewport.cpp.


Function Documentation

void AddChildSpriteScreen ( SpriteID  image,
PaletteID  pal,
int  x,
int  y,
bool  transparent,
const SubSprite sub,
bool  scale 
)

Add a child sprite to a parent sprite.

Parameters:
image the image to draw.
pal the provided palette.
x sprite x-offset (screen coordinates) relative to parent sprite.
y sprite y-offset (screen coordinates) relative to parent sprite.
transparent if true, switch the palette between the provided palette and the transparent palette,
sub Only draw a part of the sprite.

Definition at line 786 of file viewport.cpp.

References SmallVector< T, S >::Append(), ViewportDrawer::last_foundation_child, SmallVector< T, S >::Length(), MAX_SPRITES, ChildScreenSpriteToDraw::next, PALETTE_MODIFIER_TRANSPARENT, PALETTE_TO_TRANSPARENT, SetBit(), SPRITE_MASK, and ChildScreenSpriteToDraw::sub.

Referenced by AddChildSpriteToFoundation(), AddCombinedSprite(), and DrawCommonTileSeq().

static void AddChildSpriteToFoundation ( SpriteID  image,
PaletteID  pal,
const SubSprite sub,
FoundationPart  foundation_part,
int  extra_offs_x,
int  extra_offs_y 
) [static]

Adds a child sprite to the active foundation.

The pixel offset of the sprite relative to the ParentSprite is the sum of the offset passed to OffsetGroundSprite() and extra_offs_?.

Parameters:
image the image to draw.
pal the provided palette.
sub Only draw a part of the sprite.
foundation_part Foundation part.
extra_offs_x Pixel X offset for the sprite position.
extra_offs_y Pixel Y offset for the sprite position.

Definition at line 495 of file viewport.cpp.

References AddChildSpriteScreen(), ViewportDrawer::foundation, ViewportDrawer::foundation_offset, IsInsideMM(), and ViewportDrawer::last_foundation_child.

Referenced by DrawGroundSpriteAt(), and DrawSelectionSprite().

static void AddCombinedSprite ( SpriteID  image,
PaletteID  pal,
int  x,
int  y,
int  z,
const SubSprite sub 
) [static]

Adds a child sprite to a parent sprite.

In contrast to "AddChildSpriteScreen()" the sprite position is in world coordinates

Parameters:
image the image to draw.
pal the provided palette.
x position x of the sprite.
y position y of the sprite.
z position z of the sprite.
sub Only draw a part of the sprite.

Definition at line 591 of file viewport.cpp.

References AddChildSpriteScreen(), SmallVector< T, S >::End(), Sprite::height, ParentSpriteToDraw::left, RemapCoords(), SPRITE_MASK, ST_NORMAL, ParentSpriteToDraw::top, Sprite::width, Sprite::x_offs, and Sprite::y_offs.

Referenced by AddSortableSpriteToDraw().

void AddSortableSpriteToDraw ( SpriteID  image,
PaletteID  pal,
int  x,
int  y,
int  w,
int  h,
int  dz,
int  z,
bool  transparent,
int  bb_offset_x,
int  bb_offset_y,
int  bb_offset_z,
const SubSprite sub 
)

Draw a (transparent) sprite at given coordinates with a given bounding box.

The bounding box extends from (x + bb_offset_x, y + bb_offset_y, z + bb_offset_z) to (x + w - 1, y + h - 1, z + dz - 1), both corners included. Bounding boxes with bb_offset_x == w or bb_offset_y == h or bb_offset_z == dz are allowed and produce thin slices.

Note:
Bounding boxes are normally specified with bb_offset_x = bb_offset_y = bb_offset_z = 0. The extent of the bounding box in negative direction is defined by the sprite offset in the grf file. However if modifying the sprite offsets is not suitable (e.g. when using existing graphics), the bounding box can be tuned by bb_offset.
Precondition:
w >= bb_offset_x, h >= bb_offset_y, dz >= bb_offset_z. Else w, h or dz are ignored.
Parameters:
image the image to combine and draw,
pal the provided palette,
x position X (world) of the sprite,
y position Y (world) of the sprite,
w bounding box extent towards positive X (world),
h bounding box extent towards positive Y (world),
dz bounding box extent towards positive Z (world),
z position Z (world) of the sprite,
transparent if true, switch the palette between the provided palette and the transparent palette,
bb_offset_x bounding box extent towards negative X (world),
bb_offset_y bounding box extent towards negative Y (world),
bb_offset_z bounding box extent towards negative Z (world)
sub Only draw a part of the sprite.

Definition at line 631 of file viewport.cpp.

References AddCombinedSprite(), SmallVector< T, S >::Append(), ViewportDrawer::combine_sprites, ParentSpriteToDraw::comparison_done, ParentSpriteToDraw::first_child, Sprite::height, ParentSpriteToDraw::image, ParentSpriteToDraw::left, max(), MAX_SPRITES, min(), ParentSpriteToDraw::pal, PALETTE_MODIFIER_TRANSPARENT, PALETTE_TO_TRANSPARENT, RemapCoords(), SetBit(), SPRITE_COMBINE_ACTIVE, SPRITE_COMBINE_PENDING, SPRITE_MASK, ST_NORMAL, ParentSpriteToDraw::sub, ParentSpriteToDraw::top, Sprite::width, ParentSpriteToDraw::x, Sprite::x_offs, ParentSpriteToDraw::xmax, ParentSpriteToDraw::xmin, ParentSpriteToDraw::y, Sprite::y_offs, ParentSpriteToDraw::ymax, ParentSpriteToDraw::ymin, ParentSpriteToDraw::zmax, and ParentSpriteToDraw::zmin.

Referenced by DoDrawVehicle(), DrawBridgeMiddle(), DrawBridgeTramBits(), DrawCatenary(), DrawCatenaryOnBridge(), DrawCatenaryOnTunnel(), DrawCatenaryRailway(), DrawCommonTileSeq(), DrawFoundation(), DrawPillar(), DrawRoadDetail(), DrawTile_Town(), DrawTile_TunnelBridge(), DrawTrackFence_NS_1(), DrawTrackFence_NS_2(), DrawTrackFence_WE_1(), DrawTrackFence_WE_2(), DrawTramCatenary(), and DrawWaterTileStruct().

static void AddTileSpriteToDraw ( SpriteID  image,
PaletteID  pal,
int32  x,
int32  y,
int  z,
const SubSprite sub = NULL,
int  extra_offs_x = 0,
int  extra_offs_y = 0 
) [static]

Schedules a tile sprite for drawing.

Parameters:
image the image to draw.
pal the provided palette.
x position x (world coordinates) of the sprite.
y position y (world coordinates) of the sprite.
z position z (world coordinates) of the sprite.
sub Only draw a part of the sprite.
extra_offs_x Pixel X offset for the sprite position.
extra_offs_y Pixel Y offset for the sprite position.

Definition at line 470 of file viewport.cpp.

References SmallVector< T, S >::Append(), MAX_SPRITES, RemapCoords(), SPRITE_MASK, TileSpriteToDraw::sub, TileSpriteToDraw::x, and TileSpriteToDraw::y.

Referenced by DrawGroundSpriteAt(), and DrawSelectionSprite().

static int CalcHeightdiff ( HighLightStyle  style,
uint  distance,
TileIndex  start_tile,
TileIndex  end_tile 
) [static]

Calculates height difference between one tile and another.

Multiplies the result to suit the standard given by TILE_HEIGHT_STEP.

To correctly get the height difference we need the direction we are dragging in, as well as with what kind of tool we are dragging. For example a horizontal autorail tool that starts in bottom and ends at the top of a tile will need the maximum of SW, S and SE, N corners respectively. This is handled by the lookup table below See _tileoffs_by_dir in map.cpp for the direction enums if you can't figure out the values yourself.

Parameters:
style Highlighting style of the drag. This includes direction and style (autorail, rect, etc.)
distance Number of tiles dragged, important for horizontal/vertical drags, ignored for others.
start_tile Start tile of the drag operation.
end_tile End tile of the drag operation.
Returns:
Height difference between two tiles. The tile measurement tool utilizes this value in its tooltip.

Definition at line 2390 of file viewport.cpp.

References HT_DIR_VL, HT_DRAG_MASK, HT_POINT, HT_RECT, lengthof, max(), Swap(), SwapDirection(), TILE_ADD, TILE_HEIGHT_STEP, TileHeight(), TileX(), and ToTileIndexDiff().

Referenced by CalcRaildirsDrawstyle(), and VpSelectTilesWithMethod().

static HighLightStyle Check2x1AutoRail ( int  mode  )  [static]

returns information about the 2x1 piece to be build.

The lower bits (0-3) are the track type.

Definition at line 2312 of file viewport.cpp.

References TileHighlightData::selend, and TILE_UNIT_MASK.

Referenced by CalcRaildirsDrawstyle().

static bool CheckClickOnViewportSign ( const ViewPort vp,
int  x,
int  y,
const ViewportSign sign 
) [static]

Test whether a sign is below the mouse.

Parameters:
vp the clicked viewport
x X position of click
y Y position of click
sign the sign to check
Returns:
true if the sign was hit

Definition at line 1843 of file viewport.cpp.

References ViewportSign::center, FONT_HEIGHT_NORMAL, FONT_HEIGHT_SMALL, ViewPort::left, ScaleByZoom(), ViewportSign::top, ViewPort::top, ViewPort::virtual_left, ViewPort::virtual_top, VPSM_BOTTOM, VPSM_TOP, ViewportSign::width_normal, ViewportSign::width_small, and ViewPort::zoom.

static void CheckOverflow ( int &  test,
int &  other,
int  max,
int  mult 
) [static]

Check for overflowing the map.

Parameters:
test the variable to test for overflowing
other the other variable to update to keep the line
max the maximum value for the test variable
mult the constant to multiply the difference by for other

Definition at line 2485 of file viewport.cpp.

Referenced by CalcRaildirsDrawstyle().

static void CheckUnderflow ( int &  test,
int &  other,
int  mult 
) [static]

Check for underflowing the map.

Parameters:
test the variable to test for underflowing
other the other variable to update to keep the line
mult the constant to multiply the difference by for other

Definition at line 2470 of file viewport.cpp.

Referenced by CalcRaildirsDrawstyle().

static void DrawAutorailSelection ( const TileInfo ti,
uint  autorail_type 
) [static]

Draws autorail highlights.

Parameters:
*ti TileInfo Tile that is being drawn
autorail_type Offset into _AutorailTilehSprite[][]

Definition at line 920 of file viewport.cpp.

References DrawSelectionSprite(), GetHalftileSlopeCorner(), IsHalftileSlope(), TileHighlightData::make_square_red, OppositeCorner(), PALETTE_SEL_TILE_RED, RemoveHalftileSlope(), SlopeWithThreeCornersRaised(), and TileInfo::tileh.

Referenced by DrawTileSelection().

void DrawGroundSprite ( SpriteID  image,
PaletteID  pal,
const SubSprite sub,
int  extra_offs_x,
int  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.

Parameters:
image the image to draw.
pal the provided palette.
sub Only draw a part of the sprite.
extra_offs_x Pixel X offset for the sprite position.
extra_offs_y Pixel Y offset for the sprite position.

Definition at line 547 of file viewport.cpp.

References DrawGroundSpriteAt().

Referenced by DrawCommonTileSeq(), DrawRoadBits(), DrawSeaWater(), DrawTile_Road(), DrawTile_Town(), DrawTile_TunnelBridge(), DrawTileLayout(), DrawTrackBits(), DrawWaterLock(), and DrawWaterSprite().

void DrawGroundSpriteAt ( SpriteID  image,
PaletteID  pal,
int32  x,
int32  y,
int  z,
const SubSprite sub,
int  extra_offs_x,
int  extra_offs_y 
)

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.

Parameters:
image the image to draw.
pal the provided palette.
x position x (world coordinates) of the sprite relative to current tile.
y position y (world coordinates) of the sprite relative to current tile.
z position z (world coordinates) of the sprite relative to current tile.
sub Only draw a part of the sprite.
extra_offs_x Pixel X offset for the sprite position.
extra_offs_y Pixel Y offset for the sprite position.

Definition at line 524 of file viewport.cpp.

References AddChildSpriteToFoundation(), AddTileSpriteToDraw(), ViewportDrawer::foundation, ViewportDrawer::foundation_part, FOUNDATION_PART_NONE, RemapCoords(), TileInfo::x, TileInfo::y, and TileInfo::z.

Referenced by DrawBridgeMiddle(), DrawGroundSprite(), and DrawRoadBits().

static void DrawSelectionSprite ( SpriteID  image,
PaletteID  pal,
const TileInfo ti,
int  z_offset,
FoundationPart  foundation_part 
) [static]

Draws sprites between ground sprite and everything above.

The sprite is either drawn as TileSprite or as ChildSprite of the active foundation.

Parameters:
image the image to draw.
pal the provided palette.
ti TileInfo Tile that is being drawn
z_offset Z offset relative to the groundsprite. Only used for the sprite position, not for sprite sorting.
foundation_part Foundation part the sprite belongs to.

Definition at line 842 of file viewport.cpp.

References AddChildSpriteToFoundation(), AddTileSpriteToDraw(), ViewportDrawer::foundation, TileInfo::x, TileInfo::y, and TileInfo::z.

Referenced by DrawAutorailSelection(), DrawTileSelection(), and DrawTileSelectionRect().

static void DrawTileSelection ( const TileInfo ti  )  [static]
static void DrawTileSelectionRect ( const TileInfo ti,
PaletteID  pal 
) [static]
void EndSpriteCombine (  ) 

Terminates a block of sprites started by StartSpriteCombine.

Take a look there for details.

Definition at line 738 of file viewport.cpp.

References ViewportDrawer::combine_sprites, and SPRITE_COMBINE_NONE.

Referenced by DrawBridgeMiddle(), DrawBridgeTramBits(), and DrawTile_TunnelBridge().

void HandleZoomMessage ( Window w,
const ViewPort vp,
byte  widget_zoom_in,
byte  widget_zoom_out 
)

Update the status of the zoom-buttons according to the zoom-level of the viewport.

This will update their status and invalidate accordingly

Parameters:
w Window pointer to the window that has the zoom buttons
vp pointer to the viewport whose zoom-level the buttons represent
widget_zoom_in widget index for window with zoom-in button
widget_zoom_out widget index for window with zoom-out button

Definition at line 449 of file viewport.cpp.

References _settings_client, ClientSettings::gui, Window::SetWidgetDirty(), Window::SetWidgetDisabledState(), ViewPort::zoom, GUISettings::zoom_max, and GUISettings::zoom_min.

Referenced by ExtraViewportWindow::OnInvalidateData(), ScenarioEditorToolbarWindow::OnInvalidateData(), and MainToolbarWindow::OnInvalidateData().

void InitializeSpriteSorter (  ) 

Choose the "best" sprite sorter and set _vp_sprite_sorter.

Definition at line 3001 of file viewport.cpp.

References ViewportSSCSS::fct_sorter, and lengthof.

Referenced by openttd_main().

void InitializeWindowViewport ( Window w,
int  x,
int  y,
int  width,
int  height,
uint32  follow_flags,
ZoomLevel  zoom 
)

Initialize viewport of the window for use.

Parameters:
w Window to use/display the viewport in
x Offset of left edge of viewport with respect to left edge window w
y Offset of top edge of viewport with respect to top edge window w
width Width of the viewport
height Height of the viewport
follow_flags Flags controlling the viewport.

  • If bit 31 is set, the lower 20 bits are the vehicle that the viewport should follow.
  • If bit 31 is clear, it is a TileIndex.
zoom Zoomlevel to display

Definition at line 165 of file viewport.cpp.

References _settings_client, Clamp(), ViewportData::dest_scrollpos_x, ViewportData::dest_scrollpos_y, ViewportData::follow_vehicle, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_vehicle_pool >::Get(), ClientSettings::gui, ViewPort::height, INVALID_VEHICLE, Window::left, ViewPort::left, ScaleByZoom(), ViewportData::scrollpos_x, ViewportData::scrollpos_y, TILE_SIZE, TileX(), TileY(), Window::top, ViewPort::top, Window::viewport, ViewPort::virtual_height, ViewPort::virtual_left, ViewPort::virtual_top, ViewPort::virtual_width, ViewPort::width, Vehicle::x_pos, Vehicle::y_pos, Vehicle::z_pos, ViewPort::zoom, GUISettings::zoom_max, and GUISettings::zoom_min.

Referenced by NWidgetViewport::InitializeViewport().

static bool IsInRangeInclusive ( int  begin,
int  end,
int  check 
) [static]

Check if the parameter "check" is inside the interval between begin and end, including both begin and end.

Note:
Whether begin or end is the biggest does not matter. This method will account for that.
Parameters:
begin The begin of the interval.
end The end of the interval.
check The value to check.

Definition at line 753 of file viewport.cpp.

References Swap().

Referenced by IsInsideRotatedRectangle().

bool IsInsideRotatedRectangle ( int  x,
int  y 
)

Checks whether a point is inside the selected a diagonal rectangle given by _thd.size and _thd.pos.

Parameters:
x The x coordinate of the point to be checked.
y The y coordinate of the point to be checked.
Returns:
True if the point is inside the rectangle, else false.

Definition at line 765 of file viewport.cpp.

References IsInRangeInclusive(), TileHighlightData::pos, and TileHighlightData::size.

Referenced by DrawTileSelection().

ViewPort* IsPtInWindowViewport ( const Window w,
int  x,
int  y 
)

Is a xy position inside the viewport of the window?

Parameters:
w Window to examine its viewport
x X coordinate of the xy position
y Y coordinate of the xy position
Returns:
Pointer to the viewport if the xy position is in the viewport of the window, otherwise NULL is returned.

Definition at line 338 of file viewport.cpp.

References ViewPort::height, IsInsideMM(), ViewPort::left, ViewPort::top, Window::viewport, and ViewPort::width.

Referenced by HandleAutoscroll().

void OffsetGroundSprite ( int  x,
int  y 
)

Called when a foundation has been drawn for the current tile.

Successive ground sprites for the current tile will be drawn as child sprites of the "foundation"-ParentSprite, not as TileSprites.

Parameters:
x sprite x-offset (screen coordinates) of ground sprites relative to the "foundation"-ParentSprite.
y sprite y-offset (screen coordinates) of ground sprites relative to the "foundation"-ParentSprite.

Definition at line 559 of file viewport.cpp.

References ViewportDrawer::foundation, ViewportDrawer::foundation_offset, ViewportDrawer::foundation_part, FOUNDATION_PART_NONE, FOUNDATION_PART_NORMAL, ViewportDrawer::last_foundation_child, and SmallVector< T, S >::Length().

Referenced by DrawFoundation().

bool ScrollMainWindowToTile ( TileIndex  tile,
bool  instant 
)

Scrolls the viewport of the main window to a given location.

Parameters:
tile Desired tile to center on.
instant Jump to the location instead of slowly moving to it.
Returns:
Destination of the viewport was changed (to activate other actions when the viewport is already at the desired position).

Definition at line 2042 of file viewport.cpp.

References ScrollMainWindowTo(), TILE_SIZE, TileX(), and TileY().

Referenced by DEF_CONSOLE_CMD(), StationViewWindow::DrawEntries(), GenerateWorld(), GoalListWindow::HandleClick(), WaypointWindow::OnClick(), VehicleViewWindow::OnClick(), TownDirectoryWindow::OnClick(), TownViewWindow::OnClick(), StationViewWindow::OnClick(), CompanyStationsWindow::OnClick(), OrdersWindow::OnClick(), NewsWindow::OnClick(), IndustryDirectoryWindow::OnClick(), IndustryViewWindow::OnClick(), DepotWindow::OnClick(), CompanyWindow::OnClick(), and StoryBookWindow::OnPageElementClick().

bool ScrollWindowTo ( int  x,
int  y,
int  z,
Window w,
bool  instant 
)

Scrolls the viewport in a window to a given location.

Parameters:
x Desired x location of the map to scroll to (world coordinate).
y Desired y location of the map to scroll to (world coordinate).
z Desired z location of the map to scroll to (world coordinate). Use -1 to scroll to the height of the map at the x, y location.
w Window containing the viewport.
instant Jump to the location instead of slowly moving to it.
Returns:
Destination of the viewport was changed (to activate other actions when the viewport is already at the desired position).

Definition at line 2003 of file viewport.cpp.

References Clamp(), ViewportData::dest_scrollpos_x, ViewportData::dest_scrollpos_y, ViewportData::follow_vehicle, INVALID_VEHICLE, MapSizeX(), MapSizeY(), ViewportData::scrollpos_x, ViewportData::scrollpos_y, TILE_SIZE, and Window::viewport.

Referenced by ScrollMainWindowTo(), and ScrollWindowToTile().

bool ScrollWindowToTile ( TileIndex  tile,
Window w,
bool  instant 
)

Scrolls the viewport in a window to a given location.

Parameters:
tile Desired tile to center on.
w Window containing the viewport.
instant Jump to the location instead of slowly moving to it.
Returns:
Destination of the viewport was changed (to activate other actions when the viewport is already at the desired position).

Definition at line 2031 of file viewport.cpp.

References ScrollWindowTo(), TILE_SIZE, TileX(), and TileY().

Referenced by WaypointWindow::OnInvalidateData(), WaypointWindow::OnResize(), TownViewWindow::OnResize(), and IndustryViewWindow::OnResize().

void SetRedErrorSquare ( TileIndex  tile  ) 

Set a tile to display a red error square.

Parameters:
tile Tile that should show the red error square.

Definition at line 2051 of file viewport.cpp.

References INVALID_TILE, MarkTileDirtyByTile(), and TileHighlightData::redsq.

Referenced by CcBuildRailTunnel(), and CcBuildRoadTunnel().

void SetTileSelectSize ( int  w,
int  h 
)

Highlight w by h tiles at the cursor.

Parameters:
w Width of the highlighted tiles rectangle.
h Height of the highlighted tiles rectangle.

Definition at line 2069 of file viewport.cpp.

References TileHighlightData::new_outersize, TileHighlightData::new_size, and TILE_SIZE.

Referenced by BuildRailClick_Remove(), CompanyWindow::OnClick(), ScenarioEditorLandscapeGenerationWindow::OnPaint(), BuildRoadStationWindow::OnPaint(), BuildRailStationWindow::OnPaint(), BuildDocksStationWindow::OnPaint(), and VpHandlePlaceSizingDrag().

static void ShowMeasurementTooltips ( StringID  str,
uint  paramcount,
const uint64  params[],
TooltipCloseCondition  close_cond = TCC_LEFT_CLICK 
) [inline, static]

Displays the measurement tooltips when selecting multiple tiles.

Parameters:
str String to be displayed
paramcount number of params to deal with
params (optional) up to 5 pieces of additional information that may be added to a tooltip
close_cond Condition for closing this tooltip.

Definition at line 2238 of file viewport.cpp.

References _settings_client, TileHighlightData::GetCallbackWnd(), ClientSettings::gui, GuiShowTooltips(), and GUISettings::measure_tooltip.

Referenced by CalcRaildirsDrawstyle(), VpSelectTilesWithMethod(), and VpSetPresizeRange().

void StartSpriteCombine (  ) 

Starts a block of sprites, which are "combined" into a single bounding box.

Subsequent calls to AddSortableSpriteToDraw will be drawn into the same bounding box. That is: The first sprite that is not clipped by the viewport defines the bounding box, and the following sprites will be child sprites to that one.

That implies:

  • The drawing order is definite. No other sprites will be sorted between those of the block.
  • You have to provide a valid bounding box for all sprites, as you won't know which one is the first non-clipped one. Preferable you use the same bounding box for all.
  • You cannot use AddChildSpriteScreen inside the block, as its result will be indefinite.

The block is terminated by EndSpriteCombine.

You cannot nest "combined" blocks.

Definition at line 728 of file viewport.cpp.

References ViewportDrawer::combine_sprites, and SPRITE_COMBINE_NONE.

Referenced by DrawBridgeMiddle(), DrawBridgeTramBits(), and DrawTile_TunnelBridge().

static bool SwapDirection ( HighLightStyle  style,
TileIndex  start_tile,
TileIndex  end_tile 
) [static]

Check if the direction of start and end tile should be swapped based on the dragging-style.

Default directions are: in the case of a line (HT_RAIL, HT_LINE): DIR_NE, DIR_NW, DIR_N, DIR_E in the case of a rect (HT_RECT, HT_POINT): DIR_S, DIR_E For example dragging a rectangle area from south to north should be swapped to north-south (DIR_S) to obtain the same results with less code. This is what the return value signifies.

Parameters:
style HighLightStyle dragging style
start_tile start tile of drag
end_tile end tile of drag
Returns:
boolean value which when true means start/end should be swapped

Definition at line 2356 of file viewport.cpp.

References HT_DRAG_MASK, HT_LINE, HT_POINT, HT_RAIL, HT_RECT, TileX(), and TileY().

Referenced by CalcHeightdiff().

static Point TranslateXYToTileCoord ( const ViewPort vp,
int  x,
int  y 
) [static]

Translate screen coordinate in a viewport to a tile coordinate.

Parameters:
vp Viewport that contains the (x, y) screen coordinate
x Screen x coordinate
y Screen y coordinate
Returns:
Tile coordinate

Definition at line 357 of file viewport.cpp.

References _settings_game, Clamp(), GameSettings::construction, ConstructionSettings::freeform_edges, ViewPort::height, ViewPort::left, MapMaxX(), MapMaxY(), max(), ScaleByZoom(), TILE_SIZE, ViewPort::top, ViewPort::virtual_left, ViewPort::virtual_top, ViewPort::width, and ViewPort::zoom.

void UpdateTileSelection (  ) 
void UpdateViewportPosition ( Window w  ) 
void ViewportAddString ( const DrawPixelInfo dpi,
ZoomLevel  small_from,
const ViewportSign sign,
StringID  string_normal,
StringID  string_small,
StringID  string_small_shadow,
uint64  params_1,
uint64  params_2,
Colours  colour 
)

Add a string to draw in the viewport.

Parameters:
dpi current viewport area
small_from Zoomlevel from when the small font should be used
sign sign position and dimension
string_normal String for normal and 2x zoom level
string_small String for 4x and 8x zoom level
string_small_shadow Shadow string for 4x and 8x zoom level; or STR_NULL if no shadow
colour colour of the sign background; or INVALID_COLOUR if transparent

Definition at line 1120 of file viewport.cpp.

References ViewportSign::center, FONT_HEIGHT_NORMAL, ScaleByZoom(), ViewportSign::top, VPSM_BOTTOM, VPSM_TOP, ViewportSign::width_normal, and ViewportSign::width_small.

static void ViewportDrawBoundingBoxes ( const ParentSpriteToSortVector psd  )  [static]
static void ViewportDrawChk ( const ViewPort vp,
int  left,
int  top,
int  right,
int  bottom 
) [static]

Make sure we don't draw a too big area at a time.

If we do, the sprite memory will overflow.

Definition at line 1505 of file viewport.cpp.

References ViewPort::left, ScaleByZoom(), ViewPort::top, ViewPort::virtual_left, ViewPort::virtual_top, and ViewPort::zoom.

static bool ViewportSortParentSpritesChecker (  )  [static]

This fallback sprite checker always exists.

Definition at line 1270 of file viewport.cpp.

EventState VpHandlePlaceSizingDrag (  ) 
void VpSelectTilesWithMethod ( int  x,
int  y,
ViewportPlaceMethod  method 
)
void VpSetPresizeRange ( TileIndex  from,
TileIndex  to 
)

Highlights all tiles between a set of two tiles.

Used in dock and tunnel placement

Parameters:
from TileIndex of the first tile to highlight
to TileIndex of the last tile to highlight

Definition at line 2288 of file viewport.cpp.

References DistanceManhattan(), TileHighlightData::next_drawstyle, TileHighlightData::selend, TileHighlightData::selstart, ShowMeasurementTooltips(), TILE_SIZE, TileX(), and TileY().

Referenced by BuildRoadToolbarWindow::OnPlacePresize(), BuildRailToolbarWindow::OnPlacePresize(), and BuildDocksToolbarWindow::OnPlacePresize().


Variable Documentation

const HighLightStyle _autorail_type[6][2] [static]
Initial value:
 {
  { HT_DIR_X,  HT_DIR_X },
  { HT_DIR_Y,  HT_DIR_Y },
  { HT_DIR_HU, HT_DIR_HL },
  { HT_DIR_HL, HT_DIR_HU },
  { HT_DIR_VL, HT_DIR_VR },
  { HT_DIR_VR, HT_DIR_VL }
}

Definition at line 903 of file viewport.cpp.

Initial value:
 {



  { &ViewportSortParentSpritesChecker, &ViewportSortParentSprites }
}

List of sorters ordered from best to worst.

Definition at line 2993 of file viewport.cpp.