REFACTOR: abstract text rendering away from main renderer

This commit is contained in:
2025-03-19 19:27:12 +01:00
parent 14462ca4a8
commit c64135f4c2
3 changed files with 27 additions and 5 deletions

View File

@@ -2,7 +2,7 @@ import pygame, math
from models.match import Match
from utils.utils import mapped_value
class PlayerRender:
class PlayerRenderer:
def __init__(self, screen, match: Match, map_coord_controller, player_font):
self.screen = screen
self.match = match
@@ -35,7 +35,6 @@ class PlayerRender:
x, y = self.map_coord_controller.map_to_screen(player.x, player.y)
pygame.draw.rect(self.screen, self.health_bar_background, (x-10, y-10, 20, 5))
pygame.draw.rect(self.screen, self.health_bar_foreground, (x-10, y-10, mapped_value(player.health, 0, 100, 0, 20), 5))
def render(self):
for team in self.match.get_teams():

View File

@@ -2,7 +2,8 @@ import pygame
from widgets.slider import HorizontalSlider
from models.match import Match
from controllers.map_coord_controller import MapCoordController
from render.player_render import PlayerRender
from render.player_renderer import PlayerRenderer
from render.text_renderer import TextRenderer
from utils.json_object import JSONObject
class Renderer:
@@ -40,7 +41,8 @@ class Renderer:
self.slider = HorizontalSlider(self.screen, 50, 650, self.screen.get_width()-100, 20, 1, self.match.max_tick)
self.player_render = PlayerRender(self.screen, self.match, self.map_coord_controller, self.small_font)
self.player_render = PlayerRenderer(self.screen, self.match, self.map_coord_controller, self.small_font)
self.text_render = TextRenderer(self.screen, self.match)
def render_text(self):
# Draw current tick
@@ -73,5 +75,5 @@ class Renderer:
self.map_coord_controller.update_screen_size(self.screen.get_width(), self.screen.get_height())
self.render_slider()
self.render_map()
self.render_text()
self.text_render.render()
self.player_render.render()

21
render/text_renderer.py Normal file
View File

@@ -0,0 +1,21 @@
import pygame
class TextRenderer:
def __init__(self, screen, match):
self.screen = screen
self.font = pygame.font.Font(None, 36)
self.match = match
self.colour = (255, 255, 255)
def _render_current_tick(self, match_tick, max_tick):
text = self.font.render(f"Tick: {match_tick}/{max_tick}", True, self.colour)
self.screen.blit(text, (10, 10))
def _render_team_scores(self, team_1_score, team_2_score):
text = self.font.render(f"Score: {team_1_score} - {team_2_score}", True, self.colour)
self.screen.blit(text, (10, 40))
def render(self):
self._render_current_tick(self.match.tick, self.match.max_tick)
self._render_team_scores(self.match.team_1.score, self.match.team_2.score)