aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--diplomacy/engine/game.py12
-rw-r--r--diplomacy/engine/renderer.py14
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 """