src/main_gui.cpp
branchgamebalance
changeset 9911 0b8b245a2391
parent 9910 0b2aebc8283e
child 9912 1ac8aac92385
equal deleted inserted replaced
9910:0b2aebc8283e 9911:0b8b245a2391
    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 RoadType _last_built_roadtype;
    54 static int _scengen_town_size = 1; // depress medium-sized towns per default
    55 static int _scengen_town_size = 1; // depress medium-sized towns per default
    55 
    56 
    56 extern void GenerateIndustries();
    57 extern void GenerateIndustries();
    57 extern bool GenerateTowns();
    58 extern bool GenerateTowns();
    58 
    59 
   169 		case 0: ShowGameOptions();      return;
   170 		case 0: ShowGameOptions();      return;
   170 		case 1: ShowGameDifficulty();   return;
   171 		case 1: ShowGameDifficulty();   return;
   171 		case 2: ShowPatchesSelection(); return;
   172 		case 2: ShowPatchesSelection(); return;
   172 		case 3: ShowNewGRFSettings(!_networking, true, true, &_grfconfig);   return;
   173 		case 3: ShowNewGRFSettings(!_networking, true, true, &_grfconfig);   return;
   173 
   174 
   174 		case  5: _display_opt ^= DO_SHOW_TOWN_NAMES;    break;
   175 		case  5: TOGGLEBIT(_display_opt, DO_SHOW_TOWN_NAMES);    break;
   175 		case  6: _display_opt ^= DO_SHOW_STATION_NAMES; break;
   176 		case  6: TOGGLEBIT(_display_opt, DO_SHOW_STATION_NAMES); break;
   176 		case  7: _display_opt ^= DO_SHOW_SIGNS;         break;
   177 		case  7: TOGGLEBIT(_display_opt, DO_SHOW_SIGNS);         break;
   177 		case  8: _display_opt ^= DO_WAYPOINTS;          break;
   178 		case  8: TOGGLEBIT(_display_opt, DO_WAYPOINTS);          break;
   178 		case  9: _display_opt ^= DO_FULL_ANIMATION;     break;
   179 		case  9: TOGGLEBIT(_display_opt, DO_FULL_ANIMATION);     break;
   179 		case 10: _display_opt ^= DO_FULL_DETAIL;        break;
   180 		case 10: TOGGLEBIT(_display_opt, DO_FULL_DETAIL);        break;
   180 		case 11: ToggleTransparency(); break;
   181 		case 11: ToggleTransparency(); break;
   181 		case 12: TOGGLEBIT(_transparent_opt, TO_SIGNS); break;
   182 		case 12: TOGGLEBIT(_transparent_opt, TO_SIGNS); break;
   182 	}
   183 	}
   183 	MarkWholeScreenDirty();
   184 	MarkWholeScreenDirty();
   184 }
   185 }
   308 	ShowBuildRailToolbar(_last_built_railtype, -1);
   309 	ShowBuildRailToolbar(_last_built_railtype, -1);
   309 }
   310 }
   310 
   311 
   311 static void MenuClickBuildRoad(int index)
   312 static void MenuClickBuildRoad(int index)
   312 {
   313 {
   313 	ShowBuildRoadToolbar();
   314 	_last_built_roadtype = (RoadType)index;
       
   315 	ShowBuildRoadToolbar(_last_built_roadtype);
   314 }
   316 }
   315 
   317 
   316 static void MenuClickBuildWater(int index)
   318 static void MenuClickBuildWater(int index)
   317 {
   319 {
   318 	ShowBuildDocksToolbar();
   320 	ShowBuildDocksToolbar();
   878 	assert(w != NULL);
   880 	assert(w != NULL);
   879 	vp = w->viewport;
   881 	vp = w->viewport;
   880 
   882 
   881 	switch (how) {
   883 	switch (how) {
   882 		case ZOOM_IN:
   884 		case ZOOM_IN:
   883 			if (vp->zoom == 0) return false;
   885 			if (vp->zoom == ZOOM_LVL_MIN) return false;
   884 			vp->zoom--;
   886 			vp->zoom = (ZoomLevel)((byte)vp->zoom - 1);
   885 			vp->virtual_width >>= 1;
   887 			vp->virtual_width >>= 1;
   886 			vp->virtual_height >>= 1;
   888 			vp->virtual_height >>= 1;
   887 
   889 
   888 			WP(w,vp_d).scrollpos_x += vp->virtual_width >> 1;
   890 			WP(w,vp_d).scrollpos_x += vp->virtual_width >> 1;
   889 			WP(w,vp_d).scrollpos_y += vp->virtual_height >> 1;
   891 			WP(w,vp_d).scrollpos_y += vp->virtual_height >> 1;
   890 			break;
   892 			break;
   891 		case ZOOM_OUT:
   893 		case ZOOM_OUT:
   892 			if (vp->zoom == 2) return false;
   894 			if (vp->zoom == ZOOM_LVL_MAX) return false;
   893 			vp->zoom++;
   895 			vp->zoom = (ZoomLevel)((byte)vp->zoom + 1);
   894 
   896 
   895 			WP(w,vp_d).scrollpos_x -= vp->virtual_width >> 1;
   897 			WP(w,vp_d).scrollpos_x -= vp->virtual_width >> 1;
   896 			WP(w,vp_d).scrollpos_y -= vp->virtual_height >> 1;
   898 			WP(w,vp_d).scrollpos_y -= vp->virtual_height >> 1;
   897 
   899 
   898 			vp->virtual_width <<= 1;
   900 			vp->virtual_width <<= 1;
   928 static void ToolbarBuildRailClick(Window *w)
   930 static void ToolbarBuildRailClick(Window *w)
   929 {
   931 {
   930 	const Player *p = GetPlayer(_local_player);
   932 	const Player *p = GetPlayer(_local_player);
   931 	Window *w2;
   933 	Window *w2;
   932 	w2 = PopupMainToolbMenu(w, 19, STR_1015_RAILROAD_CONSTRUCTION, RAILTYPE_END, ~p->avail_railtypes);
   934 	w2 = PopupMainToolbMenu(w, 19, STR_1015_RAILROAD_CONSTRUCTION, RAILTYPE_END, ~p->avail_railtypes);
   933 	WP(w2,menu_d).sel_index = _last_built_railtype;
   935 	WP(w2, menu_d).sel_index = _last_built_railtype;
   934 }
   936 }
   935 
   937 
   936 static void ToolbarBuildRoadClick(Window *w)
   938 static void ToolbarBuildRoadClick(Window *w)
   937 {
   939 {
   938 	PopupMainToolbMenu(w, 20, STR_180A_ROAD_CONSTRUCTION, 1, 0);
   940 	Window *w2 = PopupMainToolbMenu(w, 20, STR_180A_ROAD_CONSTRUCTION, 1, 0);
       
   941 	WP(w2, menu_d).sel_index = _last_built_roadtype;
   939 }
   942 }
   940 
   943 
   941 static void ToolbarBuildWaterClick(Window *w)
   944 static void ToolbarBuildWaterClick(Window *w)
   942 {
   945 {
   943 	PopupMainToolbMenu(w, 21, STR_9800_DOCK_CONSTRUCTION, 1, 0);
   946 	PopupMainToolbMenu(w, 21, STR_9800_DOCK_CONSTRUCTION, 1, 0);
   972 {
   975 {
   973 	uint16 x = 0;
   976 	uint16 x = 0;
   974 
   977 
   975 	w = PopupMainToolbMenu(w, 2, STR_02C3_GAME_OPTIONS, 13, 0);
   978 	w = PopupMainToolbMenu(w, 2, STR_02C3_GAME_OPTIONS, 13, 0);
   976 
   979 
   977 	if (_display_opt & DO_SHOW_TOWN_NAMES)    SETBIT(x,  5);
   980 	if (HASBIT(_display_opt, DO_SHOW_TOWN_NAMES))    SETBIT(x,  5);
   978 	if (_display_opt & DO_SHOW_STATION_NAMES) SETBIT(x,  6);
   981 	if (HASBIT(_display_opt, DO_SHOW_STATION_NAMES)) SETBIT(x,  6);
   979 	if (_display_opt & DO_SHOW_SIGNS)         SETBIT(x,  7);
   982 	if (HASBIT(_display_opt, DO_SHOW_SIGNS))         SETBIT(x,  7);
   980 	if (_display_opt & DO_WAYPOINTS)          SETBIT(x,  8);
   983 	if (HASBIT(_display_opt, DO_WAYPOINTS))          SETBIT(x,  8);
   981 	if (_display_opt & DO_FULL_ANIMATION)     SETBIT(x,  9);
   984 	if (HASBIT(_display_opt, DO_FULL_ANIMATION))     SETBIT(x,  9);
   982 	if (_display_opt & DO_FULL_DETAIL)        SETBIT(x, 10);
   985 	if (HASBIT(_display_opt, DO_FULL_DETAIL))        SETBIT(x, 10);
   983 	if (GB(_transparent_opt, 1, 7) != 0)      SETBIT(x, 11);
   986 	if (GB(_transparent_opt, 1, 7) != 0)      SETBIT(x, 11);
   984 	if (HASBIT(_transparent_opt, TO_SIGNS))   SETBIT(x, 12);
   987 	if (HASBIT(_transparent_opt, TO_SIGNS))   SETBIT(x, 12);
   985 	WP(w,menu_d).checked_items = x;
   988 	WP(w,menu_d).checked_items = x;
   986 }
   989 }
   987 
   990 
  1047 	assert(w != 0);
  1050 	assert(w != 0);
  1048 
  1051 
  1049 	vp = w->viewport;
  1052 	vp = w->viewport;
  1050 
  1053 
  1051 	if (_game_mode != GM_MENU) {
  1054 	if (_game_mode != GM_MENU) {
  1052 		if ((in && vp->zoom == 0) || (!in && vp->zoom == 2))
  1055 		if ((in && vp->zoom == ZOOM_LVL_MIN) || (!in && vp->zoom == ZOOM_LVL_MAX))
  1053 			return;
  1056 			return;
  1054 
  1057 
  1055 		pt = GetTileZoomCenterWindow(in,w);
  1058 		pt = GetTileZoomCenterWindow(in,w);
  1056 		if (pt.x != -1) {
  1059 		if (pt.x != -1) {
  1057 			ScrollWindowTo(pt.x, pt.y, w);
  1060 			ScrollWindowTo(pt.x, pt.y, w);
  1126 	CommonRaiseLowerBigLand(tile, 0);
  1129 	CommonRaiseLowerBigLand(tile, 0);
  1127 }
  1130 }
  1128 
  1131 
  1129 static void PlaceProc_RockyArea(TileIndex tile)
  1132 static void PlaceProc_RockyArea(TileIndex tile)
  1130 {
  1133 {
  1131 	VpStartPlaceSizing(tile, VPM_X_AND_Y | GUI_PlaceProc_RockyArea);
  1134 	VpStartPlaceSizing(tile, VPM_X_AND_Y, GUI_PlaceProc_RockyArea);
  1132 }
  1135 }
  1133 
  1136 
  1134 static void PlaceProc_LightHouse(TileIndex tile)
  1137 static void PlaceProc_LightHouse(TileIndex tile)
  1135 {
  1138 {
  1136 	if (!IsTileType(tile, MP_CLEAR) || IsSteepSlope(GetTileSlope(tile, NULL))) {
  1139 	if (!IsTileType(tile, MP_CLEAR) || IsSteepSlope(GetTileSlope(tile, NULL))) {
  1153 	SndPlayTileFx(SND_1F_SPLAT, tile);
  1156 	SndPlayTileFx(SND_1F_SPLAT, tile);
  1154 }
  1157 }
  1155 
  1158 
  1156 static void PlaceProc_DesertArea(TileIndex tile)
  1159 static void PlaceProc_DesertArea(TileIndex tile)
  1157 {
  1160 {
  1158 	VpStartPlaceSizing(tile, VPM_X_AND_Y | GUI_PlaceProc_DesertArea);
  1161 	VpStartPlaceSizing(tile, VPM_X_AND_Y, GUI_PlaceProc_DesertArea);
  1159 }
  1162 }
  1160 
  1163 
  1161 static void PlaceProc_WaterArea(TileIndex tile)
  1164 static void PlaceProc_WaterArea(TileIndex tile)
  1162 {
  1165 {
  1163 	VpStartPlaceSizing(tile, VPM_X_AND_Y | GUI_PlaceProc_WaterArea);
  1166 	VpStartPlaceSizing(tile, VPM_X_AND_Y, GUI_PlaceProc_WaterArea);
  1164 }
  1167 }
  1165 
  1168 
  1166 static const Widget _scen_edit_land_gen_widgets[] = {
  1169 static const Widget _scen_edit_land_gen_widgets[] = {
  1167 {  WWT_CLOSEBOX,   RESIZE_NONE,     7,     0,    10,     0,    13, STR_00C5,                  STR_018B_CLOSE_WINDOW},
  1170 {  WWT_CLOSEBOX,   RESIZE_NONE,     7,     0,    10,     0,    13, STR_00C5,                  STR_018B_CLOSE_WINDOW},
  1168 {   WWT_CAPTION,   RESIZE_NONE,     7,    11,   169,     0,    13, STR_0223_LAND_GENERATION,  STR_018C_WINDOW_TITLE_DRAG_THIS},
  1171 {   WWT_CAPTION,   RESIZE_NONE,     7,    11,   169,     0,    13, STR_0223_LAND_GENERATION,  STR_018C_WINDOW_TITLE_DRAG_THIS},
  1372 	}
  1375 	}
  1373 	case WE_PLACE_OBJ:
  1376 	case WE_PLACE_OBJ:
  1374 		_place_proc(e->we.place.tile);
  1377 		_place_proc(e->we.place.tile);
  1375 		break;
  1378 		break;
  1376 	case WE_PLACE_DRAG:
  1379 	case WE_PLACE_DRAG:
  1377 		VpSelectTilesWithMethod(e->we.place.pt.x, e->we.place.pt.y, e->we.place.userdata & 0xF);
  1380 		VpSelectTilesWithMethod(e->we.place.pt.x, e->we.place.pt.y, e->we.place.select_method);
  1378 		break;
  1381 		break;
  1379 
  1382 
  1380 	case WE_PLACE_MOUSEUP:
  1383 	case WE_PLACE_MOUSEUP:
  1381 		if (e->we.place.pt.x != -1) {
  1384 		if (e->we.place.pt.x != -1) {
  1382 			if ((e->we.place.userdata & 0xF) == VPM_X_AND_Y) // dragged actions
  1385 			if (e->we.place.select_method == VPM_X_AND_Y) // dragged actions
  1383 				GUIPlaceProcDragXY(e);
  1386 				GUIPlaceProcDragXY(e);
  1384 		}
  1387 		}
  1385 		break;
  1388 		break;
  1386 
  1389 
  1387 	case WE_ABORT_PLACE_OBJ:
  1390 	case WE_ABORT_PLACE_OBJ:
  1871 		case WKC_SHIFT | WKC_F3: ShowVehicleListWindow(_local_player, VEH_SHIP); break;
  1874 		case WKC_SHIFT | WKC_F3: ShowVehicleListWindow(_local_player, VEH_SHIP); break;
  1872 		case WKC_SHIFT | WKC_F4: ShowVehicleListWindow(_local_player, VEH_AIRCRAFT); break;
  1875 		case WKC_SHIFT | WKC_F4: ShowVehicleListWindow(_local_player, VEH_AIRCRAFT); break;
  1873 		case WKC_SHIFT | WKC_F5: ToolbarZoomInClick(w); break;
  1876 		case WKC_SHIFT | WKC_F5: ToolbarZoomInClick(w); break;
  1874 		case WKC_SHIFT | WKC_F6: ToolbarZoomOutClick(w); break;
  1877 		case WKC_SHIFT | WKC_F6: ToolbarZoomOutClick(w); break;
  1875 		case WKC_SHIFT | WKC_F7: ShowBuildRailToolbar(_last_built_railtype, -1); break;
  1878 		case WKC_SHIFT | WKC_F7: ShowBuildRailToolbar(_last_built_railtype, -1); break;
  1876 		case WKC_SHIFT | WKC_F8: ShowBuildRoadToolbar(); break;
  1879 		case WKC_SHIFT | WKC_F8: ShowBuildRoadToolbar(_last_built_roadtype); break;
  1877 		case WKC_SHIFT | WKC_F9: ShowBuildDocksToolbar(); break;
  1880 		case WKC_SHIFT | WKC_F9: ShowBuildDocksToolbar(); break;
  1878 		case WKC_SHIFT | WKC_F10:ShowBuildAirToolbar(); break;
  1881 		case WKC_SHIFT | WKC_F10:ShowBuildAirToolbar(); break;
  1879 		case WKC_SHIFT | WKC_F11: ShowBuildTreesToolbar(); break;
  1882 		case WKC_SHIFT | WKC_F11: ShowBuildTreesToolbar(); break;
  1880 		case WKC_SHIFT | WKC_F12: ShowMusicWindow(); break;
  1883 		case WKC_SHIFT | WKC_F12: ShowMusicWindow(); break;
  1881 		case WKC_CTRL  | 'S': MenuClickSmallScreenshot(); break;
  1884 		case WKC_CTRL  | 'S': MenuClickSmallScreenshot(); break;
  2423 			if (vp == NULL) {
  2426 			if (vp == NULL) {
  2424 				_cursor.fix_at = false;
  2427 				_cursor.fix_at = false;
  2425 				_scrolling_viewport = false;
  2428 				_scrolling_viewport = false;
  2426 			}
  2429 			}
  2427 
  2430 
  2428 			WP(w, vp_d).scrollpos_x += e->we.scroll.delta.x << vp->zoom;
  2431 			WP(w, vp_d).scrollpos_x += ScaleByZoom(e->we.scroll.delta.x, vp->zoom);
  2429 			WP(w, vp_d).scrollpos_y += e->we.scroll.delta.y << vp->zoom;
  2432 			WP(w, vp_d).scrollpos_y += ScaleByZoom(e->we.scroll.delta.y, vp->zoom);
  2430 		} break;
  2433 		} break;
  2431 
  2434 
  2432 		case WE_MOUSEWHEEL:
  2435 		case WE_MOUSEWHEEL:
  2433 			ZoomInOrOutToCursorWindow(e->we.wheel.wheel < 0, w);
  2436 			ZoomInOrOutToCursorWindow(e->we.wheel.wheel < 0, w);
  2434 			break;
  2437 			break;
  2458 
  2461 
  2459 	width = _screen.width;
  2462 	width = _screen.width;
  2460 	height = _screen.height;
  2463 	height = _screen.height;
  2461 
  2464 
  2462 	w = AllocateWindow(0, 0, width, height, MainWindowWndProc, WC_MAIN_WINDOW, NULL);
  2465 	w = AllocateWindow(0, 0, width, height, MainWindowWndProc, WC_MAIN_WINDOW, NULL);
  2463 	AssignWindowViewport(w, 0, 0, width, height, TileXY(32, 32), 0);
  2466 	AssignWindowViewport(w, 0, 0, width, height, TileXY(32, 32), ZOOM_LVL_VIEWPORT);
  2464 
  2467 
  2465 	/* XXX: these are not done */
  2468 	/* XXX: these are not done */
  2466 	switch (_game_mode) {
  2469 	switch (_game_mode) {
  2467 		default: NOT_REACHED();
  2470 		default: NOT_REACHED();
  2468 		case GM_MENU:
  2471 		case GM_MENU:
  2512 
  2515 
  2513 void InitializeMainGui()
  2516 void InitializeMainGui()
  2514 {
  2517 {
  2515 	/* Clean old GUI values */
  2518 	/* Clean old GUI values */
  2516 	_last_built_railtype = RAILTYPE_RAIL;
  2519 	_last_built_railtype = RAILTYPE_RAIL;
  2517 }
  2520 	_last_built_roadtype = ROADTYPE_ROAD;
  2518 
  2521 }
  2519 
  2522 
  2520 
  2523 
       
  2524