TheBird

setup.py

3.8 kB · python · 129 lines

1from mrlypy.core.state import choice, randint2from mrlypy.life.enums import Boundary3from mrlypy.paint.enums import Ink4from mrlypy.two import Cell2d5from colors import SECONDARIES6from enums import Path, Sequence, Way7from models import Saga, Task8from music import compose_music_params9from sequence import setup_sequence, create_sequence10from variations import (11    moore_mask,12    setup_canvas,13    setup_mask,14    setup_tile,15    setup_variations,16    tile_from_grid,17)1819# KEYS2021HEX = "0123456789abcdef"2223def hex8() -> str:24    return "".join(HEX[randint(0, 15)] for _ in range(8))2526# SAGA2728def setup_saga_boundary(saga: Saga) -> Saga:29    saga.boundary = choice(list(Boundary))30    print(f"Setting up saga boundary: {saga.boundary}")31    return saga3233def setup_saga_colors(saga: Saga) -> Saga:34    print(f"Setting up saga colors")35    saga.primary = Ink.BLACK36    print(f"Primary: {saga.primary}")37    return saga3839def setup_saga(saga: Saga, seed: int, key: str) -> Saga:40    print(f"Setting up saga {key} from seed {seed}")41    saga.seed = seed42    saga.key = key43    saga = setup_saga_boundary(saga)44    saga = setup_saga_colors(saga)45    return saga4647# WAYS4849def setup_conway(task: Task) -> Task:50    print(f"Setting up ConWay for segment: {task.key}")51    task = setup_tile(task)52    task = setup_canvas(task)53    task.mask = moore_mask()54    task.path = Path.SIMPLE55    task.birth_sequence = Sequence.CUSTOM56    task.birth_counts = [3]57    task.survive_sequence = Sequence.CUSTOM58    task.survive_counts = [2, 3]59    return task6061def setup_mrlyway(task: Task) -> Task:62    print(f"Setting up MrlyWay for segment: {task.key}")63    task = setup_variations(task)64    task = setup_sequence(task)65    task = create_sequence(task)66    return task6768def setup_way(task: Task) -> Task:69    way = choice(list(Way))70    task.way = way71    print(f"Way: {way}")72    match way:73        case Way.CONWAY:74            return setup_conway(task)75        case Way.MRLYWAY:76            return setup_mrlyway(task)7778# SEGMENT7980def _setup_chained_conway(task: Task) -> Task:81    print(f"Setting up chained ConWay for segment: {task.key}")82    task.mask = moore_mask()83    task.path = Path.SIMPLE84    task.birth_sequence = Sequence.CUSTOM85    task.birth_counts = [3]86    task.survive_sequence = Sequence.CUSTOM87    task.survive_counts = [2, 3]88    return task8990def _setup_chained_mrlyway(task: Task) -> Task:91    print(f"Setting up chained MrlyWay for segment: {task.key}")92    task = setup_mask(task)93    task = setup_sequence(task)94    task = create_sequence(task)95    return task9697def setup_segment_way(task: Task, prev_grid: Cell2d, prev_way: Way) -> Task:98    task.tile = tile_from_grid(prev_grid)99    way = Way.MRLYWAY if prev_way == Way.CONWAY else Way.CONWAY100    task.way = way101    print(f"Way: {way} (flipped from {prev_way})")102    match way:103        case Way.CONWAY:104            return _setup_chained_conway(task)105        case Way.MRLYWAY:106            return _setup_chained_mrlyway(task)107108def setup_segment(saga: Saga, index: int, prev_grid: Cell2d = None) -> Task:109    print(f"Setting up segment {index}")110    task = Task()111    task.key = hex8()112    task.seed = saga.seed113    task.boundary = saga.boundary114    task.primary = saga.primary115    task.secondary = choice(list(SECONDARIES.keys()))116    print(f"Secondary: {task.secondary}")117    if index == 0:118        task = setup_way(task)119        saga.canvas_size = task.canvas_size120        saga.canvas_unit_width = task.canvas_unit_width121        saga.canvas_unit_height = task.canvas_unit_height122    else:123        task.canvas_size = saga.canvas_size124        task.canvas_unit_width = saga.canvas_unit_width125        task.canvas_unit_height = saga.canvas_unit_height126        prev_way = saga.segments[-1].way127        task = setup_segment_way(task, prev_grid, prev_way)128    task.music = compose_music_params(task.way)129    return task