Skip to content

Commit

Permalink
fix custom colors in mp connect
Browse files Browse the repository at this point in the history
https://gna.org/bugs/?23629

currently only the host shows these custom colors, but it fixes the sp
case.
  • Loading branch information
gfgtdf committed Jun 20, 2015
1 parent 796a154 commit 17cc88d
Show file tree
Hide file tree
Showing 6 changed files with 52 additions and 13 deletions.
40 changes: 36 additions & 4 deletions src/game_initialization/connect_engine.cpp
Expand Up @@ -24,7 +24,7 @@
#include "mp_game_utils.hpp"
#include "mt_rng.hpp"
#include "tod_manager.hpp"

#include "multiplayer_ui.hpp" // For get_color_string
#include <boost/foreach.hpp>
#include <boost/assign.hpp>
#include <stdlib.h>
Expand Down Expand Up @@ -851,7 +851,8 @@ side_engine::side_engine(const config& cfg, connect_engine& parent_engine,
chose_random_(cfg["chose_random"].to_bool(false)),
disallow_shuffle_(cfg["disallow_shuffle"].to_bool(false)),
flg_(parent_.era_factions_, cfg_, parent_.force_lock_settings_,
parent_.params_.use_map_settings, parent_.params_.saved_game, color_)
parent_.params_.use_map_settings, parent_.params_.saved_game, color_),
custom_color_()
{
// Check if this side should give its control to some other side.
const size_t side_cntr_index = cfg_["controller"].to_int(-1) - 1;
Expand Down Expand Up @@ -918,7 +919,13 @@ side_engine::side_engine(const config& cfg, connect_engine& parent_engine,
team_ = team_name_index;
}
if (!cfg["color"].empty()) {
color_ = game_config::color_info(cfg["color"]).index() - 1;
if(cfg["color"].to_int()) {
color_ = cfg["color"].to_int() - 1;
}
else {
custom_color_ = cfg["color"];
color_ = 0;
}
}

// Initialize ai algorithm.
Expand Down Expand Up @@ -1064,7 +1071,7 @@ config side_engine::new_config() const
res["team_name"] = parent_.team_names_[team_];
res["user_team_name"] = parent_.user_team_names_[team_];
res["allow_player"] = allow_player_;
res["color"] = color_ + 1;
res["color"] = get_color(color_);
res["gold"] = gold_;
res["income"] = income_;

Expand Down Expand Up @@ -1327,4 +1334,29 @@ void side_engine::add_controller_option(ng::controller controller,
controller_options_.push_back(std::make_pair(controller, name));
}

std::vector<std::string> side_engine::get_colors() const
{
std::vector<std::string> res;
for (int i = 0; i < num_colors(); ++i) {
res.push_back(mp::get_color_string(get_color(i)));
}
return res;
}

std::string side_engine::get_color(size_t index) const
{
if(!custom_color_.empty()) {
if(index == 0) {
return custom_color_;
}
index -= 1;
}
return lexical_cast<std::string>(index + 1);
}

int side_engine::num_colors() const
{
return custom_color_.empty() ? gamemap::MAX_PLAYERS : gamemap::MAX_PLAYERS + 1;
}

} // end namespace ng
4 changes: 4 additions & 0 deletions src/game_initialization/connect_engine.hpp
Expand Up @@ -219,6 +219,9 @@ class side_engine
{ return parent_.player_teams_; }
flg_manager& flg() { return flg_; }

std::vector<std::string> get_colors() const;
std::string get_color(size_t index) const;
int num_colors() const;
private:
side_engine(const side_engine& engine);
void operator=(const side_engine&);
Expand Down Expand Up @@ -255,6 +258,7 @@ class side_engine
bool chose_random_;
bool disallow_shuffle_;
flg_manager flg_;
std::string custom_color_;
};

} // end namespace ng
Expand Down
8 changes: 1 addition & 7 deletions src/game_initialization/multiplayer_connect.cpp
Expand Up @@ -91,7 +91,7 @@ connect::side::side(connect& parent, ng::side_engine_ptr engine) :
combo_leader_(parent.disp(), std::vector<std::string>()),
combo_gender_(parent.disp(), std::vector<std::string>()),
combo_team_(parent.disp(), engine_->player_teams()),
combo_color_(parent.disp(), parent.player_colors_),
combo_color_(parent.disp(), engine->get_colors()),
slider_gold_(parent.video()),
slider_income_(parent.video())
{
Expand Down Expand Up @@ -371,7 +371,6 @@ connect::connect(game_display& disp, const std::string& game_name,
const config& game_config, chat& c, config& gamelist,
ng::connect_engine& engine) :
mp::ui(disp, _("Game Lobby: ") + game_name, game_config, c, gamelist),
player_colors_(),
ai_algorithms_(),
sides_(),
engine_(engine),
Expand Down Expand Up @@ -410,11 +409,6 @@ connect::connect(game_display& disp, const std::string& game_name,

ai_algorithms_ = ai::configuration::get_available_ais();

// Colors.
for(int i = 0; i < gamemap::MAX_PLAYERS; ++i) {
player_colors_.push_back(get_color_string(i));
}

// Sides.
BOOST_FOREACH(ng::side_engine_ptr s, engine_.side_engines()) {
sides_.push_back(side(*this, s));
Expand Down
2 changes: 0 additions & 2 deletions src/game_initialization/multiplayer_connect.hpp
Expand Up @@ -123,8 +123,6 @@ class connect : public mp::ui
const mp_game_settings& params() { return engine_.params(); }
bool force_lock_settings() const { return engine_.force_lock_settings(); }

// Lists used for combos.
std::vector<std::string> player_colors_;
std::vector<ai::description*> ai_algorithms_;

side_list sides_;
Expand Down
10 changes: 10 additions & 0 deletions src/game_initialization/multiplayer_ui.cpp
Expand Up @@ -87,6 +87,16 @@ std::string get_color_string(int id)
}
}

std::string get_color_string(const std::string& id)
{
std::map<std::string, color_range>::iterator i_color = game_config::team_rgb_range.find(id);
std::map<std::string, t_string>::iterator i_name = game_config::team_rgb_name.find(id);
bool has_color = i_color != game_config::team_rgb_range.end();
bool has_name= i_name != game_config::team_rgb_name.end();

return rgb2highlight(has_color ? i_color->second.mid() : 0x00FF0000) + (has_name ? std::string(i_name->second) : _("Invalid Color"));
}

chat::chat() :
message_history_(),
last_update_()
Expand Down
1 change: 1 addition & 0 deletions src/game_initialization/multiplayer_ui.hpp
Expand Up @@ -36,6 +36,7 @@ class plugins_context;
namespace mp {

std::string get_color_string(int id);
std::string get_color_string(const std::string& id);

/** this class memorizes a chat session. */
class chat
Expand Down

0 comments on commit 17cc88d

Please sign in to comment.