diff --git a/card.svg b/card.svg new file mode 100644 index 0000000..8a45a5c --- /dev/null +++ b/card.svg @@ -0,0 +1,2 @@ + +Rallier les TroupesAction, Charme455Mobilisez un Champion. \ No newline at end of file diff --git a/lancersiz3.png b/lancersiz3.png new file mode 100644 index 0000000..553b33c Binary files /dev/null and b/lancersiz3.png differ diff --git a/src/card_data.json b/src/card_data.json new file mode 100644 index 0000000..0f07b81 --- /dev/null +++ b/src/card_data.json @@ -0,0 +1,15 @@ +{ + "title": "Rallier les Troupes", + "type": "Action, Charme", + "faction": "yellow", + "cost": 4, + "image_path": "lancersiz3.png", + "row_1": { + "damage": 5, + "heal": 5 + }, + "row_2": { + "effect": "Mobilisez un Champion." + } + } + \ No newline at end of file diff --git a/src/generate_cards_mvp.py b/src/generate_cards_mvp.py index 945a1d3..4ae1d9e 100644 --- a/src/generate_cards_mvp.py +++ b/src/generate_cards_mvp.py @@ -1,63 +1,125 @@ +# import svgwrite +# from svgwrite import cm, mm, px + +# # Configuration des chemins vers les icônes +# icons = { +# 'degats': 'path/to/damage_icon.svg', +# 'or': 'path/to/gold_icon.svg', +# 'soin': 'path/to/heal_icon.svg' +# } + +# # Configuration des couleurs de fond +# background_colors = { +# 'bleue': 'lightblue', +# 'rouge': 'lightcoral', +# 'jaune': 'lightyellow', +# 'verte': 'lightgreen', +# 'sans': 'white' +# } + +# def generate_card_svg(name, description, color, effects, output_path): +# # Créer un dessin SVG +# dwg = svgwrite.Drawing(output_path, profile='tiny', size=(8*cm, 12*cm)) + +# # Ajouter un rectangle de fond +# dwg.add(dwg.rect(insert=(0, 0), size=('100%', '100%'), fill=background_colors[color])) + +# # Ajouter le titre de la carte +# dwg.add(dwg.text(name, insert=(0.5*cm, 1*cm), font_size="20px", fill='black')) + +# # Ajouter la description +# dwg.add(dwg.text(description, insert=(0.5*cm, 2*cm), font_size="12px", fill='black')) + +# # Ajouter les effets +# y_offset = 3*cm +# for effect in effects: +# if effect['type'] in icons: +# # Ajouter l'icône +# dwg.add(dwg.image(href=icons[effect['type']], insert=(0.5*cm, y_offset), size=(1*cm, 1*cm))) +# # Ajouter le texte de l'effet +# dwg.add(dwg.text(effect['text'], insert=(2*cm, y_offset + 0.75*cm), font_size="15px", fill='black')) +# else: +# # Ajouter le texte de l'effet sans icône +# dwg.add(dwg.text(effect['text'], insert=(0.5*cm, y_offset + 0.75*cm), font_size="15px", fill='black')) +# y_offset += 2*cm + +# # Sauvegarder le fichier SVG +# dwg.save() + +# # Exemple d'utilisation +# card_info = { +# 'name': 'Niko Incendiaire', +# 'description': 'Action, ghdj;spftgljh.-', +# 'color': 'bleue', +# 'effects': [ +# {'type': 'degats', 'text': '8 Dégâts'}, +# {'type': 'or', 'text': '5 Or'} +# ] +# } + +# output_path = 'niko_incendiaire.svg' +# generate_card_svg(**card_info, output_path=output_path) + +# print('Carte SVG générée avec succès!') + import svgwrite -from svgwrite import cm, mm, px +import json -# Configuration des chemins vers les icônes -icons = { - 'degats': 'path/to/damage_icon.svg', - 'or': 'path/to/gold_icon.svg', - 'soin': 'path/to/heal_icon.svg' -} +# Load card data from JSON file +with open('src/card_data.json') as f: + card_data = json.load(f) + +# Params +x_width = 298 +y_height = 417 +stats_radius = 25 +row_1_base_y = 280 +row_2_base_y = 390 +row_1_to_2_separator_y = 360 +row_1_to_2_separator_shorten_by = 20 -# Configuration des couleurs de fond background_colors = { - 'bleue': 'lightblue', - 'rouge': 'lightcoral', - 'jaune': 'lightyellow', - 'verte': 'lightgreen', - 'sans': 'white' + 'blue': 'lightblue', + 'red': 'lightcoral', + 'yellow': 'rgb(206, 182, 167)', + 'green': 'lightgreen', + 'base': 'lightgrey' } -def generate_card_svg(name, description, color, effects, output_path): - # Créer un dessin SVG - dwg = svgwrite.Drawing(output_path, profile='tiny', size=(8*cm, 12*cm)) - - # Ajouter un rectangle de fond - dwg.add(dwg.rect(insert=(0, 0), size=('100%', '100%'), fill=background_colors[color])) - - # Ajouter le titre de la carte - dwg.add(dwg.text(name, insert=(0.5*cm, 1*cm), font_size="20px", fill='black')) - - # Ajouter la description - dwg.add(dwg.text(description, insert=(0.5*cm, 2*cm), font_size="12px", fill='black')) - - # Ajouter les effets - y_offset = 3*cm - for effect in effects: - if effect['type'] in icons: - # Ajouter l'icône - dwg.add(dwg.image(href=icons[effect['type']], insert=(0.5*cm, y_offset), size=(1*cm, 1*cm))) - # Ajouter le texte de l'effet - dwg.add(dwg.text(effect['text'], insert=(2*cm, y_offset + 0.75*cm), font_size="15px", fill='black')) - else: - # Ajouter le texte de l'effet sans icône - dwg.add(dwg.text(effect['text'], insert=(0.5*cm, y_offset + 0.75*cm), font_size="15px", fill='black')) - y_offset += 2*cm - - # Sauvegarder le fichier SVG - dwg.save() -# Exemple d'utilisation -card_info = { - 'name': 'Niko Incendiaire', - 'description': 'Action, ghdj;spftgljh.-', - 'color': 'bleue', - 'effects': [ - {'type': 'degats', 'text': '8 Dégâts'}, - {'type': 'or', 'text': '5 Or'} - ] -} +# Create a new SVG drawing +dwg = svgwrite.Drawing('card.svg', profile='tiny', size=(str(x_width) + 'px', str(y_height) + 'px')) -output_path = 'niko_incendiaire.svg' -generate_card_svg(**card_info, output_path=output_path) +# Draw card background +dwg.add(dwg.rect(insert=(0, 0), size=(str(x_width) + 'px', str(y_height) + 'px'), rx=10, ry=10, fill=background_colors[card_data['faction']])) -print('Carte SVG générée avec succès!') +# Draw title area +dwg.add(dwg.rect(insert=(0, 0), size=(str(x_width) + 'px', '50px'), fill='white')) +dwg.add(dwg.text(card_data['title'], insert=(130, 30), text_anchor='middle', fill='black', font_size='24px', font_weight="bold")) + +# Draw type area +dwg.add(dwg.text(card_data['type'], insert=(10, 70), fill='black', font_size='16px')) + +# Draw cost circle +dwg.add(dwg.circle(center=(x_width - 30, 25), r=20, fill='yellow')) +dwg.add(dwg.text(str(card_data['cost']), insert=(x_width - 35, 32), fill='black', font_size='24px', font_weight="bold")) + +# Draw image area +dwg.add(dwg.image(card_data['image_path'], insert=(0, 80), size=(x_width, 180))) + +# TODO: figure out nb of effects and adjust row_1_x_offset accordingly +# Draw row 1 stats +dwg.add(dwg.circle(center=(100, row_1_base_y + stats_radius), r=25, fill='red')) +dwg.add(dwg.text(str(card_data['row_1']['damage']), insert=(100, row_1_base_y + stats_radius + 9), text_anchor='middle', fill='white', font_size='24px', font_weight="bold")) + +dwg.add(dwg.circle(center=(210, row_1_base_y + stats_radius), r=25, fill='green')) +dwg.add(dwg.text(str(card_data['row_1']['heal']), insert=(210, row_1_base_y + stats_radius + 9), text_anchor='middle', fill='white', font_size='24px', font_weight="bold")) + +if card_data['row_2']: + # Draw row 1 to row 2 separator + dwg.add(dwg.line(start=(0 + row_1_to_2_separator_shorten_by, row_1_to_2_separator_y), end=(x_width - row_1_to_2_separator_shorten_by, row_1_to_2_separator_y), stroke='black', stroke_width=1)) + # Draw row 2 effect text + dwg.add(dwg.text(card_data['row_2']['effect'], insert=(x_width/2, row_2_base_y), text_anchor='middle', fill='black', font_size='16px')) + +# Save the SVG file +dwg.save()