Don't allow placing lights on turnips, obstacles or other lights.
[tabakrolletjie.git] / tabakrolletjie / lights.py
index d9f2b2b660fbfddb3cb52e8278f18d7e696e6a1e..27365095fe1d745f0817f89406bc71f4f67bfc3e 100644 (file)
@@ -11,7 +11,9 @@ import pygame.locals as pgl
 import pygame.rect
 import pygame.transform
 
-from .constants import LIGHT_CATEGORY, FITTINGS_CATEGORY, COLOURS
+from .constants import (
+    LIGHT_CATEGORY, FITTINGS_CATEGORY, OBSTACLE_CATEGORY, TURNIP_CATEGORY,
+    COLOURS)
 from .rays import RayPolyManager
 from .utils import DetailedTimer
 from .loader import loader
@@ -29,6 +31,16 @@ FITTINGS_FILTER = pymunk.ShapeFilter(
 
 # Just match lights, nothing else
 LIT_BY_FILTER = pymunk.ShapeFilter(mask=LIGHT_CATEGORY)
+SPACE_FOR_LIGHT_FILTER = pymunk.ShapeFilter(
+    mask=FITTINGS_CATEGORY | OBSTACLE_CATEGORY | TURNIP_CATEGORY)
+
+
+def check_space_for_light(space, pos, max_distance):
+    point_info = space.point_query_nearest(
+        pos, max_distance, SPACE_FOR_LIGHT_FILTER)
+    if point_info is not None:
+        return True
+    return False
 
 
 class LightManager(object):
@@ -36,6 +48,7 @@ class LightManager(object):
 
     def __init__(self, space, gamestate):
         self._space = space
+        self._battery_dead = False
         self._lights = [
             BaseLight.load(cfg) for cfg in gamestate.station["lights"]]
         for light in self._lights:
@@ -46,7 +59,14 @@ class LightManager(object):
         self._lights.append(light)
         light.add(self._space)
 
+    def battery_dead(self):
+        self._battery_dead = True
+        for light in self._lights:
+            light.off()
+
     def toggle_nearest(self, *args, **kw):
+        if self._battery_dead:
+            return
         light = self.nearest(*args, **kw)
         if light:
             light.toggle()
@@ -237,7 +257,10 @@ class BaseLight(object):
         return 5 * area * self.intensity / 6400  # 80x80 unit area
 
     def base_damage(self):
-        return 5 * self.intensity
+        return 10 * self.intensity
+
+    def off(self):
+        self.on = False
 
     def toggle(self):
         self.colour_pos += 1