def next_destination(self, unit): if len(self.to_visit) <= len(self.visiting): self.visiting.clear() self.AREA_SIZE /= 2 for i in xrange(self.mapsize/self.AREA_SIZE): for j in xrange(self.mapsize/self.AREA_SIZE): self.to_visit.add((i*self.AREA_SIZE,j*self.AREA_SIZE)) min_dist = 10000000000 min_pos = None tries = 15 while tries > 0: pos = random.choice(list(self.to_visit)) tries -= 1 if pos in self.visiting: continue cur_dist = unit.calcDistance(pos) if cur_dist < self.mapsize / self.AREA_SIZE / 2: return pos if min_dist > cur_dist: min_pos = pos min_dist = cur_dist return min_pos
def calcDistance(self, end_square): total_dist = 0.0 total_units = 0 for pos in self.positions: unit = getattr(self, pos) if unit: total_dist = unit.calcDistance(end_square) total_units += 1 if not total_units: return self.mapsize ** 2 return total_dist / total_units