From a04cf4d0cb7cbda3b150cf1f78bb9237d7ebe88f Mon Sep 17 00:00:00 2001 From: Ninjananas Date: Tue, 7 Jan 2025 22:57:34 +0100 Subject: [PATCH] update graphics --- Gemfile | 2 +- data/cards.xlsx | Bin 8577 -> 8738 bytes graphics/bundled/icones_bannieres.svg | 94 ++++++++++++------- scripts/extract_graphics.py | 2 +- scripts/generate_layouts.py | 125 ++++++++++++++++++++++++-- src/deck.rb | 75 ++++++++++++---- 6 files changed, 240 insertions(+), 58 deletions(-) diff --git a/Gemfile b/Gemfile index 244904c..d9b7cdc 100644 --- a/Gemfile +++ b/Gemfile @@ -1,3 +1,3 @@ source 'https://rubygems.org' -gem 'squib' +gem "squib", path: "../squib/pkg" diff --git a/data/cards.xlsx b/data/cards.xlsx index 752fae8ea3f549f02468aefc2731fcbb83610d3f..260f729d3d4f2e316b2e5d02d2068f354cb1b4cb 100644 GIT binary patch delta 5050 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 None: OUTPUT_DIR + "/" + obj[4:], svg_file, ] - print(f"exporting {obj[4:]}...", end="") + print(f"exporting {obj[4:]}...", end="", flush=True) res = subprocess.check_output(command) if res: print(f" An error might have occurred:\n{res}") diff --git a/scripts/generate_layouts.py b/scripts/generate_layouts.py index 8fba07f..a5d90ed 100644 --- a/scripts/generate_layouts.py +++ b/scripts/generate_layouts.py @@ -63,17 +63,50 @@ ALT_BANNER_TEXT_X, ALT_BANNER_TEXT_Y = central_sym(BANNER_TEXT_X, BANNER_TEXT_Y) # Effects EFFECT_FRAME_WIDTH = SAFE_WIDTH - 2 -EFFECT_FRAME_HEIGHT = 6 +EFFECT_FRAME_HEIGHT = 7 EFFECT_FRAME_RADIUS = 0.2 EFFECT_FRAME_MARGIN_BOTTOM = 4.1 EFFECT_FRAME_X = (TOTAL_WIDTH - EFFECT_FRAME_WIDTH) / 2. EFFECT_FRAME_Y = MAX_SAFE_Y - EFFECT_FRAME_MARGIN_BOTTOM - EFFECT_FRAME_HEIGHT -EFFECT_TEXT_MARGIN = 1 -EFFECT_TEXT_X = EFFECT_FRAME_X + EFFECT_TEXT_MARGIN -EFFECT_TEXT_Y = EFFECT_FRAME_Y + EFFECT_TEXT_MARGIN -EFFECT_TEXT_WIDTH = EFFECT_FRAME_WIDTH - 2 * EFFECT_TEXT_MARGIN -EFFECT_TEXT_HEIGHT = EFFECT_FRAME_HEIGHT - 2 * EFFECT_TEXT_MARGIN +EFFECT_ICON_MARGIN = .5 +EFFECT_ICON_SIZE = 1.5 +EFFECT_ICON_X = EFFECT_FRAME_X + EFFECT_ICON_MARGIN + (EFFECT_ICON_SIZE / 2.) + +EFFECT_TEXT_MARGIN = .2 + +EFFECT_SEPARATOR_HEIGHT = 1. +EFFECT_SEPARATOR_MARGIN = .05 +TOTAL_SEPARATOR_HEIGHT = EFFECT_SEPARATOR_HEIGHT + (2 * EFFECT_SEPARATOR_MARGIN) + +EFFECT_SEPARATOR_X = EFFECT_FRAME_X + (EFFECT_FRAME_WIDTH / 2.) +EFFECT_SEPARATOR_Y_2 = EFFECT_FRAME_Y + (EFFECT_FRAME_HEIGHT / 2.) +EFFECT_SEPARATOR_Y_3_0 = EFFECT_FRAME_Y + EFFECT_TEXT_MARGIN + (EFFECT_FRAME_HEIGHT - (2 * EFFECT_TEXT_MARGIN)) / 3. +EFFECT_SEPARATOR_Y_3_1 = EFFECT_FRAME_Y + EFFECT_TEXT_MARGIN + 2 * (EFFECT_FRAME_HEIGHT - (2 * EFFECT_TEXT_MARGIN)) / 3. + +EFFECT_TEXT_X = EFFECT_FRAME_X + EFFECT_ICON_MARGIN + EFFECT_ICON_SIZE + EFFECT_TEXT_MARGIN + +EFFECT_TEXT_HEIGHT_1 = EFFECT_FRAME_HEIGHT - 2 * EFFECT_TEXT_MARGIN +EFFECT_TEXT_Y_1 = EFFECT_FRAME_Y + EFFECT_TEXT_MARGIN + +EFFECT_TEXT_HEIGHT_2 = (EFFECT_FRAME_HEIGHT - (2 * EFFECT_TEXT_MARGIN) - TOTAL_SEPARATOR_HEIGHT) / 2. +EFFECT_TEXT_Y_2_0 = EFFECT_TEXT_Y_1 +EFFECT_TEXT_Y_2_1 = EFFECT_TEXT_Y_2_0 + EFFECT_TEXT_HEIGHT_2 + TOTAL_SEPARATOR_HEIGHT + +EFFECT_TEXT_HEIGHT_3 = (EFFECT_FRAME_HEIGHT - (2 * EFFECT_TEXT_MARGIN) - (2 * TOTAL_SEPARATOR_HEIGHT)) / 2. +EFFECT_TEXT_Y_3_0 = EFFECT_TEXT_Y_1 +EFFECT_TEXT_Y_3_1 = EFFECT_TEXT_Y_3_0 + EFFECT_TEXT_HEIGHT_3 + TOTAL_SEPARATOR_HEIGHT +EFFECT_TEXT_Y_3_2 = EFFECT_TEXT_Y_3_1 + EFFECT_TEXT_HEIGHT_3 + TOTAL_SEPARATOR_HEIGHT + +EFFECT_TEXT_WIDTH = EFFECT_FRAME_X + EFFECT_FRAME_WIDTH - EFFECT_TEXT_X - EFFECT_TEXT_MARGIN + +EFFECT_ICON_Y_1 = EFFECT_FRAME_Y + (EFFECT_FRAME_HEIGHT / 2.) +EFFECT_ICON_Y_2_0 = EFFECT_TEXT_Y_2_0 + (EFFECT_TEXT_HEIGHT_2 / 2.) +EFFECT_ICON_Y_2_1 = EFFECT_TEXT_Y_2_1 + (EFFECT_TEXT_HEIGHT_2 / 2.) +EFFECT_ICON_Y_3_0 = EFFECT_TEXT_Y_3_0 + (EFFECT_TEXT_HEIGHT_2 / 2.) +EFFECT_ICON_Y_3_1 = EFFECT_TEXT_Y_3_1 + (EFFECT_TEXT_HEIGHT_2 / 2.) +EFFECT_ICON_Y_3_2 = EFFECT_TEXT_Y_3_2 + (EFFECT_TEXT_HEIGHT_2 / 2.) + POKER_LAYOUT: str = f""" background: @@ -165,15 +198,91 @@ effect_frame: radius: {EFFECT_FRAME_RADIUS}c stroke_width: 0.3mm +effect_icon: + x: {EFFECT_ICON_X}c + width: {EFFECT_ICON_SIZE}c + height: {EFFECT_ICON_SIZE}c + anchor: :center + +effect_icon_1_0: + extends: effect_icon + y: {EFFECT_ICON_Y_1}c + +effect_icon_2_0: + extends: effect_icon + y: {EFFECT_ICON_Y_2_0}c + +effect_icon_2_1: + extends: effect_icon + y: {EFFECT_ICON_Y_2_1}c + +effect_icon_3_0: + extends: effect_icon + y: {EFFECT_ICON_Y_3_0}c + +effect_icon_3_1: + extends: effect_icon + y: {EFFECT_ICON_Y_3_1}c + +effect_icon_3_2: + extends: effect_icon + y: {EFFECT_ICON_Y_3_2}c + +effect_separator: + x: {EFFECT_SEPARATOR_X}c + anchor: :center + height: {EFFECT_SEPARATOR_HEIGHT}c + width: :scale + +effect_separator_2_0: + extends: effect_separator + y: {EFFECT_SEPARATOR_Y_2}c + +effect_separator_3_0: + extends: effect_separator + y: {EFFECT_SEPARATOR_Y_3_0}c + +effect_separator_3_1: + extends: effect_separator + y: {EFFECT_SEPARATOR_Y_3_1}c + effect_text: x: {EFFECT_TEXT_X}c - y: {EFFECT_TEXT_Y}c width: {EFFECT_TEXT_WIDTH}c - height: {EFFECT_TEXT_HEIGHT}c align: center valign: middle markup: true +effect_text_1_0: + extends: effect_text + y: {EFFECT_TEXT_Y_1}c + height: {EFFECT_TEXT_HEIGHT_1}c + +effect_text_2_0: + extends: effect_text + y: {EFFECT_TEXT_Y_2_0}c + height: {EFFECT_TEXT_HEIGHT_2}c + +effect_text_2_1: + extends: effect_text + y: {EFFECT_TEXT_Y_2_1}c + height: {EFFECT_TEXT_HEIGHT_2}c + +effect_text_3_0: + extends: effect_text + y: {EFFECT_TEXT_Y_3_0}c + height: {EFFECT_TEXT_HEIGHT_3}c + +effect_text_3_1: + extends: effect_text + y: {EFFECT_TEXT_Y_3_1}c + height: {EFFECT_TEXT_HEIGHT_3}c + +effect_text_3_2: + extends: effect_text + y: {EFFECT_TEXT_Y_3_2}c + height: {EFFECT_TEXT_HEIGHT_3}c + paparazzo: x: {PAPARAZZO_X}c y: {PAPARAZZO_Y}c diff --git a/src/deck.rb b/src/deck.rb index fbe75c7..2508f53 100644 --- a/src/deck.rb +++ b/src/deck.rb @@ -1,7 +1,7 @@ require 'squib' -DPI = 300 +DPI = 150 CELL_PX = DPI / 8.0 BLEED = 0.125 # In inches WIDTH = (2.5 + 2*BLEED) * DPI @@ -57,6 +57,35 @@ def get_art(data, idx) return "default_art_#{icon}#{icon_alt}.svg" end +def get_grouped_effects(data, idx) + if data['effet_1'].nil? + n_effects = 0 + elsif data['effet_2'].nil? + n_effects = 1 + elsif data['effet_3'].nil? + n_effects = 2 + else + n_effects = 3 + end + effects = [] + (0..3).each do |i| + effects.append([data["type_effet_#{i}"], data["effet_#{i}"]]) + end + return [n_effects, effects] +end + +def get_n_effects(data, idx) + if data['effet_1'][idx].nil? + 0 + elsif data['effet_2'][idx].nil? + 1 + elsif data['effet_3'][idx].nil? + 2 + else + 3 + end +end + def embed_custom(embed, id) embed.svg width: "#{EMBED_SIZE}c", height: "#{EMBED_SIZE}c", dx: '0c', dy: "#{EMBED_DY}c", key: ":#{id}:", file: "._graphics/#{id}.svg" end @@ -108,19 +137,35 @@ Squib::Deck.new( svg file: alt_banner_file, layout: 'alt_banner' text str: data['rang_alt'], layout: 'alt_banner_text' - fill_color = data['effet'].map { |effet| effet.nil? ? '#0000': '#f7f7f7ff' } - stroke_color = data['effet'].map { |effet| effet.nil? ? '#0000': '#cca9' } + fill_color = data['effet_1'].map { |effet| effet.nil? ? '#0000': '#f7f7f7ff' } + stroke_color = data['effet_1'].map { |effet| effet.nil? ? '#0000': '#cca9' } rect layout: 'effect_frame', fill_color: fill_color, stroke_color: stroke_color - text(str: data['effet'], layout: 'effect_text', font_size: EFFECT_FONT_SIZE, spacing: EFFECT_FONT_SPACING) do |embed| - embed_custom(embed, 'effet') - embed_custom(embed, 'magouille') - embed_custom(embed, 'pv') - embed_custom(embed, 'symbole_ind') - embed_custom(embed, 'symbole_gau') - embed_custom(embed, 'symbole_roy') - embed_custom(embed, 'symbole_ana') - embed_custom(embed, 'symbole_dro') - embed_custom(embed, 'symbole_eco') + + n_effects = (0..data['icone'].length).map { |idx| get_n_effects(data, idx) } + (1..3).each do |n| + n.times do |i| + # Effect texts + text(str: (0..data['icone'].length).map { |idx| (n == n_effects[idx]) ? data["effet_#{i+1}"][idx] : nil}, layout: "effect_text_#{n}_#{i}", font_size: EFFECT_FONT_SIZE, spacing: EFFECT_FONT_SPACING) do |embed| + embed_custom(embed, 'effet') + embed_custom(embed, 'magouille') + embed_custom(embed, 'pv') + embed_custom(embed, 'symbole_ind') + embed_custom(embed, 'symbole_gau') + embed_custom(embed, 'symbole_roy') + embed_custom(embed, 'symbole_ana') + embed_custom(embed, 'symbole_dro') + embed_custom(embed, 'symbole_eco') + end + + # Effect icons + svg file: (0..data['icone'].length).map { |idx| (n == n_effects[idx]) ? data["type_effet_#{i+1}"][idx] + ".svg" : nil}, layout: "effect_icon_#{n}_#{i}" + end + end + (2..3).each do |n| + #Effect separators + (n-1).times do |i| + svg file: (0..data['icone'].length).map { |idx| (n == n_effects[idx]) ? "separateur_effet.svg" : nil}, layout: "effect_separator_#{n}_#{i}" + end end build :debug do @@ -133,8 +178,8 @@ Squib::Deck.new( end build :showcase do - hand range: [0, 6, 13, 21, 38, 59, 65], trim_radius: inches(0.125), fill_color: 'black' - showcase range: [0, 6, 13, 21, 38, 59, 65], trim: inches(BLEED), trim_radius: inches(0.125), fill_color: 'black' + hand range: [0, 6, 13, 21, 38, 59, 62], trim_radius: inches(0.125), fill_color: 'black' + showcase range: [0, 6, 13, 21, 38, 59, 62], trim: inches(BLEED), trim_radius: inches(0.125), fill_color: 'black' end build :full do