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