diff options
-rw-r--r-- | diplomacy/engine/game.py | 12 | ||||
-rw-r--r-- | diplomacy/engine/renderer.py | 14 |
2 files changed, 22 insertions, 4 deletions
diff --git a/diplomacy/engine/game.py b/diplomacy/engine/game.py index fe4488e..3588853 100644 --- a/diplomacy/engine/game.py +++ b/diplomacy/engine/game.py @@ -1324,17 +1324,25 @@ class Game(Jsonable): self.phase = self.map.phase_long(new_phase) self.phase_type = self.phase.split()[-1][0] - def render(self, incl_orders=True, incl_abbrev=False, output_format='svg'): + def render(self, incl_orders=True, incl_abbrev=False, output_format='svg', output_path=None): """ Renders the current game and returns its image representation :param incl_orders: Optional. Flag to indicate we also want to render orders. :param incl_abbrev: Optional. Flag to indicate we also want to display the provinces abbreviations. :param output_format: The desired output format. Currently, only 'svg' is supported. + :param output_path: Optional. The full path where to save the rendering on disk. + :type incl_orders: bool, optional + :type incl_abbrev: bool, optional + :type output_format: str, optional + :type output_path: str | None, optional :return: The rendered image in the specified format. """ if not self.renderer: self.renderer = Renderer(self) - return self.renderer.render(incl_orders=incl_orders, incl_abbrev=incl_abbrev, output_format=output_format) + return self.renderer.render(incl_orders=incl_orders, + incl_abbrev=incl_abbrev, + output_format=output_format, + output_path=output_path) def add_rule(self, rule): """ Adds a rule to the current rule list diff --git a/diplomacy/engine/renderer.py b/diplomacy/engine/renderer.py index e4c6ff3..42a8435 100644 --- a/diplomacy/engine/renderer.py +++ b/diplomacy/engine/renderer.py @@ -63,15 +63,17 @@ class Renderer: self.xml_map = minidom.parse(svg_path).toxml() self._load_metadata() - def render(self, incl_orders=True, incl_abbrev=False, output_format='svg'): + def render(self, incl_orders=True, incl_abbrev=False, output_format='svg', output_path=None): """ Renders the current game and returns the XML representation :param incl_orders: Optional. Flag to indicate we also want to render orders. :param incl_abbrev: Optional. Flag to indicate we also want to display the provinces abbreviations. :param output_format: The desired output format. Valid values are: 'svg' + :param output_path: Optional. The full path where to save the rendering on disk. :type incl_orders: bool, optional :type incl_abbrev: bool, optional :type output_format: str, optional + :type output_path: str | None, optional :return: The rendered image in the specified format. """ # pylint: disable=too-many-branches @@ -181,8 +183,16 @@ class Renderer: elif _attr(child_node, 'id') == 'MouseLayer': svg_node.removeChild(child_node) + # Rendering + rendered_image = xml_map.toxml() + + # Saving to disk + if output_path: + with open(output_path, 'w') as output_file: + output_file.write(rendered_image) + # Returning - return xml_map.toxml() + return rendered_image def _load_metadata(self): """ Loads meta-data embedded in the XML map and clears unused nodes """ |