Go to the documentation of this file.
37 #include "table/strings.h"
83 switch (this->align_h) {
84 case LEFT: p.x = this->
position.x;
break;
88 switch (this->align_v) {
89 case TOP: p.y = this->
position.y;
break;
105 uint mouse_idle_time;
106 Point mouse_idle_pos;
117 const char *sign_langauge =
"^T\\s*([0-9]+)\\s*([-+A-Z0-9]+)\\s*([0-9]+)";
118 std::regex re(sign_langauge, std::regex_constants::icase);
121 std::vector<SignID> signs_to_delete;
125 if (std::regex_search(sign->name, match, re)) {
132 vc.
delay = std::stoi(match[3].str()) * 1000;
138 for (
char c : match[2].str()) {
140 if (id_type == ID_VEHICLE) {
145 switch (toupper(c)) {
148 case 'T': vc.
align_v = IntroGameViewportCommand::TOP;
break;
149 case 'M': vc.
align_v = IntroGameViewportCommand::MIDDLE;
break;
150 case 'B': vc.
align_v = IntroGameViewportCommand::BOTTOM;
break;
151 case 'L': vc.
align_h = IntroGameViewportCommand::LEFT;
break;
152 case 'C': vc.
align_h = IntroGameViewportCommand::CENTRE;
break;
153 case 'R': vc.
align_h = IntroGameViewportCommand::RIGHT;
break;
155 case 'V': id_type = ID_VEHICLE; vc.
vehicle = 0;
break;
162 signs_to_delete.push_back(sign->index);
170 std::sort(signs_to_delete.begin(), signs_to_delete.end(), [](
SignID a,
SignID b) { return a > b; });
171 for (
SignID sign_id : signs_to_delete) {
184 this->cur_viewport_command_index = (size_t)-1;
185 this->cur_viewport_command_time = 0;
186 this->mouse_idle_time = 0;
187 this->mouse_idle_pos = _cursor.
pos;
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;
231 if (!changed_command && suppress_panning)
return;
234 if (changed_command) FixTitleGameZoom(vc.
zoom_adjust);
244 const double t = this->cur_viewport_command_time / (double)vc.
delay;
245 pos.x = pos.x + (
int)(t * (pos2.x - pos.x));
246 pos.y = pos.y + (int)(t * (pos2.y - pos.y));
266 if (!gui_scope)
return;
303 str = STR_INTRO_BASESET;
308 str = STR_INTRO_TRANSLATION;
318 textdim.width -= textdim.width / 2;
319 *size =
maxdim(*size, textdim);
321 size->height =
height + padding.height;
350 ShowNetworkGameWindow();
376 static const NWidgetPart _nested_select_game_widgets[] = {
415 SetDataTip(SPR_SELECT_TEMPERATE, STR_INTRO_TOOLTIP_TEMPERATE),
418 SetDataTip(SPR_SELECT_SUB_ARCTIC, STR_INTRO_TOOLTIP_SUB_ARCTIC_LANDSCAPE),
421 SetDataTip(SPR_SELECT_SUB_TROPICAL, STR_INTRO_TOOLTIP_SUB_TROPICAL_LANDSCAPE),
424 SetDataTip(SPR_SELECT_TOYLAND, STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE),
431 NWidget(
WWT_EMPTY, COLOUR_ORANGE,
WID_SGI_BASESET),
SetMinimalSize(316, 12),
SetFill(1, 0),
SetPadding(0, 10, 7, 10),
436 NWidget(
WWT_EMPTY, COLOUR_ORANGE,
WID_SGI_TRANSLATION),
SetMinimalSize(316, 12),
SetFill(1, 0),
SetPadding(0, 10, 7, 10),
474 SetDataTip(STR_INTRO_QUIT, STR_INTRO_TOOLTIP_QUIT),
487 _nested_select_game_widgets,
lengthof(_nested_select_game_widgets)
490 void ShowSelectGameWindow()
495 static void AskExitGameCallback(
Window *w,
bool confirmed)
497 if (confirmed) _exit_game =
true;
504 STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD,
511 static void AskExitToGameMenuCallback(
Window *w,
bool confirmed)
519 void AskExitToGameMenu()
522 STR_ABANDON_GAME_CAPTION,
523 (_game_mode != GM_EDITOR) ? STR_ABANDON_GAME_QUERY : STR_ABANDON_SCENARIO_QUERY,
525 AskExitToGameMenuCallback
void ShowNewGRFSettings(bool editable, bool show_params, bool exec_changes, GRFConfig **config)
Setup the NewGRF gui.
VehicleID vehicle
Vehicle to follow, or INVALID_VEHICLE if not following a vehicle.
@ FT_SCENARIO
old or new scenario
static Titem * Get(size_t index)
Returns Titem with given index.
bool pan_to_next
If true, do a smooth pan from this position to the next.
int zoom_adjust
Adjustment to zoom level from base zoom level.
Dimensions (a width and height) of a rectangle in 2D.
byte landscape
the landscape we're currently in
uint delay
Delay until next command.
@ WC_SELECT_GAME
Select game window; Window numbers:
static 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.
ViewportData * viewport
Pointer to viewport data, if present.
int command_index
Sequence number of the command (order they are performed in).
int32 scrollpos_y
Currently shown y coordinate (virtual screen coordinate of topleft corner of the viewport).
void CreateNestedTree(bool fill_nested=true)
Perform the first part of the initialization of a nested widget tree.
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.
Dimension maxdim(const Dimension &d1, const Dimension &d2)
Compute bounding box of both dimensions.
bool _ctrl_pressed
Is Ctrl pressed?
void ShowGameOptions()
Open the game options window.
uint cur_viewport_command_time
Time spent (milliseconds) on current viewport command.
void ShowGameSettings()
Open advanced settings window.
ClientSettings _settings_client
The current settings for this game.
void StartScenarioEditor()
Start with a scenario editor.
static void SetDParam(uint n, uint64 v)
Set a string parameter v at index n in the global string parameter array.
static const uint32 GENERATE_NEW_SEED
Create a new random seed.
Dimension GetStringBoundingBox(const char *str, FontSize start_fontsize)
Return the string dimension in pixels.
void ShowErrorMessage(StringID summary_msg, StringID detailed_msg, WarningLevel wl, int x=0, int y=0, const GRFFile *textref_stack_grffile=nullptr, uint textref_stack_size=0, const uint32 *textref_stack=nullptr)
Display an error message in a window.
int DrawStringMultiLine(int left, int right, int top, int bottom, const char *str, TextColour colour, StringAlignment align, bool underline, FontSize fontsize)
Draw string, possibly over multiple lines.
GameCreationSettings game_creation
settings used during the creation of a game (map)
static bool IsInsideMM(const T x, const size_t min, const size_t max)
Checks if a value is in an interval.
High level window description.
void OnClick(Point pt, int widget, int click_count) override
A click with the left mouse button has been made on the window.
Data structure for viewport, display of a part of the world.
void ClearErrorMessages()
Clear all errors from the queue.
@ SLO_LOAD
File is being loaded.
ResizeInfo resize
Resize information.
void ShowGenerateLandscape()
Start with a normal game.
A viewport command for the main menu background (intro game).
int height
Height of the window (number of pixels down in y direction)
static const VehicleID INVALID_VEHICLE
Constant representing a non-existing vehicle.
void SetDirty() const
Mark entire window as dirty (in need of re-paint)
Point position
Calculated world coordinate to position viewport top-left at.
uint _missing_extra_graphics
Number of sprites provided by the fallback extra GRF, i.e. missing in the baseset.
byte missing_strings_threshold
the number of missing strings before showing the warning
void ReadIntroGameViewportCommands()
Find and parse all viewport command signs.
const LanguageMetadata * _current_language
The currently loaded language.
int virtual_width
width << zoom
Coordinates of a point in 2D.
int32 dest_scrollpos_y
Current destination y coordinate to display (virtual screen coordinate of topleft corner of the viewp...
void ShowSaveLoadDialog(AbstractFileType abstract_filetype, SaveLoadOperation fop)
Launch save/load dialog in the given mode.
@ FT_SAVEGAME
old or new savegame
void StartNewGameWithoutGUI(uint32 seed)
Start a normal game without the GUI.
@ WC_NONE
No window, redirects to WC_MAIN_WINDOW.
int GetStringHeight(const char *str, int maxw, FontSize fontsize)
Calculates height of string (in pixels).
void ShowHighscoreTable(int difficulty=SP_CUSTOM, int8 rank=-1)
Show the highscore table for a given difficulty.
SwitchMode _switch_mode
The next mainloop command.
uint32 StringID
Numeric value that represents a string, independent of the selected language.
void ShowQuery(StringID caption, StringID message, Window *parent, QueryCallbackProc *callback)
Show a modal confirmation window with standard 'yes' and 'no' buttons The window is aligned to the ce...
int32 scrollpos_x
Currently shown x coordinate (virtual screen coordinate of topleft corner of the viewport).
size_t cur_viewport_command_index
Index of currently active viewport command.
static Pool::IterateWrapper< Titem > Iterate(size_t from=0)
Returns an iterable ensemble of all valid Titem.
#define FONT_HEIGHT_NORMAL
Height of characters in the normal (FS_NORMAL) font.
void DrawWidget(const Rect &r, int widget) const override
Draw the contents of a nested widget.
AlignmentV align_v
Vertical alignment.
void SetNewLandscapeType(byte landscape)
Changes landscape type and sets genworld window dirty.
void UpdateViewportPosition(Window *w)
Update the viewport position being displayed.
AlignmentH
Horizontal alignment value.
Window * FindWindowByClass(WindowClass cls)
Find any window by its class.
AlignmentH align_h
Horizontal alignment.
@ FT_HEIGHTMAP
heightmap file
@ WC_MAIN_WINDOW
Main window; Window numbers:
void FinishInitNested(WindowNumber window_number=0)
Perform the second part of the initialization of a nested widget tree.
@ WL_ERROR
Errors (eg. saving/loading failed)
@ SM_MENU
Switch to game intro menu.
AlignmentV
Vertical alignment value.
uint32 VehicleID
The type all our vehicle IDs have.
Point PositionForViewport(const Viewport *vp)
Calculate effective position.
@ SA_CENTER
Center both horizontally and vertically.
void OnInvalidateData(int data=0, bool gui_scope=true) override
Some data on this window has become invalid.
#define lengthof(x)
Return the length of an fixed size array.
int32 dest_scrollpos_x
Current destination x coordinate to display (virtual screen coordinate of topleft corner of the viewp...
void OnRealtimeTick(uint delta_ms) override
Called periodically.
Data structure for an opened window.
int virtual_height
height << zoom
bool _network_available
is network mode available?
void ShowAIConfigWindow()
Open the AI config window.
Specification of a rectangle with absolute coordinates of all edges.
Point pos
logical mouse position
void OnInit() override
Notification that the nested widget tree gets initialized.
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
Update size and resize step of a widget in the window.
@ WDP_CENTER
Center the window.
void SetWidgetLoweredState(byte widget_index, bool lowered_stat)
Sets the lowered/raised status of a widget.
bool _is_network_server
Does this client wants to be a network-server?
std::vector< IntroGameViewportCommand > intro_viewport_commands
Vector of viewport commands parsed.
GameSettings _settings_newgame
Game settings for new games (updated from the intro screen).
static const StringID INVALID_STRING_ID
Constant representing an invalid string (16bit in case it is used in savegames)
GUISettings gui
settings related to the GUI
uint16 SignID
The type of the IDs of signs.
GRFConfig * _grfconfig_newgame
First item in list of default GRF set up.