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 |
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 |