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)
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):
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):