1 #include "AppHdr.h" 2 3 #include "actor.h" 4 5 #include "coord.h" 6 #include "god-passive.h" 7 #include "los-type.h" 8 #include "losglobal.h" 9 #include "state.h" 10 observable() const11bool actor::observable() const 12 { 13 return crawl_state.game_is_arena() || is_player() || you.can_see(*this); 14 } 15 see_cell(const coord_def & p) const16bool actor::see_cell(const coord_def &p) const 17 { 18 if (!in_bounds(pos())) 19 return false; // actor is off the map 20 21 return cell_see_cell(pos(), p, LOS_DEFAULT); 22 } 23 see_cell(const coord_def & p) const24bool player::see_cell(const coord_def &p) const 25 { 26 if (!map_bounds(p)) 27 return false; // Players can't see (-1,-1) but maybe can see (0,0). 28 if (crawl_state.game_is_arena() || crawl_state.arena_suspended) 29 return true; 30 if (!in_bounds(pos())) 31 return false; // A non-arena player at (0,0) can't see anything. 32 if (wizard_vision) 33 return (pos() - p).rdist() <= current_vision; 34 if (have_passive(passive_t::xray_vision)) 35 return (pos() - p).rdist() <= ash_scry_radius() || actor::see_cell(p); 36 return actor::see_cell(p); 37 } 38 can_see(const actor & target) const39bool actor::can_see(const actor &target) const 40 { 41 return target.visible_to(this) && see_cell(target.pos()); 42 } 43 see_cell_no_trans(const coord_def & p) const44bool actor::see_cell_no_trans(const coord_def &p) const 45 { 46 return cell_see_cell(pos(), p, LOS_NO_TRANS); 47 } 48 trans_wall_blocking(const coord_def & p) const49bool player::trans_wall_blocking(const coord_def &p) const 50 { 51 return see_cell(p) && !see_cell_no_trans(p); 52 } 53 can_see(const actor & a) const54bool player::can_see(const actor& a) const 55 { 56 if (crawl_state.game_is_arena() || crawl_state.arena_suspended) 57 return see_cell(a.pos()); 58 else 59 return actor::can_see(a); 60 } 61