def __init__(self, size):
self.size = size
+ self.neighbors_i = {}
def get_directions(self):
directions = []
neighbors[direction] = self.move(pos, direction)
return neighbors
+ def get_neighbors_i(self, i):
+ if i in self.neighbors_i:
+ return self.neighbors_i[i]
+ pos = YX(i // self.size.x, i % self.size.x)
+ neighbors_pos = self.get_neighbors(pos)
+ neighbors_i = {}
+ for direction in neighbors_pos:
+ pos = neighbors_pos[direction]
+ if pos is None:
+ neighbors_i[direction] = None
+ else:
+ neighbors_i[direction] = pos.y * self.size.x + pos.x
+ self.neighbors_i[i] = neighbors_i
+ return self.neighbors_i[i]
+
def move(self, start_pos, direction):
mover = getattr(self, 'move_' + direction)
target = mover(start_pos)
else:
self.terrain[pos_i] = c
+ def __iter__(self):
+ """Iterate over YX position coordinates."""
+ for y in range(self.size.y):
+ for x in range(self.size.x):
+ yield YX(y, x)
+
@property
def size_i(self):
return self.size.y * self.size.x
class FovMap(Map):
+ # FIXME: player visibility asymmetrical (A can see B when B can't see A)
def __init__(self, source_map, center):
self.source_map = source_map