-class MapSquare(Map):
-
- # The following is used nowhere, so not implemented.
- #def are_neighbors(self, pos_1, pos_2):
- # return abs(pos_1[0] - pos_2[0]) <= 1 and abs(pos_1[1] - pos_2[1] <= 1)
-
- def move_UP(self, start_pos):
- return [start_pos[0] - 1, start_pos[1]]
-
- def move_DOWN(self, start_pos):
- return [start_pos[0] + 1, start_pos[1]]
-
- def get_neighbors(self, pos):
- # DOWN, LEFT, RIGHT, UP (alphabetically)
- neighbors = [None, None, None, None]
- if pos[0] > 0:
- neighbors[3] = [pos[0] - 1, pos[1]]
- if pos[1] > 0:
- neighbors[1] = [pos[0], pos[1] - 1]
- if pos[0] < self.size[0] - 1:
- neighbors[0] = [pos[0] + 1, pos[1]]
- if pos[1] < self.size[1] - 1:
- neighbors[2] = [pos[0], pos[1] + 1]
- return neighbors
-
-
-class MapFovSquare(MapSquare):
- """Just a marginally and unsatisfyingly adapted variant of MapFovHex."""
-
- def __init__(self, source_map, yx):
- self.source_map = source_map
- self.size = self.source_map.size
- self.terrain = '?' * self.size_i
- self[yx] = '.'
- self.shadow_cones = []
- self.circle_out(yx, self.shadow_process_hex)
-
- def shadow_process_hex(self, yx, distance_to_center, dir_i, dir_progress):
- CIRCLE = 360 # Since we'll float anyways, number is actually arbitrary.
-
- def correct_arm(arm):
- if arm < 0:
- arm += CIRCLE
- return arm
-
- def in_shadow_cone(new_cone):
- for old_cone in self.shadow_cones:
- if old_cone[0] >= new_cone[0] and \
- new_cone[1] >= old_cone[1]:
- #print('DEBUG shadowed by:', old_cone)
- return True
- return False
-
- def merge_cone(new_cone):
- for old_cone in self.shadow_cones:
- if new_cone[0] > old_cone[0] and \
- (new_cone[1] < old_cone[0] or
- math.isclose(new_cone[1], old_cone[0])):
- #print('DEBUG merging to', old_cone)
- old_cone[0] = new_cone[0]
- #print('DEBUG merged cone:', old_cone)
- return True
- if new_cone[1] < old_cone[1] and \
- (new_cone[0] > old_cone[1] or
- math.isclose(new_cone[0], old_cone[1])):
- #print('DEBUG merging to', old_cone)
- old_cone[1] = new_cone[1]
- #print('DEBUG merged cone:', old_cone)
- return True
- return False