11 bool actor::observable() const
13 return (crawl_state
.game_is_arena() && this != &you
14 || this == &you
|| you
.can_see(this));
17 bool actor::see_cell(const coord_def
&p
) const
19 if (!in_bounds(pos()))
20 return (false); // actor is off the map
22 return (cell_see_cell(pos(), p
, LOS_DEFAULT
));
25 bool player::see_cell(const coord_def
&p
) const
29 if (crawl_state
.game_is_arena() && this == &you
)
32 return ((pos() - p
).abs() <= dist_range(you
.current_vision
));
33 return (actor::see_cell(p
));
36 bool actor::can_see(const actor
*target
) const
38 return (target
->visible_to(this) && see_cell(target
->pos()));
41 bool actor::see_cell_no_trans(const coord_def
&p
) const
43 return (cell_see_cell(pos(), p
, LOS_NO_TRANS
));
46 bool player::trans_wall_blocking(const coord_def
&p
) const
48 return (see_cell(p
) && !see_cell_no_trans(p
));
51 const los_base
* actor::get_los()
53 los
= los_glob(pos(), LOS_DEFAULT
);
57 const los_base
* player::get_los()
59 if (crawl_state
.game_is_arena() && this == &you
)
61 // env.show.init iterates over these bounds for arena
62 los
= los_glob(crawl_view
.vgrdc
, LOS_ARENA
,
63 circle_def(LOS_MAX_RANGE
, C_SQUARE
));
68 los
= los_glob(pos(), LOS_ARENA
,
69 circle_def(you
.current_vision
, C_ROUND
));
73 return (actor::get_los());
76 const los_base
* actor::get_los_no_trans()
78 los_no_trans
= los_glob(pos(), LOS_NO_TRANS
);
79 return (&los_no_trans
);
82 bool player::can_see(const actor
* a
) const
84 if (crawl_state
.game_is_arena() || crawl_state
.arena_suspended
)
85 return (see_cell(a
->pos()));
87 return see_cell(a
->pos());
89 return (actor::can_see(a
));