main_gui.c
changeset 3674 d6c991bdcbe1
parent 3636 a36cc46e754d
child 3692 1d8f5041d437
equal deleted inserted replaced
3673:00ba3772ca20 3674:d6c991bdcbe1
  1450 	}
  1450 	}
  1451 }
  1451 }
  1452 
  1452 
  1453 static void PlaceProc_Town(TileIndex tile)
  1453 static void PlaceProc_Town(TileIndex tile)
  1454 {
  1454 {
  1455 	DoCommandP(tile, 0, 0, CcBuildTown, CMD_BUILD_TOWN | CMD_MSG(STR_0236_CAN_T_BUILD_TOWN_HERE));
  1455 	Window *w = FindWindowById(WC_SCEN_TOWN_GEN, 0);
       
  1456 	DoCommandP(tile, 1 + FIND_FIRST_BIT(w->click_state >> 7), 0, CcBuildTown, CMD_BUILD_TOWN | CMD_MSG(STR_0236_CAN_T_BUILD_TOWN_HERE));
  1456 }
  1457 }
  1457 
  1458 
  1458 
  1459 
  1459 static const Widget _scen_edit_town_gen_widgets[] = {
  1460 static const Widget _scen_edit_town_gen_widgets[] = {
  1460 {   WWT_CLOSEBOX,   RESIZE_NONE,     7,     0,    10,     0,    13, STR_00C5,                 STR_018B_CLOSE_WINDOW},
  1461 {   WWT_CLOSEBOX,   RESIZE_NONE,     7,     0,    10,     0,    13, STR_00C5,                 STR_018B_CLOSE_WINDOW},
  1472 
  1473 
  1473 static void ScenEditTownGenWndProc(Window *w, WindowEvent *e)
  1474 static void ScenEditTownGenWndProc(Window *w, WindowEvent *e)
  1474 {
  1475 {
  1475 	switch (e->event) {
  1476 	switch (e->event) {
  1476 	case WE_PAINT:
  1477 	case WE_PAINT:
  1477 		w->click_state = (w->click_state & ~(1<<7 | 1<<8 | 1<<9) ) | (1 << (_new_town_size + 7));
       
  1478 		DrawWindowWidgets(w);
  1478 		DrawWindowWidgets(w);
  1479 		DrawStringCentered(80, 56, STR_02A5_TOWN_SIZE, 0);
  1479 		DrawStringCentered(80, 56, STR_02A5_TOWN_SIZE, 0);
       
  1480 		break;
       
  1481 
       
  1482 	case WE_CREATE:
       
  1483 		w->click_state = 1 << 8; /* medium town size selected */
  1480 		break;
  1484 		break;
  1481 
  1485 
  1482 	case WE_CLICK:
  1486 	case WE_CLICK:
  1483 		switch (e->click.widget) {
  1487 		switch (e->click.widget) {
  1484 		case 4: /* new town */
  1488 		case 4: /* new town */
  1487 		case 5: {/* random town */
  1491 		case 5: {/* random town */
  1488 			Town *t;
  1492 			Town *t;
  1489 
  1493 
  1490 			HandleButtonClick(w, 5);
  1494 			HandleButtonClick(w, 5);
  1491 			_generating_world = true;
  1495 			_generating_world = true;
  1492 			t = CreateRandomTown(20);
  1496 			t = CreateRandomTown(20, 1 + FIND_FIRST_BIT(w->click_state >> 7));
  1493 			_generating_world = false;
  1497 			_generating_world = false;
  1494 
  1498 
  1495 			if (t == NULL) {
  1499 			if (t == NULL) {
  1496 				ShowErrorMessage(STR_NO_SPACE_FOR_TOWN, STR_CANNOT_GENERATE_TOWN, 0, 0);
  1500 				ShowErrorMessage(STR_NO_SPACE_FOR_TOWN, STR_CANNOT_GENERATE_TOWN, 0, 0);
  1497 			} else {
  1501 			} else {
  1502 		}
  1506 		}
  1503 		case 6: {/* many random towns */
  1507 		case 6: {/* many random towns */
  1504 			HandleButtonClick(w, 6);
  1508 			HandleButtonClick(w, 6);
  1505 
  1509 
  1506 			_generating_world = true;
  1510 			_generating_world = true;
  1507 			_game_mode = GM_NORMAL; // little hack to avoid towns of the same size
  1511 			if (!GenerateTowns()) ShowErrorMessage(STR_NO_SPACE_FOR_TOWN, STR_CANNOT_GENERATE_TOWN, 0, 0);
  1508 			if (!GenerateTowns()) {
       
  1509 				ShowErrorMessage(STR_NO_SPACE_FOR_TOWN, STR_CANNOT_GENERATE_TOWN, 0, 0);
       
  1510 			}
       
  1511 			_generating_world = false;
  1512 			_generating_world = false;
  1512 
       
  1513 			_game_mode = GM_EDITOR;
       
  1514 			break;
  1513 			break;
  1515 		}
  1514 		}
  1516 
  1515 
  1517 		case 7: case 8: case 9:
  1516 		case 7: case 8: case 9:
  1518 			_new_town_size = e->click.widget - 7;
  1517 			w->click_state = 1 << e->click.widget;
  1519 			SetWindowDirty(w);
  1518 			SetWindowDirty(w);
  1520 			break;
  1519 			break;
  1521 		}
  1520 		}
  1522 		break;
  1521 		break;
  1523 
  1522 
  1526 		break;
  1525 		break;
  1527 	case WE_PLACE_OBJ:
  1526 	case WE_PLACE_OBJ:
  1528 		_place_proc(e->place.tile);
  1527 		_place_proc(e->place.tile);
  1529 		break;
  1528 		break;
  1530 	case WE_ABORT_PLACE_OBJ:
  1529 	case WE_ABORT_PLACE_OBJ:
  1531 		w->click_state = 0;
  1530 		w->click_state &= (1 << 7 | 1 << 8 | 1 << 9);
  1532 		SetWindowDirty(w);
  1531 		SetWindowDirty(w);
  1533 		break;
  1532 		break;
  1534 	}
  1533 	}
  1535 }
  1534 }
  1536 
  1535