Merge branch 'main' into 'feat/game_loop'

This commit is contained in:
Haiden Niklas
2026-05-08 13:34:15 +00:00
2 changed files with 54 additions and 1 deletions
+47
View File
@@ -0,0 +1,47 @@
import pygame
from src.settings import (
HUD_FONT, HUD_FONT_SIZE, HUD_FONT_BOLD,
COLOR_HUD_TEXT, COLOR_HP_BAR_GREEN, COLOR_HP_BAR_RED, COLOR_HP_BAR_BG,
HUD_BAR_WIDTH, HUD_BAR_HEIGHT,
HUD_X_OFFSET, HUD_BAR_X, HUD_Y_DOOR, HUD_Y_ZOMBIE, HUD_Y_ECTS
)
# draw status bar (background bar and the colored hp bar)
def _draw_status_bar(screen, x, y, current, max_val, color):
# bg bar is always the same
pygame.draw.rect(screen, COLOR_HP_BAR_BG, (x, y, HUD_BAR_WIDTH, HUD_BAR_HEIGHT))
# hp bar
if max_val > 0:
hp_width = (current / max_val) * HUD_BAR_WIDTH
pygame.draw.rect((screen, color), (x, y, hp_width, HUD_BAR_HEIGHT))
# time formatter for MM:SS
def _format_time(total_seconds):
mins = total_seconds // 60
secs = total_seconds % 60
return f"TIME {mins:02}:{secs:02}"
class HUD:
def __init__(self):
self.font = pygame.font.SysFont(HUD_FONT, HUD_FONT_SIZE, bold=HUD_FONT_BOLD)
def draw(self, screen, door, zombie, ects, total_time):
# --- DOOR HP ---
_draw_status_bar(screen, HUD_BAR_X, HUD_Y_DOOR, door.current_hp, COLOR_HP_BAR_GREEN)
# -5 px, small off-set to align the text better with hp bar
screen.blit(self.font.render("DOOR HP ", True, COLOR_HUD_TEXT), (HUD_X_OFFSET, HUD_Y_DOOR - 5))
# --- ZOMBIE HP ---
if zombie:
_draw_status_bar(screen, HUD_BAR_X, HUD_Y_ZOMBIE, zombie.current_hp, zombie.max_hp, COLOR_HP_BAR_RED)
screen.blit(self.font.render("Zombie HP:", True, COLOR_HUD_TEXT), (HUD_X_OFFSET, HUD_Y_ZOMBIE - 5))
# --- ECTS ---
ects_info = f"ECTS: {ects.ects_balance} ({ects.ects_per_second}/s)"
screen.blit(self.font.render(ects_info, True, COLOR_HUD_TEXT), (HUD_X_OFFSET, HUD_Y_ECTS))
# --- TIME ---
time_str = _format_time(total_time)
screen.blit(self.font.render(time_str, True, COLOR_HUD_TEXT), (screen.get_width() - 150, HUD_Y_DOOR - 5))
+7 -1
View File
@@ -33,7 +33,6 @@ DIRECTION_FRAMES: Mapping[Direction, Tuple[int, int, int]] = {
DEFAULT_SPRITE_HEIGHT: int = 138 DEFAULT_SPRITE_HEIGHT: int = 138
DEFAULT_FRAME_TIME: float = 0.16 DEFAULT_FRAME_TIME: float = 0.16
# --- ECTS --- # --- ECTS ---
START_ECTS_VALUE = 1 # how many ECTS are generated at the beginning START_ECTS_VALUE = 1 # how many ECTS are generated at the beginning
ECTS_UPDATE_INTERVAL = 1000 # time in ms = 1 sec ECTS_UPDATE_INTERVAL = 1000 # time in ms = 1 sec
@@ -97,3 +96,10 @@ HUD_BAR_HEIGHT = 15
PLAYER_SPEED = 180.0 PLAYER_SPEED = 180.0
DEMO_ACTOR_HEIGHT = tile_size * 3 DEMO_ACTOR_HEIGHT = tile_size * 3
FPS = 60 FPS = 60
HUD_X_OFFSET = 20 # left startpoint for texts
HUD_BAR_X = 150 # left startpoint for hp bars
HUD_Y_DOOR = 20
HUD_Y_ZOMBIE = 50
HUD_Y_ECTS = 85