|
5 | 5 | from controllers.controller import Controller |
6 | 6 | from core.dynmap import Dynmap |
7 | 7 | from core.dynmapcoords import DynmapCoords |
| 8 | +from core.gridref import GridRef |
8 | 9 | from core.map import Map |
9 | 10 | from core.state import State |
10 | 11 | from models.config import Config |
@@ -81,25 +82,60 @@ def download(self): |
81 | 82 | input_range['to_x'], input_range['to_y'], |
82 | 83 | input_range['to_z'] |
83 | 84 | ) |
84 | | - |
85 | | - map_id = user_input['map_id'].split(' - ') |
86 | | - world_name, map_name = map_id[0], map_id[1] |
87 | | - |
| 85 | + elif user_input['coord_mode'] == 'grid': |
88 | 86 | try: |
89 | | - stitch_args = Dynmap.download_tiles(tiles_dir, self.state.selected_server.dynmap_url, world_name, |
90 | | - map_name, |
91 | | - input_range['zoom'], from_tile_x, from_tile_y, |
92 | | - to_tile_x, to_tile_y, self.update_progress) |
93 | | - except Exception: |
94 | | - self.view.display_error('Failed to download tiles') |
| 87 | + from_region_x, from_region_y = GridRef.grid_ref_to_mc(input_range['from']) |
| 88 | + except ValueError as e: |
| 89 | + self.view.display_error('From grid reference: {}'.format(str(e))) |
95 | 90 | return |
96 | 91 |
|
97 | 92 | try: |
98 | | - Map.stitch(tiles_dir, user_input['output_dir'], stitch_args, self.update_progress) |
99 | | - except Exception: |
100 | | - self.view.display_error('Failed to stitch tiles') |
| 93 | + to_region_x, to_region_y = GridRef.grid_ref_to_mc(input_range['to']) |
| 94 | + except ValueError as e: |
| 95 | + self.view.display_error('To grid reference: {}'.format(str(e))) |
101 | 96 | return |
102 | 97 |
|
| 98 | + low_region_x = min(from_region_x, to_region_x) |
| 99 | + low_region_y = min(from_region_y, to_region_y) |
| 100 | + high_region_x = max(from_region_x, to_region_x) |
| 101 | + high_region_y = max(from_region_y, to_region_y) |
| 102 | + |
| 103 | + from_x = (low_region_x << 5) << 4 |
| 104 | + from_y = (low_region_y << 5) << 4 |
| 105 | + to_x = (((high_region_x + 1 << 5) - 1) + 1 << 4) - 1 |
| 106 | + to_y = (((high_region_y + 1 << 5) - 1) + 1 << 4) - 1 |
| 107 | + |
| 108 | + from_tile_x, from_tile_y = DynmapCoords.mc_to_tile(map_obj, input_range['zoom'], from_x, 64, from_y) |
| 109 | + to_tile_x, to_tile_y = DynmapCoords.mc_to_tile(map_obj, input_range['zoom'], to_x, 64, to_y) |
| 110 | + elif user_input['coord_mode'] == 'dynmap': |
| 111 | + pass |
| 112 | + else: |
| 113 | + self.view.display_error('Invalid coordinate mode') |
| 114 | + return |
| 115 | + |
| 116 | + low_tile_x = min(from_tile_x, to_tile_x) |
| 117 | + low_tile_y = min(from_tile_y, to_tile_y) |
| 118 | + high_tile_x = max(from_tile_x, to_tile_x) |
| 119 | + high_tile_y = max(from_tile_y, to_tile_y) |
| 120 | + |
| 121 | + map_id = user_input['map_id'].split(' - ') |
| 122 | + world_name, map_name = map_id[0], map_id[1] |
| 123 | + |
| 124 | + try: |
| 125 | + stitch_args = Dynmap.download_tiles(tiles_dir, self.state.selected_server.dynmap_url, world_name, |
| 126 | + map_name, |
| 127 | + input_range['zoom'], low_tile_x, low_tile_y, |
| 128 | + high_tile_x, high_tile_y, self.update_progress) |
| 129 | + except Exception: |
| 130 | + self.view.display_error('Failed to download tiles') |
| 131 | + return |
| 132 | + |
| 133 | + try: |
| 134 | + Map.stitch(tiles_dir, user_input['output_dir'], stitch_args, self.update_progress) |
| 135 | + except Exception: |
| 136 | + self.view.display_error('Failed to stitch tiles') |
| 137 | + return |
| 138 | + |
103 | 139 | self.update_progress('Idle', 0, 1) |
104 | 140 |
|
105 | 141 | def update_progress(self, message: str, i, total): |
|
0 commit comments