update graphics
This commit is contained in:
2
Gemfile
2
Gemfile
@@ -1,3 +1,3 @@
|
|||||||
source 'https://rubygems.org'
|
source 'https://rubygems.org'
|
||||||
|
|
||||||
gem 'squib'
|
gem "squib", path: "../squib/pkg"
|
||||||
|
|||||||
BIN
data/cards.xlsx
BIN
data/cards.xlsx
Binary file not shown.
File diff suppressed because one or more lines are too long
|
Before Width: | Height: | Size: 902 KiB After Width: | Height: | Size: 912 KiB |
@@ -41,7 +41,7 @@ def export_objects(svg_file: str, object_ids: Iterable[str]) -> None:
|
|||||||
OUTPUT_DIR + "/" + obj[4:],
|
OUTPUT_DIR + "/" + obj[4:],
|
||||||
svg_file,
|
svg_file,
|
||||||
]
|
]
|
||||||
print(f"exporting {obj[4:]}...", end="")
|
print(f"exporting {obj[4:]}...", end="", flush=True)
|
||||||
res = subprocess.check_output(command)
|
res = subprocess.check_output(command)
|
||||||
if res:
|
if res:
|
||||||
print(f" An error might have occurred:\n{res}")
|
print(f" An error might have occurred:\n{res}")
|
||||||
|
|||||||
@@ -63,17 +63,50 @@ ALT_BANNER_TEXT_X, ALT_BANNER_TEXT_Y = central_sym(BANNER_TEXT_X, BANNER_TEXT_Y)
|
|||||||
|
|
||||||
# Effects
|
# Effects
|
||||||
EFFECT_FRAME_WIDTH = SAFE_WIDTH - 2
|
EFFECT_FRAME_WIDTH = SAFE_WIDTH - 2
|
||||||
EFFECT_FRAME_HEIGHT = 6
|
EFFECT_FRAME_HEIGHT = 7
|
||||||
EFFECT_FRAME_RADIUS = 0.2
|
EFFECT_FRAME_RADIUS = 0.2
|
||||||
EFFECT_FRAME_MARGIN_BOTTOM = 4.1
|
EFFECT_FRAME_MARGIN_BOTTOM = 4.1
|
||||||
EFFECT_FRAME_X = (TOTAL_WIDTH - EFFECT_FRAME_WIDTH) / 2.
|
EFFECT_FRAME_X = (TOTAL_WIDTH - EFFECT_FRAME_WIDTH) / 2.
|
||||||
EFFECT_FRAME_Y = MAX_SAFE_Y - EFFECT_FRAME_MARGIN_BOTTOM - EFFECT_FRAME_HEIGHT
|
EFFECT_FRAME_Y = MAX_SAFE_Y - EFFECT_FRAME_MARGIN_BOTTOM - EFFECT_FRAME_HEIGHT
|
||||||
|
|
||||||
EFFECT_TEXT_MARGIN = 1
|
EFFECT_ICON_MARGIN = .5
|
||||||
EFFECT_TEXT_X = EFFECT_FRAME_X + EFFECT_TEXT_MARGIN
|
EFFECT_ICON_SIZE = 1.5
|
||||||
EFFECT_TEXT_Y = EFFECT_FRAME_Y + EFFECT_TEXT_MARGIN
|
EFFECT_ICON_X = EFFECT_FRAME_X + EFFECT_ICON_MARGIN + (EFFECT_ICON_SIZE / 2.)
|
||||||
EFFECT_TEXT_WIDTH = EFFECT_FRAME_WIDTH - 2 * EFFECT_TEXT_MARGIN
|
|
||||||
EFFECT_TEXT_HEIGHT = EFFECT_FRAME_HEIGHT - 2 * EFFECT_TEXT_MARGIN
|
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"""
|
POKER_LAYOUT: str = f"""
|
||||||
background:
|
background:
|
||||||
@@ -165,15 +198,91 @@ effect_frame:
|
|||||||
radius: {EFFECT_FRAME_RADIUS}c
|
radius: {EFFECT_FRAME_RADIUS}c
|
||||||
stroke_width: 0.3mm
|
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:
|
effect_text:
|
||||||
x: {EFFECT_TEXT_X}c
|
x: {EFFECT_TEXT_X}c
|
||||||
y: {EFFECT_TEXT_Y}c
|
|
||||||
width: {EFFECT_TEXT_WIDTH}c
|
width: {EFFECT_TEXT_WIDTH}c
|
||||||
height: {EFFECT_TEXT_HEIGHT}c
|
|
||||||
align: center
|
align: center
|
||||||
valign: middle
|
valign: middle
|
||||||
markup: true
|
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:
|
paparazzo:
|
||||||
x: {PAPARAZZO_X}c
|
x: {PAPARAZZO_X}c
|
||||||
y: {PAPARAZZO_Y}c
|
y: {PAPARAZZO_Y}c
|
||||||
|
|||||||
75
src/deck.rb
75
src/deck.rb
@@ -1,7 +1,7 @@
|
|||||||
require 'squib'
|
require 'squib'
|
||||||
|
|
||||||
|
|
||||||
DPI = 300
|
DPI = 150
|
||||||
CELL_PX = DPI / 8.0
|
CELL_PX = DPI / 8.0
|
||||||
BLEED = 0.125 # In inches
|
BLEED = 0.125 # In inches
|
||||||
WIDTH = (2.5 + 2*BLEED) * DPI
|
WIDTH = (2.5 + 2*BLEED) * DPI
|
||||||
@@ -57,6 +57,35 @@ def get_art(data, idx)
|
|||||||
return "default_art_#{icon}#{icon_alt}.svg"
|
return "default_art_#{icon}#{icon_alt}.svg"
|
||||||
end
|
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)
|
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"
|
embed.svg width: "#{EMBED_SIZE}c", height: "#{EMBED_SIZE}c", dx: '0c', dy: "#{EMBED_DY}c", key: ":#{id}:", file: "._graphics/#{id}.svg"
|
||||||
end
|
end
|
||||||
@@ -108,19 +137,35 @@ Squib::Deck.new(
|
|||||||
svg file: alt_banner_file, layout: 'alt_banner'
|
svg file: alt_banner_file, layout: 'alt_banner'
|
||||||
text str: data['rang_alt'], layout: 'alt_banner_text'
|
text str: data['rang_alt'], layout: 'alt_banner_text'
|
||||||
|
|
||||||
fill_color = data['effet'].map { |effet| effet.nil? ? '#0000': '#f7f7f7ff' }
|
fill_color = data['effet_1'].map { |effet| effet.nil? ? '#0000': '#f7f7f7ff' }
|
||||||
stroke_color = data['effet'].map { |effet| effet.nil? ? '#0000': '#cca9' }
|
stroke_color = data['effet_1'].map { |effet| effet.nil? ? '#0000': '#cca9' }
|
||||||
rect layout: 'effect_frame', fill_color: fill_color, stroke_color: stroke_color
|
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')
|
n_effects = (0..data['icone'].length).map { |idx| get_n_effects(data, idx) }
|
||||||
embed_custom(embed, 'magouille')
|
(1..3).each do |n|
|
||||||
embed_custom(embed, 'pv')
|
n.times do |i|
|
||||||
embed_custom(embed, 'symbole_ind')
|
# Effect texts
|
||||||
embed_custom(embed, 'symbole_gau')
|
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, 'symbole_roy')
|
embed_custom(embed, 'effet')
|
||||||
embed_custom(embed, 'symbole_ana')
|
embed_custom(embed, 'magouille')
|
||||||
embed_custom(embed, 'symbole_dro')
|
embed_custom(embed, 'pv')
|
||||||
embed_custom(embed, 'symbole_eco')
|
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
|
end
|
||||||
|
|
||||||
build :debug do
|
build :debug do
|
||||||
@@ -133,8 +178,8 @@ Squib::Deck.new(
|
|||||||
end
|
end
|
||||||
|
|
||||||
build :showcase do
|
build :showcase do
|
||||||
hand range: [0, 6, 13, 21, 38, 59, 65], 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, 65], trim: inches(BLEED), 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
|
end
|
||||||
|
|
||||||
build :full do
|
build :full do
|
||||||
|
|||||||
Reference in New Issue
Block a user