home · contact · privacy
In ASCII art enter mode, on length failure, name needed length.
[plomrogue2] / plomrogue / mapping.py
index e3c071f85251ae9e947183a474fe69d78294e2bf..7b7ad3c6680e56b0901c40e1ca6ba13c2d9781d1 100644 (file)
@@ -210,8 +210,8 @@ class Map():
 
 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))
@@ -219,20 +219,11 @@ class SourcedMap(Map):
         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]