abstracted Display class

This commit is contained in:
Louis Heredero 2024-04-17 17:35:07 +02:00
parent 1ddb840e60
commit 477f479712
Signed by: HEL
GPG Key ID: 8D83DE470F8544E7
2 changed files with 47 additions and 36 deletions

43
display.py Normal file
View File

@ -0,0 +1,43 @@
from typing import Optional
import pygame
class Display:
APP_NAME = "Train Journey"
def __init__(self, surf: pygame.Surface):
self.surf: pygame.Surface = surf
self.font: pygame.font.Font = pygame.font.SysFont("ubuntu", 20)
self._tooltip_surf: Optional[pygame.Surface] = None
def mainloop(self) -> None:
running = True
self.init_interactive()
clock = pygame.time.Clock()
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
running = False
elif event.key == pygame.K_s and event.mod & pygame.KMOD_CTRL:
path = "/tmp/image.jpg"
pygame.image.save(self.surf, path)
print(f"Saved as {path}")
pygame.display.set_caption(f"{self.APP_NAME} - {clock.get_fps():.2f}fps")
self.render()
pygame.display.flip()
clock.tick(30)
def init_interactive(self) -> None:
self._tooltip_surf = pygame.Surface(self.surf.get_size(), pygame.SRCALPHA)
def render(self) -> None:
pass

View File

@ -2,11 +2,12 @@ from typing import Optional
import pygame import pygame
from display import Display
from path import Path from path import Path
from vec import Vec2 from vec import Vec2
class MapDisplay: class MapDisplay(Display):
PATH_WIDTH = 5 PATH_WIDTH = 5
SEGMENT_SIZE = 20 SEGMENT_SIZE = 20
MIN_SEGMENT_LENGTH = 5 MIN_SEGMENT_LENGTH = 5
@ -19,16 +20,14 @@ class MapDisplay:
min_lat: float, min_lat: float,
max_lat: float, max_lat: float,
cities: list[tuple[Vec2, str, str]]): cities: list[tuple[Vec2, str, str]]):
self.surf: pygame.Surface = surf
super().__init__(surf)
self.min_lon: float = min_lon self.min_lon: float = min_lon
self.max_lon: float = max_lon self.max_lon: float = max_lon
self.min_lat: float = min_lat self.min_lat: float = min_lat
self.max_lat: float = max_lat self.max_lat: float = max_lat
self.cities: list[tuple[Vec2, str, str]] = cities self.cities: list[tuple[Vec2, str, str]] = cities
self.font: pygame.font.Font = pygame.font.SysFont("ubuntu", 20)
self._tooltip_surf: Optional[pygame.Surface] = None
def real_to_screen(self, lon: float, lat: float) -> tuple[float, float]: def real_to_screen(self, lon: float, lat: float) -> tuple[float, float]:
x = (lon - self.min_lon) / (self.max_lon - self.min_lon) x = (lon - self.min_lon) / (self.max_lon - self.min_lon)
y = (lat - self.min_lat) / (self.max_lat - self.min_lat) y = (lat - self.min_lat) / (self.max_lat - self.min_lat)
@ -97,34 +96,3 @@ class MapDisplay:
pygame.draw.line(self.surf, (255, 255, 255), (pos2.x, pos2.y), (line_end.x, line_end.y)) pygame.draw.line(self.surf, (255, 255, 255), (pos2.x, pos2.y), (line_end.x, line_end.y))
self.surf.blit(label, (label_pos.x, label_pos.y)) self.surf.blit(label, (label_pos.x, label_pos.y))
def mainloop(self) -> None:
running = True
self.init_interactive()
clock = pygame.time.Clock()
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
running = False
elif event.key == pygame.K_s and event.mod & pygame.KMOD_CTRL:
path = "/tmp/image.jpg"
pygame.image.save(self.surf, path)
print(f"Saved as {path}")
pygame.display.set_caption(f"{self.APP_NAME} - {clock.get_fps():.2f}fps")
self.render()
pygame.display.flip()
clock.tick(30)
def init_interactive(self) -> None:
self._tooltip_surf = pygame.Surface(self.surf.get_size(), pygame.SRCALPHA)
def render(self) -> None:
pass