import pygame as pg import random WHITE = (255,)*3 def snap(x, scale): return int(x//scale)*scale class Starfield: def __init__(self, screen, inv_density=10, grid_step=31, paralax = 2, star_color=WHITE, star_size = 1): self.rng = random.Random() self.screen = screen self.inv_density = inv_density self.paralax = paralax self.grid_step = grid_step self.star_color = star_color self.star_size = star_size def draw(self, screen, map_pos): sky_pos = pg.math.Vector2((map_pos.x, map_pos.y))/self.paralax xstart = snap(sky_pos.x, self.grid_step) ystart = snap(sky_pos.y, self.grid_step) xstop = xstart + screen.get_rect().width ystop = ystart + screen.get_rect().width for x in range(xstart, xstop, self.grid_step): for y in range(ystart, ystop, self.grid_step): self.rng.seed(hash((x,y))) if self.rng.randint(0, self.inv_density) == 0: xoff = self.rng.randint(0, self.grid_step) yoff = self.rng.randint(0, self.grid_step) cx = x + xoff - sky_pos.x cy = y + yoff - sky_pos.y pg.draw.circle(screen, self.star_color, (cx,cy), self.star_size)