molecular-python3
51 строка · 1.7 Кб
1from typing import Tuple, Callable, List
2
3import numpy as np
4import pygame
5
6
7class Screen:
8draw_circles_vectorized: Callable
9draw_lines_vectorized: Callable
10_screen: pygame.Surface
11_background_color: Tuple[int, int, int]
12_offset: List[int]
13_scale: float
14
15def __init__(self, screen: pygame.Surface, background_color: Tuple[int, int, int] = (0, 0, 0)):
16self._screen = screen
17self._offset = [0, 0]
18self._scale = 1
19self._background_color = background_color
20self.draw_circles_vectorized = np.vectorize(self.draw_circle)
21self.draw_lines_vectorized = np.vectorize(self.draw_line)
22
23def move_offset(self, dx: int, dy: int):
24self._offset[0] += dx
25self._offset[1] += dy
26
27def move_scale(self, dv):
28self._scale *= dv
29
30def clear(self) -> None:
31self._screen.fill(self._background_color)
32
33def draw_circle(self, center_x: float, center_y: float, radius: int, color_r: int, color_g: int, color_b: int) -> None:
34pygame.draw.circle(
35self._screen,
36(color_r, color_g, color_b),
37((center_x + self._offset[0])*self._scale, (center_y + self._offset[1])*self._scale),
38radius*self._scale
39)
40
41def draw_line(self, start_x: float, start_y: float, end_x: float, end_y: float, color_r: int, color_g: int, color_b: int) -> None:
42pygame.draw.line(
43self._screen,
44(color_r, color_g, color_b),
45((start_x + self._offset[0])*self._scale, (start_y + self._offset[1])*self._scale),
46((end_x + self._offset[0])*self._scale, (end_y + self._offset[1])*self._scale),
47)
48
49@staticmethod
50def update() -> None:
51pygame.display.flip()
52