OpenTTD Source
1.11.0-beta2
|
Go to the documentation of this file.
38 extern void MakeNewgameSettingsLive();
97 NWidget(
WWT_TEXT, COLOUR_ORANGE),
SetDataTip(STR_MAPGEN_BY, STR_NULL),
SetPadding(1, 0, 0, 0),
SetFill(1, 1),
151 NWidget(
WWT_TEXT, COLOUR_ORANGE),
SetDataTip(STR_MAPGEN_NORTHWEST, STR_NULL),
SetPadding(1, 0, 0, 0),
SetFill(0, 1),
156 NWidget(
WWT_TEXT, COLOUR_ORANGE),
SetDataTip(STR_MAPGEN_NORTHEAST, STR_NULL),
SetPadding(1, 0, 0, 0),
SetFill(0, 1),
163 NWidget(
WWT_TEXT, COLOUR_ORANGE),
SetDataTip(STR_MAPGEN_SOUTHWEST, STR_NULL),
SetPadding(1, 0, 0, 0),
SetFill(0, 1),
168 NWidget(
WWT_TEXT, COLOUR_ORANGE),
SetDataTip(STR_MAPGEN_SOUTHEAST, STR_NULL),
SetPadding(1, 0, 0, 0),
SetFill(0, 1),
218 NWidget(
WWT_TEXT, COLOUR_ORANGE),
SetDataTip(STR_MAPGEN_BY, STR_NULL),
SetPadding(1, 0, 0, 0),
SetFill(1, 1),
268 MakeNewgameSettingsLive();
276 default: NOT_REACHED();
280 static void LandscapeGenerationCallback(
Window *w,
bool confirmed)
291 item->SetParam(0, 1LL << i);
292 list.emplace_back(item);
303 const auto &grf_names = GetGRFTownNameList();
304 for (uint i = 0; i < grf_names.size(); i++) {
309 size_t newgrf_size = list.size();
311 if (newgrf_size > 0) {
326 static const StringID _elevations[] = {STR_TERRAIN_TYPE_VERY_FLAT, STR_TERRAIN_TYPE_FLAT, STR_TERRAIN_TYPE_HILLY, STR_TERRAIN_TYPE_MOUNTAINOUS, STR_TERRAIN_TYPE_ALPINIST,
INVALID_STRING_ID};
327 static const StringID _sea_lakes[] = {STR_SEA_LEVEL_VERY_LOW, STR_SEA_LEVEL_LOW, STR_SEA_LEVEL_MEDIUM, STR_SEA_LEVEL_HIGH, STR_SEA_LEVEL_CUSTOM,
INVALID_STRING_ID};
328 static const StringID _rivers[] = {STR_RIVERS_NONE, STR_RIVERS_FEW, STR_RIVERS_MODERATE, STR_RIVERS_LOT,
INVALID_STRING_ID};
329 static const StringID _smoothness[] = {STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH, STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH, STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH, STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH,
INVALID_STRING_ID};
330 static const StringID _rotation[] = {STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE, STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE,
INVALID_STRING_ID};
331 static const StringID _landscape[] = {STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL, STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS,
INVALID_STRING_ID};
332 static const StringID _num_towns[] = {STR_NUM_VERY_LOW, STR_NUM_LOW, STR_NUM_NORMAL, STR_NUM_HIGH, STR_NUM_CUSTOM,
INVALID_STRING_ID};
333 static const StringID _num_inds[] = {STR_FUNDING_ONLY, STR_MINIMAL, STR_NUM_VERY_LOW, STR_NUM_LOW, STR_NUM_NORMAL, STR_NUM_HIGH,
INVALID_STRING_ID};
334 static const StringID _variety[] = {STR_VARIETY_NONE, STR_VARIETY_VERY_LOW, STR_VARIETY_LOW, STR_VARIETY_MEDIUM, STR_VARIETY_HIGH, STR_VARIETY_VERY_HIGH,
INVALID_STRING_ID};
371 if (_game_mode == GM_EDITOR) {
384 STR_GAME_OPTIONS_TOWN_NAME_ORIGINAL_ENGLISH + gen :
396 SetDParam(0, STR_SEA_LEVEL_CUSTOM_PERCENTAGE);
432 if (!gui_scope)
return;
545 if (strs !=
nullptr) {
550 size->width += padding.width;
558 DrawString(r.left, r.right, r.top, this->name, TC_ORANGE);
611 STR_WARNING_HEIGHTMAP_SCALE_CAPTION,
612 STR_WARNING_HEIGHTMAP_SCALE_MESSAGE,
614 LandscapeGenerationCallback);
616 StartGeneratingLandscape(mode);
690 uint32 hidden_mask = 0;
742 for (
const int *widget = raise_widgets; *widget !=
WIDGET_LIST_END; widget++) {
770 this->widget_id = widget;
789 this->widget_id = widget;
803 if (str ==
nullptr)
return;
810 switch (this->widget_id) {
816 default: NOT_REACHED();
820 switch (this->widget_id) {
972 str = STR_BLACK_DATE_LONG;
988 size->width += padding.width;
989 size->height += padding.height;
1060 for (
const int *widget = raise_widgets; *widget !=
WIDGET_LIST_END; widget++) {
1080 int32 value = atoi(str);
1082 switch (this->widget_id) {
1099 static const NWidgetPart _nested_create_scenario_widgets[] = {
1155 _nested_create_scenario_widgets,
lengthof(_nested_create_scenario_widgets)
1165 static const NWidgetPart _nested_generate_progress_widgets[] = {
1183 _nested_generate_progress_widgets,
lengthof(_nested_generate_progress_widgets)
1191 std::chrono::steady_clock::time_point next_update;
1196 static const StringID _generation_class_table[] = {
1197 STR_GENERATION_WORLD_GENERATION,
1198 STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION,
1199 STR_GENERATION_RIVER_GENERATION,
1200 STR_GENERATION_CLEARING_TILES,
1201 STR_SCENEDIT_TOOLBAR_TOWN_GENERATION,
1202 STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION,
1203 STR_GENERATION_OBJECT_GENERATION,
1204 STR_GENERATION_TREE_GENERATION,
1205 STR_GENERATION_SETTINGUP_GAME,
1206 STR_GENERATION_PREPARING_TILELOOP,
1207 STR_GENERATION_PREPARING_SCRIPT,
1208 STR_GENERATION_PREPARING_GAME
1210 static_assert(
lengthof(_generation_class_table) == GWP_CLASS_COUNT);
1213 static void AbortGeneratingWorldCallback(
Window *w,
bool confirmed)
1235 STR_GENERATION_ABORT_CAPTION,
1236 STR_GENERATION_ABORT_MESSAGE,
1238 AbortGeneratingWorldCallback
1257 for (uint i = 0; i < GWP_CLASS_COUNT; i++) {
1271 DrawFrameRect(r.left + 1, r.top + 1, (
int)((r.right - r.left - 2) * _gws.percent / 100) + r.left + 1, r.bottom - 1, COLOUR_MAUVE, FR_NONE);
1293 _gws.cls = STR_GENERATION_WORLD_GENERATION;
1297 _gws.next_update = std::chrono::steady_clock::now();
1309 static void _SetGeneratingWorldProgress(
GenWorldProgress cls, uint progress, uint total)
1311 static const int percent_table[] = {0, 5, 14, 17, 20, 40, 60, 65, 80, 85, 95, 99, 100 };
1312 static_assert(
lengthof(percent_table) == GWP_CLASS_COUNT + 1);
1313 assert(cls < GWP_CLASS_COUNT);
1321 assert(_gws.cls == _generation_class_table[cls]);
1322 _gws.current += progress;
1323 assert(_gws.current <= _gws.total);
1325 _gws.cls = _generation_class_table[cls];
1326 _gws.current = progress;
1328 _gws.percent = percent_table[cls];
1332 if (!
_network_dedicated && std::chrono::steady_clock::now() < _gws.next_update)
return;
1336 _gws.percent = percent_table[cls] + (percent_table[cls + 1] - percent_table[cls]) * (_gws.current == 0 ? 0 : _gws.current - 1) / _gws.total;
1339 static uint last_percent = 0;
1342 if (_gws.percent == 0)
return;
1344 if (_gws.percent < last_percent) last_percent = 0;
1346 if (_gws.percent % 5 != 0 && _gws.percent <= last_percent + 5)
return;
1348 if (_gws.percent <= last_percent + 2)
return;
1350 DEBUG(net, 1,
"Map generation percentage complete: %d", _gws.percent);
1351 last_percent = _gws.percent;
1380 if (total == 0)
return;
1382 _SetGeneratingWorldProgress(cls, 0, total);
1395 _SetGeneratingWorldProgress(cls, 1, 0);
static const uint MIN_MAX_HEIGHTLEVEL
Lower bound of maximum allowed heightlevel (in the construction settings)
char title[255]
Internal name of the game.
void SetMouseCursorBusy(bool busy)
Set or unset the ZZZ cursor.
uint32 generation_seed
noise seed for world generation
static const uint DEF_MAX_HEIGHTLEVEL
Default maximum allowed heightlevel (in the construction settings)
void DrawWidget(const Rect &r, int widget) const override
Draw the contents of a nested widget.
void SetNewLandscapeType(byte landscape)
Changes landscape type and sets genworld window dirty.
uint8 timeout_timer
Timer value of the WF_TIMEOUT for flags.
static const uint MIN_SNOWLINE_HEIGHT
Minimum snowline height.
void SetWindowDirty(WindowClass cls, WindowNumber number)
Mark window as dirty (in need of repainting)
String list item with parameters.
static const uint MODAL_PROGRESS_REDRAW_TIMEOUT
Timeout between redraws.
std::mutex _modal_progress_paint_mutex
Rights for the painting.
@ SM_START_HEIGHTMAP
Load a heightmap and start a new game from it.
Dimensions (a width and height) of a rectangle in 2D.
byte custom_sea_level
manually entered percentage of water in the map
void ShowCreateScenario()
Show the window to create a scenario.
void AbortGeneratingWorld()
Initializes the abortion process.
uint8 max_heightlevel
maximum allowed heightlevel
uint8 map_y
Y size of map.
byte landscape
the landscape we're currently in
byte tgen_smoothness
how rough is the terrain from 0-3
static const uint CUSTOM_SEA_LEVEL_MIN_PERCENTAGE
Minimum percentage a user can specify for custom sea level.
void OnDropdownSelect(int widget, int index) override
A dropdown option associated to this window has been selected.
@ WC_SELECT_GAME
Select game window; Window numbers:
@ HM_CLOCKWISE
Rotate the map clockwise 45 degrees.
@ SM_EDITOR
Switch to scenario editor.
static const uint MIN_MAP_SIZE_BITS
Minimal and maximal map width and height.
std::string name
Name of the file.
std::vector< std::unique_ptr< const DropDownListItem > > DropDownList
A drop down list is a collection of drop down list items.
Dimension maxdim(const Dimension &d1, const Dimension &d2)
Compute bounding box of both dimensions.
@ LG_ORIGINAL
The original landscape generator.
DifficultySettings difficulty
settings related to the difficulty
static bool HasBit(const T x, const uint8 y)
Checks if a bit in a value is set.
byte variety
variety level applied to TGP
void OnClick(Point pt, int widget, int click_count) override
A click with the left mouse button has been made on the window.
@ SND_15_BEEP
19 == 0x13 GUI button click
byte town_name
the town name generator used for town names
@ WC_GENERATE_LANDSCAPE
Generate landscape (newgame); Window numbers:
Base list item class from which others are derived.
ClientSettings _settings_client
The current settings for this game.
int DrawString(int left, int right, int top, const char *str, TextColour colour, StringAlignment align, bool underline, FontSize fontsize)
Draw string, possibly truncated to make it fit in its allocated space.
void DeleteWindowByClass(WindowClass cls)
Delete all windows of a given class.
void OnClick(Point pt, int widget, int click_count) override
A click with the left mouse button has been made on the window.
static const uint DEF_SNOWLINE_HEIGHT
Default snowline height.
int32 WindowNumber
Number to differentiate different windows of the same class.
static const uint MAX_TILE_HEIGHT
Maximum allowed tile height.
static const uint MAX_MAX_HEIGHTLEVEL
Upper bound of maximum allowed heightlevel (in the construction settings)
@ SA_HOR_CENTER
Horizontally center the text.
void HandleButtonClick(byte widget)
Do all things to make a button look clicked and mark it to be unclicked in a few ticks.
Window(WindowDesc *desc)
Empty constructor, initialization has been moved to InitNested() called from the constructor of the d...
static void SetDParam(uint n, uint64 v)
Set a string parameter v at index n in the global string parameter array.
Dimension GetStringBoundingBox(const char *str, FontSize start_fontsize)
Return the string dimension in pixels.
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.
GameCreationSettings game_creation
settings used during the creation of a game (map)
static const NWidgetPart _nested_heightmap_load_widgets[]
Widgets of GenerateLandscapeWindow when loading heightmap.
@ WN_GAME_OPTIONS_GAME_OPTIONS
Game options.
High level window description.
@ WC_MODAL_PROGRESS
Progress report of landscape generation; Window numbers:
void PrepareGenerateWorldProgress()
Initializes the progress counters to the starting point.
static const uint CUSTOM_TOWN_MAX_NUMBER
this is the maximum number of towns a user can specify in customisation
void ClearErrorMessages()
Clear all errors from the queue.
ResizeInfo resize
Resize information.
GenerateLandscapeWindowMode
Enum for the modes we can generate in.
SoundSettings sound
sound effect settings
bool IsGenerateWorldThreaded()
Tells if the world generation is done in a thread or not.
void SetMouseCursor(CursorID sprite, PaletteID pal)
Assign a single non-animated sprite to the cursor.
void ShowGenerateLandscape()
Start with a normal game.
void InitNested(WindowNumber number=0)
Perform complete initialization of the Window with nested widgets, to allow use.
@ SM_NEWGAME
New Game --> 'Random game'.
static const Year MIN_YEAR
The absolute minimum & maximum years in OTTD.
byte terrain_type
the mountainousness of the landscape
#define DEBUG(name, level,...)
Output a line of debugging information.
uint16 custom_town_number
manually entered number of towns
void SetDirty() const
Mark entire window as dirty (in need of re-paint)
Date ConvertYMDToDate(Year year, Month month, Day day)
Converts a tuple of Year, Month and Day to a Date.
@ WD_PAR_VSEP_NORMAL
Normal amount of vertical space between two paragraphs of text.
byte water_borders
bitset of the borders that are water
void ShowDropDownList(Window *w, DropDownList &&list, int selected, int button, uint width, bool auto_width, bool instant_close)
Show a drop down list.
GameSettings _settings_game
Game settings of a running game or the scenario editor.
static const uint CUSTOM_SEA_LEVEL_MAX_PERCENTAGE
Maximum percentage a user can specify for custom sea level.
void SetWidgetDisabledState(byte widget_index, bool disab_stat)
Sets the enabled/disabled status of a widget.
byte snow_line_height
the configured snow line height
void OnTimeout() override
Called when this window's timeout has been reached.
void ShowQueryString(StringID str, StringID caption, uint maxsize, Window *parent, CharSetFilter afilter, QueryStringFlags flags)
Show a query popup window with a textbox in it.
WindowFlags flags
Window flags.
bool freeform_edges
allow terraforming the tiles at the map edges
@ WF_TIMEOUT
Window timeout counter.
static bool StrEmpty(const char *s)
Check if a string buffer is empty.
byte quantity_sea_lakes
the amount of seas/lakes
byte industry_density
The industry density.
byte se_flat_world_height
land height a flat world gets in SE
@ GLWM_SCENARIO
Generate flat land.
Coordinates of a point in 2D.
void ShowDropDownMenu(Window *w, const StringID *strings, int selected, int button, uint32 disabled_mask, uint32 hidden_mask, uint width)
Show a dropdown menu window near a widget of the parent window.
bool _network_dedicated
are we a dedicated server?
@ SM_GENRANDLAND
Generate random land within scenario editor.
WindowNumber window_number
Window number within the window class.
void IncreaseGeneratingWorldProgress(GenWorldProgress cls)
Increases the current stage of the world generation with one.
void InvalidateData(int data=0, bool gui_scope=true)
Mark this window's data as invalid (in need of re-computing)
@ WC_NONE
No window, redirects to WC_MAIN_WINDOW.
static constexpr uint BUILTIN_TOWNNAME_GENERATOR_COUNT
Number of built-in town name generators.
void ShowHeightmapLoad()
Start with loading a heightmap.
bool GetHeightmapDimensions(DetailedFileType dft, const char *filename, uint *x, uint *y)
Get the dimensions of a heightmap.
void StartNewGameWithoutGUI(uint32 seed)
Start a normal game without the GUI.
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.
@ SM_LOAD_HEIGHTMAP
Load heightmap from scenario editor.
GenWorldProgress
Current stage of world generation process.
@ WD_DROPDOWNTEXT_TOP
Top offset of the dropdown widget string.
SwitchMode _switch_mode
The next mainloop command.
@ GLWM_HEIGHTMAP
Load from heightmap.
uint32 StringID
Numeric value that represents a string, independent of the selected language.
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.
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...
bool confirm
Play sound effect on successful constructions or other actions.
byte heightmap_rotation
rotation director for the heightmap
@ WC_GAME_OPTIONS
Game options window; Window numbers:
static T Clamp(const T a, const T min, const T max)
Clamp a value between an interval.
static const uint MAX_MAP_SIZE_BITS
Maximal size of map is equal to 2 ^ MAX_MAP_SIZE_BITS.
static size_t GetNumItems()
Returns number of valid items in the pool.
void ShowGenerateWorldProgress()
Show the window where a user can follow the process of the map generation.
void SetStringParameters(int widget) const override
Initialize string parameters for a widget.
void HandleGeneratingWorldAbortion()
Really handle the abortion, i.e.
uint8 map_x
X size of map.
byte amount_of_rivers
the amount of rivers
static const uint MAX_SNOWLINE_HEIGHT
Maximum allowed snowline height.
byte land_generator
the landscape generator
void DeleteAllNonVitalWindows()
It is possible that a stickied window gets to a position where the 'close' button is outside the gami...
#define FONT_HEIGHT_NORMAL
Height of characters in the normal (FS_NORMAL) font.
void OnTimeout() override
Called when this window's timeout has been reached.
void SetDParamMaxValue(uint n, uint64 max_value, uint min_count, FontSize size)
Set DParam n to some number that is suitable for string size computations.
void InvalidateWindowClassesData(WindowClass cls, int data, bool gui_scope)
Mark window data of all windows of a given class as invalid (in need of re-computing) Note that by de...
FileToSaveLoad _file_to_saveload
File to save or load in the openttd loop.
void DrawWidget(const Rect &r, int widget) const override
Draw the contents of a nested widget.
void CDECL SetWidgetsDisabledState(bool disab_stat, int widgets,...)
Sets the enabled/disabled status of a list of widgets.
void OnClick(Point pt, int widget, int click_count) override
A click with the left mouse button has been made on the window.
bool IsWidgetLowered(byte widget_index) const
Gets the lowered state of a widget.
void OnQueryTextFinished(char *str) override
The query window opened from this window has closed.
@ GLWM_GENERATE
Generate new game.
Year starting_year
starting date
static const Year DEF_START_YEAR
The default starting year.
static T ToggleBit(T &x, const uint8 y)
Toggles a bit in a variable.
static T SetBit(T &x, const uint8 y)
Set a bit in a variable.
#define lengthof(x)
Return the length of an fixed size array.
int width
width of the window (number of pixels to the right in x direction)
void MarkWholeScreenDirty()
This function mark the whole screen as dirty.
bool IsGeneratingWorldAborted()
Is the generation being aborted?
static const NWidgetPart _nested_generate_landscape_widgets[]
Widgets of GenerateLandscapeWindow when generating world.
void StartScenarioEditor()
Start with a scenario editor.
@ ID_END
Number of industry density settings.
void SetGeneratingWorldProgress(GenWorldProgress cls, uint total)
Set the total of a stage of the world generation.
ConstructionSettings construction
construction of things in-game
@ WD_DROPDOWNTEXT_BOTTOM
Bottom offset of the dropdown widget string.
Data structure for an opened window.
DetailedFileType detail_ftype
Concrete file type (PNG, BMP, old save, etc).
void ResetGRFConfig(bool defaults)
Reset the current GRF Config to either blank or newgame settings.
void RaiseWidget(byte widget_index)
Marks a widget as raised.
void DrawWidgets() const
Paint all widgets of a window.
static bool HasModalProgress()
Check if we are currently in a modal progress state.
static const uint MAX_MAP_SIZE
Maximal map size = 4096.
char * strecpy(char *dst, const char *src, const char *last)
Copies characters from one buffer to another.
static const uint CUSTOM_SEA_LEVEL_NUMBER_DIFFICULTY
Value for custom sea level in difficulty settings.
void SetWidgetDirty(byte widget_index) const
Invalidate a widget, i.e.
Specification of a rectangle with absolute coordinates of all edges.
void LowerWidget(byte widget_index)
Marks a widget as lowered.
Window * BringWindowToFrontById(WindowClass cls, WindowNumber number)
Find a window and make it the relative top-window on the screen.
byte number_towns
the amount of towns
@ QSF_ENABLE_DEFAULT
enable the 'Default' button ("\0" is returned)
void OnPaint() override
The window must be repainted.
#define lastof(x)
Get the last element of an fixed size array.
@ WDP_CENTER
Center the window.
void SetWidgetLoweredState(byte widget_index, bool lowered_stat)
Sets the lowered/raised status of a widget.
void OnQueryTextFinished(char *str) override
The query window opened from this window has closed.
bool _left_button_clicked
Is left mouse button clicked?
@ CS_NUMERAL
Only numeric ones.
void SetStringParameters(int widget) const override
Initialize string parameters for a widget.
void OnDropdownSelect(int widget, int index) override
A dropdown option associated to this window has been selected.
static const uint CUSTOM_TOWN_NUMBER_DIFFICULTY
value for custom town number in difficulty settings
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)
void OnInvalidateData(int data=0, bool gui_scope=true) override
Some data on this window has become invalid.
@ FR_BORDERONLY
Draw border only, no background.
std::mutex _modal_progress_work_mutex
Rights for the performing work.
static const Year MAX_YEAR
MAX_YEAR, nicely rounded value of the number of years that can be encoded in a single 32 bits date,...
static bool NatSortFunc(std::unique_ptr< const DropDownListItem > const &first, std::unique_ptr< const DropDownListItem > const &second)
Natural sorting comparator function for DropDownList::sort().