194 lines
4.1 KiB
Python
194 lines
4.1 KiB
Python
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
|
|
|
|
# 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
|
|
|
|
|
|
# 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 = 6
|
|
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
|
|
|
|
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
|
|
|
|
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_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)
|