76 lines
2.1 KiB
Python
76 lines
2.1 KiB
Python
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()
|