summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/view.cc
diff options
context:
space:
mode:
authorzelgadis <zelgadis@c06c8d41-db1a-0410-9941-cceddc491573>2009-01-19 06:20:51 +0000
committerzelgadis <zelgadis@c06c8d41-db1a-0410-9941-cceddc491573>2009-01-19 06:20:51 +0000
commit33005dad6d50d774bc4fe6b6afcd5b60c55cd0b6 (patch)
treec2f5fa8878e1237ff9d9f0bfcdb71ed7f72e0cc0 /crawl-ref/source/view.cc
parent8f82bd1f8aca60f4d15e3966933dc10cbe019574 (diff)
downloadcrawl-ref-33005dad6d50d774bc4fe6b6afcd5b60c55cd0b6.tar.gz
crawl-ref-33005dad6d50d774bc4fe6b6afcd5b60c55cd0b6.zip
Simplify the code that issues the "comes into view" monster interrupt message,
so we don't have to check in multiple places to make sure that "comes into view" is given before any of the other monster messages. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@8572 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/view.cc')
-rw-r--r--crawl-ref/source/view.cc71
1 files changed, 25 insertions, 46 deletions
diff --git a/crawl-ref/source/view.cc b/crawl-ref/source/view.cc
index d92f1632c6..b01456286b 100644
--- a/crawl-ref/source/view.cc
+++ b/crawl-ref/source/view.cc
@@ -872,14 +872,6 @@ int get_mons_colour(const monsters *mons)
return (col);
}
-static std::set<const monsters*> monsters_seen_this_turn;
-
-static bool _mons_was_seen_this_turn(const monsters *mons)
-{
- return (monsters_seen_this_turn.find(mons) !=
- monsters_seen_this_turn.end());
-}
-
static void _good_god_follower_attitude_change(monsters *monster)
{
if (player_is_unholy())
@@ -958,6 +950,12 @@ void beogh_follower_convert(monsters *monster, bool orc_hit)
static void _handle_seen_interrupt(monsters* monster)
{
+ if (mons_is_mimic(monster->type)
+ && !mons_is_known_mimic(monster))
+ {
+ return;
+ }
+
activity_interrupt_data aid(monster);
if (!monster->seen_context.empty())
aid.context = monster->seen_context;
@@ -967,15 +965,12 @@ static void _handle_seen_interrupt(monsters* monster)
aid.context = "newly seen";
if (!mons_is_safe(monster)
- && !mons_class_flag( monster->type, M_NO_EXP_GAIN )
- && !mons_is_mimic( monster->type ))
+ && !mons_class_flag(monster->type, M_NO_EXP_GAIN))
{
interrupt_activity( AI_SEE_MONSTER, aid );
+ monster->seen_context.clear();
}
seen_monster( monster );
-
- // Monster was viewed this turn
- monster->flags |= MF_WAS_IN_VIEW;
}
void handle_monster_shouts(monsters* monster, bool force)
@@ -1083,7 +1078,7 @@ void handle_monster_shouts(monsters* monster, bool force)
// and if no such entry exists then looks simply for "name".
if (you.can_see(monster))
suffix = " seen";
- else
+ else
suffix = " unseen";
msg = getShoutString(key, suffix);
@@ -1226,13 +1221,14 @@ void monster_grid(bool do_updates)
if (monster->alive() && mons_near(monster))
{
+ if (mons_player_visible(monster))
+ _handle_seen_interrupt(monster);
+
if (do_updates && (mons_is_sleeping(monster)
|| mons_is_wandering(monster))
&& check_awaken(monster))
{
behaviour_event(monster, ME_ALERT, MHITYOU);
- if (you.can_see(monster))
- _handle_seen_interrupt(monster);
handle_monster_shouts(monster);
}
@@ -1261,22 +1257,13 @@ void monster_grid(bool do_updates)
tile_place_monster(monster->pos().x, monster->pos().y, s, true);
#endif
- if (player_monster_visible(monster)
- && !mons_is_submerged(monster)
- && !mons_friendly(monster)
- && !mons_class_flag(monster->type, M_NO_EXP_GAIN)
- && !mons_is_mimic(monster->type))
- {
- monsters_seen_this_turn.insert(monster);
- }
-
_good_god_follower_attitude_change(monster);
beogh_follower_convert(monster);
}
}
}
-void fire_monster_alerts()
+void update_monsters_in_view()
{
unsigned int num_hostile = 0;
@@ -1284,29 +1271,23 @@ void fire_monster_alerts()
{
monsters *monster = &menv[s];
- if (monster->alive() && mons_near(monster))
+ if (!monster->alive())
+ continue;
+
+ monster->flags &= ~MF_WAS_IN_VIEW;
+
+ if (mons_near(monster))
{
- if ((player_monster_visible(monster)
- || _mons_was_seen_this_turn(monster))
- && !mons_is_submerged( monster ))
- {
- _handle_seen_interrupt(monster);
+ if (monster->attitude == ATT_HOSTILE)
+ num_hostile++;
- if (monster->attitude == ATT_HOSTILE)
- num_hostile++;
- }
- else
+ if (player_monster_visible(monster)
+ && (!mons_is_mimic(monster->type)
+ || mons_is_known_mimic(monster)))
{
- // Monster was not viewed this turn
- monster->flags &= ~MF_WAS_IN_VIEW;
+ seen_monster(monster);
}
}
- else
- {
- // Monster was not viewed this turn
- monster->flags &= ~MF_WAS_IN_VIEW;
- }
- monster->seen_context.clear();
}
// Xom thinks it's hilarious the way the player picks up an ever
@@ -1323,8 +1304,6 @@ void fire_monster_alerts()
xom_is_stimulated(16 * num_hostile);
}
-
- monsters_seen_this_turn.clear();
}
bool check_awaken(monsters* monster)