class SourcedMap(Map):
- def __init__(self, block_chars, things, source_maps, source_center, radius,
- get_map):
+ def __init__(self, block_chars, obstacle_positions, source_maps,
+ source_center, radius, get_map):
self.block_chars = block_chars
self.radius = radius
example_map = get_map(YX(0, 0))
size, self.offset, self.center = \
self.source_geometry.define_segment(source_center, radius)
self.geometry = self.source_geometry.__class__(size)
- for yx in self:
- big_yx, _ = self.source_yxyx(yx)
- get_map(big_yx)
self.source_map_segment = ''
- obstacles = {}
- for yxyx in [t.position for t in things if t.blocking]:
- if yxyx == source_center:
- continue
- if yxyx[0] not in obstacles:
- obstacles[yxyx[0]] = []
- obstacles[yxyx[0]] += [yxyx[1]]
- for yx in self: # TODO: iter and source_yxyx expensive, cache earlier?
+ for yx in self:
big_yx, little_yx = self.source_yxyx(yx)
- if big_yx in obstacles and little_yx in obstacles[big_yx]:
+ get_map(big_yx)
+ if (big_yx, little_yx) in obstacle_positions:
self.source_map_segment += self.block_chars[0]
else:
self.source_map_segment += source_maps[big_yx][little_yx]