From 2a76e563f2f801ff8fb804c222c95d7cb7c8f620 Mon Sep 17 00:00:00 2001 From: Simon Cross Date: Sat, 10 Sep 2016 12:28:12 +0200 Subject: [PATCH] Add direction property to ray manager. --- tabakrolletjie/lights.py | 2 +- tabakrolletjie/rays.py | 23 ++++++++++++++++------- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/tabakrolletjie/lights.py b/tabakrolletjie/lights.py index 8353c28..ed18fdf 100644 --- a/tabakrolletjie/lights.py +++ b/tabakrolletjie/lights.py @@ -291,5 +291,5 @@ class SpotLight(BaseLight): def tick(self): if self.angular_velocity: - self.ray_manager.rotate_degrees(self.angular_velocity) + self.ray_manager.direction -= self.angular_velocity self.ray_manager.update_shapes() diff --git a/tabakrolletjie/rays.py b/tabakrolletjie/rays.py index 65fbc3d..7c8b5be 100644 --- a/tabakrolletjie/rays.py +++ b/tabakrolletjie/rays.py @@ -84,6 +84,7 @@ class RayPolyManager(object): self._position = pymunk.Vec2d(position) # light's position self._ray_filter = ray_filter # light filter self._rays = [] # list of RayPolys + self._direction = None # normal vector for direction 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) @@ -141,21 +142,29 @@ class RayPolyManager(object): self._max_radius = radius_limits[1] def rotatable(self): - return self._start is not None + return self._direction is not None - def rotate_degrees(self, degrees): - self._start.rotate_degrees(degrees) - self._end.rotate_degrees(degrees) + @property + def direction(self): + return self._direction.angle_degrees + + @direction.setter + def direction(self, degrees): + spread = self._direction.get_angle_between(self._start) + self._direction.angle_degrees = degrees + self._start = self._direction.rotated(spread) + self._end = self._direction.rotated(-spread) self._poly_cache = None def _set_angle_limits(self, direction, spread): if direction is None or spread is None: + self._direction = None self._start = None self._end = None else: - n = pymunk.Vec2d(1, 0) - self._start = n.rotated_degrees(-spread/2.) - self._end = n.rotated_degrees(spread/2.) + self._direction = pymunk.Vec2d(1, 0) + self._start = self._direction.rotated_degrees(-spread/2.) + self._end = self._direction.rotated_degrees(spread/2.) self._poly_cache = None def polys(self): -- 2.34.1