maps4fs 1.3.2__py3-none-any.whl → 1.3.6__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of maps4fs might be problematic. Click here for more details.

@@ -123,8 +123,6 @@ class Background(Component):
123
123
  self.generate_obj_files()
124
124
  if self.map.background_settings.generate_water:
125
125
  self.generate_water_resources_obj()
126
- else:
127
- self.logger.info("Light version is enabled, obj files will not be generated.")
128
126
 
129
127
  def make_copy(self, dem_path: str, dem_name: str) -> None:
130
128
  """Copies DEM data to additional DEM file.
@@ -138,7 +136,7 @@ class Background(Component):
138
136
  additional_dem_path = os.path.join(dem_directory, dem_name)
139
137
 
140
138
  shutil.copyfile(dem_path, additional_dem_path)
141
- self.logger.info("Additional DEM data was copied to %s.", additional_dem_path)
139
+ self.logger.debug("Additional DEM data was copied to %s.", additional_dem_path)
142
140
 
143
141
  def info_sequence(self) -> dict[str, str | float | int]:
144
142
  """Returns a dictionary with information about the background terrain.
@@ -340,7 +338,7 @@ class Background(Component):
340
338
  preview_path = os.path.join(self.previews_directory, "background_dem.stl")
341
339
  mesh.export(preview_path)
342
340
 
343
- self.logger.info("STL file saved: %s", preview_path)
341
+ self.logger.debug("STL file saved: %s", preview_path)
344
342
 
345
343
  self.stl_preview_path = preview_path # pylint: disable=attribute-defined-outside-init
346
344
 
@@ -478,7 +476,7 @@ class Background(Component):
478
476
  rotation=self.rotation,
479
477
  map_directory=self.map_directory,
480
478
  logger=self.logger,
481
- custom_schema=background_layers, # type: ignore
479
+ texture_custom_schema=background_layers, # type: ignore
482
480
  )
483
481
 
484
482
  self.background_texture.preprocess()
@@ -501,7 +499,7 @@ class Background(Component):
501
499
 
502
500
  background_save_path = os.path.join(self.water_directory, "water_resources.png")
503
501
  cv2.imwrite(background_save_path, background_image)
504
- self.logger.info("Background texture saved: %s", background_save_path)
502
+ self.logger.debug("Background texture saved: %s", background_save_path)
505
503
  self.water_resources_path = background_save_path # pylint: disable=W0201
506
504
 
507
505
  def subtraction(self) -> None:
@@ -38,7 +38,7 @@ class Config(Component):
38
38
  self.logger.warning("Map XML file not found: %s.", self._map_xml_path)
39
39
  return
40
40
  tree = ET.parse(self._map_xml_path)
41
- self.logger.info("Map XML file loaded from: %s.", self._map_xml_path)
41
+ self.logger.debug("Map XML file loaded from: %s.", self._map_xml_path)
42
42
  root = tree.getroot()
43
43
  for map_elem in root.iter("map"):
44
44
  map_elem.set("width", str(self.map_size))
maps4fs/generator/dem.py CHANGED
@@ -255,7 +255,7 @@ class DEM(Component):
255
255
  )
256
256
 
257
257
  cv2.imwrite(self._dem_path, resampled_data)
258
- self.logger.info("DEM data was saved to %s.", self._dem_path)
258
+ self.logger.debug("DEM data was saved to %s.", self._dem_path)
259
259
 
260
260
  if self.rotation:
261
261
  self.rotate_dem()
@@ -401,7 +401,7 @@ class DEM(Component):
401
401
 
402
402
  scaling_factor = self._get_scaling_factor(max_dev)
403
403
  adjusted_max_height = int(65535 * scaling_factor)
404
- self.logger.info(
404
+ self.logger.debug(
405
405
  "Maximum deviation: %s. Scaling factor: %s. Adjusted max height: %s.",
406
406
  max_dev,
407
407
  scaling_factor,
maps4fs/generator/grle.py CHANGED
@@ -43,7 +43,7 @@ class GRLE(Component):
43
43
  try:
44
44
  grle_schema_path = self.game.grle_schema
45
45
  except ValueError:
46
- self.logger.info("GRLE schema processing is not implemented for this game.")
46
+ self.logger.warning("GRLE schema processing is not implemented for this game.")
47
47
  return
48
48
 
49
49
  try:
@@ -57,7 +57,7 @@ class GRLE(Component):
57
57
  def process(self) -> None:
58
58
  """Generates InfoLayer PNG files based on the GRLE schema."""
59
59
  if not self._grle_schema:
60
- self.logger.info("GRLE schema is not obtained, skipping the processing.")
60
+ self.logger.debug("GRLE schema is not obtained, skipping the processing.")
61
61
  return
62
62
 
63
63
  for info_layer in self._grle_schema:
@@ -84,7 +84,7 @@ class GRLE(Component):
84
84
 
85
85
  self._add_farmlands()
86
86
  if self.game.code == "FS25":
87
- self.logger.info("Game is %s, plants will be added.", self.game.code)
87
+ self.logger.debug("Game is %s, plants will be added.", self.game.code)
88
88
  self._add_plants()
89
89
  else:
90
90
  self.logger.warning("Adding plants it's not supported for the %s.", self.game.code)
@@ -120,7 +120,7 @@ class GRLE(Component):
120
120
  self.game.weights_dir_path(self.map_directory), "infoLayer_farmlands.png"
121
121
  )
122
122
 
123
- self.logger.info(
123
+ self.logger.debug(
124
124
  "Adding farmlands to the InfoLayer PNG file: %s.", info_layer_farmlands_path
125
125
  )
126
126
 
@@ -190,10 +190,10 @@ class GRLE(Component):
190
190
 
191
191
  tree.write(farmlands_xml_path)
192
192
 
193
- self.logger.info("Farmlands added to the farmlands XML file: %s.", farmlands_xml_path)
193
+ self.logger.debug("Farmlands added to the farmlands XML file: %s.", farmlands_xml_path)
194
194
 
195
195
  cv2.imwrite(info_layer_farmlands_path, image) # pylint: disable=no-member
196
- self.logger.info(
196
+ self.logger.debug(
197
197
  "Farmlands added to the InfoLayer PNG file: %s.", info_layer_farmlands_path
198
198
  )
199
199
 
@@ -354,7 +354,7 @@ class GRLE(Component):
354
354
 
355
355
  # Add islands of plants to the base image.
356
356
  island_count = self.map_size
357
- self.logger.info("Adding %s islands of plants to the base image.", island_count)
357
+ self.logger.debug("Adding %s islands of plants to the base image.", island_count)
358
358
  if self.map.grle_settings.random_plants:
359
359
  grass_image_copy = create_island_of_plants(grass_image_copy, island_count)
360
360
  self.logger.debug("Islands of plants added to the base image.")
@@ -391,4 +391,4 @@ class GRLE(Component):
391
391
  # Ensure that order of channels is correct because CV2 uses BGR and we need RGB.
392
392
  density_map_fruits = cv2.cvtColor(density_map_fruits, cv2.COLOR_BGR2RGB)
393
393
  cv2.imwrite(density_map_fruit_path, density_map_fruits)
394
- self.logger.info("Updated density map for fruits saved in %s.", density_map_fruit_path)
394
+ self.logger.debug("Updated density map for fruits saved in %s.", density_map_fruit_path)
maps4fs/generator/i3d.py CHANGED
@@ -47,19 +47,20 @@ class I3d(Component):
47
47
  self._map_i3d_path = self.game.i3d_file_path(self.map_directory)
48
48
  self.logger.debug("Map I3D path: %s.", self._map_i3d_path)
49
49
  except NotImplementedError:
50
- self.logger.info("I3D file processing is not implemented for this game.")
50
+ self.logger.warning("I3D file processing is not implemented for this game.")
51
51
  self._map_i3d_path = None
52
52
 
53
53
  def process(self) -> None:
54
54
  """Updates the map I3D file with the default settings."""
55
55
  self._update_i3d_file()
56
56
  self._add_fields()
57
- self._add_forests()
57
+ if self.game.code == "FS25":
58
+ self._add_forests()
58
59
 
59
60
  def _get_tree(self) -> ET.ElementTree | None:
60
61
  """Returns the ElementTree instance of the map I3D file."""
61
62
  if not self._map_i3d_path:
62
- self.logger.info("I3D is not obtained, skipping the update.")
63
+ self.logger.debug("I3D is not obtained, skipping the update.")
63
64
  return None
64
65
  if not os.path.isfile(self._map_i3d_path):
65
66
  self.logger.warning("I3D file not found: %s.", self._map_i3d_path)
@@ -117,7 +118,7 @@ class I3d(Component):
117
118
  )
118
119
 
119
120
  tree.write(self._map_i3d_path) # type: ignore
120
- self.logger.info("Map I3D file saved to: %s.", self._map_i3d_path)
121
+ self.logger.debug("Map I3D file saved to: %s.", self._map_i3d_path)
121
122
 
122
123
  def previews(self) -> list[str]:
123
124
  """Returns a list of paths to the preview images (empty list).
@@ -234,7 +235,7 @@ class I3d(Component):
234
235
  field_id += 1
235
236
 
236
237
  tree.write(self._map_i3d_path) # type: ignore
237
- self.logger.info("Map I3D file saved to: %s.", self._map_i3d_path)
238
+ self.logger.debug("Map I3D file saved to: %s.", self._map_i3d_path)
238
239
 
239
240
  def get_name_indicator_node(self, node_id: int, field_id: int) -> tuple[ET.Element, int]:
240
241
  """Creates a name indicator node with given node ID and field ID.
@@ -327,24 +328,28 @@ class I3d(Component):
327
328
  # pylint: disable=R0911
328
329
  def _add_forests(self) -> None:
329
330
  """Adds forests to the map I3D file."""
330
- try:
331
- tree_schema_path = self.game.tree_schema
332
- except ValueError:
333
- self.logger.warning("Tree schema path not set for the Game %s.", self.game.code)
334
- return
335
-
336
- if not os.path.isfile(tree_schema_path):
337
- self.logger.warning("Tree schema file was not found: %s.", tree_schema_path)
338
- return
339
-
340
- try:
341
- with open(tree_schema_path, "r", encoding="utf-8") as tree_schema_file:
342
- tree_schema: list[dict[str, str | int]] = json.load(tree_schema_file)
343
- except json.JSONDecodeError as e:
344
- self.logger.warning(
345
- "Could not load tree schema from %s with error: %s", tree_schema_path, e
346
- )
347
- return
331
+ custom_schema = self.kwargs.get("tree_custom_schema")
332
+ if custom_schema:
333
+ tree_schema = custom_schema
334
+ else:
335
+ try:
336
+ tree_schema_path = self.game.tree_schema
337
+ except ValueError:
338
+ self.logger.warning("Tree schema path not set for the Game %s.", self.game.code)
339
+ return
340
+
341
+ if not os.path.isfile(tree_schema_path):
342
+ self.logger.warning("Tree schema file was not found: %s.", tree_schema_path)
343
+ return
344
+
345
+ try:
346
+ with open(tree_schema_path, "r", encoding="utf-8") as tree_schema_file:
347
+ tree_schema = json.load(tree_schema_file) # type: ignore
348
+ except json.JSONDecodeError as e:
349
+ self.logger.warning(
350
+ "Could not load tree schema from %s with error: %s", tree_schema_path, e
351
+ )
352
+ return
348
353
 
349
354
  texture_component: Texture | None = self.map.get_component("Texture") # type: ignore
350
355
  if not texture_component:
@@ -399,7 +404,7 @@ class I3d(Component):
399
404
  (xcs, ycs), self.map.i3d_settings.forest_density
400
405
  )
401
406
 
402
- random_tree = choice(tree_schema)
407
+ random_tree = choice(tree_schema) # type: ignore
403
408
  tree_name = random_tree["name"]
404
409
  tree_id = random_tree["reference_id"]
405
410
 
@@ -417,7 +422,7 @@ class I3d(Component):
417
422
  self.logger.info("Added %s trees to the I3D file.", tree_count)
418
423
 
419
424
  tree.write(self._map_i3d_path) # type: ignore
420
- self.logger.info("Map I3D file saved to: %s.", self._map_i3d_path)
425
+ self.logger.debug("Map I3D file saved to: %s.", self._map_i3d_path)
421
426
 
422
427
  @staticmethod
423
428
  def randomize_coordinates(coordinates: tuple[int, int], density: int) -> tuple[float, float]:
maps4fs/generator/map.py CHANGED
@@ -71,10 +71,12 @@ class TextureSettings(NamedTuple):
71
71
  Attributes:
72
72
  dissolve (bool): dissolve the texture into several images.
73
73
  fields_padding (int): padding around the fields.
74
+ skip_drains (bool): skip drains generation.
74
75
  """
75
76
 
76
77
  dissolve: bool = True
77
78
  fields_padding: int = 0
79
+ skip_drains: bool = False
78
80
 
79
81
 
80
82
  # pylint: disable=R0913, R0902
@@ -102,6 +104,7 @@ class Map:
102
104
  grle_settings: GRLESettings = GRLESettings(),
103
105
  i3d_settings: I3DSettings = I3DSettings(),
104
106
  texture_settings: TextureSettings = TextureSettings(),
107
+ **kwargs,
105
108
  ):
106
109
  if not logger:
107
110
  logger = Logger(to_stdout=True, to_file=False)
@@ -137,6 +140,9 @@ class Map:
137
140
  os.makedirs(self.map_directory, exist_ok=True)
138
141
  self.logger.debug("Map directory created: %s", self.map_directory)
139
142
 
143
+ self.texture_custom_schema = kwargs.get("texture_custom_schema", None)
144
+ self.tree_custom_schema = kwargs.get("tree_custom_schema", None)
145
+
140
146
  try:
141
147
  shutil.unpack_archive(game.template_path, self.map_directory)
142
148
  self.logger.debug("Map template unpacked to %s", self.map_directory)
@@ -149,6 +155,14 @@ class Map:
149
155
  Yields:
150
156
  Generator[str, None, None]: Component names.
151
157
  """
158
+ self.logger.info(
159
+ "Starting map generation. Game code: %s. Coordinates: %s, size: %s. Rotation: %s.",
160
+ self.game.code,
161
+ self.coordinates,
162
+ self.size,
163
+ self.rotation,
164
+ )
165
+
152
166
  for game_component in self.game.components:
153
167
  component = game_component(
154
168
  self.game,
@@ -159,6 +173,8 @@ class Map:
159
173
  self.rotation,
160
174
  self.map_directory,
161
175
  self.logger,
176
+ texture_custom_schema=self.texture_custom_schema,
177
+ tree_custom_schema=self.tree_custom_schema,
162
178
  )
163
179
  self.components.append(component)
164
180
 
@@ -184,6 +200,14 @@ class Map:
184
200
  )
185
201
  raise e
186
202
 
203
+ self.logger.info(
204
+ "Map generation completed. Game code: %s. Coordinates: %s, size: %s. Rotation: %s.",
205
+ self.game.code,
206
+ self.coordinates,
207
+ self.size,
208
+ self.rotation,
209
+ )
210
+
187
211
  def get_component(self, component_name: str) -> Component | None:
188
212
  """Get component by name.
189
213
 
@@ -231,7 +255,7 @@ class Map:
231
255
  if remove_source:
232
256
  try:
233
257
  shutil.rmtree(self.map_directory)
234
- self.logger.info("Map directory removed: %s", self.map_directory)
258
+ self.logger.debug("Map directory removed: %s", self.map_directory)
235
259
  except Exception as e: # pylint: disable=W0718
236
- self.logger.error("Error removing map directory %s: %s", self.map_directory, e)
260
+ self.logger.debug("Error removing map directory %s: %s", self.map_directory, e)
237
261
  return archive_path
@@ -178,7 +178,7 @@ class Texture(Component):
178
178
 
179
179
  def preprocess(self) -> None:
180
180
  """Preprocesses the data before the generation."""
181
- custom_schema = self.kwargs.get("custom_schema")
181
+ custom_schema = self.kwargs.get("texture_custom_schema")
182
182
  if custom_schema:
183
183
  layers_schema = custom_schema # type: ignore
184
184
  self.logger.info("Custom schema loaded with %s layers.", len(layers_schema))
@@ -202,7 +202,7 @@ class Texture(Component):
202
202
 
203
203
  base_layer = self.get_base_layer()
204
204
  if base_layer:
205
- self.logger.info("Base layer found: %s.", base_layer.name)
205
+ self.logger.debug("Base layer found: %s.", base_layer.name)
206
206
  else:
207
207
  self.logger.warning("No base layer found.")
208
208
 
@@ -313,7 +313,7 @@ class Texture(Component):
313
313
 
314
314
  for layer in self.layers:
315
315
  self._generate_weights(layer)
316
- self.logger.info("Prepared weights for %s layers.", len(self.layers))
316
+ self.logger.debug("Prepared weights for %s layers.", len(self.layers))
317
317
 
318
318
  def _generate_weights(self, layer: Layer) -> None:
319
319
  """Generates weight files for textures. Each file is a numpy array of zeros and
@@ -388,6 +388,9 @@ class Texture(Component):
388
388
  info_layer_data = defaultdict(list)
389
389
 
390
390
  for layer in layers:
391
+ if self.map.texture_settings.skip_drains and layer.usage == "drain":
392
+ self.logger.debug("Skipping layer %s because of the usage.", layer.name)
393
+ continue
391
394
  if not layer.tags:
392
395
  self.logger.debug("Layer %s has no tags, there's nothing to draw.", layer.name)
393
396
  continue
@@ -416,7 +419,7 @@ class Texture(Component):
416
419
  cumulative_image = cv2.bitwise_or(cumulative_image, output_image)
417
420
 
418
421
  cv2.imwrite(layer_path, output_image)
419
- self.logger.info("Texture %s saved.", layer_path)
422
+ self.logger.debug("Texture %s saved.", layer_path)
420
423
 
421
424
  # Save info layer data.
422
425
  with open(self.info_layer_path, "w", encoding="utf-8") as f:
@@ -481,8 +484,6 @@ class Texture(Component):
481
484
 
482
485
  self.logger.info("Dissolved layer %s.", layer.name)
483
486
 
484
- self.logger.info("Dissolving finished.")
485
-
486
487
  def draw_base_layer(self, cumulative_image: np.ndarray) -> None:
487
488
  """Draws base layer and saves it into the png file.
488
489
  Base layer is the last layer to be drawn, it fills the remaining area of the map.
@@ -496,7 +497,7 @@ class Texture(Component):
496
497
  self.logger.debug("Drawing base layer %s.", layer_path)
497
498
  img = cv2.bitwise_not(cumulative_image)
498
499
  cv2.imwrite(layer_path, img)
499
- self.logger.info("Base texture %s saved.", layer_path)
500
+ self.logger.debug("Base texture %s saved.", layer_path)
500
501
 
501
502
  def get_relative_x(self, x: float) -> int:
502
503
  """Converts UTM X coordinate to relative X coordinate in map image.
@@ -635,9 +636,8 @@ class Texture(Component):
635
636
  is_fieds = info_layer == "fields"
636
637
  try:
637
638
  objects = ox.features_from_bbox(bbox=self.new_bbox, tags=tags)
638
- except Exception as e: # pylint: disable=W0718
639
- self.logger.warning("Error fetching objects for tags: %s.", tags)
640
- self.logger.warning(e)
639
+ except Exception: # pylint: disable=W0718
640
+ self.logger.debug("Error fetching objects for tags: %s.", tags)
641
641
  return
642
642
  objects_utm = ox.projection.project_gdf(objects, to_latlong=False)
643
643
  self.logger.debug("Fetched %s elements for tags: %s.", len(objects_utm), tags)
@@ -712,5 +712,5 @@ class Texture(Component):
712
712
  preview_path = os.path.join(self.previews_directory, "textures_osm.png")
713
713
 
714
714
  cv2.imwrite(preview_path, merged) # type: ignore
715
- self.logger.info("Preview saved to %s.", preview_path)
715
+ self.logger.debug("Preview saved to %s.", preview_path)
716
716
  return preview_path
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: maps4fs
3
- Version: 1.3.2
3
+ Version: 1.3.6
4
4
  Summary: Generate map templates for Farming Simulator from real places.
5
5
  Author-email: iwatkot <iwatkot@gmail.com>
6
6
  License: MIT License
@@ -483,6 +483,8 @@ You can also apply some advanced settings to the map generation process. Note th
483
483
 
484
484
  - Texture dissolving - if enabled, the values from one layer will be splitted between different layers of texture, making it look more natural. By default, it's set to True. Can be turned of for faster processing.
485
485
 
486
+ - Skip drains - if enabled, the tool will not generate the drains and ditches on the map. By default, it's set to False. Use this if you don't need the drains on the map.
487
+
486
488
  ### Farmlands Advanced settings
487
489
 
488
490
  - Farmlands margin - this value (in meters) will be applied to each farmland, making it bigger. You can use the value to adjust how much the farmland should be bigger than the actual field. By default, it's set to 3.
@@ -0,0 +1,21 @@
1
+ maps4fs/__init__.py,sha256=MlM_vkLH_22xoBwhoRD52JDECCmeAJ8gBQr7RMQZmis,261
2
+ maps4fs/logger.py,sha256=B-NEYpMjPAAqlV4VpfTi6nbBFnEABVtQOaYe6nMpidg,1489
3
+ maps4fs/generator/__init__.py,sha256=zZMLEkGzb4z0xql650gOtGSvcgX58DnJ2yN3vC2daRk,43
4
+ maps4fs/generator/background.py,sha256=KFoO6GKaNrJDUoMrDyeroZG63Cv9aGkMgHaa0QYEpiU,22306
5
+ maps4fs/generator/component.py,sha256=XN-3Zx0bujugpuRk3YB-pYNwUHREdyt_cLxPd7pr57g,17967
6
+ maps4fs/generator/config.py,sha256=0QmK052B8bxyHVhg3jzCORLfOBMMmqVfhhbqXKf6OMk,4383
7
+ maps4fs/generator/dem.py,sha256=MZf3ZjawJ977TxqB1q9nNpvPZUNwfmm2EaJDtVU-eCU,15939
8
+ maps4fs/generator/game.py,sha256=ZQeYzPzPB3CG41avdhNCyTZpHEeedqNBuAbNevTZuXg,7931
9
+ maps4fs/generator/grle.py,sha256=xKIpyhYsZol-IXcBULbX7wWZ1n83BWTZqaf8FLodchE,17499
10
+ maps4fs/generator/i3d.py,sha256=bW7FLAISFKCPUmad7ANz1loWI07oEZlEQOEL_tv0YmQ,18483
11
+ maps4fs/generator/map.py,sha256=a-nwDsKq6u9RLB2htueXtJtdDZbocpj_KxGhBw5AoEI,8776
12
+ maps4fs/generator/qgis.py,sha256=Es8hLuqN_KH8lDfnJE6He2rWYbAKJ3RGPn-o87S6CPI,6116
13
+ maps4fs/generator/texture.py,sha256=tNhv-_AOrv4Wf7knbrN9LZBkvApgsrGffGPAzZScr7g,27745
14
+ maps4fs/toolbox/__init__.py,sha256=zZMLEkGzb4z0xql650gOtGSvcgX58DnJ2yN3vC2daRk,43
15
+ maps4fs/toolbox/background.py,sha256=9BXWNqs_n3HgqDiPztWylgYk_QM4YgBpe6_ZNQAWtSc,2154
16
+ maps4fs/toolbox/dem.py,sha256=z9IPFNmYbjiigb3t02ZenI3Mo8odd19c5MZbjDEovTo,3525
17
+ maps4fs-1.3.6.dist-info/LICENSE.md,sha256=pTKD_oUexcn-yccFCTrMeLkZy0ifLRa-VNcDLqLZaIw,10749
18
+ maps4fs-1.3.6.dist-info/METADATA,sha256=pczjM5FWcRCAJiNtW3JRwl0SeNYEAlQUwc1V2UWyjtY,31082
19
+ maps4fs-1.3.6.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
20
+ maps4fs-1.3.6.dist-info/top_level.txt,sha256=Ue9DSRlejRQRCaJueB0uLcKrWwsEq9zezfv5dI5mV1M,8
21
+ maps4fs-1.3.6.dist-info/RECORD,,
@@ -1,21 +0,0 @@
1
- maps4fs/__init__.py,sha256=MlM_vkLH_22xoBwhoRD52JDECCmeAJ8gBQr7RMQZmis,261
2
- maps4fs/logger.py,sha256=B-NEYpMjPAAqlV4VpfTi6nbBFnEABVtQOaYe6nMpidg,1489
3
- maps4fs/generator/__init__.py,sha256=zZMLEkGzb4z0xql650gOtGSvcgX58DnJ2yN3vC2daRk,43
4
- maps4fs/generator/background.py,sha256=LDM8377BpBa9Iy1AMK0c0sbW8QTvhVM3yFlf-bu8APU,22400
5
- maps4fs/generator/component.py,sha256=XN-3Zx0bujugpuRk3YB-pYNwUHREdyt_cLxPd7pr57g,17967
6
- maps4fs/generator/config.py,sha256=b7qY0luC-_WM_c72Ohtlf4FrB37X5cALInbestSdUsw,4382
7
- maps4fs/generator/dem.py,sha256=DoQk6IPkS47eF21rh7JZoiUr1bAzuJkdF41ejAqykW4,15937
8
- maps4fs/generator/game.py,sha256=ZQeYzPzPB3CG41avdhNCyTZpHEeedqNBuAbNevTZuXg,7931
9
- maps4fs/generator/grle.py,sha256=zdYM-MHGfa3CHKgnOnd4EpCKF6HfY_sUfeJbo7-cic0,17489
10
- maps4fs/generator/i3d.py,sha256=fsKveRWQk68fpWRwMYqSL4RfHkD0dLUyNHi_iAyANso,18225
11
- maps4fs/generator/map.py,sha256=r0yEqQB56aqo0MxZMVLdP8w9xmQao0R3WTp6Sg-C4bY,7913
12
- maps4fs/generator/qgis.py,sha256=Es8hLuqN_KH8lDfnJE6He2rWYbAKJ3RGPn-o87S6CPI,6116
13
- maps4fs/generator/texture.py,sha256=57R0v4QuB-tnr_75hgGxfUTX5ennrULkhqiDNTgzi4s,27629
14
- maps4fs/toolbox/__init__.py,sha256=zZMLEkGzb4z0xql650gOtGSvcgX58DnJ2yN3vC2daRk,43
15
- maps4fs/toolbox/background.py,sha256=9BXWNqs_n3HgqDiPztWylgYk_QM4YgBpe6_ZNQAWtSc,2154
16
- maps4fs/toolbox/dem.py,sha256=z9IPFNmYbjiigb3t02ZenI3Mo8odd19c5MZbjDEovTo,3525
17
- maps4fs-1.3.2.dist-info/LICENSE.md,sha256=pTKD_oUexcn-yccFCTrMeLkZy0ifLRa-VNcDLqLZaIw,10749
18
- maps4fs-1.3.2.dist-info/METADATA,sha256=PysvMKUBYzqwHkBqoahH6uziBlrrNCySs8RKvv6XlhM,30910
19
- maps4fs-1.3.2.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
20
- maps4fs-1.3.2.dist-info/top_level.txt,sha256=Ue9DSRlejRQRCaJueB0uLcKrWwsEq9zezfv5dI5mV1M,8
21
- maps4fs-1.3.2.dist-info/RECORD,,