From 9a21993be81120b5dbe1f3d6caf4fb8f2cc27404 Mon Sep 17 00:00:00 2001 From: Simon Cross Date: Tue, 6 Sep 2016 22:17:37 +0200 Subject: [PATCH] Add light manager. --- tabakrolletjie/lights.py | 21 ++++++++++++++++++++- tabakrolletjie/scenes/day.py | 13 ++++--------- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/tabakrolletjie/lights.py b/tabakrolletjie/lights.py index 2590e31..8abb1a6 100644 --- a/tabakrolletjie/lights.py +++ b/tabakrolletjie/lights.py @@ -63,6 +63,25 @@ def calculate_ray_polys(space, body, position): return ray_polys +class LightManager(object): + """ Manages a set of lights. """ + + def __init__(self, space, gamestate): + self._space = space + self._lights = [ + BaseLight.load(cfg) for cfg in gamestate.station["lights"]] + for light in self._lights: + light.add(self._space) + + def render_light(self, surface): + for light in self._lights: + light.render_light(surface) + + def render_fittings(self, surface): + for light in self._lights: + light.render_fitting(surface) + + class BaseLight(object): """ Common light functionality. """ @@ -125,7 +144,7 @@ class BaseLight(object): subsurface.set_alpha(50) surface.blit(subsurface, (0, 0), None) - def render_fittings(self, surface): + def render_fitting(self, surface): pygame.draw.circle( surface, (255, 255, 0), pymunk.pygame_util.to_pygame(self.fitting.offset, surface), diff --git a/tabakrolletjie/scenes/day.py b/tabakrolletjie/scenes/day.py index fc0ee9b..3c5a6b8 100644 --- a/tabakrolletjie/scenes/day.py +++ b/tabakrolletjie/scenes/day.py @@ -8,7 +8,7 @@ import pymunk.pygame_util from .base import BaseScene from ..constants import FITTINGS_CATEGORY -from ..lights import BaseLight +from ..lights import LightManager from ..obstacles import BaseObstacle from ..events import SceneChangeEvent from ..utils import debug_timer @@ -21,22 +21,17 @@ class DayScene(BaseScene): self._space = pymunk.Space() self._obstacles = [ BaseObstacle.load(cfg) for cfg in gamestate.station["obstacles"]] - self._lights = [ - BaseLight.load(cfg) for cfg in gamestate.station["lights"]] for obs in self._obstacles: obs.add(self._space) - for light in self._lights: - light.add(self._space) + self._lights = LightManager(self._space, gamestate) @debug_timer("day.render") def render(self, surface, gamestate): surface.fill((0, 0, 155)) - for light in self._lights: - light.render_light(surface) + self._lights.render_light(surface) for obs in self._obstacles: obs.render(surface) - for light in self._lights: - light.render_fittings(surface) + self._lights.render_fittings(surface) def left_click(self, surfpos): pos = pymunk.pygame_util.from_pygame( -- 2.34.1