import pygame as pg from queue import Queue from collider.types import CircleCollider, ConvexCollider, BaseCollider from transform import Transform def _debug(fn): def wrapper(self: 'Debug', *args, **kwargs): if not self.enabled: return fn(self, *args, **kwargs) return wrapper class Debug: def __init__(self, enabled=False): self.enabled = enabled self._screen = None self._debug_queue = Queue() def debug(self): while not self._debug_queue.empty(): self._debug_queue.get()() @_debug def draw_lines(self, points) -> None: def _draw_lines(): if len(points) > 1: pg.draw.lines( self._screen, (255,0,255), False, points=points, width=3 ) for point in points: pg.draw.circle( self._screen, (255,0,255), point, 2 ) if len(points) > 0: pg.draw.circle( self._screen, (255,0,255), points[0], 2 ) self._debug_queue.put(_draw_lines) @_debug def draw_collider(self, collider: BaseCollider, t: Transform): def _draw_collider(): if isinstance(collider, ConvexCollider): h = collider.hull(t) pg.draw.lines( self._screen, color=(0,255,255), points=[v for v in h.vertices()], closed=True ) if isinstance(collider, CircleCollider): pg.draw.circle( self._screen, color=(0,255,255), center=t.position, radius=collider.radius, width=1 ) self._debug_queue.put(_draw_collider) debug = Debug()