+ from plomrogue.mapping import FovMap
+ import multiprocessing
+ c_ids = [c_id for c_id in self.sessions]
+ # Only recalc FOVs for players with ._fov = None
+ player_fovs = []
+ player_fov_ids = []
+ for c_id in c_ids:
+ player = self.get_player(c_id)
+ if player._fov:
+ continue
+ player.prepare_multiprocessible_fov_stencil() #!
+ player_fovs += [player._fov]
+ player_fov_ids += [player.id_]
+ if len(player_fovs) > 0:
+ print('DEBUG regenerating FOVs')
+ pool = multiprocessing.Pool()
+ new_fovs = pool.map(FovMap.init_terrain, [fov for fov in player_fovs]) #!
+ pool.close()
+ pool.join()
+ for i in range(len(player_fov_ids)):
+ id_ = player_fov_ids[i]
+ player = self.get_thing(id_)
+ player._fov = new_fovs[i]
+ for c_id in c_ids: