X-Git-Url: https://git.ctpug.org.za/?p=tabakrolletjie.git;a=blobdiff_plain;f=tabakrolletjie%2Frays.py;h=a475d8fb27bb6c680a90555cad7dc2a4f6043954;hp=7c8b5beab712c0fe756afbb7645afc92fc3b563c;hb=3341713feb17c2469631de0ef6078e5a4473b28c;hpb=2a76e563f2f801ff8fb804c222c95d7cb7c8f620 diff --git a/tabakrolletjie/rays.py b/tabakrolletjie/rays.py index 7c8b5be..a475d8f 100644 --- a/tabakrolletjie/rays.py +++ b/tabakrolletjie/rays.py @@ -12,7 +12,7 @@ from .constants import SCREEN_SIZE from .utils import debug_timer -def screen_rays(pos): +def screen_rays(): """ An iterable that returns ordered rays from pos to the edge of the screen, starting with the edge point (0, 0) and continuing clockwise in pymunk coordinates. @@ -40,7 +40,7 @@ def calculate_ray_polys(space, position, light_filter): vertices = [position] start, end = None, None ray_polys = [] - for ray in screen_rays(position): + for ray in screen_rays(): info = space.segment_query_first(position, ray, 1, light_filter) point = ray if info is None else info.point vertices.append(point) @@ -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) @@ -128,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): @@ -146,6 +148,8 @@ class RayPolyManager(object): @property def direction(self): + if self._direction is None: + return 0 return self._direction.angle_degrees @direction.setter @@ -156,6 +160,12 @@ class RayPolyManager(object): 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