Pass player powerup_flags to create_bfs_list
This commit is contained in:
parent
1dcacefc9c
commit
dc7c718b66
|
@ -256,13 +256,13 @@ extern int Stolen_item_index; // Used in ai.c for controlling rate of Thief fl
|
|||
extern void init_ai_frame(void);
|
||||
|
||||
__attribute_warn_unused_result
|
||||
std::size_t create_bfs_list(segnum_t start_seg, segnum_t *bfs_list, std::size_t max_segs);
|
||||
std::size_t create_bfs_list(segnum_t start_seg, player_flags, segnum_t *bfs_list, std::size_t max_segs);
|
||||
|
||||
template <std::size_t N>
|
||||
__attribute_warn_unused_result
|
||||
std::size_t create_bfs_list(segnum_t start_seg, array<segnum_t, N> &bfs_list)
|
||||
std::size_t create_bfs_list(const segnum_t start_seg, const player_flags powerup_flags, array<segnum_t, N> &bfs_list)
|
||||
{
|
||||
return create_bfs_list(start_seg, bfs_list.data(), N);
|
||||
return create_bfs_list(start_seg, powerup_flags, bfs_list.data(), N);
|
||||
}
|
||||
extern void init_thief_for_level();
|
||||
|
||||
|
|
|
@ -194,15 +194,13 @@ static int segment_is_reachable(const vcsegptr_t segp, int sidenum, const player
|
|||
// Output:
|
||||
// bfs_list: array of shorts, each reachable segment. Includes start segment.
|
||||
// length: number of elements in bfs_list
|
||||
std::size_t create_bfs_list(segnum_t start_seg, segnum_t *const bfs_list, std::size_t max_segs)
|
||||
std::size_t create_bfs_list(segnum_t start_seg, const player_flags powerup_flags, segnum_t *const bfs_list, std::size_t max_segs)
|
||||
{
|
||||
std::size_t head = 0, tail = 0;
|
||||
visited_segment_bitarray_t visited;
|
||||
bfs_list[head++] = start_seg;
|
||||
visited[start_seg] = true;
|
||||
|
||||
auto &player_info = get_local_plrobj().ctype.player_info;
|
||||
const auto powerup_flags = player_info.powerup_flags;
|
||||
while ((head != tail) && (head < max_segs)) {
|
||||
auto curseg = bfs_list[tail++];
|
||||
const auto &&cursegp = vcsegptr(curseg);
|
||||
|
@ -555,7 +553,8 @@ static objnum_t exists_in_mine_2(const vcsegptridx_t segp, int objtype, int obji
|
|||
static segnum_t exists_fuelcen_in_mine(segnum_t start_seg)
|
||||
{
|
||||
array<segnum_t, MAX_SEGMENTS> bfs_list;
|
||||
const auto length = create_bfs_list(start_seg, bfs_list);
|
||||
const auto powerup_flags = get_local_plrobj().ctype.player_info.powerup_flags;
|
||||
const auto length = create_bfs_list(start_seg, powerup_flags, bfs_list);
|
||||
auto predicate = [](const segnum_t &s) { return vcsegptr(s)->special == SEGMENT_IS_FUELCEN; };
|
||||
{
|
||||
const auto &&rb = partial_const_range(bfs_list, length);
|
||||
|
@ -581,7 +580,8 @@ static segnum_t exists_fuelcen_in_mine(segnum_t start_seg)
|
|||
static objnum_t exists_in_mine(segnum_t start_seg, int objtype, int objid, int special)
|
||||
{
|
||||
array<segnum_t, MAX_SEGMENTS> bfs_list;
|
||||
const auto length = create_bfs_list(start_seg, bfs_list);
|
||||
const auto powerup_flags = get_local_plrobj().ctype.player_info.powerup_flags;
|
||||
const auto length = create_bfs_list(start_seg, powerup_flags, bfs_list);
|
||||
|
||||
range_for (const auto segnum, partial_const_range(bfs_list, length))
|
||||
{
|
||||
|
|
|
@ -2829,7 +2829,13 @@ void init_ai_frame(void)
|
|||
static void make_nearby_robot_snipe(void)
|
||||
{
|
||||
array<segnum_t, MNRS_SEG_MAX> bfs_list;
|
||||
const auto bfs_length = create_bfs_list(ConsoleObject->segnum, bfs_list);
|
||||
/* Passing powerup_flags here seems wrong. Sniping robots do not
|
||||
* open doors, so they should not care what doors the player can
|
||||
* open. However, passing powerup_flags here maintains the
|
||||
* semantics that past versions used.
|
||||
*/
|
||||
const auto powerup_flags = get_local_plrobj().ctype.player_info.powerup_flags;
|
||||
const auto bfs_length = create_bfs_list(ConsoleObject->segnum, powerup_flags, bfs_list);
|
||||
|
||||
range_for (auto &i, partial_const_range(bfs_list, bfs_length)) {
|
||||
range_for (const auto objp, objects_in(vsegptr(i)))
|
||||
|
|
Loading…
Reference in a new issue