diff --git a/models/renderer.py b/models/renderer.py index da09c51..851cb4c 100644 --- a/models/renderer.py +++ b/models/renderer.py @@ -1,3 +1,4 @@ +import math import pygame from widgets.slider import HorizontalSlider from pygame_widgets.slider import Slider @@ -41,6 +42,7 @@ class Renderer: self.top_left_x, self.bottom_right_x, self.top_left_y, self.bottom_right_y) self.slider = HorizontalSlider(self.screen, 50, 650, self.screen.get_width()-100, 20, 1, self.match.max_tick) + #self.slider.fill = True def render_players(self): """Draws everything on screen.""" @@ -53,13 +55,12 @@ class Renderer: # Draw player if they are alive if player.dead: continue - # Map player coordinates to screen coordinates - mapped_x, mapped_y = self.map_coord_controller.map_to_screen(player.x, player.y) - pygame.draw.circle(self.screen, team.colour, (mapped_x, mapped_y), 5) + + self._render_player(player, team) + self._render_player_yaw(player, team) + + #def render_player_path(self): - # Draw player name - text = self.small_font.render(player.name, True, (255, 255, 255)) - self.screen.blit(text, (mapped_x + 10, mapped_y)) def render_text(self): # Draw current tick @@ -87,9 +88,21 @@ class Renderer: self.slider.set_value(self.match.tick) self.slider.draw() + def _render_player(self, player: Player, team: Team): + mapped_x, mapped_y = self.map_coord_controller.map_to_screen(player.x, player.y) + pygame.draw.circle(self.screen, team.colour, (mapped_x, mapped_y), 5) + text = self.small_font.render(player.name, True, (255, 255, 255)) + self.screen.blit(text, (mapped_x-10, mapped_y-15)) + + def _render_player_yaw(self, player: Player, team: Team): + mapped_x, mapped_y = self.map_coord_controller.map_to_screen(player.x, player.y) + player_yaw = math.radians(player.yaw) + end_x = mapped_x + (20 * math.cos(player_yaw)) + end_y = mapped_y - (20 * math.sin(player_yaw)) + pygame.draw.line(self.screen, team.colour, (mapped_x, mapped_y), (end_x, end_y), 2) + def render(self): self.screen.fill((30, 30, 30)) # Clear screen self.render_map() self.render_text() - self.render_players() - self.render_slider() \ No newline at end of file + self.render_players() \ No newline at end of file diff --git a/widgets/slider.py b/widgets/slider.py index 4e72f98..ce5a3c2 100644 --- a/widgets/slider.py +++ b/widgets/slider.py @@ -18,6 +18,9 @@ class HorizontalSlider: self.knob_x = self.x self.dragging = False + self.fill = False + self.fill_colour = (128, 128, 0) + def handle_event(self, event): """Handle mouse events for dragging""" if event.type == pygame.MOUSEBUTTONDOWN: @@ -35,7 +38,11 @@ class HorizontalSlider: """ Draw the slider on the screen """ - pygame.draw.rect(self.screen, self.background_colour, (self.x, self.y, self.width, self.height)) + if self.fill: + pygame.draw.rect(self.screen, self.fill_colour, (self.x, self.y, self.knob_x, self.height)) + pygame.draw.rect(self.screen, self.background_colour, (self.knob_x, self.y, self.width - (self.knob_x - self.x), self.height)) + else: + pygame.draw.rect(self.screen, self.background_colour, (self.x, self.y, self.width, self.height)) pygame.draw.circle(self.screen, self.knob_colour, (int(self.knob_x), self.y + self.height // 2), self.knob_radius) def set_value(self, value):