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
# 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):
from .base import BaseScene
from ..battery import BatteryManager
-from ..lights import LightManager, light_fitting_by_type
+from ..lights import LightManager, light_fitting_by_type, check_space_for_light
from ..infobar import InfoBar
from ..obstacles import ObstacleManager
from ..events import SceneChangeEvent
from ..constants import SCREEN_SIZE, FONTS, FPS, NIGHT_HOURS_PER_TICK, DEBUG
from ..widgets import ImageButton
-from ..turnip import Turnip, TurnipInvalidPosition, check_turnips
+from ..turnip import Turnip, TurnipInvalidPosition
class DayScene(BaseScene):
if gamestate.seeds > cost:
pos = pymunk.pygame_util.from_pygame(
ev.pos, pygame.display.get_surface())
- # Bail if we're too close to an existing light
- if self._lights.nearest(pos, max_distance=25):
- return
- # Also check turnips
- if check_turnips(self._space, pos, max_distance=25):
+ # Bail if we're too close to an existing light, obstacle or turnip
+ if check_space_for_light(self._space, pos, max_distance=25):
return
gamestate.seeds -= cost
cfg["position"] = pos
categories=TURNIP_CATEGORY)
-def check_turnips(space, pos, max_distance):
- point_info = space.point_query_nearest(
- pos, max_distance, pymunk.ShapeFilter(mask=TURNIP_CATEGORY))
- if point_info is not None:
- return True
- return False
-
-
class TurnipInvalidPosition(Exception):
pass