From 4b531850da0666e6b4718acdf3800ad268d71e0b Mon Sep 17 00:00:00 2001 From: David Mikos Date: Sun, 27 Oct 2013 22:30:12 +1030 Subject: [PATCH] Shuffle sides use multimap instead of map for side child variables. --- src/multiplayer_connect_engine.cpp | 11 +++++++---- src/multiplayer_connect_engine.hpp | 4 ++-- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/multiplayer_connect_engine.cpp b/src/multiplayer_connect_engine.cpp index f4416a9e905..73bbc32e5f0 100644 --- a/src/multiplayer_connect_engine.cpp +++ b/src/multiplayer_connect_engine.cpp @@ -379,9 +379,9 @@ std::vector side_engine::get_children_to_swap() return children; } -std::map side_engine::get_side_children() +std::multimap side_engine::get_side_children() { - std::map children; + std::multimap children; BOOST_FOREACH(const std::string& children_to_swap, get_children_to_swap()) BOOST_FOREACH(const config& child, cfg_.child_range(children_to_swap)) @@ -390,7 +390,7 @@ std::map side_engine::get_side_children() return children; } -void side_engine::set_side_children(std::map children) +void side_engine::set_side_children(std::multimap children) { BOOST_FOREACH(const std::string& children_to_remove, get_children_to_swap()) cfg_.clear_children(children_to_remove); @@ -401,6 +401,7 @@ void side_engine::set_side_children(std::map children) cfg_.add_child(child_map.first, child_map.second); } + void connect_engine::start_game(LOAD_USERS load_users) { DBG_MP << "starting a new game" << std::endl; @@ -429,6 +430,8 @@ void connect_engine::start_game(LOAD_USERS load_users) { int j_side = playable_sides[get_random() % i]; int i_side = playable_sides[i - 1]; + + if (i_side == j_side) continue; //nothing to swap // First we swap fields that are unique to the player int tmp_index = side_engines_[j_side]->index(); @@ -439,7 +442,7 @@ void connect_engine::start_game(LOAD_USERS load_users) side_engines_[j_side]->set_team(side_engines_[i_side]->team()); side_engines_[i_side]->set_team(tmp_team); - std::map tmp_side_children = side_engines_[j_side]->get_side_children(); + std::multimap tmp_side_children = side_engines_[j_side]->get_side_children(); side_engines_[j_side]->set_side_children(side_engines_[i_side]->get_side_children()); side_engines_[i_side]->set_side_children(tmp_side_children); diff --git a/src/multiplayer_connect_engine.hpp b/src/multiplayer_connect_engine.hpp index 7f8c6a6ac4d..81328ddd061 100644 --- a/src/multiplayer_connect_engine.hpp +++ b/src/multiplayer_connect_engine.hpp @@ -177,8 +177,8 @@ public: int team() const { return team_; } void set_team(int team) { team_ = team; } std::vector get_children_to_swap(); - std::map get_side_children(); - void set_side_children(std::map children); + std::multimap get_side_children(); + void set_side_children(std::multimap children); int color() const { return color_; } void set_color(int color) { color_ = color; } int gold() const { return gold_; }