import sys import json from importlib.resources import open_text, open_binary from importlib.readers import FileReader from importlib.machinery import SourcelessFileLoader from io import BufferedReader from pathlib import Path import yaml from random import random, seed from copy import deepcopy from pygame.transform import scale import pygame from starsky_presenter.controller.window import ControlWindow from starsky_presenter.projection.screen import Screen, Star def dict_update(d1: dict, d2: dict) -> dict: out = deepcopy(d1) out.update(d2) return out def cli_main(): seed(43) reader = FileReader(SourcelessFileLoader("resource_loader", f"{Path(__file__).parent}/resources")) scenes = yaml.safe_load(reader.open_resource('resources/scenes.yml')) objects = yaml.safe_load(reader.open_resource('resources/objects.yml')) scene_data = [{ obj['sid']: deepcopy(obj) for obj in objects["stars"] }] + [ { obj['sid']: dict_update(obj, scenes[i][obj['sid']]) if scenes[i] and obj['sid'] in scenes[i] else deepcopy(obj) for obj in objects["stars"] } if i < len(scenes) else { obj['sid']: deepcopy(obj) for obj in objects["stars"] } for i in range(0,8) ] star_references = {} print(json.dumps(scenes, indent=4)) print(json.dumps(objects, indent=4)) print(json.dumps(scene_data, indent=4)) def setup_star_instance(data: dict) -> Star: image_path = f"resources/{data['image']}" image = pygame.image.load(reader.open_resource(image_path)) data['image'] = image star = Star(**data) star_references[data['sid']] = star return star stars = [ setup_star_instance(star) for star in objects["stars"] ] # load the background image background = pygame.image.load(reader.open_resource(f"resources/{objects['background']}")) screen = Screen(stars, background) control_window = ControlWindow(screen) while control_window.is_running(): control_window.process_events() screen.update(scene_data) screen.close() control_window.close() if __name__ == "__main__": cli_main()