src/main_gui.cpp
changeset 6486 7d2ae0a167fb
parent 6481 85ad87daf4b0
child 6492 286a52449b54
equal deleted inserted replaced
6485:2c310cd45776 6486:7d2ae0a167fb
    49 static int _rename_id = 1;
    49 static int _rename_id = 1;
    50 static int _rename_what = -1;
    50 static int _rename_what = -1;
    51 
    51 
    52 static byte _terraform_size = 1;
    52 static byte _terraform_size = 1;
    53 RailType _last_built_railtype;
    53 RailType _last_built_railtype;
    54 static int _scengen_town_size = 2; // depress medium-sized towns per default
    54 static int _scengen_town_size = 1; // depress medium-sized towns per default
    55 
    55 
    56 extern void GenerateIndustries();
    56 extern void GenerateIndustries();
    57 extern bool GenerateTowns();
    57 extern bool GenerateTowns();
    58 
    58 
    59 
    59 
  1404 	}
  1404 	}
  1405 }
  1405 }
  1406 
  1406 
  1407 static void PlaceProc_Town(TileIndex tile)
  1407 static void PlaceProc_Town(TileIndex tile)
  1408 {
  1408 {
  1409 	DoCommandP(tile, _scengen_town_size, 0, CcBuildTown, CMD_BUILD_TOWN | CMD_MSG(STR_0236_CAN_T_BUILD_TOWN_HERE));
  1409 	uint32 size = min(_scengen_town_size, (int)TSM_CITY);
       
  1410 	uint32 mode = _scengen_town_size > TSM_CITY ? TSM_CITY : TSM_FIXED;
       
  1411 	DoCommandP(tile, size, mode, CcBuildTown, CMD_BUILD_TOWN | CMD_MSG(STR_0236_CAN_T_BUILD_TOWN_HERE));
  1410 }
  1412 }
  1411 
  1413 
  1412 
  1414 
  1413 static const Widget _scen_edit_town_gen_widgets[] = {
  1415 static const Widget _scen_edit_town_gen_widgets[] = {
  1414 {   WWT_CLOSEBOX,   RESIZE_NONE,     7,     0,    10,     0,    13, STR_00C5,                 STR_018B_CLOSE_WINDOW},
  1416 {   WWT_CLOSEBOX,   RESIZE_NONE,     7,     0,    10,     0,    13, STR_00C5,                 STR_018B_CLOSE_WINDOW},
  1415 {    WWT_CAPTION,   RESIZE_NONE,     7,    11,   147,     0,    13, STR_0233_TOWN_GENERATION, STR_018C_WINDOW_TITLE_DRAG_THIS},
  1417 {    WWT_CAPTION,   RESIZE_NONE,     7,    11,   147,     0,    13, STR_0233_TOWN_GENERATION, STR_018C_WINDOW_TITLE_DRAG_THIS},
  1416 {  WWT_STICKYBOX,   RESIZE_NONE,     7,   148,   159,     0,    13, 0x0,                      STR_STICKY_BUTTON},
  1418 {  WWT_STICKYBOX,   RESIZE_NONE,     7,   148,   159,     0,    13, 0x0,                      STR_STICKY_BUTTON},
  1417 {      WWT_PANEL,   RESIZE_NONE,     7,     0,   159,    14,    81, 0x0,                      STR_NULL},
  1419 {      WWT_PANEL,   RESIZE_NONE,     7,     0,   159,    14,    94, 0x0,                      STR_NULL},
  1418 {    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   157,    16,    27, STR_0234_NEW_TOWN,        STR_0235_CONSTRUCT_NEW_TOWN},
  1420 {    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   157,    16,    27, STR_0234_NEW_TOWN,        STR_0235_CONSTRUCT_NEW_TOWN},
  1419 {    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   157,    29,    40, STR_023D_RANDOM_TOWN,     STR_023E_BUILD_TOWN_IN_RANDOM_LOCATION},
  1421 {    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   157,    29,    40, STR_023D_RANDOM_TOWN,     STR_023E_BUILD_TOWN_IN_RANDOM_LOCATION},
  1420 {    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   157,    42,    53, STR_MANY_RANDOM_TOWNS,    STR_RANDOM_TOWNS_TIP},
  1422 {    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   157,    42,    53, STR_MANY_RANDOM_TOWNS,    STR_RANDOM_TOWNS_TIP},
  1421 {    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,    53,    68,    79, STR_02A1_SMALL,           STR_02A4_SELECT_TOWN_SIZE},
  1423 {    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,    53,    68,    79, STR_02A1_SMALL,           STR_02A4_SELECT_TOWN_SIZE},
  1422 {    WWT_TEXTBTN,   RESIZE_NONE,    14,    54,   105,    68,    79, STR_02A2_MEDIUM,          STR_02A4_SELECT_TOWN_SIZE},
  1424 {    WWT_TEXTBTN,   RESIZE_NONE,    14,    54,   105,    68,    79, STR_02A2_MEDIUM,          STR_02A4_SELECT_TOWN_SIZE},
  1423 {    WWT_TEXTBTN,   RESIZE_NONE,    14,   106,   157,    68,    79, STR_02A3_LARGE,           STR_02A4_SELECT_TOWN_SIZE},
  1425 {    WWT_TEXTBTN,   RESIZE_NONE,    14,   106,   157,    68,    79, STR_02A3_LARGE,           STR_02A4_SELECT_TOWN_SIZE},
       
  1426 {    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   157,    81,    92, STR_SCENARIO_EDITOR_CITY, STR_02A4_SELECT_TOWN_SIZE},
  1424 {      WWT_LABEL,   RESIZE_NONE,     7,     0,   147,    54,    67, STR_02A5_TOWN_SIZE,       STR_NULL},
  1427 {      WWT_LABEL,   RESIZE_NONE,     7,     0,   147,    54,    67, STR_02A5_TOWN_SIZE,       STR_NULL},
  1425 {   WIDGETS_END},
  1428 {   WIDGETS_END},
  1426 };
  1429 };
  1427 
  1430 
  1428 static void ScenEditTownGenWndProc(Window *w, WindowEvent *e)
  1431 static void ScenEditTownGenWndProc(Window *w, WindowEvent *e)
  1431 	case WE_PAINT:
  1434 	case WE_PAINT:
  1432 		DrawWindowWidgets(w);
  1435 		DrawWindowWidgets(w);
  1433 		break;
  1436 		break;
  1434 
  1437 
  1435 	case WE_CREATE:
  1438 	case WE_CREATE:
  1436 		LowerWindowWidget(w, (_scengen_town_size - 1)+ 7);
  1439 		LowerWindowWidget(w, _scengen_town_size + 7);
  1437 		break;
  1440 		break;
  1438 
  1441 
  1439 	case WE_CLICK:
  1442 	case WE_CLICK:
  1440 		switch (e->we.click.widget) {
  1443 		switch (e->we.click.widget) {
  1441 		case 4: // new town
  1444 		case 4: // new town
  1442 			HandlePlacePushButton(w, 4, SPR_CURSOR_TOWN, 1, PlaceProc_Town);
  1445 			HandlePlacePushButton(w, 4, SPR_CURSOR_TOWN, 1, PlaceProc_Town);
  1443 			break;
  1446 			break;
  1444 		case 5: {// random town
  1447 		case 5: {// random town
  1445 			Town *t;
  1448 			Town *t;
       
  1449 			uint size = min(_scengen_town_size, (int)TSM_CITY);
       
  1450 			TownSizeMode mode = _scengen_town_size > TSM_CITY ? TSM_CITY : TSM_FIXED;
  1446 
  1451 
  1447 			HandleButtonClick(w, 5);
  1452 			HandleButtonClick(w, 5);
  1448 			_generating_world = true;
  1453 			_generating_world = true;
  1449 			t = CreateRandomTown(20, _scengen_town_size);
  1454 			t = CreateRandomTown(20, mode, size);
  1450 			_generating_world = false;
  1455 			_generating_world = false;
  1451 
  1456 
  1452 			if (t == NULL) {
  1457 			if (t == NULL) {
  1453 				ShowErrorMessage(STR_NO_SPACE_FOR_TOWN, STR_CANNOT_GENERATE_TOWN, 0, 0);
  1458 				ShowErrorMessage(STR_NO_SPACE_FOR_TOWN, STR_CANNOT_GENERATE_TOWN, 0, 0);
  1454 			} else {
  1459 			} else {
  1464 			if (!GenerateTowns()) ShowErrorMessage(STR_NO_SPACE_FOR_TOWN, STR_CANNOT_GENERATE_TOWN, 0, 0);
  1469 			if (!GenerateTowns()) ShowErrorMessage(STR_NO_SPACE_FOR_TOWN, STR_CANNOT_GENERATE_TOWN, 0, 0);
  1465 			_generating_world = false;
  1470 			_generating_world = false;
  1466 			break;
  1471 			break;
  1467 		}
  1472 		}
  1468 
  1473 
  1469 		case 7: case 8: case 9:
  1474 		case 7: case 8: case 9: case 10:
  1470 			RaiseWindowWidget(w, (_scengen_town_size - 1) + 7);
  1475 			RaiseWindowWidget(w, _scengen_town_size + 7);
  1471 			_scengen_town_size = (e->we.click.widget - 7) + 1;
  1476 			_scengen_town_size = e->we.click.widget - 7;
  1472 			LowerWindowWidget(w, (_scengen_town_size - 1) + 7);
  1477 			LowerWindowWidget(w, _scengen_town_size + 7);
  1473 			SetWindowDirty(w);
  1478 			SetWindowDirty(w);
  1474 			break;
  1479 			break;
  1475 		}
  1480 		}
  1476 		break;
  1481 		break;
  1477 
  1482 
  1483 	case WE_PLACE_OBJ:
  1488 	case WE_PLACE_OBJ:
  1484 		_place_proc(e->we.place.tile);
  1489 		_place_proc(e->we.place.tile);
  1485 		break;
  1490 		break;
  1486 	case WE_ABORT_PLACE_OBJ:
  1491 	case WE_ABORT_PLACE_OBJ:
  1487 		RaiseWindowButtons(w);
  1492 		RaiseWindowButtons(w);
  1488 		LowerWindowWidget(w, (_scengen_town_size - 1) + 7);
  1493 		LowerWindowWidget(w, _scengen_town_size + 7);
  1489 		SetWindowDirty(w);
  1494 		SetWindowDirty(w);
  1490 		break;
  1495 		break;
  1491 	}
  1496 	}
  1492 }
  1497 }
  1493 
  1498 
  1494 static const WindowDesc _scen_edit_town_gen_desc = {
  1499 static const WindowDesc _scen_edit_town_gen_desc = {
  1495 	WDP_AUTO, WDP_AUTO, 160, 82,
  1500 	WDP_AUTO, WDP_AUTO, 160, 95,
  1496 	WC_SCEN_TOWN_GEN, WC_NONE,
  1501 	WC_SCEN_TOWN_GEN, WC_NONE,
  1497 	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON,
  1502 	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON,
  1498 	_scen_edit_town_gen_widgets,
  1503 	_scen_edit_town_gen_widgets,
  1499 	ScenEditTownGenWndProc,
  1504 	ScenEditTownGenWndProc,
  1500 };
  1505 };