import os from typing import * OUTPUT_DIR = "._layouts" # Card size info TOTAL_HEIGHT = 30 TOTAL_WIDTH = 22 BLEED_MARGIN = 1 SAFE_MARGIN = 2 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 # Banner info BANNER_WIDTH = 2 BANNER_HEIGHT = 6 BANNER_X = ICON_X + ICON_SIZE + 0.3 BANNER_Y = 0 BANNER_TEXT_FONT = "\"ethnocentric 12\"" BANNER_TEXT_X = BANNER_X - 0.3 BANNER_TEXT_Y = BANNER_HEIGHT / 3 BANNER_TEXT_WIDTH = BANNER_WIDTH + 0.6 # 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 11\"" 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_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 = 6 EFFECT_FRAME_RADIUS = 0.2 EFFECT_FRAME_MARGIN_BOTTOM = 2 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 POKER_LAYOUT: str = f""" background: 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 alt_icon: extends: icon x: {ALT_ICON_X}c y: {ALT_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 # 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_text: x: {EFFECT_TEXT_X}c y: {EFFECT_TEXT_Y}c width: {EFFECT_TEXT_WIDTH}c height: {EFFECT_TEXT_HEIGHT}c font_size: 9 spacing: 5 align: center valign: middle markup: true 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)