aboutsummaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorFlorian Fischer <florian.fl.fischer@fau.de>2020-09-15 15:49:13 +0200
committerFlorian Fischer <florian.fl.fischer@fau.de>2020-09-15 15:49:13 +0200
commitc98bd12f93961d1105b25b70fb7fe534fec1edd0 (patch)
treef605244856a95784ab17c862a686ee19a0d119f6 /scripts
parent7b3fb2a9d8d1caf5e3f081b479c1f04ce04841c0 (diff)
downloadmuhqs-game-c98bd12f93961d1105b25b70fb7fe534fec1edd0.tar.gz
muhqs-game-c98bd12f93961d1105b25b70fb7fe534fec1edd0.zip
add python script to generate latex from card data
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/generate_latex.py140
1 files changed, 140 insertions, 0 deletions
diff --git a/scripts/generate_latex.py b/scripts/generate_latex.py
new file mode 100755
index 00000000..5ca439a9
--- /dev/null
+++ b/scripts/generate_latex.py
@@ -0,0 +1,140 @@
+#!/usr/bin/env python3
+import argparse
+import configparser
+import pathlib
+from typing import MutableMapping
+
+COLLECTION_TEMPLATE = \
+"""\\documentclass[a4paper,landscape]{{article}}
+
+% Ränder des Dokuments anpassen
+\\usepackage[margin=6mm,top=5mm]{{geometry}}
+
+% Pakete dazuladen
+\\input{{libs.tex}}
+% Farbdefinitionen laden
+\\input{{colors.tex}}
+% \card-Commands laden
+\\input{{tikzcards.tex}}
+
+\\usepackage{{standalone}}
+
+\\begin{{document}}
+\\begin{{center}}
+\\pagestyle{{empty}}
+{0}
+\\end{{center}}
+\\end{{document}}
+"""
+
+CARD_TEMPLATE = \
+"""\\documentclass[]{{standalone}}
+
+% Pakete dazuladen
+\\input{{libs.tex}}
+% Farbdefinitionen laden
+\\input{{colors.tex}}
+% \card-Commands laden
+\\input{{tikzcards.tex}}
+
+\\begin{{document}}
+\\begin{{tikzpicture}}
+{0}
+\\cardborder
+\\end{{tikzpicture}}
+\\end{{document}}
+"""
+
+def file_for_card(card_name: str) -> pathlib.Path:
+ return pathlib.Path(f'{card_name.lower().replace(" ", "_")}.tex')
+
+def generate_card(card_name: str, card: MutableMapping):
+ """Generate a standalone tikz picture with the card data"""
+
+ print(f'# {card_name} #')
+ for attr in card:
+ print(f'{attr}: {card[attr]}')
+
+ card_content = f'\cardtype{card["type"].capitalize()}\n'
+ card_content += f'\cardtitle{{{card_name}}}\n'
+ card_content += f'\cardbuycost{{{card["buy"]}}}\n'
+
+ if card['type'] == 'unit':
+ health = card['health']
+ movement = card['movement']
+
+ # stats = f'\\faHeart: {health}\\\\ Movement: {movement}'
+ stats = f'Health: {health}\\\\ Movement: {movement}'
+
+ attack = card.get('attack', None)
+ if attack:
+ attack_sym = '\\faSword'
+ if "Range" in attack:
+ attack_sym = '\\faBowArrow'
+ # stats += f'\\\\ {attack_sym}: {attack}'
+ stats += f'\\\\ Attack: {attack}'
+
+ if 'effect' in card or 'full_action' in card:
+ ability_block = ""
+
+ effect = card.get('effect', None)
+ if effect:
+ ability_block += f'Effect: {effect}'
+
+ full_action = card.get('full_action', None)
+ if full_action:
+ if ability_block:
+ ability_block += '\\\\ '
+ ability_block += f'\\faRotateRight: {full_action}'
+
+ card_content += f'\cardsplitcontent{{{stats}}}{{{ability_block}}}'
+ else:
+ card_content += f'\cardcontent{{{stats}}}'
+
+
+ card_content += '\n'
+
+ card_content += f'\cardplaycost{{{card["upkeep"]}}}'
+ elif card['type'] == 'spell':
+ card_content += f'\cardcontent{{{card["effect"]}}}\n'
+ card_content += f'\cardplaycost{{{card["play"]}}}'
+ elif card['type'] == 'artifact':
+ card_content += f'\cardcontent{{{card["effect"]}}}\n'
+ card_content += f'\cardplaycost{{{card["play"]}}}\n'
+ elif card['type'] == 'equipment':
+ card_content += f'\cardsplitcontent{{Durability: {card["durability"]}}}{{{card["effect"]}}}'
+ card_content += f'\cardplaycost{{{card["play"]}}}\n'
+ else:
+ print('WARNING: unknown card type {card["type"]}!')
+
+ with open(file_for_card(card_name), 'w') as tex_file:
+ print(CARD_TEMPLATE.format(card_content), file=tex_file)
+
+
+def main():
+ """Generate one standalone tikz picture for each card in the input data"""
+
+ parser = argparse.ArgumentParser(description='generate latex standalone cards')
+ parser.add_argument("datafile")
+
+ args = parser.parse_args()
+
+ data = configparser.ConfigParser()
+ data.read(args.datafile)
+
+ collection_inputs = ""
+ cards = [card for card in data if card != 'DEFAULT']
+ for i, card in enumerate(cards):
+ generate_card(card, data[card])
+ collection_inputs += f'\\input{{cards/{file_for_card(card)}}}\n'
+ if i == 0 or i % 4 < 3:
+ collection_inputs += f'\\hspace{{5mm}}\n'
+ else:
+ collection_inputs += f'\\vspace{{5mm}}\n\n'
+
+ collection_path = pathlib.Path(args.datafile)
+ with open(f'{collection_path.stem}.tex', 'w') as collection_file:
+ print(COLLECTION_TEMPLATE.format(collection_inputs), file=collection_file)
+
+if __name__ == '__main__':
+ main()