deployed some range for loops on gameboard::teams() (#1007)

deployed some range for loops on gameboard::teams()
This commit is contained in:
gfgtdf 2017-04-29 16:08:45 +02:00 committed by GitHub
parent f71e64e364
commit 12f9215da2
7 changed files with 32 additions and 27 deletions

View file

@ -274,10 +274,10 @@ void display::init_flags() {
std::vector<std::string> side_colors;
side_colors.reserve(dc_->teams().size());
for(size_t i = 0; i != dc_->teams().size(); ++i) {
std::string side_color = dc_->teams()[i].color();
for(const team& t : dc_->teams()) {
std::string side_color = t.color();
side_colors.push_back(side_color);
init_flags_for_side_internal(i, side_color);
init_flags_for_side_internal(t.side() - 1, side_color);
}
image::set_team_colors(&side_colors);
}
@ -345,13 +345,13 @@ surface display::get_flag(const map_location& loc)
return surface(nullptr);
}
for(size_t i = 0; i != dc_->teams().size(); ++i) {
if(dc_->teams()[i].owns_village(loc) &&
(!fogged(loc) || !dc_->teams()[currentTeam_].is_enemy(i+1)))
for (const team& t : dc_->teams()) {
if (t.owns_village(loc) && (!fogged(loc) || !dc_->get_team(viewing_side()).is_enemy(t.side())))
{
flags_[i].update_last_draw_time();
auto& flag = flags_[t.side() - 1];
flag.update_last_draw_time();
const image::locator &image_flag = animate_map_ ?
flags_[i].get_current_frame() : flags_[i].get_first_frame();
flag.get_current_frame() : flag.get_first_frame();
return image::get_image(image_flag, image::TOD_COLORED);
}
}

View file

@ -58,6 +58,13 @@ public:
std::vector<std::string> & hidden_label_categories_ref();
const team& get_team(int side) const;
// this one is only a template function to prevent compilation erros when class team is an incomplete type.
template<typename T = void>
bool has_team(int side) const
{
return side > 0 && side <= static_cast<int>(teams().size());
}
// Helper for is_visible_to_team
/**

View file

@ -112,8 +112,9 @@ namespace { // Support functions
std::string img_mods = cfg["image_mods"];
size_t side_num = cfg["side"].to_int(1);
if ( side_num == 0 || side_num > resources::gameboard->teams().size() )
if (!resources::gameboard->has_team(side_num)) {
side_num = 1;
}
unit_race::GENDER gender = string_gender(cfg["gender"]);
const unit_type *ut = unit_types.find(type);

View file

@ -137,7 +137,7 @@ void verify_and_get_global_variable(const vconfig &pcfg)
DBG_PERSIST << "verify_and_get_global_variable with from_global=" << pcfg["from_global"] << " from side " << pcfg["side"] << "\n";
config::attribute_value pcfg_side = pcfg["side"];
int side = (pcfg_side.str() == "global" || pcfg_side.empty()) ? resources::controller->current_side() : pcfg_side.to_int();
if (unsigned (side - 1) >= resources::gameboard->teams().size()) {
if (!resources::gameboard->has_team(side)) {
ERR_PERSIST << "[get_global_variable] attribute \"side\" specifies invalid side number." << "\n";
valid = false;
}
@ -174,7 +174,7 @@ void verify_and_set_global_variable(const vconfig &pcfg)
//Check side matching only if the side is not "global" or empty.
if (pcfg_side.str() != "global" && !pcfg_side.empty()) {
//Ensure that the side is valid.
if (unsigned(side-1) > resources::gameboard->teams().size()) {
if (!resources::gameboard->has_team(side)) {
ERR_PERSIST << "[set_global_variable] attribute \"side\" specifies invalid side number.";
valid = false;
} else if (resources::gameboard->get_team(side).is_empty()) {
@ -213,7 +213,7 @@ void verify_and_clear_global_variable(const vconfig &pcfg)
//Check side matching only if the side is not "global" or empty.
if (pcfg_side.str() != "global" && !pcfg_side.empty()) {
//Ensure that the side is valid.
if (unsigned(side-1) > resources::gameboard->teams().size()) {
if (!resources::gameboard->has_team(side)) {
ERR_PERSIST << "[clear_global_variable] attribute \"side\" specifies invalid side number.";
valid = false;
} else if (resources::gameboard->get_team(side).is_empty()) {

View file

@ -266,12 +266,11 @@ void play_controller::init(CVideo& video, const config& level)
// Find first team that is allowed to be observed.
// If not set here observer would be without fog until
// the first turn of observable side
size_t i;
for (i=0;i < gamestate().board_.teams().size();++i)
for (const team& t : gamestate().board_.teams())
{
if (!gamestate().board_.teams()[i].get_disallow_observers())
if (!t.get_disallow_observers())
{
gui_->set_team(i);
gui_->set_team(t.side() - 1);
}
}
}
@ -665,13 +664,13 @@ void play_controller::tab()
team& play_controller::current_team()
{
assert(current_side() > 0 && current_side() <= int(gamestate().board_.teams().size()));
assert(gamestate().board_.has_team(current_side()));
return gamestate().board_.get_team(current_side());
}
const team& play_controller::current_team() const
{
assert(current_side() > 0 && current_side() <= int(gamestate().board_.teams().size()));
assert(gamestate().board_.has_team(current_side()));
return gamestate().board_.get_team(current_side());
}
@ -1068,8 +1067,9 @@ void play_controller::start_game()
return;
}
for ( int side = gamestate().board_.teams().size(); side != 0; --side )
actions::clear_shroud(side, false, false);
for (const team& t : gamestate().board_.teams()) {
actions::clear_shroud(t.side(), false, false);
}
init_gui();
LOG_NG << "first_time..." << (is_skipping_replay() ? "skipping" : "no skip") << "\n";

View file

@ -3001,9 +3001,10 @@ int game_lua_kernel::intf_get_sides(lua_State* L)
LOG_LUA << "intf_get_sides called: this = " << std::hex << this << std::dec << " myname = " << my_name() << std::endl;
std::vector<int> sides;
const vconfig ssf = luaW_checkvconfig(L, 1, true);
if(ssf.null()){
for(unsigned side_number = 1; side_number <= teams().size(); ++side_number)
if(ssf.null()) {
for (unsigned side_number = 1; side_number <= teams().size(); ++side_number) {
sides.push_back(side_number);
}
} else {
filter_context & fc = game_state_;

View file

@ -524,11 +524,7 @@ void scoped_recall_unit::activate()
const std::vector<team>& teams = resources::gameboard->teams();
std::vector<team>::const_iterator team_it;
for (team_it = teams.begin(); team_it != teams.end(); ++team_it) {
if (team_it->save_id() == player_ )
break;
}
std::vector<team>::const_iterator team_it = std::find_if(teams.begin(), teams.end(), [&](const team& t) { return t.save_id() == player_; });
if(team_it != teams.end()) {
if(team_it->recall_list().size() > recall_index_) {