diff --git a/images/terrain/flag-1.png b/images/terrain/flag-1.png new file mode 100644 index 00000000000..47590f70447 Binary files /dev/null and b/images/terrain/flag-1.png differ diff --git a/images/terrain/flag-2.png b/images/terrain/flag-2.png new file mode 100644 index 00000000000..1ff95c3085d Binary files /dev/null and b/images/terrain/flag-2.png differ diff --git a/src/display.cpp b/src/display.cpp index 7632d8d67e4..2e999b263c7 100644 --- a/src/display.cpp +++ b/src/display.cpp @@ -104,20 +104,46 @@ display::display(unit_map& units, CVideo& video, const gamemap& map, flags_.reserve(teams_.size()); for(size_t i = 0; i != teams_.size(); ++i) { std::string flag; + color_range new_rgb; + std::vector old_rgb; + if(teams_[i].flag().empty()) { flag = game_config::flag_image; - std::string::size_type pos; - while((pos = flag.find("%d")) != std::string::npos) { - std::ostringstream s; - s << teams_[i].map_colour_to(); - flag.replace(pos, 2, s.str()); - } + old_rgb = game_config::flag_rgb; + new_rgb = team::get_side_color_range(i+1); } else { flag = teams_[i].flag(); } LOG_STREAM(info, display) << "Adding flag for team " << i << " from animation " << flag << "\n"; - flags_.push_back(animated(flag)); + + //must recolor flag image + animated temp_anim; + + std::vector items = utils::split(flag); + int current_time = 0; + std::vector::const_iterator itor = items.begin(); + for(; itor != items.end(); ++itor) { + const std::vector& items = utils::split(*itor, ':'); + std::string str; + int time; + + if(items.size() > 1) { + str = items.front(); + time = atoi(items.back().c_str()); + } else { + str = *itor; + time = 100; + } + + std::cout<<" current time:"<::INFINITE_CYCLES); } diff --git a/src/game_config.cpp b/src/game_config.cpp index 77d2d2f49bc..d53474ed5ea 100644 --- a/src/game_config.cpp +++ b/src/game_config.cpp @@ -53,6 +53,7 @@ namespace game_config std::string enemy_energy_image = "misc/bar-energy-enemy.png"; std::string ally_energy_image = "misc/bar-energy-ally.png"; std::string flag_image = "terrain/flag-team%d-1.png:150,terrain/flag-team%d-2.png:150"; + std::vector flag_rgb; std::string dot_image = "misc/dot.png"; std::string cross_image = "misc/cross.png"; @@ -130,6 +131,13 @@ namespace game_config enemy_energy_image = v["enemy_energy_image"]; ally_energy_image = v["ally_energy_image"]; flag_image = v["flag_image"]; + flag_rgb = string2rgb(v["flag_rgb"]); + if( !flag_rgb.size()){ + //set green as old_flag_color + for(int i=0;i!=256;i++){ + flag_rgb.push_back((Uint32)(i<<8)); + } + } cross_image = v["cross_image"]; dot_image = v["dot_image"]; diff --git a/src/game_config.hpp b/src/game_config.hpp index 316bc9193c2..086cd3e2295 100644 --- a/src/game_config.hpp +++ b/src/game_config.hpp @@ -47,6 +47,8 @@ namespace game_config missile_n_image,missile_ne_image,terrain_mask_image,observer_image,download_campaign_image, checked_menu_image,unchecked_menu_image,level_image,ellipsis_image; + extern std::vector flag_rgb; + extern std::vector foot_left_nw,foot_left_n,foot_right_nw,foot_right_n; extern int title_logo_x, title_logo_y, title_buttons_x, title_buttons_y, title_buttons_padding, title_tip_x, title_tip_y, title_tip_width, title_tip_padding; diff --git a/src/team.cpp b/src/team.cpp index 834974f82ea..0fb92697266 100644 --- a/src/team.cpp +++ b/src/team.cpp @@ -908,82 +908,44 @@ bool team::shroud_map::copy_from(const std::vector& maps) std::map team::team_color_range_; -const Uint32 team::get_side_rgb(int side){ +const color_range team::get_side_color_range(int side){ size_t index = size_t(get_side_colour_index(side)); std::map::iterator p=team_color_range_.find(index); + if(p != team_color_range_.end()){ - return(p->second.mid()); + return(p->second); }else{ p=team_color_range_.find(side); if(p != team_color_range_.end()){ - return(p->second.mid()); + return(p->second); } } p=game_config::team_rgb_range.find(side); if(p != game_config::team_rgb_range.end()){ - return(p->second.mid()); + return(p->second); }else{ p=game_config::team_rgb_range.find(side); if(p != game_config::team_rgb_range.end()){ - return(p->second.mid()); + return(p->second); } } - return 0x00FF0000; + return(color_range(0x00FF0000,0x00FFFFFF,0x00000000)); +} + +const Uint32 team::get_side_rgb(int side){ + return(get_side_color_range(side).mid()); } const Uint32 team::get_side_rgb_max(int side){ - size_t index = size_t(get_side_colour_index(side)); - std::map::iterator p=team_color_range_.find(index); - if(p != team_color_range_.end()){ - return(p->second.max()); - }else{ - p=team_color_range_.find(side); - if(p != team_color_range_.end()){ - return(p->second.max()); - } - } - - p=game_config::team_rgb_range.find(side); - if(p != game_config::team_rgb_range.end()){ - return(p->second.max()); - }else{ - p=game_config::team_rgb_range.find(side); - if(p != game_config::team_rgb_range.end()){ - return(p->second.max()); - } - } - - return 0x00FFFFFF; + return(get_side_color_range(side).max()); } const Uint32 team::get_side_rgb_min(int side){ - size_t index = size_t(get_side_colour_index(side)); - std::map::iterator p=team_color_range_.find(index); - if(p != team_color_range_.end()){ - return(p->second.min()); - }else{ - p=team_color_range_.find(side); - if(p != team_color_range_.end()){ - return(p->second.min()); - } - } - - p=game_config::team_rgb_range.find(side); - if(p != game_config::team_rgb_range.end()){ - return(p->second.min()); - }else{ - p=game_config::team_rgb_range.find(side); - if(p != game_config::team_rgb_range.end()){ - return(p->second.min()); - } - } - - return 0x00000000; + return(get_side_color_range(side).min()); } - const SDL_Color team::get_side_colour(int side) { Uint32 rgb=get_side_rgb(side);