Add back light radius checks.
[tabakrolletjie.git] / tabakrolletjie / lights.py
index d20ab3570663ba1132345d1f093aea8b9b7985ce..34160f006de713ce58163cf54307f0995047cc12 100644 (file)
@@ -38,6 +38,11 @@ class LightManager(object):
         for light in self._lights:
             light.add(self._space)
 
+    def add_light(self, cfg):
+        light = BaseLight.load(cfg)
+        self._lights.append(light)
+        light.add(self._space)
+
     def toggle_nearest(self, *args, **kw):
         light = self.nearest(*args, **kw)
         if light:
@@ -60,7 +65,10 @@ class LightManager(object):
         point_info_list = self._space.point_query(
             pos, max_distance, pymunk.ShapeFilter(mask=LIGHT_CATEGORY))
         lights = [p.shape.body.light for p in point_info_list]
-        return [light for light in lights if light.on]
+        return [
+            light for light in lights
+            if light.on and light.ray_manager.reaches(pos)
+        ]
 
     def light_query(self, shape):
         """Query the lights by shape"""
@@ -70,7 +78,10 @@ class LightManager(object):
         shape_info_list = self._space.shape_query(shape)
         shape.filter = old_filter
         lights = [p.shape.body.light for p in shape_info_list]
-        return [light for light in lights if light.on]
+        return [
+            light for light in lights
+            if light.on and light.ray_manager.reaches(shape.body.position)
+        ]
 
     def render_light(self, surface):
         for light in self._lights:
@@ -99,7 +110,7 @@ class BaseLight(object):
     # defaults
     RAY_MANAGER = RayPolyManager
     FITTING_IMG = None
-    FITTING_RADIUS = 10.0
+    FITTING_RADIUS = 24.0
 
     # cached surfaces
     _surface_cache = {}
@@ -200,13 +211,13 @@ class BaseLight(object):
         if self._image is None:
             fitting_colour = self.COLOURS[self.colour]
             self._image = loader.load_image(
-                "64", self.FITTING_IMG,
+                "48", self.FITTING_IMG,
                 transform=Multiply(colour=fitting_colour))
         return self._image
 
     def render_fitting(self, surface):
         rx, ry = self.ray_manager.pygame_position(surface)
-        surface.blit(self.get_image(), (rx - 32, ry - 32), None, 0)
+        surface.blit(self.get_image(), (rx - 24, ry - 24), None, 0)
 
     def tick(self):
         pass