* Some data on this window has become invalid. * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */
| 500 | * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. |
| 501 | */ |
| 502 | void OnInvalidateData([[maybe_unused]] int data = 0, [[maybe_unused]] bool gui_scope = true) override |
| 503 | { |
| 504 | if (!gui_scope) return; |
| 505 | /* Update the climate buttons */ |
| 506 | this->SetWidgetLoweredState(WID_GL_TEMPERATE, _settings_newgame.game_creation.landscape == LandscapeType::Temperate); |
| 507 | this->SetWidgetLoweredState(WID_GL_ARCTIC, _settings_newgame.game_creation.landscape == LandscapeType::Arctic); |
| 508 | this->SetWidgetLoweredState(WID_GL_TROPICAL, _settings_newgame.game_creation.landscape == LandscapeType::Tropic); |
| 509 | this->SetWidgetLoweredState(WID_GL_TOYLAND, _settings_newgame.game_creation.landscape == LandscapeType::Toyland); |
| 510 | |
| 511 | /* You can't select smoothness / non-water borders if not terragenesis */ |
| 512 | if (mode == GLWM_GENERATE) { |
| 513 | this->SetWidgetDisabledState(WID_GL_SMOOTHNESS_PULLDOWN, _settings_newgame.game_creation.land_generator == LG_ORIGINAL); |
| 514 | this->SetWidgetDisabledState(WID_GL_VARIETY_PULLDOWN, _settings_newgame.game_creation.land_generator == LG_ORIGINAL); |
| 515 | this->SetWidgetDisabledState(WID_GL_BORDERS_PULLDOWN, _settings_newgame.game_creation.land_generator == LG_ORIGINAL); |
| 516 | this->SetWidgetsDisabledState(_settings_newgame.game_creation.land_generator == LG_ORIGINAL || !_settings_newgame.construction.freeform_edges || _settings_newgame.game_creation.water_borders == BorderFlag::Random, |
| 517 | WID_GL_WATER_NW, WID_GL_WATER_NE, WID_GL_WATER_SE, WID_GL_WATER_SW); |
| 518 | |
| 519 | this->SetWidgetLoweredState(WID_GL_WATER_NW, _settings_newgame.game_creation.water_borders.Test(BorderFlag::NorthWest)); |
| 520 | this->SetWidgetLoweredState(WID_GL_WATER_NE, _settings_newgame.game_creation.water_borders.Test(BorderFlag::NorthEast)); |
| 521 | this->SetWidgetLoweredState(WID_GL_WATER_SE, _settings_newgame.game_creation.water_borders.Test(BorderFlag::SouthEast)); |
| 522 | this->SetWidgetLoweredState(WID_GL_WATER_SW, _settings_newgame.game_creation.water_borders.Test(BorderFlag::SouthWest)); |
| 523 | |
| 524 | this->SetWidgetsDisabledState(_settings_newgame.game_creation.land_generator == LG_ORIGINAL && (_settings_newgame.game_creation.landscape == LandscapeType::Arctic || _settings_newgame.game_creation.landscape == LandscapeType::Tropic), |
| 525 | WID_GL_TERRAIN_PULLDOWN, WID_GL_WATER_PULLDOWN); |
| 526 | } |
| 527 | |
| 528 | /* Disable snowline if not arctic */ |
| 529 | this->SetWidgetDisabledState(WID_GL_SNOW_COVERAGE_TEXT, _settings_newgame.game_creation.landscape != LandscapeType::Arctic); |
| 530 | /* Disable desert if not tropic */ |
| 531 | this->SetWidgetDisabledState(WID_GL_DESERT_COVERAGE_TEXT, _settings_newgame.game_creation.landscape != LandscapeType::Tropic); |
| 532 | |
| 533 | /* Set snow/rainforest selections */ |
| 534 | int climate_plane = 0; |
| 535 | switch (_settings_newgame.game_creation.landscape) { |
| 536 | case LandscapeType::Temperate: climate_plane = 2; break; |
| 537 | case LandscapeType::Arctic: climate_plane = 0; break; |
| 538 | case LandscapeType::Tropic: climate_plane = 1; break; |
| 539 | case LandscapeType::Toyland: climate_plane = 2; break; |
| 540 | } |
| 541 | this->GetWidget<NWidgetStacked>(WID_GL_CLIMATE_SEL_LABEL)->SetDisplayedPlane(climate_plane); |
| 542 | this->GetWidget<NWidgetStacked>(WID_GL_CLIMATE_SEL_SELECTOR)->SetDisplayedPlane(climate_plane); |
| 543 | |
| 544 | /* Update availability of decreasing / increasing start date and snow level */ |
| 545 | if (mode == GLWM_HEIGHTMAP) { |
| 546 | this->SetWidgetDisabledState(WID_GL_HEIGHTMAP_HEIGHT_DOWN, _settings_newgame.game_creation.heightmap_height <= MIN_HEIGHTMAP_HEIGHT); |
| 547 | this->SetWidgetDisabledState(WID_GL_HEIGHTMAP_HEIGHT_UP, _settings_newgame.game_creation.heightmap_height >= GetMapHeightLimit()); |
| 548 | } |
| 549 | this->SetWidgetDisabledState(WID_GL_START_DATE_DOWN, _settings_newgame.game_creation.starting_year <= CalendarTime::MIN_YEAR); |
| 550 | this->SetWidgetDisabledState(WID_GL_START_DATE_UP, _settings_newgame.game_creation.starting_year >= CalendarTime::MAX_YEAR); |
| 551 | this->SetWidgetDisabledState(WID_GL_SNOW_COVERAGE_DOWN, _settings_newgame.game_creation.snow_coverage <= 0 || _settings_newgame.game_creation.landscape != LandscapeType::Arctic); |
| 552 | this->SetWidgetDisabledState(WID_GL_SNOW_COVERAGE_UP, _settings_newgame.game_creation.snow_coverage >= 100 || _settings_newgame.game_creation.landscape != LandscapeType::Arctic); |
| 553 | this->SetWidgetDisabledState(WID_GL_DESERT_COVERAGE_DOWN, _settings_newgame.game_creation.desert_coverage <= 0 || _settings_newgame.game_creation.landscape != LandscapeType::Tropic); |
| 554 | this->SetWidgetDisabledState(WID_GL_DESERT_COVERAGE_UP, _settings_newgame.game_creation.desert_coverage >= 100 || _settings_newgame.game_creation.landscape != LandscapeType::Tropic); |
| 555 | |
| 556 | /* Do not allow a custom sea level or terrain type with the original land generator. */ |
| 557 | if (_settings_newgame.game_creation.land_generator == LG_ORIGINAL) { |
| 558 | if (_settings_newgame.difficulty.quantity_sea_lakes == CUSTOM_SEA_LEVEL_NUMBER_DIFFICULTY) { |
| 559 | _settings_newgame.difficulty.quantity_sea_lakes = 1; |
no test coverage detected