Merge branch 'main' into 'feat/game_loop'
This commit is contained in:
+47
@@ -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
@@ -33,7 +33,6 @@ DIRECTION_FRAMES: Mapping[Direction, Tuple[int, int, int]] = {
|
||||
DEFAULT_SPRITE_HEIGHT: int = 138
|
||||
DEFAULT_FRAME_TIME: float = 0.16
|
||||
|
||||
|
||||
# --- ECTS ---
|
||||
START_ECTS_VALUE = 1 # how many ECTS are generated at the beginning
|
||||
ECTS_UPDATE_INTERVAL = 1000 # time in ms = 1 sec
|
||||
@@ -97,3 +96,10 @@ HUD_BAR_HEIGHT = 15
|
||||
PLAYER_SPEED = 180.0
|
||||
DEMO_ACTOR_HEIGHT = tile_size * 3
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user