diff --git a/alert.py b/alert.py new file mode 100644 index 0000000..0c2db0a --- /dev/null +++ b/alert.py @@ -0,0 +1,40 @@ +import pygame +import pygame.freetype +import threading +from time import sleep + +class Alert(): + def __init__(self, text, display): + self.text = text + + font = pygame.freetype.Font(None, 24) + font_fg = (255, 255, 255) + font_bg = (255, 255, 255, 120) + + text_image = font.render(text, font_fg)[0] + + self.background = pygame.Surface((text_image.get_width() + 12, text_image.get_height() + 12), pygame.SRCALPHA) + self.background.fill(font_bg) + + self.rect = self.background.get_rect() + text_rect = text_image.get_rect(center = self.rect.center) + + self.background.blit(text_image, text_rect) + + self.rect.topleft = (display.get_width() / 2 - self.background.get_width() / 2, display.get_height() - self.background.get_height() - 8) + + def draw(self, surface): + surface.blit(self.background, self.rect) + + def start_hide_thread(self, alerts, delay): + def hide_delay(delay): + sleep(delay) + + try: + alerts.pop(alerts.index(self)) + except ValueError: + pass + + p = threading.Thread(target=hide_delay, args=(delay,)) + p.daemon = True + p.start() \ No newline at end of file diff --git a/levels.py b/levels.py index 111bfe4..a4c1b5f 100644 --- a/levels.py +++ b/levels.py @@ -43,9 +43,11 @@ def save_level(level): level_save = save_level_to_string(level) unix_timestamp = int(time()) - save = open(f"./levels/{unix_timestamp}.p3hel", "w") + filename = f'{unix_timestamp}.p3hel' + save = open(f"./levels/{filename}", "w") save.write(level_save) save.close() + return filename def open_level(path): save = open(path, "r") diff --git a/main.py b/main.py index d69ab27..f34aba8 100755 --- a/main.py +++ b/main.py @@ -13,6 +13,7 @@ from gyro import * from levels import * from constants import * from draw import draw +from alert import Alert bCap = True @@ -43,7 +44,15 @@ def mainLoop(): fontSize = 18 debugInfo = True wall_buffer = [] - + alerts = [] + + def alert_append(alert, delay): + if len(alerts) >= 1: + alerts.pop() + + alerts.append(alert) + alert.start_hide_thread(alerts, delay) + try: leveltoparse = open_level(sys.argv[1]) except IndexError: @@ -70,7 +79,10 @@ def mainLoop(): else: wall_buffer.append(gPlayer.cPos) if event.key == pygame.K_F5: - save_level(level) + filename = save_level(level) + alert = Alert(f"File saved as {filename}", display) + + alert_append(alert, 5) keys = pygame.key.get_pressed() if keys[pygame.K_d]: @@ -109,6 +121,9 @@ def mainLoop(): c = complex(Poincare2Klein(gPlayer.cPos)) pygame.draw.rect(display, WHITE, (c.real * 100 + 95, (c.imag * 100 + 195), 10, 10)) + for alert in alerts: + alert.draw(display) + pygame.display.update() if bCap: clock.tick(60)