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