269 |
267 |
270 virtual void OnPaint() |
268 virtual void OnPaint() |
271 { |
269 { |
272 /* You can't select smoothness if not terragenesis */ |
270 /* You can't select smoothness if not terragenesis */ |
273 if (mode == GLWP_GENERATE) { |
271 if (mode == GLWP_GENERATE) { |
274 this->SetWidgetDisabledState(GLAND_SMOOTHNESS_PULLDOWN, _patches_newgame.land_generator == 0); |
272 this->SetWidgetDisabledState(GLAND_SMOOTHNESS_PULLDOWN, _settings_newgame.game_creation.land_generator == 0); |
275 } |
273 } |
276 /* Disable snowline if not hilly */ |
274 /* Disable snowline if not hilly */ |
277 this->SetWidgetDisabledState(GLAND_SNOW_LEVEL_TEXT, _opt_newgame.landscape != LT_ARCTIC); |
275 this->SetWidgetDisabledState(GLAND_SNOW_LEVEL_TEXT, _settings_newgame.game_creation.landscape != LT_ARCTIC); |
278 /* Disable town, industry and trees in SE */ |
276 /* Disable town, industry and trees in SE */ |
279 this->SetWidgetDisabledState(GLAND_TOWN_PULLDOWN, _game_mode == GM_EDITOR); |
277 this->SetWidgetDisabledState(GLAND_TOWN_PULLDOWN, _game_mode == GM_EDITOR); |
280 this->SetWidgetDisabledState(GLAND_INDUSTRY_PULLDOWN, _game_mode == GM_EDITOR); |
278 this->SetWidgetDisabledState(GLAND_INDUSTRY_PULLDOWN, _game_mode == GM_EDITOR); |
281 this->SetWidgetDisabledState(GLAND_TREE_PULLDOWN, _game_mode == GM_EDITOR); |
279 this->SetWidgetDisabledState(GLAND_TREE_PULLDOWN, _game_mode == GM_EDITOR); |
282 |
280 |
283 this->SetWidgetDisabledState(GLAND_START_DATE_DOWN, _patches_newgame.starting_year <= MIN_YEAR); |
281 this->SetWidgetDisabledState(GLAND_START_DATE_DOWN, _settings_newgame.game_creation.starting_year <= MIN_YEAR); |
284 this->SetWidgetDisabledState(GLAND_START_DATE_UP, _patches_newgame.starting_year >= MAX_YEAR); |
282 this->SetWidgetDisabledState(GLAND_START_DATE_UP, _settings_newgame.game_creation.starting_year >= MAX_YEAR); |
285 this->SetWidgetDisabledState(GLAND_SNOW_LEVEL_DOWN, _patches_newgame.snow_line_height <= 2 || _opt_newgame.landscape != LT_ARCTIC); |
283 this->SetWidgetDisabledState(GLAND_SNOW_LEVEL_DOWN, _settings_newgame.game_creation.snow_line_height <= 2 || _settings_newgame.game_creation.landscape != LT_ARCTIC); |
286 this->SetWidgetDisabledState(GLAND_SNOW_LEVEL_UP, _patches_newgame.snow_line_height >= MAX_SNOWLINE_HEIGHT || _opt_newgame.landscape != LT_ARCTIC); |
284 this->SetWidgetDisabledState(GLAND_SNOW_LEVEL_UP, _settings_newgame.game_creation.snow_line_height >= MAX_SNOWLINE_HEIGHT || _settings_newgame.game_creation.landscape != LT_ARCTIC); |
287 |
285 |
288 this->SetWidgetLoweredState(GLAND_TEMPERATE, _opt_newgame.landscape == LT_TEMPERATE); |
286 this->SetWidgetLoweredState(GLAND_TEMPERATE, _settings_newgame.game_creation.landscape == LT_TEMPERATE); |
289 this->SetWidgetLoweredState(GLAND_ARCTIC, _opt_newgame.landscape == LT_ARCTIC); |
287 this->SetWidgetLoweredState(GLAND_ARCTIC, _settings_newgame.game_creation.landscape == LT_ARCTIC); |
290 this->SetWidgetLoweredState(GLAND_TROPICAL, _opt_newgame.landscape == LT_TROPIC); |
288 this->SetWidgetLoweredState(GLAND_TROPICAL, _settings_newgame.game_creation.landscape == LT_TROPIC); |
291 this->SetWidgetLoweredState(GLAND_TOYLAND, _opt_newgame.landscape == LT_TOYLAND); |
289 this->SetWidgetLoweredState(GLAND_TOYLAND, _settings_newgame.game_creation.landscape == LT_TOYLAND); |
292 |
290 |
293 if (_game_mode == GM_EDITOR) { |
291 if (_game_mode == GM_EDITOR) { |
294 this->widget[GLAND_TOWN_PULLDOWN].data = STR_6836_OFF; |
292 this->widget[GLAND_TOWN_PULLDOWN].data = STR_6836_OFF; |
295 this->widget[GLAND_INDUSTRY_PULLDOWN].data = STR_6836_OFF; |
293 this->widget[GLAND_INDUSTRY_PULLDOWN].data = STR_6836_OFF; |
296 } else { |
294 } else { |
297 this->widget[GLAND_TOWN_PULLDOWN].data = _num_towns[_opt_newgame.diff.number_towns]; |
295 this->widget[GLAND_TOWN_PULLDOWN].data = _num_towns[_settings_newgame.difficulty.number_towns]; |
298 this->widget[GLAND_INDUSTRY_PULLDOWN].data = _num_inds[_opt_newgame.diff.number_industries]; |
296 this->widget[GLAND_INDUSTRY_PULLDOWN].data = _num_inds[_settings_newgame.difficulty.number_industries]; |
299 } |
297 } |
300 |
298 |
301 if (mode == GLWP_GENERATE) { |
299 if (mode == GLWP_GENERATE) { |
302 this->widget[GLAND_LANDSCAPE_PULLDOWN].data = _landscape[_patches_newgame.land_generator]; |
300 this->widget[GLAND_LANDSCAPE_PULLDOWN].data = _landscape[_settings_newgame.game_creation.land_generator]; |
303 this->widget[GLAND_TREE_PULLDOWN].data = _tree_placer[_patches_newgame.tree_placer]; |
301 this->widget[GLAND_TREE_PULLDOWN].data = _tree_placer[_settings_newgame.game_creation.tree_placer]; |
304 this->widget[GLAND_TERRAIN_PULLDOWN].data = _elevations[_opt_newgame.diff.terrain_type]; |
302 this->widget[GLAND_TERRAIN_PULLDOWN].data = _elevations[_settings_newgame.difficulty.terrain_type]; |
305 this->widget[GLAND_WATER_PULLDOWN].data = _sea_lakes[_opt_newgame.diff.quantity_sea_lakes]; |
303 this->widget[GLAND_WATER_PULLDOWN].data = _sea_lakes[_settings_newgame.difficulty.quantity_sea_lakes]; |
306 this->widget[GLAND_SMOOTHNESS_PULLDOWN].data = _smoothness[_patches_newgame.tgen_smoothness]; |
304 this->widget[GLAND_SMOOTHNESS_PULLDOWN].data = _smoothness[_settings_newgame.game_creation.tgen_smoothness]; |
307 } else { |
305 } else { |
308 this->widget[GLAND_TREE_PULLDOWN].data = _tree_placer[_patches_newgame.tree_placer]; |
306 this->widget[GLAND_TREE_PULLDOWN].data = _tree_placer[_settings_newgame.game_creation.tree_placer]; |
309 this->widget[GLAND_HEIGHTMAP_ROTATION_PULLDOWN].data = _rotation[_patches_newgame.heightmap_rotation]; |
307 this->widget[GLAND_HEIGHTMAP_ROTATION_PULLDOWN].data = _rotation[_settings_newgame.game_creation.heightmap_rotation]; |
310 } |
308 } |
311 |
309 |
312 /* Set parameters for widget text that requires them. */ |
310 /* Set parameters for widget text that requires them. */ |
313 SetDParam(0, ConvertYMDToDate(_patches_newgame.starting_year, 0, 1)); // GLAND_START_DATE_TEXT |
311 SetDParam(0, ConvertYMDToDate(_settings_newgame.game_creation.starting_year, 0, 1)); // GLAND_START_DATE_TEXT |
314 SetDParam(1, 1 << _patches_newgame.map_x); // GLAND_MAPSIZE_X_PULLDOWN |
312 SetDParam(1, 1 << _settings_newgame.game_creation.map_x); // GLAND_MAPSIZE_X_PULLDOWN |
315 SetDParam(2, 1 << _patches_newgame.map_y); // GLAND_MAPSIZE_Y_PULLDOWN |
313 SetDParam(2, 1 << _settings_newgame.game_creation.map_y); // GLAND_MAPSIZE_Y_PULLDOWN |
316 SetDParam(3, _patches_newgame.snow_line_height); // GLAND_SNOW_LEVEL_TEXT |
314 SetDParam(3, _settings_newgame.game_creation.snow_line_height); // GLAND_SNOW_LEVEL_TEXT |
317 |
315 |
318 this->DrawWidgets(); |
316 this->DrawWidgets(); |
319 |
317 |
320 this->DrawEditBox(GLAND_RANDOM_EDITBOX); |
318 this->DrawEditBox(GLAND_RANDOM_EDITBOX); |
321 |
319 |
322 if (mode != GLWP_GENERATE) { |
320 if (mode != GLWP_GENERATE) { |
323 char buffer[512]; |
321 char buffer[512]; |
324 |
322 |
325 if (_patches_newgame.heightmap_rotation == HM_CLOCKWISE) { |
323 if (_settings_newgame.game_creation.heightmap_rotation == HM_CLOCKWISE) { |
326 SetDParam(0, this->y); |
324 SetDParam(0, this->y); |
327 SetDParam(1, this->x); |
325 SetDParam(1, this->x); |
328 } else { |
326 } else { |
329 SetDParam(0, this->x); |
327 SetDParam(0, this->x); |
330 SetDParam(1, this->y); |
328 SetDParam(1, this->y); |
345 |
343 |
346 case GLAND_TEMPERATE: |
344 case GLAND_TEMPERATE: |
347 case GLAND_ARCTIC: |
345 case GLAND_ARCTIC: |
348 case GLAND_TROPICAL: |
346 case GLAND_TROPICAL: |
349 case GLAND_TOYLAND: |
347 case GLAND_TOYLAND: |
350 this->RaiseWidget(_opt_newgame.landscape + GLAND_TEMPERATE); |
348 this->RaiseWidget(_settings_newgame.game_creation.landscape + GLAND_TEMPERATE); |
351 SetNewLandscapeType(widget - GLAND_TEMPERATE); |
349 SetNewLandscapeType(widget - GLAND_TEMPERATE); |
352 break; |
350 break; |
353 |
351 |
354 case GLAND_MAPSIZE_X_PULLDOWN: // Mapsize X |
352 case GLAND_MAPSIZE_X_PULLDOWN: // Mapsize X |
355 ShowDropDownList(this, BuildMapsizeDropDown(), _patches_newgame.map_x, GLAND_MAPSIZE_X_PULLDOWN); |
353 ShowDropDownList(this, BuildMapsizeDropDown(), _settings_newgame.game_creation.map_x, GLAND_MAPSIZE_X_PULLDOWN); |
356 break; |
354 break; |
357 |
355 |
358 case GLAND_MAPSIZE_Y_PULLDOWN: // Mapsize Y |
356 case GLAND_MAPSIZE_Y_PULLDOWN: // Mapsize Y |
359 ShowDropDownList(this, BuildMapsizeDropDown(), _patches_newgame.map_y, GLAND_MAPSIZE_Y_PULLDOWN); |
357 ShowDropDownList(this, BuildMapsizeDropDown(), _settings_newgame.game_creation.map_y, GLAND_MAPSIZE_Y_PULLDOWN); |
360 break; |
358 break; |
361 |
359 |
362 case GLAND_TOWN_PULLDOWN: // Number of towns |
360 case GLAND_TOWN_PULLDOWN: // Number of towns |
363 ShowDropDownMenu(this, _num_towns, _opt_newgame.diff.number_towns, GLAND_TOWN_PULLDOWN, 0, 0); |
361 ShowDropDownMenu(this, _num_towns, _settings_newgame.difficulty.number_towns, GLAND_TOWN_PULLDOWN, 0, 0); |
364 break; |
362 break; |
365 |
363 |
366 case GLAND_INDUSTRY_PULLDOWN: // Number of industries |
364 case GLAND_INDUSTRY_PULLDOWN: // Number of industries |
367 ShowDropDownMenu(this, _num_inds, _opt_newgame.diff.number_industries, GLAND_INDUSTRY_PULLDOWN, 0, 0); |
365 ShowDropDownMenu(this, _num_inds, _settings_newgame.difficulty.number_industries, GLAND_INDUSTRY_PULLDOWN, 0, 0); |
368 break; |
366 break; |
369 |
367 |
370 case GLAND_RANDOM_BUTTON: // Random seed |
368 case GLAND_RANDOM_BUTTON: // Random seed |
371 _patches_newgame.generation_seed = InteractiveRandom(); |
369 _settings_newgame.game_creation.generation_seed = InteractiveRandom(); |
372 snprintf(this->edit_str_buf, lengthof(this->edit_str_buf), "%u", _patches_newgame.generation_seed); |
370 snprintf(this->edit_str_buf, lengthof(this->edit_str_buf), "%u", _settings_newgame.game_creation.generation_seed); |
373 UpdateTextBufferSize(&this->text); |
371 UpdateTextBufferSize(&this->text); |
374 this->SetDirty(); |
372 this->SetDirty(); |
375 break; |
373 break; |
376 |
374 |
377 case GLAND_RANDOM_EDITBOX: // edit box for random seed |
375 case GLAND_RANDOM_EDITBOX: // edit box for random seed |
379 break; |
377 break; |
380 |
378 |
381 case GLAND_GENERATE_BUTTON: // Generate |
379 case GLAND_GENERATE_BUTTON: // Generate |
382 UpdatePatches(); |
380 UpdatePatches(); |
383 |
381 |
384 if (_patches.town_layout == TL_NO_ROADS) { |
382 if (_settings.economy.town_layout == TL_NO_ROADS) { |
385 ShowQuery( |
383 ShowQuery( |
386 STR_TOWN_LAYOUT_WARNING_CAPTION, |
384 STR_TOWN_LAYOUT_WARNING_CAPTION, |
387 STR_TOWN_LAYOUT_WARNING_MESSAGE, |
385 STR_TOWN_LAYOUT_WARNING_MESSAGE, |
388 this, |
386 this, |
389 LandscapeGenerationCallback); |
387 LandscapeGenerationCallback); |
390 } else if (mode == GLWP_HEIGHTMAP && |
388 } else if (mode == GLWP_HEIGHTMAP && |
391 (this->x * 2 < (1U << _patches_newgame.map_x) || |
389 (this->x * 2 < (1U << _settings_newgame.game_creation.map_x) || |
392 this->x / 2 > (1U << _patches_newgame.map_x) || |
390 this->x / 2 > (1U << _settings_newgame.game_creation.map_x) || |
393 this->y * 2 < (1U << _patches_newgame.map_y) || |
391 this->y * 2 < (1U << _settings_newgame.game_creation.map_y) || |
394 this->y / 2 > (1U << _patches_newgame.map_y))) { |
392 this->y / 2 > (1U << _settings_newgame.game_creation.map_y))) { |
395 ShowQuery( |
393 ShowQuery( |
396 STR_HEIGHTMAP_SCALE_WARNING_CAPTION, |
394 STR_HEIGHTMAP_SCALE_WARNING_CAPTION, |
397 STR_HEIGHTMAP_SCALE_WARNING_MESSAGE, |
395 STR_HEIGHTMAP_SCALE_WARNING_MESSAGE, |
398 this, |
396 this, |
399 LandscapeGenerationCallback); |
397 LandscapeGenerationCallback); |
407 /* Don't allow too fast scrolling */ |
405 /* Don't allow too fast scrolling */ |
408 if ((this->flags4 & WF_TIMEOUT_MASK) <= 2 << WF_TIMEOUT_SHL) { |
406 if ((this->flags4 & WF_TIMEOUT_MASK) <= 2 << WF_TIMEOUT_SHL) { |
409 this->HandleButtonClick(widget); |
407 this->HandleButtonClick(widget); |
410 this->SetDirty(); |
408 this->SetDirty(); |
411 |
409 |
412 _patches_newgame.starting_year = Clamp(_patches_newgame.starting_year + widget - GLAND_START_DATE_TEXT, MIN_YEAR, MAX_YEAR); |
410 _settings_newgame.game_creation.starting_year = Clamp(_settings_newgame.game_creation.starting_year + widget - GLAND_START_DATE_TEXT, MIN_YEAR, MAX_YEAR); |
413 } |
411 } |
414 _left_button_clicked = false; |
412 _left_button_clicked = false; |
415 break; |
413 break; |
416 |
414 |
417 case GLAND_START_DATE_TEXT: // Year text |
415 case GLAND_START_DATE_TEXT: // Year text |
418 this->widget_id = GLAND_START_DATE_TEXT; |
416 this->widget_id = GLAND_START_DATE_TEXT; |
419 SetDParam(0, _patches_newgame.starting_year); |
417 SetDParam(0, _settings_newgame.game_creation.starting_year); |
420 ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_START_DATE_QUERY_CAPT, 8, 100, this, CS_NUMERAL); |
418 ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_START_DATE_QUERY_CAPT, 8, 100, this, CS_NUMERAL); |
421 break; |
419 break; |
422 |
420 |
423 case GLAND_SNOW_LEVEL_DOWN: |
421 case GLAND_SNOW_LEVEL_DOWN: |
424 case GLAND_SNOW_LEVEL_UP: // Snow line buttons |
422 case GLAND_SNOW_LEVEL_UP: // Snow line buttons |
425 /* Don't allow too fast scrolling */ |
423 /* Don't allow too fast scrolling */ |
426 if ((this->flags4 & WF_TIMEOUT_MASK) <= 2 << WF_TIMEOUT_SHL) { |
424 if ((this->flags4 & WF_TIMEOUT_MASK) <= 2 << WF_TIMEOUT_SHL) { |
427 this->HandleButtonClick(widget); |
425 this->HandleButtonClick(widget); |
428 this->SetDirty(); |
426 this->SetDirty(); |
429 |
427 |
430 _patches_newgame.snow_line_height = Clamp(_patches_newgame.snow_line_height + widget - GLAND_SNOW_LEVEL_TEXT, 2, MAX_SNOWLINE_HEIGHT); |
428 _settings_newgame.game_creation.snow_line_height = Clamp(_settings_newgame.game_creation.snow_line_height + widget - GLAND_SNOW_LEVEL_TEXT, 2, MAX_SNOWLINE_HEIGHT); |
431 } |
429 } |
432 _left_button_clicked = false; |
430 _left_button_clicked = false; |
433 break; |
431 break; |
434 |
432 |
435 case GLAND_SNOW_LEVEL_TEXT: // Snow line text |
433 case GLAND_SNOW_LEVEL_TEXT: // Snow line text |
436 this->widget_id = GLAND_SNOW_LEVEL_TEXT; |
434 this->widget_id = GLAND_SNOW_LEVEL_TEXT; |
437 SetDParam(0, _patches_newgame.snow_line_height); |
435 SetDParam(0, _settings_newgame.game_creation.snow_line_height); |
438 ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_SNOW_LINE_QUERY_CAPT, 3, 100, this, CS_NUMERAL); |
436 ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_SNOW_LINE_QUERY_CAPT, 3, 100, this, CS_NUMERAL); |
439 break; |
437 break; |
440 |
438 |
441 case GLAND_TREE_PULLDOWN: // Tree placer |
439 case GLAND_TREE_PULLDOWN: // Tree placer |
442 ShowDropDownMenu(this, _tree_placer, _patches_newgame.tree_placer, GLAND_TREE_PULLDOWN, 0, 0); |
440 ShowDropDownMenu(this, _tree_placer, _settings_newgame.game_creation.tree_placer, GLAND_TREE_PULLDOWN, 0, 0); |
443 break; |
441 break; |
444 |
442 |
445 case GLAND_LANDSCAPE_PULLDOWN: // Landscape generator OR Heightmap rotation |
443 case GLAND_LANDSCAPE_PULLDOWN: // Landscape generator OR Heightmap rotation |
446 /* case GLAND_HEIGHTMAP_ROTATION_TEXT: case GLAND_HEIGHTMAP_ROTATION_PULLDOWN:*/ |
444 /* case GLAND_HEIGHTMAP_ROTATION_TEXT: case GLAND_HEIGHTMAP_ROTATION_PULLDOWN:*/ |
447 if (mode == GLWP_HEIGHTMAP) { |
445 if (mode == GLWP_HEIGHTMAP) { |
448 ShowDropDownMenu(this, _rotation, _patches_newgame.heightmap_rotation, GLAND_HEIGHTMAP_ROTATION_PULLDOWN, 0, 0); |
446 ShowDropDownMenu(this, _rotation, _settings_newgame.game_creation.heightmap_rotation, GLAND_HEIGHTMAP_ROTATION_PULLDOWN, 0, 0); |
449 } else { |
447 } else { |
450 ShowDropDownMenu(this, _landscape, _patches_newgame.land_generator, GLAND_LANDSCAPE_PULLDOWN, 0, 0); |
448 ShowDropDownMenu(this, _landscape, _settings_newgame.game_creation.land_generator, GLAND_LANDSCAPE_PULLDOWN, 0, 0); |
451 } |
449 } |
452 break; |
450 break; |
453 |
451 |
454 case GLAND_TERRAIN_PULLDOWN: // Terrain type |
452 case GLAND_TERRAIN_PULLDOWN: // Terrain type |
455 ShowDropDownMenu(this, _elevations, _opt_newgame.diff.terrain_type, GLAND_TERRAIN_PULLDOWN, 0, 0); |
453 ShowDropDownMenu(this, _elevations, _settings_newgame.difficulty.terrain_type, GLAND_TERRAIN_PULLDOWN, 0, 0); |
456 break; |
454 break; |
457 |
455 |
458 case GLAND_WATER_PULLDOWN: // Water quantity |
456 case GLAND_WATER_PULLDOWN: // Water quantity |
459 ShowDropDownMenu(this, _sea_lakes, _opt_newgame.diff.quantity_sea_lakes, GLAND_WATER_PULLDOWN, 0, 0); |
457 ShowDropDownMenu(this, _sea_lakes, _settings_newgame.difficulty.quantity_sea_lakes, GLAND_WATER_PULLDOWN, 0, 0); |
460 break; |
458 break; |
461 |
459 |
462 case GLAND_SMOOTHNESS_PULLDOWN: // Map smoothness |
460 case GLAND_SMOOTHNESS_PULLDOWN: // Map smoothness |
463 ShowDropDownMenu(this, _smoothness, _patches_newgame.tgen_smoothness, GLAND_SMOOTHNESS_PULLDOWN, 0, 0); |
461 ShowDropDownMenu(this, _smoothness, _settings_newgame.game_creation.tgen_smoothness, GLAND_SMOOTHNESS_PULLDOWN, 0, 0); |
464 break; |
462 break; |
465 } |
463 } |
466 } |
464 } |
467 |
465 |
468 virtual void OnMouseLoop() |
466 virtual void OnMouseLoop() |
477 /* the seed is unsigned, therefore atoi cannot be used. |
475 /* the seed is unsigned, therefore atoi cannot be used. |
478 * As 2^32 - 1 (MAX_UVALUE(uint32)) is a 'magic' value |
476 * As 2^32 - 1 (MAX_UVALUE(uint32)) is a 'magic' value |
479 * (use random seed) it should not be possible to be |
477 * (use random seed) it should not be possible to be |
480 * entered into the input field; the generate seed |
478 * entered into the input field; the generate seed |
481 * button can be used instead. */ |
479 * button can be used instead. */ |
482 _patches_newgame.generation_seed = minu(strtoul(this->edit_str_buf, NULL, sizeof(this->edit_str_buf) - 1), MAX_UVALUE(uint32) - 1); |
480 _settings_newgame.game_creation.generation_seed = minu(strtoul(this->edit_str_buf, NULL, sizeof(this->edit_str_buf) - 1), MAX_UVALUE(uint32) - 1); |
483 return state; |
481 return state; |
484 } |
482 } |
485 |
483 |
486 virtual void OnDropdownSelect(int widget, int index) |
484 virtual void OnDropdownSelect(int widget, int index) |
487 { |
485 { |
488 switch (widget) { |
486 switch (widget) { |
489 case GLAND_MAPSIZE_X_PULLDOWN: _patches_newgame.map_x = index; break; |
487 case GLAND_MAPSIZE_X_PULLDOWN: _settings_newgame.game_creation.map_x = index; break; |
490 case GLAND_MAPSIZE_Y_PULLDOWN: _patches_newgame.map_y = index; break; |
488 case GLAND_MAPSIZE_Y_PULLDOWN: _settings_newgame.game_creation.map_y = index; break; |
491 case GLAND_TREE_PULLDOWN: _patches_newgame.tree_placer = index; break; |
489 case GLAND_TREE_PULLDOWN: _settings_newgame.game_creation.tree_placer = index; break; |
492 case GLAND_SMOOTHNESS_PULLDOWN: _patches_newgame.tgen_smoothness = index; break; |
490 case GLAND_SMOOTHNESS_PULLDOWN: _settings_newgame.game_creation.tgen_smoothness = index; break; |
493 |
491 |
494 case GLAND_TOWN_PULLDOWN: |
492 case GLAND_TOWN_PULLDOWN: |
495 _opt_newgame.diff.number_towns = index; |
493 _settings_newgame.difficulty.number_towns = index; |
496 if (_opt_newgame.diff_level != 3) ShowErrorMessage(INVALID_STRING_ID, STR_DIFFICULTY_TO_CUSTOM, 0, 0); |
494 if (_settings_newgame.difficulty.diff_level != 3) ShowErrorMessage(INVALID_STRING_ID, STR_DIFFICULTY_TO_CUSTOM, 0, 0); |
497 DoCommandP(0, 2, _opt_newgame.diff.number_towns, NULL, CMD_CHANGE_DIFFICULTY_LEVEL); |
495 IConsoleSetPatchSetting("difficulty.number_towns", _settings_newgame.difficulty.number_towns); |
498 break; |
496 break; |
499 |
497 |
500 case GLAND_INDUSTRY_PULLDOWN: |
498 case GLAND_INDUSTRY_PULLDOWN: |
501 _opt_newgame.diff.number_industries = index; |
499 _settings_newgame.difficulty.number_industries = index; |
502 if (_opt_newgame.diff_level != 3) ShowErrorMessage(INVALID_STRING_ID, STR_DIFFICULTY_TO_CUSTOM, 0, 0); |
500 if (_settings_newgame.difficulty.diff_level != 3) ShowErrorMessage(INVALID_STRING_ID, STR_DIFFICULTY_TO_CUSTOM, 0, 0); |
503 DoCommandP(0, 3, _opt_newgame.diff.number_industries, NULL, CMD_CHANGE_DIFFICULTY_LEVEL); |
501 IConsoleSetPatchSetting("difficulty.number_industries", _settings_newgame.difficulty.number_industries); |
504 break; |
502 break; |
505 |
503 |
506 case GLAND_LANDSCAPE_PULLDOWN: |
504 case GLAND_LANDSCAPE_PULLDOWN: |
507 /* case GLAND_HEIGHTMAP_PULLDOWN: */ |
505 /* case GLAND_HEIGHTMAP_PULLDOWN: */ |
508 if (mode == GLWP_HEIGHTMAP) { |
506 if (mode == GLWP_HEIGHTMAP) { |
509 _patches_newgame.heightmap_rotation = index; |
507 _settings_newgame.game_creation.heightmap_rotation = index; |
510 } else { |
508 } else { |
511 _patches_newgame.land_generator = index; |
509 _settings_newgame.game_creation.land_generator = index; |
512 } |
510 } |
513 break; |
511 break; |
514 |
512 |
515 case GLAND_TERRAIN_PULLDOWN: |
513 case GLAND_TERRAIN_PULLDOWN: |
516 _opt_newgame.diff.terrain_type = index; |
514 _settings_newgame.difficulty.terrain_type = index; |
517 if (_opt_newgame.diff_level != 3) ShowErrorMessage(INVALID_STRING_ID, STR_DIFFICULTY_TO_CUSTOM, 0, 0); |
515 if (_settings_newgame.difficulty.diff_level != 3) ShowErrorMessage(INVALID_STRING_ID, STR_DIFFICULTY_TO_CUSTOM, 0, 0); |
518 DoCommandP(0, 12, _opt_newgame.diff.terrain_type, NULL, CMD_CHANGE_DIFFICULTY_LEVEL); |
516 IConsoleSetPatchSetting("difficulty.terrain_type", _settings_newgame.difficulty.terrain_type); |
519 break; |
517 break; |
520 |
518 |
521 case GLAND_WATER_PULLDOWN: |
519 case GLAND_WATER_PULLDOWN: |
522 _opt_newgame.diff.quantity_sea_lakes = index; |
520 _settings_newgame.difficulty.quantity_sea_lakes = index; |
523 if (_opt_newgame.diff_level != 3) ShowErrorMessage(INVALID_STRING_ID, STR_DIFFICULTY_TO_CUSTOM, 0, 0); |
521 if (_settings_newgame.difficulty.diff_level != 3) ShowErrorMessage(INVALID_STRING_ID, STR_DIFFICULTY_TO_CUSTOM, 0, 0); |
524 DoCommandP(0, 13, _opt_newgame.diff.quantity_sea_lakes, NULL, CMD_CHANGE_DIFFICULTY_LEVEL); |
522 IConsoleSetPatchSetting("difficulty.quantity_sea_lakes", _settings_newgame.difficulty.quantity_sea_lakes); |
525 break; |
523 break; |
526 } |
524 } |
527 this->SetDirty(); |
525 this->SetDirty(); |
528 } |
526 } |
529 |
527 |
642 { |
640 { |
643 uint widget_id; |
641 uint widget_id; |
644 |
642 |
645 CreateScenarioWindow(const WindowDesc *desc, WindowNumber window_number) : Window(desc, window_number) |
643 CreateScenarioWindow(const WindowDesc *desc, WindowNumber window_number) : Window(desc, window_number) |
646 { |
644 { |
647 this->LowerWidget(_opt_newgame.landscape + CSCEN_TEMPERATE); |
645 this->LowerWidget(_settings_newgame.game_creation.landscape + CSCEN_TEMPERATE); |
|
646 this->FindWindowPlacementAndResize(desc); |
648 } |
647 } |
649 |
648 |
650 virtual void OnPaint() |
649 virtual void OnPaint() |
651 { |
650 { |
652 this->SetWidgetDisabledState(CSCEN_START_DATE_DOWN, _patches_newgame.starting_year <= MIN_YEAR); |
651 this->SetWidgetDisabledState(CSCEN_START_DATE_DOWN, _settings_newgame.game_creation.starting_year <= MIN_YEAR); |
653 this->SetWidgetDisabledState(CSCEN_START_DATE_UP, _patches_newgame.starting_year >= MAX_YEAR); |
652 this->SetWidgetDisabledState(CSCEN_START_DATE_UP, _settings_newgame.game_creation.starting_year >= MAX_YEAR); |
654 this->SetWidgetDisabledState(CSCEN_FLAT_LAND_HEIGHT_DOWN, _patches_newgame.se_flat_world_height <= 0); |
653 this->SetWidgetDisabledState(CSCEN_FLAT_LAND_HEIGHT_DOWN, _settings_newgame.game_creation.se_flat_world_height <= 0); |
655 this->SetWidgetDisabledState(CSCEN_FLAT_LAND_HEIGHT_UP, _patches_newgame.se_flat_world_height >= MAX_TILE_HEIGHT); |
654 this->SetWidgetDisabledState(CSCEN_FLAT_LAND_HEIGHT_UP, _settings_newgame.game_creation.se_flat_world_height >= MAX_TILE_HEIGHT); |
656 |
655 |
657 this->SetWidgetLoweredState(CSCEN_TEMPERATE, _opt_newgame.landscape == LT_TEMPERATE); |
656 this->SetWidgetLoweredState(CSCEN_TEMPERATE, _settings_newgame.game_creation.landscape == LT_TEMPERATE); |
658 this->SetWidgetLoweredState(CSCEN_ARCTIC, _opt_newgame.landscape == LT_ARCTIC); |
657 this->SetWidgetLoweredState(CSCEN_ARCTIC, _settings_newgame.game_creation.landscape == LT_ARCTIC); |
659 this->SetWidgetLoweredState(CSCEN_TROPICAL, _opt_newgame.landscape == LT_TROPIC); |
658 this->SetWidgetLoweredState(CSCEN_TROPICAL, _settings_newgame.game_creation.landscape == LT_TROPIC); |
660 this->SetWidgetLoweredState(CSCEN_TOYLAND, _opt_newgame.landscape == LT_TOYLAND); |
659 this->SetWidgetLoweredState(CSCEN_TOYLAND, _settings_newgame.game_creation.landscape == LT_TOYLAND); |
661 |
660 |
662 /* Set parameters for widget text that requires them */ |
661 /* Set parameters for widget text that requires them */ |
663 SetDParam(0, ConvertYMDToDate(_patches_newgame.starting_year, 0, 1)); // CSCEN_START_DATE_TEXT |
662 SetDParam(0, ConvertYMDToDate(_settings_newgame.game_creation.starting_year, 0, 1)); // CSCEN_START_DATE_TEXT |
664 SetDParam(1, 1 << _patches_newgame.map_x); // CSCEN_MAPSIZE_X_PULLDOWN |
663 SetDParam(1, 1 << _settings_newgame.game_creation.map_x); // CSCEN_MAPSIZE_X_PULLDOWN |
665 SetDParam(2, 1 << _patches_newgame.map_y); // CSCEN_MAPSIZE_Y_PULLDOWN |
664 SetDParam(2, 1 << _settings_newgame.game_creation.map_y); // CSCEN_MAPSIZE_Y_PULLDOWN |
666 SetDParam(3, _patches_newgame.se_flat_world_height); // CSCEN_FLAT_LAND_HEIGHT_TEXT |
665 SetDParam(3, _settings_newgame.game_creation.se_flat_world_height); // CSCEN_FLAT_LAND_HEIGHT_TEXT |
667 |
666 |
668 this->DrawWidgets(); |
667 this->DrawWidgets(); |
669 } |
668 } |
670 |
669 |
671 virtual void OnClick(Point pt, int widget) |
670 virtual void OnClick(Point pt, int widget) |
700 /* Don't allow too fast scrolling */ |
699 /* Don't allow too fast scrolling */ |
701 if ((this->flags4 & WF_TIMEOUT_MASK) <= 2 << WF_TIMEOUT_SHL) { |
700 if ((this->flags4 & WF_TIMEOUT_MASK) <= 2 << WF_TIMEOUT_SHL) { |
702 this->HandleButtonClick(widget); |
701 this->HandleButtonClick(widget); |
703 this->SetDirty(); |
702 this->SetDirty(); |
704 |
703 |
705 _patches_newgame.starting_year = Clamp(_patches_newgame.starting_year + widget - CSCEN_START_DATE_TEXT, MIN_YEAR, MAX_YEAR); |
704 _settings_newgame.game_creation.starting_year = Clamp(_settings_newgame.game_creation.starting_year + widget - CSCEN_START_DATE_TEXT, MIN_YEAR, MAX_YEAR); |
706 } |
705 } |
707 _left_button_clicked = false; |
706 _left_button_clicked = false; |
708 break; |
707 break; |
709 |
708 |
710 case CSCEN_START_DATE_TEXT: // Year text |
709 case CSCEN_START_DATE_TEXT: // Year text |
711 this->widget_id = CSCEN_START_DATE_TEXT; |
710 this->widget_id = CSCEN_START_DATE_TEXT; |
712 SetDParam(0, _patches_newgame.starting_year); |
711 SetDParam(0, _settings_newgame.game_creation.starting_year); |
713 ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_START_DATE_QUERY_CAPT, 8, 100, this, CS_NUMERAL); |
712 ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_START_DATE_QUERY_CAPT, 8, 100, this, CS_NUMERAL); |
714 break; |
713 break; |
715 |
714 |
716 case CSCEN_FLAT_LAND_HEIGHT_DOWN: |
715 case CSCEN_FLAT_LAND_HEIGHT_DOWN: |
717 case CSCEN_FLAT_LAND_HEIGHT_UP: // Height level buttons |
716 case CSCEN_FLAT_LAND_HEIGHT_UP: // Height level buttons |
718 /* Don't allow too fast scrolling */ |
717 /* Don't allow too fast scrolling */ |
719 if ((this->flags4 & WF_TIMEOUT_MASK) <= 2 << WF_TIMEOUT_SHL) { |
718 if ((this->flags4 & WF_TIMEOUT_MASK) <= 2 << WF_TIMEOUT_SHL) { |
720 this->HandleButtonClick(widget); |
719 this->HandleButtonClick(widget); |
721 this->SetDirty(); |
720 this->SetDirty(); |
722 |
721 |
723 _patches_newgame.se_flat_world_height = Clamp(_patches_newgame.se_flat_world_height + widget - CSCEN_FLAT_LAND_HEIGHT_TEXT, 0, MAX_TILE_HEIGHT); |
722 _settings_newgame.game_creation.se_flat_world_height = Clamp(_settings_newgame.game_creation.se_flat_world_height + widget - CSCEN_FLAT_LAND_HEIGHT_TEXT, 0, MAX_TILE_HEIGHT); |
724 } |
723 } |
725 _left_button_clicked = false; |
724 _left_button_clicked = false; |
726 break; |
725 break; |
727 |
726 |
728 case CSCEN_FLAT_LAND_HEIGHT_TEXT: // Height level text |
727 case CSCEN_FLAT_LAND_HEIGHT_TEXT: // Height level text |
729 this->widget_id = CSCEN_FLAT_LAND_HEIGHT_TEXT; |
728 this->widget_id = CSCEN_FLAT_LAND_HEIGHT_TEXT; |
730 SetDParam(0, _patches_newgame.se_flat_world_height); |
729 SetDParam(0, _settings_newgame.game_creation.se_flat_world_height); |
731 ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_FLAT_WORLD_HEIGHT_QUERY_CAPT, 3, 100, this, CS_NUMERAL); |
730 ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_FLAT_WORLD_HEIGHT_QUERY_CAPT, 3, 100, this, CS_NUMERAL); |
732 break; |
731 break; |
733 } |
732 } |
734 } |
733 } |
735 |
734 |
736 virtual void OnDropdownSelect(int widget, int index) |
735 virtual void OnDropdownSelect(int widget, int index) |
737 { |
736 { |
738 switch (widget) { |
737 switch (widget) { |
739 case CSCEN_MAPSIZE_X_PULLDOWN: _patches_newgame.map_x = index; break; |
738 case CSCEN_MAPSIZE_X_PULLDOWN: _settings_newgame.game_creation.map_x = index; break; |
740 case CSCEN_MAPSIZE_Y_PULLDOWN: _patches_newgame.map_y = index; break; |
739 case CSCEN_MAPSIZE_Y_PULLDOWN: _settings_newgame.game_creation.map_y = index; break; |
741 } |
740 } |
742 this->SetDirty(); |
741 this->SetDirty(); |
743 } |
742 } |
744 |
743 |
745 virtual void OnQueryTextFinished(char *str) |
744 virtual void OnQueryTextFinished(char *str) |