254 |
254 |
255 GenerateLandscapeWindow(const WindowDesc *desc, WindowNumber number = 0) : QueryStringBaseWindow(desc, number) |
255 GenerateLandscapeWindow(const WindowDesc *desc, WindowNumber number = 0) : QueryStringBaseWindow(desc, number) |
256 { |
256 { |
257 this->LowerWidget(_opt_newgame.landscape + GLAND_TEMPERATE); |
257 this->LowerWidget(_opt_newgame.landscape + GLAND_TEMPERATE); |
258 |
258 |
259 snprintf(this->edit_str_buf, sizeof(this->edit_str_buf), "%u", _patches_newgame.generation_seed); |
259 snprintf(this->edit_str_buf, sizeof(this->edit_str_buf), "%u", _settings_newgame.game_creation.generation_seed); |
260 InitializeTextBuffer(&this->text, this->edit_str_buf, lengthof(this->edit_str_buf), 120); |
260 InitializeTextBuffer(&this->text, this->edit_str_buf, lengthof(this->edit_str_buf), 120); |
261 this->caption = STR_NULL; |
261 this->caption = STR_NULL; |
262 this->afilter = CS_NUMERAL; |
262 this->afilter = CS_NUMERAL; |
263 |
263 |
264 this->mode = (glwp_modes)this->window_number; |
264 this->mode = (glwp_modes)this->window_number; |
268 |
268 |
269 virtual void OnPaint() |
269 virtual void OnPaint() |
270 { |
270 { |
271 /* You can't select smoothness if not terragenesis */ |
271 /* You can't select smoothness if not terragenesis */ |
272 if (mode == GLWP_GENERATE) { |
272 if (mode == GLWP_GENERATE) { |
273 this->SetWidgetDisabledState(GLAND_SMOOTHNESS_PULLDOWN, _patches_newgame.land_generator == 0); |
273 this->SetWidgetDisabledState(GLAND_SMOOTHNESS_PULLDOWN, _settings_newgame.game_creation.land_generator == 0); |
274 } |
274 } |
275 /* Disable snowline if not hilly */ |
275 /* Disable snowline if not hilly */ |
276 this->SetWidgetDisabledState(GLAND_SNOW_LEVEL_TEXT, _opt_newgame.landscape != LT_ARCTIC); |
276 this->SetWidgetDisabledState(GLAND_SNOW_LEVEL_TEXT, _opt_newgame.landscape != LT_ARCTIC); |
277 /* Disable town, industry and trees in SE */ |
277 /* Disable town, industry and trees in SE */ |
278 this->SetWidgetDisabledState(GLAND_TOWN_PULLDOWN, _game_mode == GM_EDITOR); |
278 this->SetWidgetDisabledState(GLAND_TOWN_PULLDOWN, _game_mode == GM_EDITOR); |
279 this->SetWidgetDisabledState(GLAND_INDUSTRY_PULLDOWN, _game_mode == GM_EDITOR); |
279 this->SetWidgetDisabledState(GLAND_INDUSTRY_PULLDOWN, _game_mode == GM_EDITOR); |
280 this->SetWidgetDisabledState(GLAND_TREE_PULLDOWN, _game_mode == GM_EDITOR); |
280 this->SetWidgetDisabledState(GLAND_TREE_PULLDOWN, _game_mode == GM_EDITOR); |
281 |
281 |
282 this->SetWidgetDisabledState(GLAND_START_DATE_DOWN, _patches_newgame.starting_year <= MIN_YEAR); |
282 this->SetWidgetDisabledState(GLAND_START_DATE_DOWN, _settings_newgame.game_creation.starting_year <= MIN_YEAR); |
283 this->SetWidgetDisabledState(GLAND_START_DATE_UP, _patches_newgame.starting_year >= MAX_YEAR); |
283 this->SetWidgetDisabledState(GLAND_START_DATE_UP, _settings_newgame.game_creation.starting_year >= MAX_YEAR); |
284 this->SetWidgetDisabledState(GLAND_SNOW_LEVEL_DOWN, _patches_newgame.snow_line_height <= 2 || _opt_newgame.landscape != LT_ARCTIC); |
284 this->SetWidgetDisabledState(GLAND_SNOW_LEVEL_DOWN, _settings_newgame.game_creation.snow_line_height <= 2 || _opt_newgame.landscape != LT_ARCTIC); |
285 this->SetWidgetDisabledState(GLAND_SNOW_LEVEL_UP, _patches_newgame.snow_line_height >= MAX_SNOWLINE_HEIGHT || _opt_newgame.landscape != LT_ARCTIC); |
285 this->SetWidgetDisabledState(GLAND_SNOW_LEVEL_UP, _settings_newgame.game_creation.snow_line_height >= MAX_SNOWLINE_HEIGHT || _opt_newgame.landscape != LT_ARCTIC); |
286 |
286 |
287 this->SetWidgetLoweredState(GLAND_TEMPERATE, _opt_newgame.landscape == LT_TEMPERATE); |
287 this->SetWidgetLoweredState(GLAND_TEMPERATE, _opt_newgame.landscape == LT_TEMPERATE); |
288 this->SetWidgetLoweredState(GLAND_ARCTIC, _opt_newgame.landscape == LT_ARCTIC); |
288 this->SetWidgetLoweredState(GLAND_ARCTIC, _opt_newgame.landscape == LT_ARCTIC); |
289 this->SetWidgetLoweredState(GLAND_TROPICAL, _opt_newgame.landscape == LT_TROPIC); |
289 this->SetWidgetLoweredState(GLAND_TROPICAL, _opt_newgame.landscape == LT_TROPIC); |
290 this->SetWidgetLoweredState(GLAND_TOYLAND, _opt_newgame.landscape == LT_TOYLAND); |
290 this->SetWidgetLoweredState(GLAND_TOYLAND, _opt_newgame.landscape == LT_TOYLAND); |
296 this->widget[GLAND_TOWN_PULLDOWN].data = _num_towns[_opt_newgame.diff.number_towns]; |
296 this->widget[GLAND_TOWN_PULLDOWN].data = _num_towns[_opt_newgame.diff.number_towns]; |
297 this->widget[GLAND_INDUSTRY_PULLDOWN].data = _num_inds[_opt_newgame.diff.number_industries]; |
297 this->widget[GLAND_INDUSTRY_PULLDOWN].data = _num_inds[_opt_newgame.diff.number_industries]; |
298 } |
298 } |
299 |
299 |
300 if (mode == GLWP_GENERATE) { |
300 if (mode == GLWP_GENERATE) { |
301 this->widget[GLAND_LANDSCAPE_PULLDOWN].data = _landscape[_patches_newgame.land_generator]; |
301 this->widget[GLAND_LANDSCAPE_PULLDOWN].data = _landscape[_settings_newgame.game_creation.land_generator]; |
302 this->widget[GLAND_TREE_PULLDOWN].data = _tree_placer[_patches_newgame.tree_placer]; |
302 this->widget[GLAND_TREE_PULLDOWN].data = _tree_placer[_settings_newgame.game_creation.tree_placer]; |
303 this->widget[GLAND_TERRAIN_PULLDOWN].data = _elevations[_opt_newgame.diff.terrain_type]; |
303 this->widget[GLAND_TERRAIN_PULLDOWN].data = _elevations[_opt_newgame.diff.terrain_type]; |
304 this->widget[GLAND_WATER_PULLDOWN].data = _sea_lakes[_opt_newgame.diff.quantity_sea_lakes]; |
304 this->widget[GLAND_WATER_PULLDOWN].data = _sea_lakes[_opt_newgame.diff.quantity_sea_lakes]; |
305 this->widget[GLAND_SMOOTHNESS_PULLDOWN].data = _smoothness[_patches_newgame.tgen_smoothness]; |
305 this->widget[GLAND_SMOOTHNESS_PULLDOWN].data = _smoothness[_settings_newgame.game_creation.tgen_smoothness]; |
306 } else { |
306 } else { |
307 this->widget[GLAND_TREE_PULLDOWN].data = _tree_placer[_patches_newgame.tree_placer]; |
307 this->widget[GLAND_TREE_PULLDOWN].data = _tree_placer[_settings_newgame.game_creation.tree_placer]; |
308 this->widget[GLAND_HEIGHTMAP_ROTATION_PULLDOWN].data = _rotation[_patches_newgame.heightmap_rotation]; |
308 this->widget[GLAND_HEIGHTMAP_ROTATION_PULLDOWN].data = _rotation[_settings_newgame.game_creation.heightmap_rotation]; |
309 } |
309 } |
310 |
310 |
311 /* Set parameters for widget text that requires them. */ |
311 /* Set parameters for widget text that requires them. */ |
312 SetDParam(0, ConvertYMDToDate(_patches_newgame.starting_year, 0, 1)); // GLAND_START_DATE_TEXT |
312 SetDParam(0, ConvertYMDToDate(_settings_newgame.game_creation.starting_year, 0, 1)); // GLAND_START_DATE_TEXT |
313 SetDParam(1, 1 << _patches_newgame.map_x); // GLAND_MAPSIZE_X_PULLDOWN |
313 SetDParam(1, 1 << _settings_newgame.game_creation.map_x); // GLAND_MAPSIZE_X_PULLDOWN |
314 SetDParam(2, 1 << _patches_newgame.map_y); // GLAND_MAPSIZE_Y_PULLDOWN |
314 SetDParam(2, 1 << _settings_newgame.game_creation.map_y); // GLAND_MAPSIZE_Y_PULLDOWN |
315 SetDParam(3, _patches_newgame.snow_line_height); // GLAND_SNOW_LEVEL_TEXT |
315 SetDParam(3, _settings_newgame.game_creation.snow_line_height); // GLAND_SNOW_LEVEL_TEXT |
316 |
316 |
317 this->DrawWidgets(); |
317 this->DrawWidgets(); |
318 |
318 |
319 this->DrawEditBox(GLAND_RANDOM_EDITBOX); |
319 this->DrawEditBox(GLAND_RANDOM_EDITBOX); |
320 |
320 |
321 if (mode != GLWP_GENERATE) { |
321 if (mode != GLWP_GENERATE) { |
322 char buffer[512]; |
322 char buffer[512]; |
323 |
323 |
324 if (_patches_newgame.heightmap_rotation == HM_CLOCKWISE) { |
324 if (_settings_newgame.game_creation.heightmap_rotation == HM_CLOCKWISE) { |
325 SetDParam(0, this->y); |
325 SetDParam(0, this->y); |
326 SetDParam(1, this->x); |
326 SetDParam(1, this->x); |
327 } else { |
327 } else { |
328 SetDParam(0, this->x); |
328 SetDParam(0, this->x); |
329 SetDParam(1, this->y); |
329 SetDParam(1, this->y); |
349 this->RaiseWidget(_opt_newgame.landscape + GLAND_TEMPERATE); |
349 this->RaiseWidget(_opt_newgame.landscape + GLAND_TEMPERATE); |
350 SetNewLandscapeType(widget - GLAND_TEMPERATE); |
350 SetNewLandscapeType(widget - GLAND_TEMPERATE); |
351 break; |
351 break; |
352 |
352 |
353 case GLAND_MAPSIZE_X_PULLDOWN: // Mapsize X |
353 case GLAND_MAPSIZE_X_PULLDOWN: // Mapsize X |
354 ShowDropDownList(this, BuildMapsizeDropDown(), _patches_newgame.map_x, GLAND_MAPSIZE_X_PULLDOWN); |
354 ShowDropDownList(this, BuildMapsizeDropDown(), _settings_newgame.game_creation.map_x, GLAND_MAPSIZE_X_PULLDOWN); |
355 break; |
355 break; |
356 |
356 |
357 case GLAND_MAPSIZE_Y_PULLDOWN: // Mapsize Y |
357 case GLAND_MAPSIZE_Y_PULLDOWN: // Mapsize Y |
358 ShowDropDownList(this, BuildMapsizeDropDown(), _patches_newgame.map_y, GLAND_MAPSIZE_Y_PULLDOWN); |
358 ShowDropDownList(this, BuildMapsizeDropDown(), _settings_newgame.game_creation.map_y, GLAND_MAPSIZE_Y_PULLDOWN); |
359 break; |
359 break; |
360 |
360 |
361 case GLAND_TOWN_PULLDOWN: // Number of towns |
361 case GLAND_TOWN_PULLDOWN: // Number of towns |
362 ShowDropDownMenu(this, _num_towns, _opt_newgame.diff.number_towns, GLAND_TOWN_PULLDOWN, 0, 0); |
362 ShowDropDownMenu(this, _num_towns, _opt_newgame.diff.number_towns, GLAND_TOWN_PULLDOWN, 0, 0); |
363 break; |
363 break; |
365 case GLAND_INDUSTRY_PULLDOWN: // Number of industries |
365 case GLAND_INDUSTRY_PULLDOWN: // Number of industries |
366 ShowDropDownMenu(this, _num_inds, _opt_newgame.diff.number_industries, GLAND_INDUSTRY_PULLDOWN, 0, 0); |
366 ShowDropDownMenu(this, _num_inds, _opt_newgame.diff.number_industries, GLAND_INDUSTRY_PULLDOWN, 0, 0); |
367 break; |
367 break; |
368 |
368 |
369 case GLAND_RANDOM_BUTTON: // Random seed |
369 case GLAND_RANDOM_BUTTON: // Random seed |
370 _patches_newgame.generation_seed = InteractiveRandom(); |
370 _settings_newgame.game_creation.generation_seed = InteractiveRandom(); |
371 snprintf(this->edit_str_buf, lengthof(this->edit_str_buf), "%u", _patches_newgame.generation_seed); |
371 snprintf(this->edit_str_buf, lengthof(this->edit_str_buf), "%u", _settings_newgame.game_creation.generation_seed); |
372 UpdateTextBufferSize(&this->text); |
372 UpdateTextBufferSize(&this->text); |
373 this->SetDirty(); |
373 this->SetDirty(); |
374 break; |
374 break; |
375 |
375 |
376 case GLAND_RANDOM_EDITBOX: // edit box for random seed |
376 case GLAND_RANDOM_EDITBOX: // edit box for random seed |
378 break; |
378 break; |
379 |
379 |
380 case GLAND_GENERATE_BUTTON: // Generate |
380 case GLAND_GENERATE_BUTTON: // Generate |
381 UpdatePatches(); |
381 UpdatePatches(); |
382 |
382 |
383 if (_patches.town_layout == TL_NO_ROADS) { |
383 if (_settings.economy.town_layout == TL_NO_ROADS) { |
384 ShowQuery( |
384 ShowQuery( |
385 STR_TOWN_LAYOUT_WARNING_CAPTION, |
385 STR_TOWN_LAYOUT_WARNING_CAPTION, |
386 STR_TOWN_LAYOUT_WARNING_MESSAGE, |
386 STR_TOWN_LAYOUT_WARNING_MESSAGE, |
387 this, |
387 this, |
388 LandscapeGenerationCallback); |
388 LandscapeGenerationCallback); |
389 } else if (mode == GLWP_HEIGHTMAP && |
389 } else if (mode == GLWP_HEIGHTMAP && |
390 (this->x * 2 < (1U << _patches_newgame.map_x) || |
390 (this->x * 2 < (1U << _settings_newgame.game_creation.map_x) || |
391 this->x / 2 > (1U << _patches_newgame.map_x) || |
391 this->x / 2 > (1U << _settings_newgame.game_creation.map_x) || |
392 this->y * 2 < (1U << _patches_newgame.map_y) || |
392 this->y * 2 < (1U << _settings_newgame.game_creation.map_y) || |
393 this->y / 2 > (1U << _patches_newgame.map_y))) { |
393 this->y / 2 > (1U << _settings_newgame.game_creation.map_y))) { |
394 ShowQuery( |
394 ShowQuery( |
395 STR_HEIGHTMAP_SCALE_WARNING_CAPTION, |
395 STR_HEIGHTMAP_SCALE_WARNING_CAPTION, |
396 STR_HEIGHTMAP_SCALE_WARNING_MESSAGE, |
396 STR_HEIGHTMAP_SCALE_WARNING_MESSAGE, |
397 this, |
397 this, |
398 LandscapeGenerationCallback); |
398 LandscapeGenerationCallback); |
406 /* Don't allow too fast scrolling */ |
406 /* Don't allow too fast scrolling */ |
407 if ((this->flags4 & WF_TIMEOUT_MASK) <= 2 << WF_TIMEOUT_SHL) { |
407 if ((this->flags4 & WF_TIMEOUT_MASK) <= 2 << WF_TIMEOUT_SHL) { |
408 this->HandleButtonClick(widget); |
408 this->HandleButtonClick(widget); |
409 this->SetDirty(); |
409 this->SetDirty(); |
410 |
410 |
411 _patches_newgame.starting_year = Clamp(_patches_newgame.starting_year + widget - GLAND_START_DATE_TEXT, MIN_YEAR, MAX_YEAR); |
411 _settings_newgame.game_creation.starting_year = Clamp(_settings_newgame.game_creation.starting_year + widget - GLAND_START_DATE_TEXT, MIN_YEAR, MAX_YEAR); |
412 } |
412 } |
413 _left_button_clicked = false; |
413 _left_button_clicked = false; |
414 break; |
414 break; |
415 |
415 |
416 case GLAND_START_DATE_TEXT: // Year text |
416 case GLAND_START_DATE_TEXT: // Year text |
417 this->widget_id = GLAND_START_DATE_TEXT; |
417 this->widget_id = GLAND_START_DATE_TEXT; |
418 SetDParam(0, _patches_newgame.starting_year); |
418 SetDParam(0, _settings_newgame.game_creation.starting_year); |
419 ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_START_DATE_QUERY_CAPT, 8, 100, this, CS_NUMERAL); |
419 ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_START_DATE_QUERY_CAPT, 8, 100, this, CS_NUMERAL); |
420 break; |
420 break; |
421 |
421 |
422 case GLAND_SNOW_LEVEL_DOWN: |
422 case GLAND_SNOW_LEVEL_DOWN: |
423 case GLAND_SNOW_LEVEL_UP: // Snow line buttons |
423 case GLAND_SNOW_LEVEL_UP: // Snow line buttons |
424 /* Don't allow too fast scrolling */ |
424 /* Don't allow too fast scrolling */ |
425 if ((this->flags4 & WF_TIMEOUT_MASK) <= 2 << WF_TIMEOUT_SHL) { |
425 if ((this->flags4 & WF_TIMEOUT_MASK) <= 2 << WF_TIMEOUT_SHL) { |
426 this->HandleButtonClick(widget); |
426 this->HandleButtonClick(widget); |
427 this->SetDirty(); |
427 this->SetDirty(); |
428 |
428 |
429 _patches_newgame.snow_line_height = Clamp(_patches_newgame.snow_line_height + widget - GLAND_SNOW_LEVEL_TEXT, 2, MAX_SNOWLINE_HEIGHT); |
429 _settings_newgame.game_creation.snow_line_height = Clamp(_settings_newgame.game_creation.snow_line_height + widget - GLAND_SNOW_LEVEL_TEXT, 2, MAX_SNOWLINE_HEIGHT); |
430 } |
430 } |
431 _left_button_clicked = false; |
431 _left_button_clicked = false; |
432 break; |
432 break; |
433 |
433 |
434 case GLAND_SNOW_LEVEL_TEXT: // Snow line text |
434 case GLAND_SNOW_LEVEL_TEXT: // Snow line text |
435 this->widget_id = GLAND_SNOW_LEVEL_TEXT; |
435 this->widget_id = GLAND_SNOW_LEVEL_TEXT; |
436 SetDParam(0, _patches_newgame.snow_line_height); |
436 SetDParam(0, _settings_newgame.game_creation.snow_line_height); |
437 ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_SNOW_LINE_QUERY_CAPT, 3, 100, this, CS_NUMERAL); |
437 ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_SNOW_LINE_QUERY_CAPT, 3, 100, this, CS_NUMERAL); |
438 break; |
438 break; |
439 |
439 |
440 case GLAND_TREE_PULLDOWN: // Tree placer |
440 case GLAND_TREE_PULLDOWN: // Tree placer |
441 ShowDropDownMenu(this, _tree_placer, _patches_newgame.tree_placer, GLAND_TREE_PULLDOWN, 0, 0); |
441 ShowDropDownMenu(this, _tree_placer, _settings_newgame.game_creation.tree_placer, GLAND_TREE_PULLDOWN, 0, 0); |
442 break; |
442 break; |
443 |
443 |
444 case GLAND_LANDSCAPE_PULLDOWN: // Landscape generator OR Heightmap rotation |
444 case GLAND_LANDSCAPE_PULLDOWN: // Landscape generator OR Heightmap rotation |
445 /* case GLAND_HEIGHTMAP_ROTATION_TEXT: case GLAND_HEIGHTMAP_ROTATION_PULLDOWN:*/ |
445 /* case GLAND_HEIGHTMAP_ROTATION_TEXT: case GLAND_HEIGHTMAP_ROTATION_PULLDOWN:*/ |
446 if (mode == GLWP_HEIGHTMAP) { |
446 if (mode == GLWP_HEIGHTMAP) { |
447 ShowDropDownMenu(this, _rotation, _patches_newgame.heightmap_rotation, GLAND_HEIGHTMAP_ROTATION_PULLDOWN, 0, 0); |
447 ShowDropDownMenu(this, _rotation, _settings_newgame.game_creation.heightmap_rotation, GLAND_HEIGHTMAP_ROTATION_PULLDOWN, 0, 0); |
448 } else { |
448 } else { |
449 ShowDropDownMenu(this, _landscape, _patches_newgame.land_generator, GLAND_LANDSCAPE_PULLDOWN, 0, 0); |
449 ShowDropDownMenu(this, _landscape, _settings_newgame.game_creation.land_generator, GLAND_LANDSCAPE_PULLDOWN, 0, 0); |
450 } |
450 } |
451 break; |
451 break; |
452 |
452 |
453 case GLAND_TERRAIN_PULLDOWN: // Terrain type |
453 case GLAND_TERRAIN_PULLDOWN: // Terrain type |
454 ShowDropDownMenu(this, _elevations, _opt_newgame.diff.terrain_type, GLAND_TERRAIN_PULLDOWN, 0, 0); |
454 ShowDropDownMenu(this, _elevations, _opt_newgame.diff.terrain_type, GLAND_TERRAIN_PULLDOWN, 0, 0); |
457 case GLAND_WATER_PULLDOWN: // Water quantity |
457 case GLAND_WATER_PULLDOWN: // Water quantity |
458 ShowDropDownMenu(this, _sea_lakes, _opt_newgame.diff.quantity_sea_lakes, GLAND_WATER_PULLDOWN, 0, 0); |
458 ShowDropDownMenu(this, _sea_lakes, _opt_newgame.diff.quantity_sea_lakes, GLAND_WATER_PULLDOWN, 0, 0); |
459 break; |
459 break; |
460 |
460 |
461 case GLAND_SMOOTHNESS_PULLDOWN: // Map smoothness |
461 case GLAND_SMOOTHNESS_PULLDOWN: // Map smoothness |
462 ShowDropDownMenu(this, _smoothness, _patches_newgame.tgen_smoothness, GLAND_SMOOTHNESS_PULLDOWN, 0, 0); |
462 ShowDropDownMenu(this, _smoothness, _settings_newgame.game_creation.tgen_smoothness, GLAND_SMOOTHNESS_PULLDOWN, 0, 0); |
463 break; |
463 break; |
464 } |
464 } |
465 } |
465 } |
466 |
466 |
467 virtual void OnMouseLoop() |
467 virtual void OnMouseLoop() |
476 /* the seed is unsigned, therefore atoi cannot be used. |
476 /* the seed is unsigned, therefore atoi cannot be used. |
477 * As 2^32 - 1 (MAX_UVALUE(uint32)) is a 'magic' value |
477 * As 2^32 - 1 (MAX_UVALUE(uint32)) is a 'magic' value |
478 * (use random seed) it should not be possible to be |
478 * (use random seed) it should not be possible to be |
479 * entered into the input field; the generate seed |
479 * entered into the input field; the generate seed |
480 * button can be used instead. */ |
480 * button can be used instead. */ |
481 _patches_newgame.generation_seed = minu(strtoul(this->edit_str_buf, NULL, sizeof(this->edit_str_buf) - 1), MAX_UVALUE(uint32) - 1); |
481 _settings_newgame.game_creation.generation_seed = minu(strtoul(this->edit_str_buf, NULL, sizeof(this->edit_str_buf) - 1), MAX_UVALUE(uint32) - 1); |
482 return state; |
482 return state; |
483 } |
483 } |
484 |
484 |
485 virtual void OnDropdownSelect(int widget, int index) |
485 virtual void OnDropdownSelect(int widget, int index) |
486 { |
486 { |
487 switch (widget) { |
487 switch (widget) { |
488 case GLAND_MAPSIZE_X_PULLDOWN: _patches_newgame.map_x = index; break; |
488 case GLAND_MAPSIZE_X_PULLDOWN: _settings_newgame.game_creation.map_x = index; break; |
489 case GLAND_MAPSIZE_Y_PULLDOWN: _patches_newgame.map_y = index; break; |
489 case GLAND_MAPSIZE_Y_PULLDOWN: _settings_newgame.game_creation.map_y = index; break; |
490 case GLAND_TREE_PULLDOWN: _patches_newgame.tree_placer = index; break; |
490 case GLAND_TREE_PULLDOWN: _settings_newgame.game_creation.tree_placer = index; break; |
491 case GLAND_SMOOTHNESS_PULLDOWN: _patches_newgame.tgen_smoothness = index; break; |
491 case GLAND_SMOOTHNESS_PULLDOWN: _settings_newgame.game_creation.tgen_smoothness = index; break; |
492 |
492 |
493 case GLAND_TOWN_PULLDOWN: |
493 case GLAND_TOWN_PULLDOWN: |
494 _opt_newgame.diff.number_towns = index; |
494 _opt_newgame.diff.number_towns = index; |
495 if (_opt_newgame.diff_level != 3) ShowErrorMessage(INVALID_STRING_ID, STR_DIFFICULTY_TO_CUSTOM, 0, 0); |
495 if (_opt_newgame.diff_level != 3) ShowErrorMessage(INVALID_STRING_ID, STR_DIFFICULTY_TO_CUSTOM, 0, 0); |
496 DoCommandP(0, 2, _opt_newgame.diff.number_towns, NULL, CMD_CHANGE_DIFFICULTY_LEVEL); |
496 DoCommandP(0, 2, _opt_newgame.diff.number_towns, NULL, CMD_CHANGE_DIFFICULTY_LEVEL); |
532 int32 value = atoi(str); |
532 int32 value = atoi(str); |
533 |
533 |
534 switch (this->widget_id) { |
534 switch (this->widget_id) { |
535 case GLAND_START_DATE_TEXT: |
535 case GLAND_START_DATE_TEXT: |
536 this->InvalidateWidget(GLAND_START_DATE_TEXT); |
536 this->InvalidateWidget(GLAND_START_DATE_TEXT); |
537 _patches_newgame.starting_year = Clamp(value, MIN_YEAR, MAX_YEAR); |
537 _settings_newgame.game_creation.starting_year = Clamp(value, MIN_YEAR, MAX_YEAR); |
538 break; |
538 break; |
539 |
539 |
540 case GLAND_SNOW_LEVEL_TEXT: |
540 case GLAND_SNOW_LEVEL_TEXT: |
541 this->InvalidateWidget(GLAND_SNOW_LEVEL_TEXT); |
541 this->InvalidateWidget(GLAND_SNOW_LEVEL_TEXT); |
542 _patches_newgame.snow_line_height = Clamp(value, 2, MAX_SNOWLINE_HEIGHT); |
542 _settings_newgame.game_creation.snow_line_height = Clamp(value, 2, MAX_SNOWLINE_HEIGHT); |
543 break; |
543 break; |
544 } |
544 } |
545 |
545 |
546 this->SetDirty(); |
546 this->SetDirty(); |
547 } |
547 } |
598 _ShowGenerateLandscape(GLWP_HEIGHTMAP); |
598 _ShowGenerateLandscape(GLWP_HEIGHTMAP); |
599 } |
599 } |
600 |
600 |
601 void StartScenarioEditor() |
601 void StartScenarioEditor() |
602 { |
602 { |
603 if (_patches_newgame.town_layout == TL_NO_ROADS) { |
603 if (_settings_newgame.economy.town_layout == TL_NO_ROADS) { |
604 _patches_newgame.town_layout = TL_ORIGINAL; |
604 _settings_newgame.economy.town_layout = TL_ORIGINAL; |
605 } |
605 } |
606 |
606 |
607 StartGeneratingLandscape(GLWP_SCENARIO); |
607 StartGeneratingLandscape(GLWP_SCENARIO); |
608 } |
608 } |
609 |
609 |
610 void StartNewGameWithoutGUI(uint seed) |
610 void StartNewGameWithoutGUI(uint seed) |
611 { |
611 { |
612 /* GenerateWorld takes care of the possible GENERATE_NEW_SEED value in 'seed' */ |
612 /* GenerateWorld takes care of the possible GENERATE_NEW_SEED value in 'seed' */ |
613 _patches_newgame.generation_seed = seed; |
613 _settings_newgame.game_creation.generation_seed = seed; |
614 |
614 |
615 StartGeneratingLandscape(GLWP_GENERATE); |
615 StartGeneratingLandscape(GLWP_GENERATE); |
616 } |
616 } |
617 |
617 |
618 enum CreateScenarioWindowWidgets { |
618 enum CreateScenarioWindowWidgets { |
647 this->FindWindowPlacementAndResize(desc); |
647 this->FindWindowPlacementAndResize(desc); |
648 } |
648 } |
649 |
649 |
650 virtual void OnPaint() |
650 virtual void OnPaint() |
651 { |
651 { |
652 this->SetWidgetDisabledState(CSCEN_START_DATE_DOWN, _patches_newgame.starting_year <= MIN_YEAR); |
652 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); |
653 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); |
654 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); |
655 this->SetWidgetDisabledState(CSCEN_FLAT_LAND_HEIGHT_UP, _settings_newgame.game_creation.se_flat_world_height >= MAX_TILE_HEIGHT); |
656 |
656 |
657 this->SetWidgetLoweredState(CSCEN_TEMPERATE, _opt_newgame.landscape == LT_TEMPERATE); |
657 this->SetWidgetLoweredState(CSCEN_TEMPERATE, _opt_newgame.landscape == LT_TEMPERATE); |
658 this->SetWidgetLoweredState(CSCEN_ARCTIC, _opt_newgame.landscape == LT_ARCTIC); |
658 this->SetWidgetLoweredState(CSCEN_ARCTIC, _opt_newgame.landscape == LT_ARCTIC); |
659 this->SetWidgetLoweredState(CSCEN_TROPICAL, _opt_newgame.landscape == LT_TROPIC); |
659 this->SetWidgetLoweredState(CSCEN_TROPICAL, _opt_newgame.landscape == LT_TROPIC); |
660 this->SetWidgetLoweredState(CSCEN_TOYLAND, _opt_newgame.landscape == LT_TOYLAND); |
660 this->SetWidgetLoweredState(CSCEN_TOYLAND, _opt_newgame.landscape == LT_TOYLAND); |
661 |
661 |
662 /* Set parameters for widget text that requires them */ |
662 /* Set parameters for widget text that requires them */ |
663 SetDParam(0, ConvertYMDToDate(_patches_newgame.starting_year, 0, 1)); // CSCEN_START_DATE_TEXT |
663 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 |
664 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 |
665 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 |
666 SetDParam(3, _settings_newgame.game_creation.se_flat_world_height); // CSCEN_FLAT_LAND_HEIGHT_TEXT |
667 |
667 |
668 this->DrawWidgets(); |
668 this->DrawWidgets(); |
669 } |
669 } |
670 |
670 |
671 virtual void OnClick(Point pt, int widget) |
671 virtual void OnClick(Point pt, int widget) |
678 this->RaiseWidget(_opt_newgame.landscape + CSCEN_TEMPERATE); |
678 this->RaiseWidget(_opt_newgame.landscape + CSCEN_TEMPERATE); |
679 SetNewLandscapeType(widget - CSCEN_TEMPERATE); |
679 SetNewLandscapeType(widget - CSCEN_TEMPERATE); |
680 break; |
680 break; |
681 |
681 |
682 case CSCEN_MAPSIZE_X_PULLDOWN: // Mapsize X |
682 case CSCEN_MAPSIZE_X_PULLDOWN: // Mapsize X |
683 ShowDropDownList(this, BuildMapsizeDropDown(), _patches_newgame.map_x, CSCEN_MAPSIZE_X_PULLDOWN); |
683 ShowDropDownList(this, BuildMapsizeDropDown(), _settings_newgame.game_creation.map_x, CSCEN_MAPSIZE_X_PULLDOWN); |
684 break; |
684 break; |
685 |
685 |
686 case CSCEN_MAPSIZE_Y_PULLDOWN: // Mapsize Y |
686 case CSCEN_MAPSIZE_Y_PULLDOWN: // Mapsize Y |
687 ShowDropDownList(this, BuildMapsizeDropDown(), _patches_newgame.map_y, CSCEN_MAPSIZE_Y_PULLDOWN); |
687 ShowDropDownList(this, BuildMapsizeDropDown(), _settings_newgame.game_creation.map_y, CSCEN_MAPSIZE_Y_PULLDOWN); |
688 break; |
688 break; |
689 |
689 |
690 case CSCEN_EMPTY_WORLD: // Empty world / flat world |
690 case CSCEN_EMPTY_WORLD: // Empty world / flat world |
691 StartGeneratingLandscape(GLWP_SCENARIO); |
691 StartGeneratingLandscape(GLWP_SCENARIO); |
692 break; |
692 break; |
700 /* Don't allow too fast scrolling */ |
700 /* Don't allow too fast scrolling */ |
701 if ((this->flags4 & WF_TIMEOUT_MASK) <= 2 << WF_TIMEOUT_SHL) { |
701 if ((this->flags4 & WF_TIMEOUT_MASK) <= 2 << WF_TIMEOUT_SHL) { |
702 this->HandleButtonClick(widget); |
702 this->HandleButtonClick(widget); |
703 this->SetDirty(); |
703 this->SetDirty(); |
704 |
704 |
705 _patches_newgame.starting_year = Clamp(_patches_newgame.starting_year + widget - CSCEN_START_DATE_TEXT, MIN_YEAR, MAX_YEAR); |
705 _settings_newgame.game_creation.starting_year = Clamp(_settings_newgame.game_creation.starting_year + widget - CSCEN_START_DATE_TEXT, MIN_YEAR, MAX_YEAR); |
706 } |
706 } |
707 _left_button_clicked = false; |
707 _left_button_clicked = false; |
708 break; |
708 break; |
709 |
709 |
710 case CSCEN_START_DATE_TEXT: // Year text |
710 case CSCEN_START_DATE_TEXT: // Year text |
711 this->widget_id = CSCEN_START_DATE_TEXT; |
711 this->widget_id = CSCEN_START_DATE_TEXT; |
712 SetDParam(0, _patches_newgame.starting_year); |
712 SetDParam(0, _settings_newgame.game_creation.starting_year); |
713 ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_START_DATE_QUERY_CAPT, 8, 100, this, CS_NUMERAL); |
713 ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_START_DATE_QUERY_CAPT, 8, 100, this, CS_NUMERAL); |
714 break; |
714 break; |
715 |
715 |
716 case CSCEN_FLAT_LAND_HEIGHT_DOWN: |
716 case CSCEN_FLAT_LAND_HEIGHT_DOWN: |
717 case CSCEN_FLAT_LAND_HEIGHT_UP: // Height level buttons |
717 case CSCEN_FLAT_LAND_HEIGHT_UP: // Height level buttons |
718 /* Don't allow too fast scrolling */ |
718 /* Don't allow too fast scrolling */ |
719 if ((this->flags4 & WF_TIMEOUT_MASK) <= 2 << WF_TIMEOUT_SHL) { |
719 if ((this->flags4 & WF_TIMEOUT_MASK) <= 2 << WF_TIMEOUT_SHL) { |
720 this->HandleButtonClick(widget); |
720 this->HandleButtonClick(widget); |
721 this->SetDirty(); |
721 this->SetDirty(); |
722 |
722 |
723 _patches_newgame.se_flat_world_height = Clamp(_patches_newgame.se_flat_world_height + widget - CSCEN_FLAT_LAND_HEIGHT_TEXT, 0, MAX_TILE_HEIGHT); |
723 _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 } |
724 } |
725 _left_button_clicked = false; |
725 _left_button_clicked = false; |
726 break; |
726 break; |
727 |
727 |
728 case CSCEN_FLAT_LAND_HEIGHT_TEXT: // Height level text |
728 case CSCEN_FLAT_LAND_HEIGHT_TEXT: // Height level text |
729 this->widget_id = CSCEN_FLAT_LAND_HEIGHT_TEXT; |
729 this->widget_id = CSCEN_FLAT_LAND_HEIGHT_TEXT; |
730 SetDParam(0, _patches_newgame.se_flat_world_height); |
730 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); |
731 ShowQueryString(STR_CONFIG_PATCHES_INT32, STR_FLAT_WORLD_HEIGHT_QUERY_CAPT, 3, 100, this, CS_NUMERAL); |
732 break; |
732 break; |
733 } |
733 } |
734 } |
734 } |
735 |
735 |
736 virtual void OnDropdownSelect(int widget, int index) |
736 virtual void OnDropdownSelect(int widget, int index) |
737 { |
737 { |
738 switch (widget) { |
738 switch (widget) { |
739 case CSCEN_MAPSIZE_X_PULLDOWN: _patches_newgame.map_x = index; break; |
739 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; |
740 case CSCEN_MAPSIZE_Y_PULLDOWN: _settings_newgame.game_creation.map_y = index; break; |
741 } |
741 } |
742 this->SetDirty(); |
742 this->SetDirty(); |
743 } |
743 } |
744 |
744 |
745 virtual void OnQueryTextFinished(char *str) |
745 virtual void OnQueryTextFinished(char *str) |
748 int32 value = atoi(str); |
748 int32 value = atoi(str); |
749 |
749 |
750 switch (this->widget_id) { |
750 switch (this->widget_id) { |
751 case CSCEN_START_DATE_TEXT: |
751 case CSCEN_START_DATE_TEXT: |
752 this->InvalidateWidget(CSCEN_START_DATE_TEXT); |
752 this->InvalidateWidget(CSCEN_START_DATE_TEXT); |
753 _patches_newgame.starting_year = Clamp(value, MIN_YEAR, MAX_YEAR); |
753 _settings_newgame.game_creation.starting_year = Clamp(value, MIN_YEAR, MAX_YEAR); |
754 break; |
754 break; |
755 |
755 |
756 case CSCEN_FLAT_LAND_HEIGHT_TEXT: |
756 case CSCEN_FLAT_LAND_HEIGHT_TEXT: |
757 this->InvalidateWidget(CSCEN_FLAT_LAND_HEIGHT_TEXT); |
757 this->InvalidateWidget(CSCEN_FLAT_LAND_HEIGHT_TEXT); |
758 _patches_newgame.se_flat_world_height = Clamp(value, 0, MAX_TILE_HEIGHT); |
758 _settings_newgame.game_creation.se_flat_world_height = Clamp(value, 0, MAX_TILE_HEIGHT); |
759 break; |
759 break; |
760 } |
760 } |
761 |
761 |
762 this->SetDirty(); |
762 this->SetDirty(); |
763 } |
763 } |