X-Git-Url: https://git.ctpug.org.za/?a=blobdiff_plain;f=tabakrolletjie%2Frays.py;h=8a79c34c57b4c3ff89a7d31681c1c5ec0915f385;hb=23617e4ca4cb091ad5f4bb55caee87c427993525;hp=65fbc3d628b19de13a237124c89f73484ab5e5a5;hpb=2b7c4e798a22d0f646061c044678f0e2e7c590d9;p=tabakrolletjie.git diff --git a/tabakrolletjie/rays.py b/tabakrolletjie/rays.py index 65fbc3d..8a79c34 100644 --- a/tabakrolletjie/rays.py +++ b/tabakrolletjie/rays.py @@ -84,9 +84,12 @@ 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) + 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) @@ -127,7 +130,7 @@ class RayPolyManager(object): self._min_radius = value or 0.0 def reaches(self, position): - distance = self.position.get_distance(self.position) + distance = self.position.get_distance(position) return (self._min_radius <= distance <= self._max_radius) def _set_radius_limits(self, radius_limits): @@ -141,21 +144,37 @@ 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): + if self._direction is None: + return 0 + 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 + @property + def spread(self): + if not self._direction: + return 2 * math.pi + return math.fabs(self._start.get_angle_between(self._end)) + 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):