OpenTTD Source 20241224-master-gf74b0cf984
viewport_func.h
Go to the documentation of this file.
1/*
2 * This file is part of OpenTTD.
3 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
4 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
5 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
6 */
7
10#ifndef VIEWPORT_FUNC_H
11#define VIEWPORT_FUNC_H
12
13#include "gfx_type.h"
14#include "viewport_type.h"
15#include "window_type.h"
16#include "tile_map.h"
17#include "station_type.h"
18#include "vehicle_type.h"
19
20static const int TILE_HEIGHT_STEP = 50;
21
22void SetSelectionRed(bool);
23
24void DeleteWindowViewport(Window *w);
25void InitializeWindowViewport(Window *w, int x, int y, int width, int height, std::variant<TileIndex, VehicleID> focus, ZoomLevel zoom);
26Viewport *IsPtInWindowViewport(const Window *w, int x, int y);
27Point TranslateXYToTileCoord(const Viewport *vp, int x, int y, bool clamp_to_map = true);
28Point GetTileBelowCursor();
29void UpdateViewportPosition(Window *w, uint32_t delta_ms);
30
31bool MarkAllViewportsDirty(int left, int top, int right, int bottom);
32
34void ZoomInOrOutToCursorWindow(bool in, Window * w);
35void ConstrainAllViewportsZoom();
36Point GetTileZoomCenterWindow(bool in, Window * w);
37void FixTitleGameZoom(int zoom_adjust = 0);
38void HandleZoomMessage(Window *w, const Viewport *vp, WidgetID widget_zoom_in, WidgetID widget_zoom_out);
39
47{
48 while (DoZoomInOutWindow(how, w)) {};
49}
50
51void OffsetGroundSprite(int x, int y);
52
53void DrawGroundSprite(SpriteID image, PaletteID pal, const SubSprite *sub = nullptr, int extra_offs_x = 0, int extra_offs_y = 0);
54void DrawGroundSpriteAt(SpriteID image, PaletteID pal, int32_t x, int32_t y, int z, const SubSprite *sub = nullptr, int extra_offs_x = 0, int extra_offs_y = 0);
55void AddSortableSpriteToDraw(SpriteID image, PaletteID pal, int x, int y, int w, int h, int dz, int z, bool transparent = false, int bb_offset_x = 0, int bb_offset_y = 0, int bb_offset_z = 0, const SubSprite *sub = nullptr);
56void AddChildSpriteScreen(SpriteID image, PaletteID pal, int x, int y, bool transparent = false, const SubSprite *sub = nullptr, bool scale = true, bool relative = true);
57void ViewportAddString(const DrawPixelInfo *dpi, ZoomLevel small_from, const ViewportSign *sign, StringID string_normal, StringID string_small, StringID string_small_shadow, Colours colour = INVALID_COLOUR);
58
59
61void EndSpriteCombine();
62
63bool HandleViewportClicked(const Viewport *vp, int x, int y);
65void SetTileSelectSize(int w, int h);
66void SetTileSelectBigSize(int ox, int oy, int sx, int sy);
67
68void ViewportDoDraw(const Viewport *vp, int left, int top, int right, int bottom);
69
70bool ScrollWindowToTile(TileIndex tile, Window *w, bool instant = false);
71bool ScrollWindowTo(int x, int y, int z, Window *w, bool instant = false);
72
73void RebuildViewportOverlay(Window *w);
74
75bool ScrollMainWindowToTile(TileIndex tile, bool instant = false);
76bool ScrollMainWindowTo(int x, int y, int z = -1, bool instant = false);
77
79void ClearAllCachedNames();
80
81extern Point _tile_fract_coords;
82
83void MarkTileDirtyByTile(TileIndex tile, int bridge_level_offset, int tile_height_override);
84
91inline void MarkTileDirtyByTile(TileIndex tile, int bridge_level_offset = 0)
92{
93 MarkTileDirtyByTile(tile, bridge_level_offset, TileHeight(tile));
94}
95
96Point GetViewportStationMiddle(const Viewport *vp, const Station *st);
97
98struct Station;
99struct Waypoint;
100struct Town;
101
102void SetViewportCatchmentStation(const Station *st, bool sel);
103void SetViewportCatchmentWaypoint(const Waypoint *wp, bool sel);
104void SetViewportCatchmentTown(const Town *t, bool sel);
105void MarkCatchmentTilesDirty();
106
107template<class T>
108void SetViewportCatchmentSpecializedStation(const T *st, bool sel);
109
110template<>
111inline void SetViewportCatchmentSpecializedStation(const Station *st, bool sel)
112{
114}
115
116template<>
117inline void SetViewportCatchmentSpecializedStation(const Waypoint *st, bool sel)
118{
120}
121
122#endif /* VIEWPORT_FUNC_H */
Types related to the graphics and/or input devices.
uint32_t SpriteID
The number of a sprite, without mapping bits and colourtables.
Definition gfx_type.h:18
uint32_t PaletteID
The number of the palette.
Definition gfx_type.h:19
bool MarkAllViewportsDirty(int left, int top, int right, int bottom)
Mark all viewports that display an area as dirty (in need of repaint).
void MarkTileDirtyByTile(TileIndex tile, int bridge_level_offset, int tile_height_override)
Mark a tile given by its index dirty for repaint.
Types related to stations.
uint32_t StringID
Numeric value that represents a string, independent of the selected language.
Data about how and where to blit pixels.
Definition gfx_type.h:157
Coordinates of a point in 2D.
Station data structure.
Used to only draw a part of the sprite.
Definition gfx_type.h:231
Town data structure.
Definition town.h:54
Location information about a sign as seen on the viewport.
Data structure for viewport, display of a part of the world.
Representation of a waypoint.
Data structure for an opened window.
Definition window_gui.h:273
Map writing/reading functions for tiles.
static debug_inline uint TileHeight(Tile tile)
Returns the height of a tile.
Definition tile_map.h:29
Types related to vehicles.
void AddSortableSpriteToDraw(SpriteID image, PaletteID pal, int x, int y, int w, int h, int dz, int z, bool transparent=false, int bb_offset_x=0, int bb_offset_y=0, int bb_offset_z=0, const SubSprite *sub=nullptr)
Draw a (transparent) sprite at given coordinates with a given bounding box.
Definition viewport.cpp:671
bool ScrollMainWindowToTile(TileIndex tile, bool instant=false)
Scrolls the viewport of the main window to a given location.
void SetTileSelectSize(int w, int h)
Highlight w by h tiles at the cursor.
void OffsetGroundSprite(int x, int y)
Called when a foundation has been drawn for the current tile.
Definition viewport.cpp:599
void HandleZoomMessage(Window *w, const Viewport *vp, WidgetID widget_zoom_in, WidgetID widget_zoom_out)
Update the status of the zoom-buttons according to the zoom-level of the viewport.
Definition viewport.cpp:494
void StartSpriteCombine()
Starts a block of sprites, which are "combined" into a single bounding box.
Definition viewport.cpp:767
Point TranslateXYToTileCoord(const Viewport *vp, int x, int y, bool clamp_to_map=true)
Translate screen coordinate in a viewport to underlying tile coordinate.
Definition viewport.cpp:435
void DrawGroundSprite(SpriteID image, PaletteID pal, const SubSprite *sub=nullptr, int extra_offs_x=0, int extra_offs_y=0)
Draws a ground sprite for the current tile.
Definition viewport.cpp:587
void AddChildSpriteScreen(SpriteID image, PaletteID pal, int x, int y, bool transparent=false, const SubSprite *sub=nullptr, bool scale=true, bool relative=true)
Add a child sprite to a parent sprite.
Definition viewport.cpp:827
void SetViewportCatchmentWaypoint(const Waypoint *wp, bool sel)
Select or deselect waypoint for coverage area highlight.
void SetRedErrorSquare(TileIndex tile)
Set a tile to display a red error square.
bool ScrollMainWindowTo(int x, int y, int z=-1, bool instant=false)
Scrolls the main window to given coordinates.
Viewport * IsPtInWindowViewport(const Window *w, int x, int y)
Is a xy position inside the viewport of the window?
Definition viewport.cpp:411
bool ScrollWindowTo(int x, int y, int z, Window *w, bool instant=false)
Scrolls the viewport in a window to a given location.
void EndSpriteCombine()
Terminates a block of sprites started by StartSpriteCombine.
Definition viewport.cpp:777
void UpdateAllVirtCoords()
Update the viewport coordinates of all signs.
void SetViewportCatchmentStation(const Station *st, bool sel)
Select or deselect station for coverage area highlight.
void SetViewportCatchmentTown(const Town *t, bool sel)
Select or deselect town for coverage area highlight.
void InitializeWindowViewport(Window *w, int x, int y, int width, int height, std::variant< TileIndex, VehicleID > focus, ZoomLevel zoom)
Initialize viewport of the window for use.
Definition viewport.cpp:222
void DrawGroundSpriteAt(SpriteID image, PaletteID pal, int32_t x, int32_t y, int z, const SubSprite *sub=nullptr, int extra_offs_x=0, int extra_offs_y=0)
Draws a ground sprite at a specific world-coordinate relative to the current tile.
Definition viewport.cpp:564
bool DoZoomInOutWindow(ZoomStateChange how, Window *w)
Zooms a viewport in a window in or out.
Definition main_gui.cpp:93
bool ScrollWindowToTile(TileIndex tile, Window *w, bool instant=false)
Scrolls the viewport in a window to a given location.
static const int TILE_HEIGHT_STEP
One Z unit tile height difference is displayed as 50m.
void ViewportAddString(const DrawPixelInfo *dpi, ZoomLevel small_from, const ViewportSign *sign, StringID string_normal, StringID string_small, StringID string_small_shadow, Colours colour=INVALID_COLOUR)
Add a string to draw in the viewport.
void UpdateViewportPosition(Window *w, uint32_t delta_ms)
Update the viewport position being displayed.
void MaxZoomInOut(ZoomStateChange how, Window *w)
Zoom a viewport as far as possible in the given direction.
Types related to viewports.
ZoomStateChange
Directions of zooming.
Types related to windows.
int WidgetID
Widget ID.
Definition window_type.h:18
ZoomLevel
All zoom levels we know.
Definition zoom_type.h:16