import os from typing import * OUTPUT_DIR = "._layouts" # Card size info TOTAL_HEIGHT = 30 TOTAL_WIDTH = 22 BLEED_MARGIN = 1 SAFE_MARGIN = 2 * BLEED_MARGIN MAX_SAFE_X = TOTAL_WIDTH - SAFE_MARGIN MAX_SAFE_Y = TOTAL_HEIGHT - SAFE_MARGIN SAFE_WIDTH = TOTAL_WIDTH - 2 * SAFE_MARGIN SAFE_HEIGHT = TOTAL_HEIGHT - 2 * SAFE_MARGIN # Icon info ICON_SIZE = 3.7 ICON_MARGIN_LEFT = 0 ICON_MARGIN_TOP = 0 ICON_X = ICON_MARGIN_LEFT + SAFE_MARGIN ICON_Y = ICON_MARGIN_TOP + SAFE_MARGIN # Ret Icon info RET_ICON_SIZE = ICON_SIZE * 0.9 RET_ICON_X = ICON_X + ((ICON_SIZE - RET_ICON_SIZE) / 2.) RET_ICON_Y = ICON_Y + ICON_SIZE - 0.1 # Paparazzo icon PAPARAZZO_SIZE = 2 PAPARAZZO_X = SAFE_MARGIN PAPARAZZO_Y = MAX_SAFE_Y - PAPARAZZO_SIZE # Banner info BANNER_WIDTH = 2 BANNER_HEIGHT = 6 BANNER_X = ICON_X + ICON_SIZE + 0.3 BANNER_Y = 0 BANNER_TEXT_FONT = "\"ethnocentric 11\"" BANNER_TEXT_X = BANNER_X - 0.3 BANNER_TEXT_Y = BANNER_HEIGHT / 2.2 BANNER_TEXT_WIDTH = BANNER_WIDTH + 0.6 BANNER_TEXT_MOD_T = BANNER_TEXT_Y + 0.2 # Name info NAME_X = ICON_X + ICON_SIZE NAME_Y = SAFE_MARGIN + 0.1 NAME_WIDTH = MAX_SAFE_X - NAME_X NAME_HEIGHT = 3.4 NAME_FONT = "\"ethnocentric 10\"" NAME_WITH_BANNER_X = BANNER_X + BANNER_WIDTH NAME_WITH_BANNER_WIDTH = NAME_WIDTH - (NAME_WITH_BANNER_X - NAME_X) def central_sym(x: int, y: int) -> Tuple[int, int]: return TOTAL_WIDTH - x, TOTAL_HEIGHT - y # Alternative objects ALT_ICON_X, ALT_ICON_Y = central_sym(ICON_X, ICON_Y) ALT_RET_ICON_X, ALT_RET_ICON_Y = central_sym(RET_ICON_X, RET_ICON_Y) ALT_BANNER_X, ALT_BANNER_Y = central_sym(BANNER_X, BANNER_Y) 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 = 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_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 = 2. 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: x: 0 y: 0 width: {TOTAL_WIDTH}c height: {TOTAL_HEIGHT}c art: x: 0 y: 0 width: {TOTAL_WIDTH}c height: {TOTAL_HEIGHT}c icon: x: {ICON_X}c y: {ICON_Y}c width: {ICON_SIZE}c height: {ICON_SIZE}c ret_icon: x: {RET_ICON_X}c y: {RET_ICON_Y}c width: {RET_ICON_SIZE}c height: {RET_ICON_SIZE}c alt_icon: extends: icon x: {ALT_ICON_X}c y: {ALT_ICON_Y}c angle: 3.14159 alt_ret_icon: extends: ret_icon x: {ALT_RET_ICON_X}c y: {ALT_RET_ICON_Y}c angle: 3.14159 banner: x: {BANNER_X}c y: {BANNER_Y}c width: {BANNER_WIDTH}c height: {BANNER_HEIGHT}c banner_text: x: {BANNER_TEXT_X}c y: {BANNER_TEXT_Y}c width: {BANNER_TEXT_WIDTH}c height: 1c font: {BANNER_TEXT_FONT} align: center color: '#fff' # hint: blue alt_banner: extends: banner x: {ALT_BANNER_X}c y: {ALT_BANNER_Y}c angle: 3.14159 alt_banner_text: extends: banner_text angle: 3.14159 x: {ALT_BANNER_TEXT_X}c y: {ALT_BANNER_TEXT_Y}c name: x: {NAME_X}c y: {NAME_Y}c width: {NAME_WIDTH}c height: {NAME_HEIGHT}c align: center valign: middle font: {NAME_FONT} # hint: red name_with_banner: extends: name x: {NAME_WITH_BANNER_X}c width: {NAME_WITH_BANNER_WIDTH}c effect_frame: x: {EFFECT_FRAME_X}c y: {EFFECT_FRAME_Y}c width: {EFFECT_FRAME_WIDTH}c height: {EFFECT_FRAME_HEIGHT}c 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 width: {EFFECT_TEXT_WIDTH}c align: center valign: middle markup: true font: exo-2-0 9 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 width: {PAPARAZZO_SIZE}c height: {PAPARAZZO_SIZE}c border: x: 0 y: 0 width: {TOTAL_WIDTH}c height: {TOTAL_HEIGHT}c cut: x: {BLEED_MARGIN}c y: {BLEED_MARGIN}c width: {TOTAL_WIDTH - (2 * BLEED_MARGIN)}c height: {TOTAL_HEIGHT - (2 * BLEED_MARGIN)}c stroke_color: gray safe: x: {SAFE_MARGIN}c y: {SAFE_MARGIN}c width: {TOTAL_WIDTH - (2 * SAFE_MARGIN)}c height: {TOTAL_HEIGHT - (2 * SAFE_MARGIN)}c radius: 0.4c dash: 0.5mm 0.5mm """ if __name__ == "__main__": if not os.path.isdir(OUTPUT_DIR): os.mkdir(OUTPUT_DIR) open(f"{OUTPUT_DIR}/poker.yml", "w").write(POKER_LAYOUT)