42 extern void MakeNewgameSettingsLive();
169 NWidget(
WWT_TEXT, COLOUR_ORANGE),
SetDataTip(STR_MAPGEN_NORTHWEST, STR_NULL),
SetPadding(0,
WidgetDimensions::unscaled.hsep_normal, 0, 0),
SetFill(1, 1),
SetAlignment(
SA_RIGHT |
SA_VERT_CENTER),
172 NWidget(
WWT_TEXT, COLOUR_ORANGE),
SetDataTip(STR_MAPGEN_NORTHEAST, STR_NULL),
SetPadding(0, 0, 0,
WidgetDimensions::unscaled.hsep_normal),
SetFill(1, 1),
175 NWidget(
WWT_TEXT, COLOUR_ORANGE),
SetDataTip(STR_MAPGEN_SOUTHWEST, STR_NULL),
SetPadding(0,
WidgetDimensions::unscaled.hsep_normal, 0, 0),
SetFill(1, 1),
SetAlignment(
SA_RIGHT |
SA_VERT_CENTER),
178 NWidget(
WWT_TEXT, COLOUR_ORANGE),
SetDataTip(STR_MAPGEN_SOUTHEAST, STR_NULL),
SetPadding(0, 0, 0,
WidgetDimensions::unscaled.hsep_normal),
SetFill(1, 1),
318 MakeNewgameSettingsLive();
326 default: NOT_REACHED();
330 static void LandscapeGenerationCallback(
Window *w,
bool confirmed)
341 list.push_back(std::make_unique<DropDownListStringItem>(STR_JUST_INT, i,
false));
352 const auto &grf_names = GetGRFTownNameList();
353 for (uint i = 0; i < grf_names.size(); i++) {
358 size_t newgrf_size = list.size();
360 if (newgrf_size > 0) {
361 list.push_back(std::make_unique<DropDownListDividerItem>(-1,
false));
367 list.push_back(std::make_unique<DropDownListStringItem>(STR_MAPGEN_TOWN_NAME_ORIGINAL_ENGLISH + i, i,
false));
375 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, STR_TERRAIN_TYPE_CUSTOM,
INVALID_STRING_ID};
376 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};
377 static const StringID _rivers[] = {STR_RIVERS_NONE, STR_RIVERS_FEW, STR_RIVERS_MODERATE, STR_RIVERS_LOT,
INVALID_STRING_ID};
378 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};
379 static const StringID _rotation[] = {STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE, STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE,
INVALID_STRING_ID};
380 static const StringID _num_towns[] = {STR_NUM_VERY_LOW, STR_NUM_LOW, STR_NUM_NORMAL, STR_NUM_HIGH, STR_NUM_CUSTOM,
INVALID_STRING_ID};
381 static const StringID _num_inds[] = {STR_FUNDING_ONLY, STR_MINIMAL, STR_NUM_VERY_LOW, STR_NUM_LOW, STR_NUM_NORMAL, STR_NUM_HIGH, STR_NUM_CUSTOM,
INVALID_STRING_ID};
382 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};
418 void SetStringParameters(
WidgetID widget)
const override
429 if (_game_mode == GM_EDITOR) {
442 STR_MAPGEN_TOWN_NAME_ORIGINAL_ENGLISH + gen :
449 if (_game_mode == GM_EDITOR) {
461 SetDParam(0, STR_TERRAIN_TYPE_CUSTOM_VALUE);
470 SetDParam(0, STR_SEA_LEVEL_CUSTOM_PERCENTAGE);
505 void OnInvalidateData([[maybe_unused]]
int data = 0, [[maybe_unused]]
bool gui_scope =
true)
override
507 if (!gui_scope)
return;
539 int climate_plane = 0;
541 case LT_TEMPERATE: climate_plane = 2;
break;
542 case LT_ARCTIC: climate_plane = 0;
break;
543 case LT_TROPIC: climate_plane = 1;
break;
544 case LT_TOYLAND: climate_plane = 2;
break;
662 if (strs !=
nullptr) {
667 d.width += padding.width;
668 d.height += padding.height;
719 STR_WARNING_HEIGHTMAP_SCALE_CAPTION,
720 STR_WARNING_HEIGHTMAP_SCALE_MESSAGE,
722 LandscapeGenerationCallback);
724 StartGeneratingLandscape(mode);
812 uint32_t hidden_mask = 0;
882 void OnDropdownSelect(
WidgetID widget,
int index)
override
895 this->widget_id = widget;
911 this->widget_id = widget;
920 this->widget_id = widget;
930 this->widget_id = widget;
941 void OnQueryTextFinished(
char *str)
override
944 if (str ==
nullptr)
return;
951 switch (this->widget_id) {
960 default: NOT_REACHED();
964 switch (this->widget_id) {
1006 static WindowDesc _generate_landscape_desc(__FILE__, __LINE__,
1013 static WindowDesc _heightmap_load_desc(__FILE__, __LINE__,
1087 void SetStringParameters(
WidgetID widget)
const override
1135 str = STR_JUST_DATE_LONG;
1151 d.width += padding.width;
1152 d.height += padding.height;
1153 *size =
maxdim(*size, d);
1156 void OnClick([[maybe_unused]]
Point pt,
WidgetID widget, [[maybe_unused]]
int click_count)
override
1226 void OnDropdownSelect(
WidgetID widget,
int index)
override
1235 void OnQueryTextFinished(
char *str)
override
1238 int32_t value = atoi(str);
1240 switch (this->widget_id) {
1257 static constexpr
NWidgetPart _nested_create_scenario_widgets[] = {
1316 static WindowDesc _create_scenario_desc(__FILE__, __LINE__,
1320 std::begin(_nested_create_scenario_widgets), std::end(_nested_create_scenario_widgets)
1330 static constexpr
NWidgetPart _nested_generate_progress_widgets[] = {
1342 static WindowDesc _generate_progress_desc(__FILE__, __LINE__,
1346 std::begin(_nested_generate_progress_widgets), std::end(_nested_generate_progress_widgets)
1354 std::chrono::steady_clock::time_point next_update;
1359 static const StringID _generation_class_table[] = {
1360 STR_GENERATION_WORLD_GENERATION,
1361 STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION,
1362 STR_GENERATION_RIVER_GENERATION,
1363 STR_GENERATION_CLEARING_TILES,
1364 STR_SCENEDIT_TOOLBAR_TOWN_GENERATION,
1365 STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION,
1366 STR_GENERATION_OBJECT_GENERATION,
1367 STR_GENERATION_TREE_GENERATION,
1368 STR_GENERATION_SETTINGUP_GAME,
1369 STR_GENERATION_PREPARING_TILELOOP,
1370 STR_GENERATION_PREPARING_SCRIPT,
1371 STR_GENERATION_PREPARING_GAME
1373 static_assert(
lengthof(_generation_class_table) == GWP_CLASS_COUNT);
1376 static void AbortGeneratingWorldCallback(
Window *,
bool confirmed)
1392 void OnClick([[maybe_unused]]
Point pt,
WidgetID widget, [[maybe_unused]]
int click_count)
override
1398 STR_GENERATION_ABORT_CAPTION,
1399 STR_GENERATION_ABORT_MESSAGE,
1401 AbortGeneratingWorldCallback
1420 for (uint i = 0; i < GWP_CLASS_COUNT; i++) {
1428 void DrawWidget(
const Rect &r,
WidgetID widget)
const override
1458 _gws.cls = STR_GENERATION_WORLD_GENERATION;
1462 _gws.next_update = std::chrono::steady_clock::now();
1474 static void _SetGeneratingWorldProgress(
GenWorldProgress cls, uint progress, uint total)
1476 static const int percent_table[] = {0, 5, 14, 17, 20, 40, 60, 65, 80, 85, 95, 99, 100 };
1477 static_assert(
lengthof(percent_table) == GWP_CLASS_COUNT + 1);
1478 assert(cls < GWP_CLASS_COUNT);
1492 assert(_gws.cls == _generation_class_table[cls]);
1493 _gws.current += progress;
1494 assert(_gws.current <= _gws.total);
1496 _gws.cls = _generation_class_table[cls];
1497 _gws.current = progress;
1499 _gws.percent = percent_table[cls];
1503 _gws.percent = percent_table[cls] + (percent_table[cls + 1] - percent_table[cls]) * (_gws.current == 0 ? 0 : _gws.current - 1) / _gws.total;
1506 static uint last_percent = 0;
1509 if (_gws.percent == 0)
return;
1511 if (_gws.percent < last_percent) last_percent = 0;
1513 if (_gws.percent % 5 != 0 && _gws.percent <= last_percent + 5)
return;
1515 if (_gws.percent <= last_percent + 2)
return;
1517 Debug(net, 3,
"Map generation percentage complete: {}", _gws.percent);
1518 last_percent = _gws.percent;
1538 if (total == 0)
return;
1540 _SetGeneratingWorldProgress(cls, 0, total);
1553 _SetGeneratingWorldProgress(cls, 1, 0);