41#include "table/strings.h"
81 if (this->vehicle != VehicleID::Invalid()) {
87 switch (this->align_h) {
88 case LEFT: p.x = this->
position.x;
break;
92 switch (this->align_v) {
93 case TOP: p.y = this->
position.y;
break;
109 uint mouse_idle_time = 0;
110 Point mouse_idle_pos{};
121 static const std::string sign_language =
"^T\\s*([0-9]+)\\s*([-+A-Z0-9]+)\\s*([0-9]+)";
122 std::regex re(sign_language, std::regex_constants::icase);
125 std::vector<SignID> signs_to_delete;
129 if (!std::regex_search(sign->name, match, re))
continue;
133 if (
auto value = ParseInteger<int>(match[1].str()); value.has_value()) {
141 if (
auto value = ParseInteger<uint>(match[3].str()); value.has_value()) {
142 vc.
delay = *value * 1000;
148 auto flags = match[2].str();
150 while (consumer.AnyBytesLeft()) {
151 auto c = consumer.ReadUtf8();
152 switch (toupper(c)) {
155 case 'T': vc.
align_v = IntroGameViewportCommand::TOP;
break;
156 case 'M': vc.
align_v = IntroGameViewportCommand::MIDDLE;
break;
157 case 'B': vc.
align_v = IntroGameViewportCommand::BOTTOM;
break;
158 case 'L': vc.
align_h = IntroGameViewportCommand::LEFT;
break;
159 case 'C': vc.
align_h = IntroGameViewportCommand::CENTRE;
break;
160 case 'R': vc.
align_h = IntroGameViewportCommand::RIGHT;
break;
162 case 'V': vc.
vehicle =
static_cast<VehicleID>(consumer.ReadIntegerBase<uint32_t>(10, VehicleID::Invalid().base()));
break;
168 signs_to_delete.push_back(sign->index);
175 std::sort(signs_to_delete.begin(), signs_to_delete.end(), [](
SignID a,
SignID b) { return a > b; });
176 for (
SignID sign_id : signs_to_delete) {
196 bool suppress_panning =
true;
197 if (this->mouse_idle_pos.x != _cursor.
pos.x || this->mouse_idle_pos.y != _cursor.
pos.y) {
198 this->mouse_idle_pos = _cursor.
pos;
199 this->mouse_idle_time = 2000;
200 }
else if (this->mouse_idle_time > delta_ms) {
201 this->mouse_idle_time -= delta_ms;
203 this->mouse_idle_time = 0;
204 suppress_panning =
false;
208 bool changed_command =
false;
211 this->cur_viewport_command_index = 0;
212 changed_command =
true;
215 this->cur_viewport_command_time += delta_ms;
218 this->cur_viewport_command_time = 0;
219 changed_command =
true;
227 if (!changed_command && !vc.
pan_to_next && vc.
vehicle == VehicleID::Invalid())
return;
230 if (!changed_command && suppress_panning)
return;
233 if (changed_command) FixTitleGameZoom(vc.
zoom_adjust);
243 const double t = this->cur_viewport_command_time / (double)vc.
delay;
244 pos.x = pos.x + (int)(t * (pos2.x - pos.x));
245 pos.y = pos.y + (int)(t * (pos2.y - pos.y));
282 bool changed =
false;
327 ShowNetworkGameWindow();
346static constexpr NWidgetPart _nested_select_game_widgets[] = {
396 _nested_select_game_widgets
399void ShowSelectGameWindow()
404static void AskExitGameCallback(
Window *,
bool confirmed)
424static void AskExitToGameMenuCallback(
Window *,
bool confirmed)
432void AskExitToGameMenu()
436 GetEncodedString((_game_mode != GM_EDITOR) ? STR_ABANDON_GAME_QUERY : STR_ABANDON_SCENARIO_QUERY),
438 AskExitToGameMenuCallback,
Window for configuring the AIs
constexpr bool Test(Tvalue_type value) const
Test if the value-th bit is set.
@ EXIT
User is exiting the application.
void Transmit(Reason reason, bool blocking=false)
Transmit the survey.
Parse data from a string / buffer.
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 the Games
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.
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.
This file contains all sprite-related enums and defines.
Definition of base types and functions in a cross-platform compatible way.
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.
GUISettings gui
settings related to the GUI
Point pos
logical mouse position
uint8_t missing_strings_threshold
the number of missing strings before showing the warning
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.
Coordinates of a point in 2D.
static Pool::IterateWrapper< Titem > Iterate(size_t from=0)
Returns an iterable ensemble of all valid Titem.
static Titem * Get(auto index)
Returns Titem with given index.
Specification of a rectangle with absolute coordinates of all edges.
void ReadIntroGameViewportCommands()
Find and parse all viewport command signs.
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 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.
WindowFlags flags
Window flags.
Stuff related to the text buffer GUI.
Base class for all vehicles.
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.