X-Git-Url: https://git.ctpug.org.za/?a=blobdiff_plain;f=tabakrolletjie%2Flights.py;h=81740d88fd2003603c3332323900d120f3f5d283;hb=acaa20518c279ace7be09da5e157130da6c8ba6a;hp=8ec89a0cb37ac07bbb4f7ddab57e227b91ce5afd;hpb=e5dd047e68fba0c392f486b9731f7ad5d3e1be6f;p=tabakrolletjie.git diff --git a/tabakrolletjie/lights.py b/tabakrolletjie/lights.py index 8ec89a0..81740d8 100644 --- a/tabakrolletjie/lights.py +++ b/tabakrolletjie/lights.py @@ -1,14 +1,29 @@ """ May it be a light for you in dark places, when all other lights go out. """ +import pymunk +import pymunk.pygame_util +import pygame.draw + class BaseLight(object): """ Common light functionality. """ def __init__(self, colour, position): + self.body = pymunk.Body(0, 0, pymunk.body.Body.STATIC) self.colour = colour self.position = position + def add(self, space): + if self.body.space is not None: + space.remove(self.body, *self.body.shapes) + shapes = self.determine_ray_polys(space) + space.add(self.body, *shapes) + + def determine_ray_polys(self, space): + raise NotImplementedError( + "Lights should implement .determine_ray_polys.") + @classmethod def load(cls, config): kw = config.copy() @@ -26,6 +41,18 @@ class SpotLight(BaseLight): self.direction = direction self.spread = spread + def determine_ray_polys(self, space): + x, y = self.position + return [pymunk.Poly(self.body, [ + self.position, [x + 50, y], [x, y + 50]])] + + def render(self, surface): + for shape in self.body.shapes: + pygame_poly = [ + pymunk.pygame_util.to_pygame(v, surface) for v in + shape.get_vertices()] + pygame.draw.polygon(surface, (255, 255, 255), pygame_poly) + class Lamp(BaseLight): def __init__(self, colour="white", position=None, radius=100.0):