- t = game.get_thing(game.sessions[connection_id], False)
- game.io.send('CHAT ' + quote(t.nickname + ': ' + msg))
+ speaker = game.get_thing(game.sessions[connection_id], False)
+ dijkstra_map = Map(game.map_geometry.size)
+ n_max = 256
+ dijkstra_map.terrain = [n_max for i in range(dijkstra_map.size_i)]
+ dijkstra_map[speaker.position] = 0
+ shrunk = True
+ while shrunk:
+ shrunk = False
+ for pos in dijkstra_map:
+ if game.map[pos] == 'X':
+ continue
+ neighbors = game.map_geometry.get_neighbors(pos)
+ for direction in [d for d in neighbors if neighbors[d]]:
+ yx = neighbors[direction]
+ if dijkstra_map[yx] < dijkstra_map[pos] - 1:
+ dijkstra_map[pos] = dijkstra_map[yx] + 1
+ shrunk = True
+ for c_id in game.sessions:
+ listener = game.get_thing(game.sessions[c_id], create_unfound=False)
+ volume = 1 / max(1, dijkstra_map[listener.position])
+ game.io.send('CHAT ' +
+ quote('(volume: %.3f) %s: %s' % (volume, speaker.nickname, msg)),
+ c_id)