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 { |
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 }; |