src/main_gui.cpp
branchgamebalance
changeset 9895 7bd07f43b0e3
parent 6527 f584ab6d87f8
child 9906 6f41b8713b65
equal deleted inserted replaced
9894:70d78ac95d6c 9895:7bd07f43b0e3
    50 
    50 
    51 static byte _terraform_size = 1;
    51 static byte _terraform_size = 1;
    52 RailType _last_built_railtype;
    52 RailType _last_built_railtype;
    53 static int _scengen_town_size = 2; // depress medium-sized towns per default
    53 static int _scengen_town_size = 2; // depress medium-sized towns per default
    54 
    54 
    55 extern void GenerateIndustries(void);
    55 extern void GenerateIndustries();
    56 extern bool GenerateTowns(void);
    56 extern bool GenerateTowns();
    57 
    57 
    58 
    58 
    59 void HandleOnEditText(const char *str)
    59 void HandleOnEditText(const char *str)
    60 {
    60 {
    61 	int id = _rename_id;
    61 	int id = _rename_id;
   134 
   134 
   135 static void ToolbarPauseClick(Window *w)
   135 static void ToolbarPauseClick(Window *w)
   136 {
   136 {
   137 	if (_networking && !_network_server) return; // only server can pause the game
   137 	if (_networking && !_network_server) return; // only server can pause the game
   138 
   138 
   139 	if (DoCommandP(0, _pause ? 0 : 1, 0, NULL, CMD_PAUSE)) SndPlayFx(SND_15_BEEP);
   139 	if (DoCommandP(0, _pause_game ? 0 : 1, 0, NULL, CMD_PAUSE)) SndPlayFx(SND_15_BEEP);
   140 }
   140 }
   141 
   141 
   142 static void ToolbarFastForwardClick(Window *w)
   142 static void ToolbarFastForwardClick(Window *w)
   143 {
   143 {
   144 	_fast_forward ^= true;
   144 	_fast_forward ^= true;
   263 	}
   263 	}
   264 }
   264 }
   265 
   265 
   266 static void MenuClickShowTrains(int index)
   266 static void MenuClickShowTrains(int index)
   267 {
   267 {
   268 	ShowVehicleListWindow((PlayerID)index, VEH_Train);
   268 	ShowVehicleListWindow((PlayerID)index, VEH_TRAIN);
   269 }
   269 }
   270 
   270 
   271 static void MenuClickShowRoad(int index)
   271 static void MenuClickShowRoad(int index)
   272 {
   272 {
   273 	ShowVehicleListWindow((PlayerID)index, VEH_Road);
   273 	ShowVehicleListWindow((PlayerID)index, VEH_ROAD);
   274 }
   274 }
   275 
   275 
   276 static void MenuClickShowShips(int index)
   276 static void MenuClickShowShips(int index)
   277 {
   277 {
   278 	ShowVehicleListWindow((PlayerID)index, VEH_Ship);
   278 	ShowVehicleListWindow((PlayerID)index, VEH_SHIP);
   279 }
   279 }
   280 
   280 
   281 static void MenuClickShowAir(int index)
   281 static void MenuClickShowAir(int index)
   282 {
   282 {
   283 	ShowVehicleListWindow((PlayerID)index, VEH_Aircraft);
   283 	ShowVehicleListWindow((PlayerID)index, VEH_AIRCRAFT);
   284 }
   284 }
   285 
   285 
   286 static void MenuClickBuildRail(int index)
   286 static void MenuClickBuildRail(int index)
   287 {
   287 {
   288 	_last_built_railtype = (RailType)index;
   288 	_last_built_railtype = (RailType)index;
   335 	_rename_what = 1;
   335 	_rename_what = 1;
   336 	SetDParam(0, id);
   336 	SetDParam(0, id);
   337 	ShowQueryString(STR_WAYPOINT_RAW, STR_EDIT_WAYPOINT_NAME, 30, 180, NULL, CS_ALPHANUMERAL);
   337 	ShowQueryString(STR_WAYPOINT_RAW, STR_EDIT_WAYPOINT_NAME, 30, 180, NULL, CS_ALPHANUMERAL);
   338 }
   338 }
   339 
   339 
   340 static void SelectSignTool(void)
   340 static void SelectSignTool()
   341 {
   341 {
   342 	if (_cursor.sprite == SPR_CURSOR_SIGN) {
   342 	if (_cursor.sprite == SPR_CURSOR_SIGN) {
   343 		ResetObjectToPlace();
   343 		ResetObjectToPlace();
   344 	} else {
   344 	} else {
   345 		SetObjectToPlace(SPR_CURSOR_SIGN, PAL_NONE, 1, WC_MAIN_TOOLBAR, 0);
   345 		SetObjectToPlace(SPR_CURSOR_SIGN, PAL_NONE, 1, WC_MAIN_TOOLBAR, 0);
   368 		case 1: ShowMessageOptions();  break;
   368 		case 1: ShowMessageOptions();  break;
   369 		case 2: ShowMessageHistory();  break;
   369 		case 2: ShowMessageHistory();  break;
   370 	}
   370 	}
   371 }
   371 }
   372 
   372 
   373 static void MenuClickSmallScreenshot(void)
   373 static void MenuClickSmallScreenshot()
   374 {
   374 {
   375 	SetScreenshotType(SC_VIEWPORT);
   375 	SetScreenshotType(SC_VIEWPORT);
   376 }
   376 }
   377 
   377 
   378 static void MenuClickWorldScreenshot(void)
   378 static void MenuClickWorldScreenshot()
   379 {
   379 {
   380 	SetScreenshotType(SC_WORLD);
   380 	SetScreenshotType(SC_WORLD);
   381 }
   381 }
   382 
   382 
   383 static void MenuClickHelp(int index)
   383 static void MenuClickHelp(int index)
   810 {
   810 {
   811 	const Vehicle *v;
   811 	const Vehicle *v;
   812 	int dis = -1;
   812 	int dis = -1;
   813 
   813 
   814 	FOR_ALL_VEHICLES(v) {
   814 	FOR_ALL_VEHICLES(v) {
   815 		if (v->type == VEH_Train && IsFrontEngine(v)) CLRBIT(dis, v->owner);
   815 		if (v->type == VEH_TRAIN && IsFrontEngine(v)) CLRBIT(dis, v->owner);
   816 	}
   816 	}
   817 	PopupMainPlayerToolbMenu(w, 310, 13, dis);
   817 	PopupMainPlayerToolbMenu(w, 310, 13, dis);
   818 }
   818 }
   819 
   819 
   820 static void ToolbarRoadClick(Window *w)
   820 static void ToolbarRoadClick(Window *w)
   821 {
   821 {
   822 	const Vehicle *v;
   822 	const Vehicle *v;
   823 	int dis = -1;
   823 	int dis = -1;
   824 
   824 
   825 	FOR_ALL_VEHICLES(v) {
   825 	FOR_ALL_VEHICLES(v) {
   826 		if (v->type == VEH_Road) CLRBIT(dis, v->owner);
   826 		if (v->type == VEH_ROAD) CLRBIT(dis, v->owner);
   827 	}
   827 	}
   828 	PopupMainPlayerToolbMenu(w, 332, 14, dis);
   828 	PopupMainPlayerToolbMenu(w, 332, 14, dis);
   829 }
   829 }
   830 
   830 
   831 static void ToolbarShipClick(Window *w)
   831 static void ToolbarShipClick(Window *w)
   832 {
   832 {
   833 	const Vehicle *v;
   833 	const Vehicle *v;
   834 	int dis = -1;
   834 	int dis = -1;
   835 
   835 
   836 	FOR_ALL_VEHICLES(v) {
   836 	FOR_ALL_VEHICLES(v) {
   837 		if (v->type == VEH_Ship) CLRBIT(dis, v->owner);
   837 		if (v->type == VEH_SHIP) CLRBIT(dis, v->owner);
   838 	}
   838 	}
   839 	PopupMainPlayerToolbMenu(w, 354, 15, dis);
   839 	PopupMainPlayerToolbMenu(w, 354, 15, dis);
   840 }
   840 }
   841 
   841 
   842 static void ToolbarAirClick(Window *w)
   842 static void ToolbarAirClick(Window *w)
   843 {
   843 {
   844 	const Vehicle *v;
   844 	const Vehicle *v;
   845 	int dis = -1;
   845 	int dis = -1;
   846 
   846 
   847 	FOR_ALL_VEHICLES(v) {
   847 	FOR_ALL_VEHICLES(v) {
   848 		if (v->type == VEH_Aircraft) CLRBIT(dis, v->owner);
   848 		if (v->type == VEH_AIRCRAFT) CLRBIT(dis, v->owner);
   849 	}
   849 	}
   850 	PopupMainPlayerToolbMenu(w, 376, 16, dis);
   850 	PopupMainPlayerToolbMenu(w, 376, 16, dis);
   851 }
   851 }
   852 
   852 
   853 /* Zooms a viewport in a window in or out */
   853 /* Zooms a viewport in a window in or out */
  1377 	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON,
  1377 	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON,
  1378 	_scen_edit_land_gen_widgets,
  1378 	_scen_edit_land_gen_widgets,
  1379 	ScenEditLandGenWndProc,
  1379 	ScenEditLandGenWndProc,
  1380 };
  1380 };
  1381 
  1381 
  1382 static inline void ShowEditorTerraformToolBar(void)
  1382 static inline void ShowEditorTerraformToolBar()
  1383 {
  1383 {
  1384 	AllocateWindowDescFront(&_scen_edit_land_gen_desc, 0);
  1384 	AllocateWindowDescFront(&_scen_edit_land_gen_desc, 0);
  1385 }
  1385 }
  1386 
  1386 
  1387 static void ToolbarScenGenLand(Window *w)
  1387 static void ToolbarScenGenLand(Window *w)
  1591 {    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,   172,   183, STR_0261_SUGAR_MINE,          STR_0284_CONSTRUCT_SUGAR_MINE},
  1591 {    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   167,   172,   183, STR_0261_SUGAR_MINE,          STR_0284_CONSTRUCT_SUGAR_MINE},
  1592 {   WIDGETS_END},
  1592 {   WIDGETS_END},
  1593 };
  1593 };
  1594 
  1594 
  1595 
  1595 
  1596 static bool AnyTownExists(void)
  1596 static bool AnyTownExists()
  1597 {
  1597 {
  1598 	const Town *t;
  1598 	const Town *t;
  1599 
  1599 
  1600 	FOR_ALL_TOWNS(t) return true;
  1600 	FOR_ALL_TOWNS(t) return true;
  1601 
  1601 
  1839 		case WKC_F8: ShowPlayerFinances(_local_player); break;
  1839 		case WKC_F8: ShowPlayerFinances(_local_player); break;
  1840 		case WKC_F9: ShowPlayerCompany(_local_player); break;
  1840 		case WKC_F9: ShowPlayerCompany(_local_player); break;
  1841 		case WKC_F10:ShowOperatingProfitGraph(); break;
  1841 		case WKC_F10:ShowOperatingProfitGraph(); break;
  1842 		case WKC_F11: ShowCompanyLeagueTable(); break;
  1842 		case WKC_F11: ShowCompanyLeagueTable(); break;
  1843 		case WKC_F12: ShowBuildIndustryWindow(); break;
  1843 		case WKC_F12: ShowBuildIndustryWindow(); break;
  1844 		case WKC_SHIFT | WKC_F1: ShowVehicleListWindow(_local_player, VEH_Train); break;
  1844 		case WKC_SHIFT | WKC_F1: ShowVehicleListWindow(_local_player, VEH_TRAIN); break;
  1845 		case WKC_SHIFT | WKC_F2: ShowVehicleListWindow(_local_player, VEH_Road); break;
  1845 		case WKC_SHIFT | WKC_F2: ShowVehicleListWindow(_local_player, VEH_ROAD); break;
  1846 		case WKC_SHIFT | WKC_F3: ShowVehicleListWindow(_local_player, VEH_Ship); break;
  1846 		case WKC_SHIFT | WKC_F3: ShowVehicleListWindow(_local_player, VEH_SHIP); break;
  1847 		case WKC_SHIFT | WKC_F4: ShowVehicleListWindow(_local_player, VEH_Aircraft); break;
  1847 		case WKC_SHIFT | WKC_F4: ShowVehicleListWindow(_local_player, VEH_AIRCRAFT); break;
  1848 		case WKC_SHIFT | WKC_F5: ToolbarZoomInClick(w); break;
  1848 		case WKC_SHIFT | WKC_F5: ToolbarZoomInClick(w); break;
  1849 		case WKC_SHIFT | WKC_F6: ToolbarZoomOutClick(w); break;
  1849 		case WKC_SHIFT | WKC_F6: ToolbarZoomOutClick(w); break;
  1850 		case WKC_SHIFT | WKC_F7: ShowBuildRailToolbar(_last_built_railtype, -1); break;
  1850 		case WKC_SHIFT | WKC_F7: ShowBuildRailToolbar(_last_built_railtype, -1); break;
  1851 		case WKC_SHIFT | WKC_F8: ShowBuildRoadToolbar(); break;
  1851 		case WKC_SHIFT | WKC_F8: ShowBuildRoadToolbar(); break;
  1852 		case WKC_SHIFT | WKC_F9: ShowBuildDocksToolbar(); break;
  1852 		case WKC_SHIFT | WKC_F9: ShowBuildDocksToolbar(); break;
  1871 		RaiseWindowWidget(w, 25);
  1871 		RaiseWindowWidget(w, 25);
  1872 		SetWindowDirty(w);
  1872 		SetWindowDirty(w);
  1873 	} break;
  1873 	} break;
  1874 
  1874 
  1875 	case WE_MOUSELOOP:
  1875 	case WE_MOUSELOOP:
  1876 		if (IsWindowWidgetLowered(w, 0) != !!_pause) {
  1876 		if (IsWindowWidgetLowered(w, 0) != !!_pause_game) {
  1877 			ToggleWidgetLoweredState(w, 0);
  1877 			ToggleWidgetLoweredState(w, 0);
  1878 			InvalidateWidget(w, 0);
  1878 			InvalidateWidget(w, 0);
  1879 		}
  1879 		}
  1880 
  1880 
  1881 		if (IsWindowWidgetLowered(w, 1) != !!_fast_forward) {
  1881 		if (IsWindowWidgetLowered(w, 1) != !!_fast_forward) {
  2070 		RaiseWindowWidget(w, 25);
  2070 		RaiseWindowWidget(w, 25);
  2071 		SetWindowDirty(w);
  2071 		SetWindowDirty(w);
  2072 	} break;
  2072 	} break;
  2073 
  2073 
  2074 	case WE_MOUSELOOP:
  2074 	case WE_MOUSELOOP:
  2075 		if (IsWindowWidgetLowered(w, 0) != !!_pause) {
  2075 		if (IsWindowWidgetLowered(w, 0) != !!_pause_game) {
  2076 			ToggleWidgetLoweredState(w, 0);
  2076 			ToggleWidgetLoweredState(w, 0);
  2077 			SetWindowDirty(w);
  2077 			SetWindowDirty(w);
  2078 		}
  2078 		}
  2079 
  2079 
  2080 		if (IsWindowWidgetLowered(w, 1) != !!_fast_forward) {
  2080 		if (IsWindowWidgetLowered(w, 1) != !!_fast_forward) {
  2153 		const Player *p = (_local_player == PLAYER_SPECTATOR) ? NULL : GetPlayer(_local_player);
  2153 		const Player *p = (_local_player == PLAYER_SPECTATOR) ? NULL : GetPlayer(_local_player);
  2154 
  2154 
  2155 		DrawWindowWidgets(w);
  2155 		DrawWindowWidgets(w);
  2156 		SetDParam(0, _date);
  2156 		SetDParam(0, _date);
  2157 		DrawStringCentered(
  2157 		DrawStringCentered(
  2158 			70, 1, (_pause || _patches.status_long_date) ? STR_00AF : STR_00AE, 0
  2158 			70, 1, (_pause_game || _patches.status_long_date) ? STR_00AF : STR_00AE, 0
  2159 		);
  2159 		);
  2160 
  2160 
  2161 		if (p != NULL) {
  2161 		if (p != NULL) {
  2162 			/* Draw player money */
  2162 			/* Draw player money */
  2163 			SetDParam64(0, p->money64);
  2163 			SetDParam64(0, p->money64);
  2167 		/* Draw status bar */
  2167 		/* Draw status bar */
  2168 		if (w->message.msg) { // true when saving is active
  2168 		if (w->message.msg) { // true when saving is active
  2169 			DrawStringCentered(320, 1, STR_SAVING_GAME, 0);
  2169 			DrawStringCentered(320, 1, STR_SAVING_GAME, 0);
  2170 		} else if (_do_autosave) {
  2170 		} else if (_do_autosave) {
  2171 			DrawStringCentered(320, 1, STR_032F_AUTOSAVE, 0);
  2171 			DrawStringCentered(320, 1, STR_032F_AUTOSAVE, 0);
  2172 		} else if (_pause) {
  2172 		} else if (_pause_game) {
  2173 			DrawStringCentered(320, 1, STR_0319_PAUSED, 0);
  2173 			DrawStringCentered(320, 1, STR_0319_PAUSED, 0);
  2174 		} else if (WP(w,def_d).data_1 > -1280 && FindWindowById(WC_NEWS_WINDOW,0) == NULL && _statusbar_news_item.string_id != 0) {
  2174 		} else if (WP(w,def_d).data_1 > -1280 && FindWindowById(WC_NEWS_WINDOW,0) == NULL && _statusbar_news_item.string_id != 0) {
  2175 			/* Draw the scrolling news text */
  2175 			/* Draw the scrolling news text */
  2176 			if (!DrawScrollingStatusText(&_statusbar_news_item, WP(w,def_d).data_1))
  2176 			if (!DrawScrollingStatusText(&_statusbar_news_item, WP(w,def_d).data_1))
  2177 				WP(w,def_d).data_1 = -1280;
  2177 				WP(w,def_d).data_1 = -1280;
  2199 			default: ResetObjectToPlace();
  2199 			default: ResetObjectToPlace();
  2200 		}
  2200 		}
  2201 		break;
  2201 		break;
  2202 
  2202 
  2203 	case WE_TICK: {
  2203 	case WE_TICK: {
  2204 		if (_pause) return;
  2204 		if (_pause_game) return;
  2205 
  2205 
  2206 		if (WP(w, def_d).data_1 > -1280) { // Scrolling text
  2206 		if (WP(w, def_d).data_1 > -1280) { // Scrolling text
  2207 			WP(w, def_d).data_1 -= 2;
  2207 			WP(w, def_d).data_1 -= 2;
  2208 			InvalidateWidget(w, 1);
  2208 			InvalidateWidget(w, 1);
  2209 		}
  2209 		}
  2233 	WDF_STD_TOOLTIPS | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS,
  2233 	WDF_STD_TOOLTIPS | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS,
  2234 	_main_status_widgets,
  2234 	_main_status_widgets,
  2235 	StatusBarWndProc
  2235 	StatusBarWndProc
  2236 };
  2236 };
  2237 
  2237 
  2238 extern void UpdateAllStationVirtCoord(void);
  2238 extern void UpdateAllStationVirtCoord();
  2239 
  2239 
  2240 static void MainWindowWndProc(Window *w, WindowEvent *e)
  2240 static void MainWindowWndProc(Window *w, WindowEvent *e)
  2241 {
  2241 {
  2242 	int off_x;
  2242 	int off_x;
  2243 
  2243 
  2399 			break;
  2399 			break;
  2400 	}
  2400 	}
  2401 }
  2401 }
  2402 
  2402 
  2403 
  2403 
  2404 void ShowSelectGameWindow(void);
  2404 void ShowSelectGameWindow();
  2405 
  2405 
  2406 void SetupColorsAndInitialWindow(void)
  2406 void SetupColorsAndInitialWindow()
  2407 {
  2407 {
  2408 	uint i;
  2408 	uint i;
  2409 	Window *w;
  2409 	Window *w;
  2410 	int width, height;
  2410 	int width, height;
  2411 
  2411 
  2434 			ShowVitalWindows();
  2434 			ShowVitalWindows();
  2435 			break;
  2435 			break;
  2436 	}
  2436 	}
  2437 }
  2437 }
  2438 
  2438 
  2439 void ShowVitalWindows(void)
  2439 void ShowVitalWindows()
  2440 {
  2440 {
  2441 	Window *w;
  2441 	Window *w;
  2442 
  2442 
  2443 	w = AllocateWindowDesc((_game_mode != GM_EDITOR) ? &_toolb_normal_desc : &_toolb_scen_desc);
  2443 	w = AllocateWindowDesc((_game_mode != GM_EDITOR) ? &_toolb_normal_desc : &_toolb_scen_desc);
  2444 	DoZoomInOutWindow(ZOOM_NONE, w);
  2444 	DoZoomInOutWindow(ZOOM_NONE, w);
  2459 	CLRBITS(w->flags4, WF_WHITE_BORDER_MASK);
  2459 	CLRBITS(w->flags4, WF_WHITE_BORDER_MASK);
  2460 
  2460 
  2461 	WP(w,def_d).data_1 = -1280;
  2461 	WP(w,def_d).data_1 = -1280;
  2462 }
  2462 }
  2463 
  2463 
  2464 void GameSizeChanged(void)
  2464 void GameSizeChanged()
  2465 {
  2465 {
  2466 	_cur_resolution[0] = _screen.width;
  2466 	_cur_resolution[0] = _screen.width;
  2467 	_cur_resolution[1] = _screen.height;
  2467 	_cur_resolution[1] = _screen.height;
  2468 	RelocateAllWindows(_screen.width, _screen.height);
  2468 	RelocateAllWindows(_screen.width, _screen.height);
  2469 	ScreenSizeChanged();
  2469 	ScreenSizeChanged();
  2470 	MarkWholeScreenDirty();
  2470 	MarkWholeScreenDirty();
  2471 }
  2471 }
  2472 
  2472 
  2473 void InitializeMainGui(void)
  2473 void InitializeMainGui()
  2474 {
  2474 {
  2475 	/* Clean old GUI values */
  2475 	/* Clean old GUI values */
  2476 	_last_built_railtype = RAILTYPE_RAIL;
  2476 	_last_built_railtype = RAILTYPE_RAIL;
  2477 }
  2477 }
  2478 
  2478