40#include "table/strings.h"
80 if (this->vehicle != VehicleID::Invalid()) {
86 switch (this->align_h) {
87 case LEFT: p.
x = this->position.
x;
break;
91 switch (this->align_v) {
92 case TOP: p.
y = this->position.
y;
break;
108 uint mouse_idle_time = 0;
109 Point mouse_idle_pos{};
120 static const std::string sign_language =
"^T\\s*([0-9]+)\\s*([-+A-Z0-9]+)\\s*([0-9]+)";
121 std::regex re(sign_language, std::regex_constants::icase);
124 std::vector<SignID> signs_to_delete;
128 if (!std::regex_search(sign->name, match, re))
continue;
141 vc.
delay = *value * 1000;
147 auto flags = match[2].str();
151 switch (toupper(c)) {
154 case 'T': vc.
align_v = IntroGameViewportCommand::TOP;
break;
155 case 'M': vc.
align_v = IntroGameViewportCommand::MIDDLE;
break;
156 case 'B': vc.
align_v = IntroGameViewportCommand::BOTTOM;
break;
157 case 'L': vc.
align_h = IntroGameViewportCommand::LEFT;
break;
158 case 'C': vc.
align_h = IntroGameViewportCommand::CENTRE;
break;
159 case 'R': vc.
align_h = IntroGameViewportCommand::RIGHT;
break;
167 signs_to_delete.push_back(sign->index);
174 std::sort(signs_to_delete.begin(), signs_to_delete.end(), [](
SignID a,
SignID b) { return a > b; });
175 for (
SignID sign_id : signs_to_delete) {
195 bool suppress_panning =
true;
196 if (this->mouse_idle_pos.
x != _cursor.pos.x || this->mouse_idle_pos.y != _cursor.pos.y) {
197 this->mouse_idle_pos = _cursor.pos;
198 this->mouse_idle_time = 2000;
199 }
else if (this->mouse_idle_time > delta_ms) {
200 this->mouse_idle_time -= delta_ms;
202 this->mouse_idle_time = 0;
203 suppress_panning =
false;
207 bool changed_command =
false;
210 this->cur_viewport_command_index = 0;
211 changed_command =
true;
214 this->cur_viewport_command_time += delta_ms;
217 this->cur_viewport_command_time = 0;
218 changed_command =
true;
226 if (!changed_command && !vc.
pan_to_next && vc.
vehicle == VehicleID::Invalid())
return;
229 if (!changed_command && suppress_panning)
return;
232 if (changed_command) FixTitleGameZoom(vc.
zoom_adjust);
242 const double t = this->cur_viewport_command_time / (double)vc.
delay;
243 pos.
x = pos.
x + (int)(t * (pos2.
x - pos.
x));
244 pos.
y = pos.
y + (int)(t * (pos2.
y - pos.
y));
281 bool changed =
false;
326 ShowNetworkGameWindow();
345static constexpr std::initializer_list<NWidgetPart> _nested_select_game_widgets = {
352 NWidget(
WWT_PUSHIMGTEXTBTN, COLOUR_ORANGE,
WID_SGI_GENERATE_GAME),
SetToolbarMinimalSize(1),
SetSpriteStringTip(SPR_IMG_LANDSCAPING, STR_INTRO_NEW_GAME, STR_INTRO_TOOLTIP_NEW_GAME),
SetAlignment(
SA_LEFT |
SA_VERT_CENTER),
SetFill(1, 0),
353 NWidget(
WWT_PUSHIMGTEXTBTN, COLOUR_ORANGE,
WID_SGI_PLAY_HEIGHTMAP),
SetToolbarMinimalSize(1),
SetSpriteStringTip(SPR_IMG_SHOW_COUNTOURS, STR_INTRO_PLAY_HEIGHTMAP, STR_INTRO_TOOLTIP_PLAY_HEIGHTMAP),
SetAlignment(
SA_LEFT |
SA_VERT_CENTER),
SetFill(1, 0),
354 NWidget(
WWT_PUSHIMGTEXTBTN, COLOUR_ORANGE,
WID_SGI_PLAY_SCENARIO),
SetToolbarMinimalSize(1),
SetSpriteStringTip(SPR_IMG_SUBSIDIES, STR_INTRO_PLAY_SCENARIO, STR_INTRO_TOOLTIP_PLAY_SCENARIO),
SetAlignment(
SA_LEFT |
SA_VERT_CENTER),
SetFill(1, 0),
355 NWidget(
WWT_PUSHIMGTEXTBTN, COLOUR_ORANGE,
WID_SGI_LOAD_GAME),
SetToolbarMinimalSize(1),
SetSpriteStringTip(SPR_IMG_SAVE, STR_INTRO_LOAD_GAME, STR_INTRO_TOOLTIP_LOAD_GAME),
SetAlignment(
SA_LEFT |
SA_VERT_CENTER),
SetFill(1, 0),
356 NWidget(
WWT_PUSHIMGTEXTBTN, COLOUR_ORANGE,
WID_SGI_HIGHSCORE),
SetToolbarMinimalSize(1),
SetSpriteStringTip(SPR_IMG_COMPANY_LEAGUE, STR_INTRO_HIGHSCORE, STR_INTRO_TOOLTIP_HIGHSCORE),
SetAlignment(
SA_LEFT |
SA_VERT_CENTER),
SetFill(1, 0),
361 NWidget(
WWT_PUSHIMGTEXTBTN, COLOUR_ORANGE,
WID_SGI_PLAY_NETWORK),
SetToolbarMinimalSize(1),
SetSpriteStringTip(SPR_IMG_COMPANY_GENERAL, STR_INTRO_MULTIPLAYER, STR_INTRO_TOOLTIP_MULTIPLAYER),
SetAlignment(
SA_LEFT |
SA_VERT_CENTER),
SetFill(1, 0),
378 NWidget(
WWT_PUSHIMGTEXTBTN, COLOUR_ORANGE,
WID_SGI_OPTIONS),
SetToolbarMinimalSize(1),
SetSpriteStringTip(SPR_IMG_SETTINGS, STR_INTRO_GAME_OPTIONS, STR_INTRO_TOOLTIP_GAME_OPTIONS),
SetAlignment(
SA_LEFT |
SA_VERT_CENTER),
SetFill(1, 0),
379 NWidget(
WWT_PUSHIMGTEXTBTN, COLOUR_ORANGE,
WID_SGI_CONTENT_DOWNLOAD),
SetToolbarMinimalSize(1),
SetSpriteStringTip(SPR_IMG_SHOW_VEHICLES, STR_INTRO_ONLINE_CONTENT, STR_INTRO_TOOLTIP_ONLINE_CONTENT),
SetAlignment(
SA_LEFT |
SA_VERT_CENTER),
SetFill(1, 0),
380 NWidget(
WWT_PUSHIMGTEXTBTN, COLOUR_ORANGE,
WID_SGI_EDIT_SCENARIO),
SetToolbarMinimalSize(1),
SetSpriteStringTip(SPR_IMG_SMALLMAP, STR_INTRO_SCENARIO_EDITOR, STR_INTRO_TOOLTIP_SCENARIO_EDITOR),
SetAlignment(
SA_LEFT |
SA_VERT_CENTER),
SetFill(1, 0),
381 NWidget(
WWT_PUSHIMGTEXTBTN, COLOUR_ORANGE,
WID_SGI_HELP),
SetToolbarMinimalSize(1),
SetSpriteStringTip(SPR_IMG_QUERY, STR_INTRO_HELP, STR_INTRO_TOOLTIP_HELP),
SetAlignment(
SA_LEFT |
SA_VERT_CENTER),
SetFill(1, 0),
395 _nested_select_game_widgets
398void ShowSelectGameWindow()
403static void AskExitGameCallback(
Window *,
bool confirmed)
423static void AskExitToGameMenuCallback(
Window *,
bool confirmed)
431void AskExitToGameMenu()
435 GetEncodedString((_game_mode != GM_EDITOR) ? STR_ABANDON_GAME_QUERY : STR_ABANDON_SCENARIO_QUERY),
437 AskExitToGameMenuCallback,
Window for configuring the AIs.
@ Exit
User is exiting the application.
Parse data from a string / buffer.
char32_t ReadUtf8(char32_t def='?')
Read UTF-8 character, and advance reader.
bool AnyBytesLeft() const noexcept
Check whether any bytes left to read.
T ReadIntegerBase(int base, T def=0, bool clamp=false)
Read and parse an integer in number 'base', and advance the reader.
Functions related to errors.
void ClearErrorMessages()
Clear all errors from the queue.
@ WL_ERROR
Errors (eg. saving/loading failed).
void ShowErrorMessage(EncodedString &&summary_msg, int x, int y, CommandCost &cc)
Display an error message in a window.
@ SLO_LOAD
File is being loaded.
@ FT_SCENARIO
old or new scenario
@ FT_HEIGHTMAP
heightmap file
@ FT_SAVEGAME
old or new savegame
Declarations for savegames operations.
void ShowSaveLoadDialog(AbstractFileType abstract_filetype, SaveLoadOperation fop)
Launch save/load dialog in the given mode.
Window for configuring GS.
Functions related to world/map generation.
static const uint32_t GENERATE_NEW_SEED
Create a new random seed.
void StartScenarioEditor()
Start with a scenario editor.
void StartNewGameWithoutGUI(uint32_t seed)
Start a normal game without the GUI.
void ShowGenerateLandscape()
Start with a normal game.
bool _ctrl_pressed
Is Ctrl pressed?
int DrawStringMultiLine(int left, int right, int top, int bottom, std::string_view str, TextColour colour, StringAlignment align, bool underline, FontSize fontsize)
Draw string, possibly over multiple lines.
SwitchMode _switch_mode
The next mainloop command.
Functions related to the gfx engine.
@ SA_LEFT
Left align the text.
@ SA_CENTER
Center both horizontally and vertically.
@ SA_VERT_CENTER
Vertically center the text.
void SetDirty() const
Mark entire window as dirty (in need of re-paint).
GUI functions that shouldn't be here.
void ShowGameOptions()
Open the game options window.
GUI to access manuals and related.
Declaration of functions and types defined in highscore.h and highscore_gui.h.
void ShowHighscoreTable(int difficulty=SP_CUSTOM, int8_t rank=-1)
Show the highscore table for a given difficulty.
Functions related to OTTD's landscape.
Point RemapCoords(int x, int y, int z)
Map 3D world or tile coordinate to equivalent 2D coordinate as used in the viewports and smallmap.
Types related to the landscape.
Information about languages and their files.
const LanguageMetadata * _current_language
The currently loaded language.
#define Point
Macro that prevents name conflicts between included headers.
void ShowQuery(EncodedString &&caption, EncodedString &&message, Window *parent, QueryCallbackProc *callback, bool focus)
Show a confirmation window with standard 'yes' and 'no' buttons The window is aligned to the centre o...
bool _is_network_server
Does this client wants to be a network-server?
bool _network_available
is network mode available?
Basic functions/variables used all over the place.
Part of the network protocol handling content distribution.
void ShowNetworkContentListWindow(ContentVector *cv=nullptr, ContentType type1=CONTENT_TYPE_END, ContentType type2=CONTENT_TYPE_END)
Show the content list window with a given set of content.
GUIs related to networking.
Part of the network protocol handling opt-in survey.
uint _missing_extra_graphics
Number of sprites provided by the fallback extra GRF, i.e. missing in the baseset.
@ SM_MENU
Switch to game intro menu.
Declaration of OTTD revision dependent variables.
A number of safeguards to prevent using unsafe methods.
ClientSettings _settings_client
The current settings for this game.
PoolID< uint16_t, struct SignIDTag, 64000, 0xFFFF > SignID
The type of the IDs of signs.
This file contains all sprite-related enums and defines.
Definition of base types and functions in a cross-platform compatible way.
static std::optional< T > ParseInteger(std::string_view arg, int base=10, bool clamp=false)
Change a string into its number representation.
EncodedString GetEncodedString(StringID str)
Encode a string with no parameters into an encoded string.
std::string GetString(StringID string)
Resolve the given StringID into a std::string with formatting but no parameters.
Functions related to OTTD's strings.
A viewport command for the main menu background (intro game).
int zoom_adjust
Adjustment to zoom level from base zoom level.
Point PositionForViewport(const Viewport &vp)
Calculate effective position.
uint delay
Delay until next command.
VehicleID vehicle
Vehicle to follow, or VehicleID::Invalid() if not following a vehicle.
bool pan_to_next
If true, do a smooth pan from this position to the next.
AlignmentH align_h
Horizontal alignment.
AlignmentH
Horizontal alignment value.
AlignmentV
Vertical alignment value.
AlignmentV align_v
Vertical alignment.
int command_index
Sequence number of the command (order they are performed in).
Point position
Calculated world coordinate to position viewport top-left at.
static Pool::IterateWrapper< Sign > Iterate(size_t from=0)
static Vehicle * Get(auto index)
Specification of a rectangle with absolute coordinates of all edges.
std::vector< IntroGameViewportCommand > intro_viewport_commands
Vector of viewport commands parsed.
void OnResize() override
Called after the window got resized.
void OnRealtimeTick(uint delta_ms) override
Called periodically.
size_t cur_viewport_command_index
Index of currently active viewport command.
void OnClick(Point pt, WidgetID widget, int click_count) override
A click with the left mouse button has been made on the window.
uint cur_viewport_command_time
Time spent (milliseconds) on current viewport command.
void OnInit() override
Notification that the nested widget tree gets initialized.
void ReadIntroGameViewportCommand()
Find and parse all viewport command signs.
void DrawWidget(const Rect &r, WidgetID widget) const override
Draw the contents of a nested widget.
int32_t z_pos
z coordinate.
int32_t y_pos
y coordinate.
int32_t x_pos
x coordinate.
Data structure for viewport, display of a part of the world.
int virtual_width
width << zoom
int virtual_height
height << zoom
High level window description.
Data structure for an opened window.
void ReInit(int rx=0, int ry=0, bool reposition=false)
Re-initialize a window, and optionally change its size.
virtual void OnInvalidateData(int data=0, bool gui_scope=true)
Some data on this window has become invalid.
void FinishInitNested(WindowNumber window_number=0)
Perform the second part of the initialization of a nested widget tree.
std::unique_ptr< ViewportData > viewport
Pointer to viewport data, if present.
void CreateNestedTree()
Perform the first part of the initialization of a nested widget tree.
Window(WindowDesc &desc)
Empty constructor, initialization has been moved to InitNested() called from the constructor of the d...
const NWID * GetWidget(WidgetID widnum) const
Get the nested widget with number widnum from the nested widget tree.
WindowFlags flags
Window flags.
Stuff related to the text buffer GUI.
Base class for all vehicles.
PoolID< uint32_t, struct VehicleIDTag, 0xFF000, 0xFFFFF > VehicleID
The type all our vehicle IDs have.
void UpdateViewportPosition(Window *w, uint32_t delta_ms)
Update the viewport position being displayed.
Functions related to (drawing on) viewports.
Window * GetMainWindow()
Get the main window, i.e.
Window functions not directly related to making/drawing windows.
Functions, definitions and such used only by the GUI.
@ NoClose
This window can't be interactively closed.
@ Centred
Window is centered and shall stay centered after ReInit.
@ WDP_CENTER
Center the window.
@ WC_SELECT_GAME
Select game window; Window numbers:
@ WC_NONE
No window, redirects to WC_MAIN_WINDOW.