From f698badbd170d16ea04bb364dd00f5a91b455358 Mon Sep 17 00:00:00 2001 From: Chris Beck Date: Wed, 11 Jun 2014 18:19:28 -0400 Subject: [PATCH] team::objectives_changed and countdown ops become mutable This allows game_board to unfriend both playsingle_controller and replay_controller, without adding new methods to game_board. This partially reverts commit 15ed9d186676c56db60e3bd9a3f147b6fdca85a4, "refactor replay_controller in order to unfriend game_board" --- src/game_board.cpp | 6 ------ src/game_board.hpp | 3 --- src/playsingle_controller.cpp | 26 +++++++++++++------------- src/replay_controller.cpp | 5 +++-- src/team.hpp | 10 +++++----- 5 files changed, 21 insertions(+), 29 deletions(-) diff --git a/src/game_board.cpp b/src/game_board.cpp index d761bdb734ee..dbbbba22067a 100644 --- a/src/game_board.cpp +++ b/src/game_board.cpp @@ -83,12 +83,6 @@ void game_board::all_survivors_to_recall() { } } -void game_board::reset_all_teams_objectives_changes() { - BOOST_FOREACH(team & t, teams_) { - t.reset_objectives_changed(); - } -} - unit_map::iterator game_board::find_visible_unit(const map_location &loc, const team& current_team, bool see_all) { diff --git a/src/game_board.hpp b/src/game_board.hpp index 330f7ce8d6aa..8c11c77d0150 100644 --- a/src/game_board.hpp +++ b/src/game_board.hpp @@ -57,7 +57,6 @@ class game_board : public display_context { //TODO: Remove these when we have refactored enough to make it possible. friend class play_controller; - friend class playsingle_controller; friend class events::mouse_handler; friend class events::menu_handler; @@ -109,8 +108,6 @@ class game_board : public display_context { void all_survivors_to_recall(); - void reset_all_teams_objectives_changes(); - // Manipulator from playturn void side_drop_to (int side_num, team::CONTROLLER ctrl); diff --git a/src/playsingle_controller.cpp b/src/playsingle_controller.cpp index 64b076adba2e..78038c5503f5 100644 --- a/src/playsingle_controller.cpp +++ b/src/playsingle_controller.cpp @@ -157,7 +157,7 @@ void playsingle_controller::check_end_level() { if (level_result_ == NONE || linger_) { - team &t = gameboard_.teams_[gui_->viewing_team()]; + const team &t = gameboard_.teams()[gui_->viewing_team()]; if (!browse_ && t.objectives_changed()) { dialogs::show_objectives(level_, t.objectives()); t.reset_objectives_changed(); @@ -393,7 +393,7 @@ possible_end_play_signal playsingle_controller::play_scenario_main_loop(end_leve // Initialize countdown clock. std::vector::iterator t; - for(t = gameboard_.teams_.begin(); t != gameboard_.teams_.end(); ++t) { + for(t = gameboard_.teams().begin(); t != gameboard_.teams().end(); ++t) { if (gamestate_.mp_settings().mp_countdown && !loading_game_ ){ t->set_countdown_time(1000 * gamestate_.mp_settings().mp_countdown_init_time); } @@ -493,7 +493,7 @@ LEVEL_RESULT playsingle_controller::play_scenario( } } - if (gameboard_.teams_.empty()) + if (gameboard_.teams().empty()) { //store persistent teams gamestate_.snapshot = config(); @@ -628,7 +628,7 @@ possible_end_play_signal playsingle_controller::play_turn() LOG_AIT << "Turn " << turn() << ":" << std::endl; } - for (player_number_ = first_player_; player_number_ <= int(gameboard_.teams_.size()); ++player_number_) + for (player_number_ = first_player_; player_number_ <= int(gameboard_.teams().size()); ++player_number_) { // If a side is empty skip over it. if (current_team().is_empty()) continue; @@ -678,8 +678,8 @@ possible_end_play_signal playsingle_controller::play_turn() } //If the loop exits due to the last team having been processed, //player_number_ will be 1 too high - if(player_number_ > static_cast(gameboard_.teams_.size())) - player_number_ = gameboard_.teams_.size(); + if(player_number_ > static_cast(gameboard_.teams().size())) + player_number_ = gameboard_.teams().size(); finish_turn(); @@ -713,7 +713,7 @@ possible_end_play_signal playsingle_controller::play_side() if (!skip_next_turn_) end_turn_ = false; - statistics::reset_turn_stats(gameboard_.teams_[player_number_ - 1].save_id()); + statistics::reset_turn_stats(gameboard_.teams()[player_number_ - 1].save_id()); if(current_team().is_human() || temporary_human) { LOG_NG << "is human...\n"; @@ -738,7 +738,7 @@ possible_end_play_signal playsingle_controller::play_side() player_type_changed_ = true; // If new controller is not human, // reset gui to prev human one - if (!gameboard_.teams_[player_number_-1].is_human()) { + if (!gameboard_.teams()[player_number_-1].is_human()) { browse_ = true; int s = find_human_team_before_current_player(); if (s <= 0) @@ -796,7 +796,7 @@ possible_end_play_signal playsingle_controller::play_side() player_type_changed_ = true; // If new controller is not human, // reset gui to prev human one - if (!gameboard_.teams_[player_number_-1].is_human()) { + if (!gameboard_.teams()[player_number_-1].is_human()) { browse_ = true; int s = find_human_team_before_current_player(); if (s <= 0) @@ -842,7 +842,7 @@ void playsingle_controller::show_turn_dialog(){ resources::screen->redraw_everything(); std::string message = _("It is now $name|’s turn"); utils::string_map symbols; - symbols["name"] = gameboard_.teams_[player_number_ - 1].current_player(); + symbols["name"] = gameboard_.teams()[player_number_ - 1].current_player(); message = utils::interpolate_variables_into_string(message, &symbols); gui2::show_transient_message(gui_->video(), "", message); } @@ -1048,7 +1048,7 @@ bool playsingle_controller::can_execute_command(const hotkey::hotkey_command& cm case hotkey::HOTKEY_WML: //code mixed from play_controller::show_menu and code here - return (gui_->viewing_team() == gui_->playing_team()) && !events::commands_disabled && gameboard_.teams_[gui_->viewing_team()].is_human() && !linger_ && !browse_; + return (gui_->viewing_team() == gui_->playing_team()) && !events::commands_disabled && gameboard_.teams()[gui_->viewing_team()].is_human() && !linger_ && !browse_; case hotkey::HOTKEY_UNIT_HOLD_POSITION: case hotkey::HOTKEY_END_UNIT_TURN: return !browse_ && !linger_ && !events::commands_disabled; @@ -1060,13 +1060,13 @@ bool playsingle_controller::can_execute_command(const hotkey::hotkey_command& cm return (!browse_ || linger_) && !events::commands_disabled; case hotkey::HOTKEY_DELAY_SHROUD: - return !linger_ && (gameboard_.teams_[gui_->viewing_team()].uses_fog() || gameboard_.teams_[gui_->viewing_team()].uses_shroud()) + return !linger_ && (gameboard_.teams()[gui_->viewing_team()].uses_fog() || gameboard_.teams()[gui_->viewing_team()].uses_shroud()) && !events::commands_disabled; case hotkey::HOTKEY_UPDATE_SHROUD: return !linger_ && player_number_ == gui_->viewing_side() && !events::commands_disabled - && gameboard_.teams_[gui_->viewing_team()].auto_shroud_updates() == false; + && gameboard_.teams()[gui_->viewing_team()].auto_shroud_updates() == false; // Commands we can only do if in debug mode case hotkey::HOTKEY_CREATE_UNIT: diff --git a/src/replay_controller.cpp b/src/replay_controller.cpp index 801c536ee5a9..fab0e110aa97 100644 --- a/src/replay_controller.cpp +++ b/src/replay_controller.cpp @@ -159,8 +159,9 @@ void replay_controller::init_gui(){ gui_->scroll_to_leader(player_number_, display::WARP); update_locker lock_display((*gui_).video(),false); - gameboard_.reset_all_teams_objectives_changes(); - + BOOST_FOREACH(const team & t, gameboard_.teams()) { + t.reset_objectives_changed(); + } update_replay_ui(); } diff --git a/src/team.hpp b/src/team.hpp index 82c1b6a87823..6d6eef297d15 100644 --- a/src/team.hpp +++ b/src/team.hpp @@ -111,7 +111,7 @@ class team : public savegame::savegame_config /** Set to true when the objectives for this time changes. * Reset to false when the objectives for this team have been * displayed to the user. */ - bool objectives_changed; + mutable bool objectives_changed; CONTROLLER controller; DEFEAT_CONDITION defeat_condition; @@ -176,7 +176,7 @@ class team : public savegame::savegame_config void set_gold_add(bool b) {info_.gold_add = b; } void set_base_income(int amount) { info_.income = amount - game_config::base_income; } int countdown_time() const { return countdown_time_; } - void set_countdown_time(const int amount) + void set_countdown_time (const int amount) const { countdown_time_ = amount; } int action_bonus_count() const { return action_bonus_count_; } void set_action_bonus_count(const int count) { action_bonus_count_ = count; } @@ -204,8 +204,8 @@ class team : public savegame::savegame_config const std::string& current_player() const { return info_.current_player; } void set_objectives(const t_string& new_objectives, bool silently=false); - void set_objectives_changed(bool c = true) { info_.objectives_changed = c; } - void reset_objectives_changed() { info_.objectives_changed = false; } + void set_objectives_changed(bool c = true) const { info_.objectives_changed = c; } + void reset_objectives_changed() const { info_.objectives_changed = false; } const t_string& objectives() const { return info_.objectives; } bool objectives_changed() const { return info_.objectives_changed; } @@ -341,7 +341,7 @@ class team : public savegame::savegame_config team_info info_; - int countdown_time_; + mutable int countdown_time_; int action_bonus_count_; std::vector recall_list_;