109 lines
2.8 KiB
Python
109 lines
2.8 KiB
Python
|
#!/usr/bin/python3
|
||
|
|
||
|
import pygame
|
||
|
from pygame._sdl2 import Window
|
||
|
from dataclasses import dataclass
|
||
|
import gui
|
||
|
|
||
|
|
||
|
@dataclass
|
||
|
class Settings:
|
||
|
fps: int = 60
|
||
|
window_size: tuple = (1000, 600)
|
||
|
|
||
|
|
||
|
class Examples:
|
||
|
def __init__(self):
|
||
|
pygame.init()
|
||
|
|
||
|
self.screen = pygame.display.set_mode((1000, 600), pygame.RESIZABLE)
|
||
|
pygame.display.set_caption("Game")
|
||
|
self.window = Window.from_display_module()
|
||
|
|
||
|
self.loading_surface = self.generate_loading_surface()
|
||
|
self.screen.blit(self.loading_surface, (0, 0))
|
||
|
pygame.display.update()
|
||
|
|
||
|
self.settings = Settings()
|
||
|
|
||
|
self.fps = self.settings.fps
|
||
|
|
||
|
# colors
|
||
|
self.gray = (20, 20, 20)
|
||
|
|
||
|
# pygame objects
|
||
|
self.clock = pygame.time.Clock()
|
||
|
self.mouse = pygame.mouse
|
||
|
|
||
|
self.big_font = pygame.font.Font(pygame.font.get_default_font(), 32)
|
||
|
|
||
|
# loading finished
|
||
|
self.window.size = self.settings.window_size
|
||
|
|
||
|
self.gui = gui.GUI(self)
|
||
|
|
||
|
self.running = True
|
||
|
|
||
|
def generate_loading_surface(self):
|
||
|
default_font = pygame.font.SysFont("ubuntu", 32, True)
|
||
|
loading_text = default_font.render("Loading...", True, (240, 240, 240))
|
||
|
|
||
|
w, h = self.screen.get_size()
|
||
|
|
||
|
loading_surface = pygame.Surface((w, h), flags=pygame.SRCALPHA)
|
||
|
|
||
|
loading_surface.fill((40, 40, 40))
|
||
|
loading_surface.blit(loading_text,
|
||
|
(w // 2 - loading_text.get_width() // 2, h // 2 - loading_text.get_height() // 2))
|
||
|
|
||
|
return loading_surface
|
||
|
|
||
|
def loop(self):
|
||
|
self.screen.fill(self.gray)
|
||
|
|
||
|
self.get_events()
|
||
|
if not self.running:
|
||
|
return
|
||
|
|
||
|
self.gui.draw()
|
||
|
|
||
|
if self.loading_surface.get_alpha() > 0:
|
||
|
self.screen.blit(self.loading_surface, (0, 0))
|
||
|
self.loading_surface.set_alpha(self.loading_surface.get_alpha() - 4)
|
||
|
|
||
|
pygame.display.update()
|
||
|
self.clock.tick(self.fps)
|
||
|
|
||
|
def get_events(self):
|
||
|
for event in pygame.event.get():
|
||
|
if event.type == pygame.QUIT:
|
||
|
self.exit()
|
||
|
return
|
||
|
|
||
|
elif event.type == pygame.VIDEORESIZE:
|
||
|
self.window_update(event.size)
|
||
|
|
||
|
elif event.type == pygame.MOUSEBUTTONDOWN:
|
||
|
pos = self.mouse.get_pos()
|
||
|
pressed = self.mouse.get_pressed()
|
||
|
|
||
|
if self.gui.current_page in self.gui.buttons:
|
||
|
for button in self.gui.buttons[self.gui.current_page]:
|
||
|
button.check(pos, pressed)
|
||
|
|
||
|
def exit(self):
|
||
|
self.running = False
|
||
|
|
||
|
print("Bye!")
|
||
|
|
||
|
def window_update(self, size):
|
||
|
self.settings.window_size = size
|
||
|
self.gui.update()
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
examples = Examples()
|
||
|
|
||
|
while examples.running:
|
||
|
examples.loop()
|