full implementation!

bug: level generation will generate nullptrs
This commit is contained in:
2024-07-15 00:09:14 -04:00
parent c3b974c83c
commit 6768d73d16
13 changed files with 407 additions and 46 deletions

View File

@ -114,31 +114,31 @@ void level::gen_potions(RNG *rng, std::vector<position_list> &tiles) {
void level::print(display *out) const {
map.print(out);
for (auto ch : elist)
ch->print(out);
for (size_t i = 0; i < plist.size(); ++i)
plist[i]->print(out);
for (auto p : plist)
p->print(out);
for (size_t i = 0; i < glist.size(); ++i)
out->print_char(glist[i].pos, 'G', COLOR_PAIR(COLOR_YELLOW));
for (auto gold : glist)
out->print_char(gold.pos, 'G', COLOR_PAIR(COLOR_YELLOW));
for (size_t i = 0; i < elist.size(); ++i)
elist[i]->print(out);
}
bool level::is_available(const position &pos, bool is_player) const {
if (!map.is_available(pos))
return false;
for (auto ch : elist)
if (pos == ch->get_pos())
for (size_t i = 0; i < elist.size(); ++i)
if (pos == elist[i]->get_pos())
return false;
if (!(enabled_features & FEATURE_WALK_OVER) && !is_player) {
for (auto p : plist)
if (pos == p->get_pos())
for (size_t i = 0; i < plist.size(); ++i)
if (pos == plist[i]->get_pos())
return false;
for (auto g : glist)
if (pos == g.pos)
for (size_t i = 0; i < glist.size(); ++i)
if (pos == glist[i].pos)
return false;
}
@ -149,16 +149,16 @@ bool level::is_available_all(const position &pos) const {
if (!map.is_available(pos))
return false;
for (auto ch : elist)
if (pos == ch->get_pos())
for (size_t i = 0; i < elist.size(); ++i)
if (pos == elist[i]->get_pos())
return false;
for (auto p : plist)
if (pos == p->get_pos())
for (size_t i = 0; i < plist.size(); ++i)
if (pos == plist[i]->get_pos())
return false;
for (auto g : glist)
if (pos == g.pos)
for (size_t i = 0; i < glist.size(); ++i)
if (pos == glist[i].pos)
return false;
return true;