From dbee821317a4e96a774456fdd788fb14766a7bdf Mon Sep 17 00:00:00 2001 From: Neil Date: Sat, 10 Sep 2016 12:54:36 +0200 Subject: [PATCH] Update angle in gamestate as well for passing to night --- tabakrolletjie/rays.py | 2 ++ tabakrolletjie/scenes/day.py | 13 +++++++++---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/tabakrolletjie/rays.py b/tabakrolletjie/rays.py index b4142a3..621ded6 100644 --- a/tabakrolletjie/rays.py +++ b/tabakrolletjie/rays.py @@ -88,6 +88,8 @@ class RayPolyManager(object): self._start = None # normal vector in direction of start angle limit self._end = None # normal vector in direction of end angle limit self._set_angle_limits(direction, spread) + if direction: + self.direction = direction # Update direction self._max_radius = None # maximum radius in pixels self._min_radius = None # minimum radius in pixels self._set_radius_limits(radius_limits) diff --git a/tabakrolletjie/scenes/day.py b/tabakrolletjie/scenes/day.py index 933f16b..162a30b 100644 --- a/tabakrolletjie/scenes/day.py +++ b/tabakrolletjie/scenes/day.py @@ -116,14 +116,19 @@ class DayScene(BaseScene): # TODO: Add error sound or something pass - def _update_light_angle(self, pos): + def _update_light_angle(self, pos, gamestate): # Update the angle of the given light pos = pymunk.pygame_util.to_pygame(pos, pygame.display.get_surface()) distance = pos - self._dragging.position angle = math.atan2(distance[1], distance[0]) # Set light angle to this position self._dragging.ray_manager.direction = math.degrees(angle) - # TODO: Update gamestate with new angle + # Hackily update gamestate with new angle + for light_cfg in gamestate.station["lights"]: + light_pos = pymunk.Vec2d(light_cfg["position"]) + if light_pos.get_dist_sqrd(self._dragging.position) < 5.0: + light_cfg["direction"] = math.degrees(angle) + break def _place_spotlight(self, gamestate, colour, ev): if self._seeds > 5: @@ -218,7 +223,7 @@ class DayScene(BaseScene): print self._lights.lit_by(ev.pos, surfpos=True) elif ev.button == 3: light = self._lights.nearest(ev.pos, surfpos=True, - max_distance=5.0) + max_distance=20.0) if light: # Start drag to rotate light self._dragging = light @@ -229,7 +234,7 @@ class DayScene(BaseScene): elif ev.type == pgl.MOUSEMOTION: if self._dragging: # Calculate angle between current position and mouse pos - self._update_light_angle(ev.pos) + self._update_light_angle(ev.pos, gamestate) elif ev.type == pgl.MOUSEBUTTONUP: self._dragging = None -- 2.34.1