worked on star rendering

This commit is contained in:
Linus Vogel 2025-11-29 20:52:07 +01:00
parent 919393af35
commit 48d0d36400
3 changed files with 54 additions and 6 deletions

BIN
resources/star.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@ -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()

View File

@ -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)