diff --git a/rogueviz/ru/classes.cpp b/rogueviz/ru/classes.cpp index ece25ec8..f8a4271f 100644 --- a/rogueviz/ru/classes.cpp +++ b/rogueviz/ru/classes.cpp @@ -319,6 +319,8 @@ struct entity { virtual string get_help() { return "No help about this."; } virtual bool hit_by_missile(missile *m) { return false; } + + virtual void on_fountain(); }; struct statdata { @@ -614,6 +616,7 @@ struct disnake : public snake { int max_hp() override { return 1; } void unact() override { destroyed = true; } int bite() override { return 5; } + void on_fountain() override { destroyed = true; } }; struct kestrel : public enemy { @@ -776,6 +779,7 @@ struct missile : public entity { void hit_wall() override { destroyed = true; } struct missile* as_missile() override { return this; } virtual void hs(stater& s) override { entity::hs(s); s.act("power", power, 0); } + void on_fountain() override { destroyed = true; } }; struct ice_missile : public missile { diff --git a/rogueviz/ru/entity.cpp b/rogueviz/ru/entity.cpp index 7bb133b4..1549e8ad 100644 --- a/rogueviz/ru/entity.cpp +++ b/rogueviz/ru/entity.cpp @@ -17,6 +17,8 @@ bbox entity::get_pixel_bbox_at(xy p, ld scalex, ld scaley) { return b; } +void entity::on_fountain() { hs(fountain_resetter); } + bool entity::visible(room *r) { auto bb = get_intersect(pixel_to_block(get_pixel_bbox()), room_bb); for(int y = bb.miny; y < bb.maxy; y++) for(int x = bb.minx; x < bb.maxx; x++) if(r->fov[y][x]) return true; diff --git a/rogueviz/ru/man.cpp b/rogueviz/ru/man.cpp index 88a1d0f8..310e7741 100644 --- a/rogueviz/ru/man.cpp +++ b/rogueviz/ru/man.cpp @@ -12,7 +12,7 @@ xy stable_where; void regenerate_all() { m.hs(fountain_resetter); for(auto& p: powers) p.refill(); - for(auto& r: rooms) for(auto& e: r.second.entities) e->hs(fountain_resetter); + for(auto& r: rooms) for(auto& e: r.second.entities) e->on_fountain(); revert_all(fountain_revert); current_target = nullptr; shuffle_all();