ADD: yaw to see where player is looked + refactor for rendering
This commit is contained in:
@@ -1,3 +1,4 @@
|
|||||||
|
import math
|
||||||
import pygame
|
import pygame
|
||||||
from widgets.slider import HorizontalSlider
|
from widgets.slider import HorizontalSlider
|
||||||
from pygame_widgets.slider import Slider
|
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.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 = HorizontalSlider(self.screen, 50, 650, self.screen.get_width()-100, 20, 1, self.match.max_tick)
|
||||||
|
#self.slider.fill = True
|
||||||
|
|
||||||
def render_players(self):
|
def render_players(self):
|
||||||
"""Draws everything on screen."""
|
"""Draws everything on screen."""
|
||||||
@@ -53,13 +55,12 @@ class Renderer:
|
|||||||
# Draw player if they are alive
|
# Draw player if they are alive
|
||||||
if player.dead:
|
if player.dead:
|
||||||
continue
|
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)
|
|
||||||
|
|
||||||
# Draw player name
|
self._render_player(player, team)
|
||||||
text = self.small_font.render(player.name, True, (255, 255, 255))
|
self._render_player_yaw(player, team)
|
||||||
self.screen.blit(text, (mapped_x + 10, mapped_y))
|
|
||||||
|
#def render_player_path(self):
|
||||||
|
|
||||||
|
|
||||||
def render_text(self):
|
def render_text(self):
|
||||||
# Draw current tick
|
# Draw current tick
|
||||||
@@ -87,9 +88,21 @@ class Renderer:
|
|||||||
self.slider.set_value(self.match.tick)
|
self.slider.set_value(self.match.tick)
|
||||||
self.slider.draw()
|
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):
|
def render(self):
|
||||||
self.screen.fill((30, 30, 30)) # Clear screen
|
self.screen.fill((30, 30, 30)) # Clear screen
|
||||||
self.render_map()
|
self.render_map()
|
||||||
self.render_text()
|
self.render_text()
|
||||||
self.render_players()
|
self.render_players()
|
||||||
self.render_slider()
|
|
||||||
@@ -18,6 +18,9 @@ class HorizontalSlider:
|
|||||||
self.knob_x = self.x
|
self.knob_x = self.x
|
||||||
self.dragging = False
|
self.dragging = False
|
||||||
|
|
||||||
|
self.fill = False
|
||||||
|
self.fill_colour = (128, 128, 0)
|
||||||
|
|
||||||
def handle_event(self, event):
|
def handle_event(self, event):
|
||||||
"""Handle mouse events for dragging"""
|
"""Handle mouse events for dragging"""
|
||||||
if event.type == pygame.MOUSEBUTTONDOWN:
|
if event.type == pygame.MOUSEBUTTONDOWN:
|
||||||
@@ -35,7 +38,11 @@ class HorizontalSlider:
|
|||||||
"""
|
"""
|
||||||
Draw the slider on the screen
|
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)
|
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):
|
def set_value(self, value):
|
||||||
|
|||||||
Reference in New Issue
Block a user