diff --git a/src/display_context.cpp b/src/display_context.cpp index 591fd89db109..0d76fe1a8a6e 100644 --- a/src/display_context.cpp +++ b/src/display_context.cpp @@ -20,6 +20,8 @@ #include "unit.hpp" #include "unit_map.hpp" +#include + const unit * display_context::get_visible_unit(const map_location & loc, const team ¤t_team, bool see_all) const { if (!map().on_board(loc)) return NULL; @@ -82,3 +84,16 @@ int display_context::village_owner(const map_location& loc) const return -1; } +/** + * Determine if we are an observer, by checking if every team is not locally controlled + */ +bool display_context::is_observer() const +{ + BOOST_FOREACH(const team &t, teams()) { + if (t.is_local()) + return false; + } + + return true; +} + diff --git a/src/display_context.hpp b/src/display_context.hpp index b30b29e23588..ddfb81ccd89f 100644 --- a/src/display_context.hpp +++ b/src/display_context.hpp @@ -53,6 +53,11 @@ class display_context { */ int village_owner(const map_location & loc) const; + // Accessor from team.cpp + + /// Check if we are an observer in this game + bool is_observer() const; + // Dtor virtual ~display_context() {} diff --git a/src/game_board.cpp b/src/game_board.cpp index e3a520223490..aae98f7d6f3d 100644 --- a/src/game_board.cpp +++ b/src/game_board.cpp @@ -237,17 +237,6 @@ bool game_board::change_terrain(const map_location &loc, const std::string &t_st return true; } -bool game_board::is_observer() const -{ - BOOST_FOREACH(const team &t, teams_) { - if (t.is_local()) - return false; - } - - return true; -} - - void game_board::write_config(config & cfg) const { for(std::vector::const_iterator t = teams_.begin(); t != teams_.end(); ++t) { int side_num = t - teams_.begin() + 1; diff --git a/src/game_board.hpp b/src/game_board.hpp index cad1a9958cff..badb9bc5ed45 100644 --- a/src/game_board.hpp +++ b/src/game_board.hpp @@ -136,10 +136,6 @@ class game_board : public display_context { // Wrapped functions from unit_map. These should ultimately provide notification to observers, pathfinding. unit_map::iterator find_unit(const map_location & loc) { return units_.find(loc); } - - // Accessor from team.cpp - - bool is_observer() const; }; void swap(game_board & one, game_board & other); diff --git a/src/map_label.cpp b/src/map_label.cpp index 9ef881b8ad50..9f9f40d5420b 100644 --- a/src/map_label.cpp +++ b/src/map_label.cpp @@ -461,7 +461,7 @@ void terrain_label::draw() return; clear(); - if ( !viewable() ) + if ( !viewable(parent_->disp().get_disp_context()) ) return; const map_location loc_nextx(loc_.x+1,loc_.y); @@ -514,17 +514,17 @@ bool terrain_label::hidden() const * creating a label. Conditions that can change during unit movement (disregarding * potential WML events) should not be listed here; they belong in hidden(). */ -bool terrain_label::viewable() const +bool terrain_label::viewable(const display_context & dc) const { if ( !parent_->enabled() ) return false; // In the editor, all labels are viewable. - if ( team::nteams() == 0 ) + if ( dc.teams().empty() ) return true; // Observers are not privvy to team labels. - const bool can_see_team_labels = !resources::gameboard->is_observer(); + const bool can_see_team_labels = !dc.is_observer(); // Global labels are shown unless covered by a team label. if ( team_name_.empty() ) diff --git a/src/map_label.hpp b/src/map_label.hpp index dccded21807b..d5491c229d25 100644 --- a/src/map_label.hpp +++ b/src/map_label.hpp @@ -22,6 +22,7 @@ class config; class display; +class display_context; //class team; class terrain_label; @@ -139,7 +140,7 @@ class terrain_label void clear(); void draw(); bool hidden() const; - bool viewable() const; + bool viewable(const display_context & dc) const; std::string cfg_color() const; int handle_;