added locking to dragon hoards

This commit is contained in:
2024-07-22 12:19:42 -04:00
parent 0e64687beb
commit 0780c816b1
8 changed files with 68 additions and 25 deletions

View File

@ -48,15 +48,6 @@ level::level(const level_data &lvl, character *player, RNG *rng,
void level::fill(const level_data &lvl, std::vector<position_list> &tiles,
RNG *rng) {
for (auto [type, pos] : lvl.enemies) {
for (size_t i = 0; i < tiles.size(); ++i)
remove_from_list(tiles[i], pos);
pelist.push_back(new_enemy(type, pos, enabled_features,
map.which_room(pos), rng));
elist.push_back(pelist[pelist.size() - 1].get());
}
for (auto [type, pos] : lvl.potions) {
for (size_t i = 0; i < tiles.size(); ++i)
remove_from_list(tiles[i], pos);
@ -71,6 +62,29 @@ void level::fill(const level_data &lvl, std::vector<position_list> &tiles,
glist.push_back(g);
}
for (auto [type, pos] : lvl.enemies) {
for (size_t i = 0; i < tiles.size(); ++i)
remove_from_list(tiles[i], pos);
if (type != DRAGON)
pelist.push_back(new_enemy(type, pos, enabled_features,
map.which_room(pos), rng));
else {
gold guards{POS_NIL, 0};
for (size_t i = 0; i < glist.size(); ++i)
if (glist[i].get_amount() == GOLD_DRAGON &&
is_adjacent(glist[i].get_pos(), pos))
guards = glist[i];
pelist.push_back(new_enemy(type, pos, enabled_features,
map.which_room(pos), rng,
guards.get_pos()));
}
elist.push_back(pelist[pelist.size() - 1].get());
}
}
gold_list level::dragon_hoard(const level_data &lvl) {
@ -116,7 +130,8 @@ void level::gen_enemies(const level_data &lvl, RNG *rng,
dhoard[i].get_pos();
pelist.push_back(new_dragon(rng, pos, dhoard[i].get_pos(),
enabled_features,
map.which_room(dhoard[i].get_pos())));
map.which_room(dhoard[i].get_pos()),
dhoard[i].get_pos()));
int room = map.which_room(pos);
remove_from_list(tiles[room], pos);