adding team colors to flags

This commit is contained in:
John W. C. McNabb 2005-12-22 17:06:39 +00:00
parent 30dd619a4d
commit abd9278fde
6 changed files with 56 additions and 58 deletions

BIN
images/terrain/flag-1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 995 B

BIN
images/terrain/flag-2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 867 B

View File

@ -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<Uint32> 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<image::locator>(flag));
//must recolor flag image
animated<image::locator> temp_anim;
std::vector<std::string> items = utils::split(flag);
int current_time = 0;
std::vector<std::string>::const_iterator itor = items.begin();
for(; itor != items.end(); ++itor) {
const std::vector<std::string>& 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:"<<current_time<<std::endl;
std::cout<<" frame:"<<str<<std::endl;
image::locator flag_image(str, new_rgb, old_rgb);
temp_anim.add_frame(current_time, flag_image);
current_time += time;
}
temp_anim.add_frame(current_time);
flags_.push_back(temp_anim);
flags_.back().start_animation(0, animated<image::locator>::INFINITE_CYCLES);
}

View File

@ -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<Uint32> 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"];

View File

@ -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<Uint32> flag_rgb;
extern std::vector<std::string> 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;

View File

@ -908,82 +908,44 @@ bool team::shroud_map::copy_from(const std::vector<const shroud_map*>& maps)
std::map<int, color_range> 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<int, color_range>::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<int, color_range>::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<int, color_range>::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);