Calçada 5

2023-10-07

"""2023-10-07"""
from helpers import CelulaV4 as Celula
from helpers import Grade
from helpers import HEIGHT
from helpers import save_image
from helpers import WIDTH
from helpers import write_legend
from pathlib import Path

import py5


IMG_NAME = Path(__file__).name.replace(".py", "")

CORES = [
    py5.color(255, 0, 0),
    py5.color(230, 0, 0),
    py5.color(210, 0, 0),
    py5.color(190, 0, 0),
]

LADO = 50
PONTOS_PAR = [
    [
        (0, LADO),
        (LADO, 0),
        (LADO, LADO),
        (0, LADO),
    ],
    [
        (0, 0),
        (LADO, 0),
        (LADO, LADO),
        (0, LADO),
        (0, 0),
    ],
    [
        (0, 0),
        (LADO, LADO),
        (0, LADO),
        (0, 0),
    ],
    [],
]
PONTOS_IMPAR = [
    [],
    [
        (0, 0),
        (LADO, LADO),
        (LADO, 0),
        (0, 0),
    ],
    [
        (0, 0),
        (LADO, 0),
        (LADO, LADO),
        (0, LADO),
        (0, 0),
    ],
    [
        (0, LADO),
        (LADO, 0),
        (0, 0),
        (0, LADO),
    ],
]


def forma_completa():
    lado = 50
    pontos = [
        (0, lado),
        (lado, 0),
        (2 * lado, 0),
        (3 * lado, lado),
        (4 * lado, lado),
        (3 * lado, 2 * lado),
        (2 * lado, 2 * lado),
        (lado, lado),
        (0, lado),
    ]
    s = py5.create_shape()
    with s.begin_shape():
        for x, y in pontos:
            s.vertex(x, y)
    return s


def _factory(pontos):
    s = py5.create_shape()
    with s.begin_shape():
        for x, y in pontos:
            s.vertex(x, y)
    return s


def setup():
    py5.size(WIDTH, HEIGHT, py5.P3D)
    py5.background(py5.color(100))
    formas_par = [_factory(pontos) for pontos in PONTOS_PAR]
    formas_impar = [_factory(pontos) for pontos in PONTOS_IMPAR]
    linhas = 16
    colunas = 16
    margem = 40
    largura = (py5.width - (2 * margem)) / colunas
    grade = Grade(0, 0, WIDTH, HEIGHT, colunas, linhas, margem, margem)
    for idx, slot in enumerate(grade):
        linha = idx // colunas
        formas = formas_par if linha % 2 == 0 else formas_impar
        total_formas = len(formas)
        linha_buffer = (linha // 2) % 2 == 1
        limite_formas = colunas // total_formas
        coluna = idx % colunas
        coluna_interna = coluna % 4
        if linha_buffer:
            coluna_interna += 2
            if coluna_interna >= limite_formas:
                coluna_interna = coluna_interna - total_formas
        forma = formas[coluna_interna]
        celula = Celula(
            slot.x,
            slot.y,
            largura,
            [
                forma,
            ],
            CORES,
            border=0,
        )
        celula.espelhada = False
        slot.celulas.append(celula)
    grade.desenha()
    write_legend([py5.color(255)], IMG_NAME)


def key_pressed():
    key = py5.key
    if key == " ":
        save_and_close()


def save_and_close():
    py5.no_loop()
    save_image(IMG_NAME, "png")
    py5.exit_sketch()


py5.run_sketch()