From 48d0d36400e61df07a8f8be863b0042320484979 Mon Sep 17 00:00:00 2001 From: Linus Vogel Date: Sat, 29 Nov 2025 20:52:07 +0100 Subject: [PATCH] worked on star rendering --- resources/star.png | Bin 0 -> 2910 bytes src/main.py | 25 ++++++++++++++++++++++--- src/projection/screen.py | 35 ++++++++++++++++++++++++++++++++--- 3 files changed, 54 insertions(+), 6 deletions(-) create mode 100644 resources/star.png diff --git a/resources/star.png b/resources/star.png new file mode 100644 index 0000000000000000000000000000000000000000..89e671f4cf5420e8cc1a73469421d5baa878d715 GIT binary patch literal 2910 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 literal 0 HcmV?d00001 diff --git a/src/main.py b/src/main.py index bd3f11a..87d34bd 100644 --- a/src/main.py +++ b/src/main.py @@ -1,15 +1,34 @@ import sys -from time import sleep +import json +from random import random, seed +from pygame.transform import scale +import pygame from src.controller.window import ControlWindow -from src.projection.screen import Screen +from src.projection.screen import Screen, Star def cli_main(): + seed(43) + image = pygame.image.load('resources/star.png') + + stars = [ + Star(**{ + "x": random(), + "y": random(), + "alpha": random() * 360, + "rot": random() * 360, + "scale": random() * 0.5 + 0.25, + "offset": random(), + "image": image + }) + for _ in range(4) + ] + control_window = ControlWindow() - screen = Screen() + screen = Screen(stars) while control_window.is_running(): control_window.process_events() diff --git a/src/projection/screen.py b/src/projection/screen.py index d1e74b7..11eafb4 100644 --- a/src/projection/screen.py +++ b/src/projection/screen.py @@ -1,20 +1,49 @@ import pygame -from random import random as rand +from pygame import transform, gfxdraw, Vector2 +from math import sin, cos, pi +from time import time, sleep +from random import random +class Star: + def __init__(self, x: int, y: int, alpha: float, rot: float, scale: float, offset: float, image: pygame.Surface): + self.x = x + self.y = y + self.rot = rot + self.alpha = alpha + self.scale = scale + self.offset = offset + self.image = image class Screen: - def __init__(self): + def __init__(self, stars: list[Star]) -> None: if not pygame.get_init(): pygame.init() self.screen = pygame.display.set_mode((800, 600)) self.clock = pygame.time.Clock() + self.stars = stars + self.last = time() def update(self): self.screen.fill((0, 0, 0)) + now = time() + delta = now - self.last + self.last = now + for star in self.stars: + star.alpha += star.rot * delta + #rotated = transform.rotate(star.image, star.alpha) + #scaled = transform.smoothscale_by(rotated, star.scale) + scaled = transform.rotozoom(star.image, star.alpha, star.scale) + (w, h) = scaled.get_size() + pos = (star.x*self.screen.get_width() - w/2, star.y*self.screen.get_height() - h/2) + self.screen.blit(scaled, pos) - self.screen.blit(pygame.image.load('resources/test.png'), (200,200)) + #self.screen.blit(scaled, dest=pos) + + overlay = pygame.surface.Surface((800, 600), depth=32) + overlay.set_alpha(128) + self.screen.blit(overlay, (0, 0)) pygame.display.flip() self.clock.tick(60)