From 735bc2afafb7e7f846e40f7010a577d1d6372eef Mon Sep 17 00:00:00 2001 From: "John W. C. McNabb" Date: Sun, 5 Nov 2006 17:45:32 +0000 Subject: [PATCH] Step towards TC upgrade --- data/scenario-test.cfg | 29 +++++++++++++++ data/team-colors.cfg | 58 +++++++++++++++--------------- src/game_config.cpp | 8 ++--- src/image.cpp | 29 ++++++++------- src/serialization/string_utils.cpp | 53 +++++++++++++-------------- src/serialization/string_utils.hpp | 2 +- 6 files changed, 107 insertions(+), 72 deletions(-) diff --git a/data/scenario-test.cfg b/data/scenario-test.cfg index f819ad55a9c..d335446b367 100644 --- a/data/scenario-test.cfg +++ b/data/scenario-test.cfg @@ -212,6 +212,35 @@ name=moveto x="0-38" y="0-20" [/remove_shroud] + [message] + speaker=narrator + image=units/elves-wood/captain.png~TC(3,magenta) + message=_ "Now I am on the green team." + [/message] + [/event] + + [item] + x,y=12,6 + image="items/orcish-flag.png" + [/item] + [label] + x,y=12,6 + text="change coloring" + [/label] + + [event] + name=moveto + first_time_only=no + [filter] + side=1 + x=12 + y=6 + [/filter] + [message] + speaker=narrator + image=units/elves-wood/captain.png~TC(3,magenta) + message=_ "Now I am on the green team." + [/message] [/event] [item] diff --git a/data/team-colors.cfg b/data/team-colors.cfg index f25f1134e84..69bb73410b2 100644 --- a/data/team-colors.cfg +++ b/data/team-colors.cfg @@ -1,62 +1,62 @@ -[team_color] -side=1 +[color_range] +id=1 team_rgb=255,0,0,255,255,255,0,0,0,255,0,0 name= _ "Red" -[/team_color] +[/color_range] -[team_color] -side=2 +[color_range] +id=2 team_rgb=46,65,155,255,255,255,15,15,15,0,0,255 name= _ "Blue" -[/team_color] +[/color_range] -[team_color] -side=3 +[color_range] +id=3 team_rgb=98,182,100,255,255,255,0,0,0,0,255,0 name= _ "Green" -[/team_color] +[/color_range] -[team_color] -side=4 +[color_range] +id=4 team_rgb=147,0,157,255,255,255,0,0,0,255,0,255 name= _ "Purple" -[/team_color] +[/color_range] -[team_color] -side=7 +[color_range] +id=7 team_rgb=240,114,0,240,240,240,0,0,0,255,170,0 name= _ "Orange" -[/team_color] +[/color_range] -[team_color] -side=5 +[color_range] +id=5 team_rgb=90,90,90,255,255,255,0,0,0,0,0,0 name= _ "Black" -[/team_color] +[/color_range] -[team_color] -side=8 +[color_range] +id=8 team_rgb=225,225,225,255,255,255,30,30,30,255,255,255 name= _ "White" -[/team_color] +[/color_range] -[team_color] -side=6 +[color_range] +id=6 team_rgb=148,80,39,255,255,255,0,0,0,170,70,0 name= _ "Brown" -[/team_color] +[/color_range] -[team_color] -side=9 +[color_range] +id=9 team_rgb=48,203,192,255,255,255,0,0,0,0,240,200 name= _ "Teal" -[/team_color] +[/color_range] -[team_colors] +[color_palette] magenta=244,154,193,63,0,22,85,0,42,105,0,57,123,0,69,140,0,81,158,0,93,177,0,105,195,0,116,214,0,127,236,0,140,238,61,150,239,91,161,241,114,172,242,135,182,246,173,205,248,193,217,250,213,229,253,233,241 green=0,200,0,0,255,0,0,254,0,0,253,0,0,252,0,0,251,0,0,250,0,0,249,0,0,248,0,0,247,0,0,246,0,0,245,0,0,244,0,0,243,0,0,242,0,0,241,0,0,240,0,0,239,0,0,238,0,0,237,0,0,236,0,0,235,0,0,234,0,0,233,0,0,232,0,0,231,0,0,230,0,0,229,0,0,228,0,0,227,0,0,226,0,0,225,0,0,224,0,0,223,0,0,222,0,0,221,0,0,220,0,0,219,0,0,218,0,0,217,0,0,216,0,0,215,0,0,214,0,0,213,0,0,212,0,0,211,0,0,210,0,0,209,0,0,208,0,0,207,0,0,206,0,0,205,0,0,204,0,0,203,0,0,202,0,0,201,0,0,199,0,0,198,0,0,197,0,0,196,0,0,195,0,0,194,0,0,193,0,0,192,0,0,191,0,0,190,0,0,189,0,0,188,0,0,187,0,0,186,0,0,185,0,0,184,0,0,183,0,0,182,0,0,181,0,0,180,0,0,179,0,0,178,0,0,177,0,0,176,0,0,175,0,0,174,0,0,173,0,0,172,0,0,171,0,0,170,0,0,169,0,0,168,0,0,167,0,0,166,0,0,165,0,0,164,0,0,163,0,0,162,0,0,161,0,0,160,0,0,159,0,0,158,0,0,157,0,0,156,0,0,155,0,0,154,0,0,153,0,0,152,0,0,151,0,0,150,0,0,149,0,0,148,0,0,147,0,0,146,0,0,145,0,0,144,0,0,143,0,0,142,0,0,141,0,0,140,0,0,139,0,0,138,0,0,137,0,0,136,0,0,135,0,0,134,0,0,133,0,0,132,0,0,131,0,0,130,0,0,129,0,0,128,0,0,127,0,0,126,0,0,125,0,0,124,0,0,123,0,0,122,0,0,121,0,0,120,0,0,119,0,0,118,0,0,117,0,0,116,0,0,115,0,0,114,0,0,113,0,0,112,0,0,111,0,0,110,0,0,109,0,0,108,0,0,107,0,0,106,0,0,105,0,0,104,0,0,103,0,0,102,0,0,101,0,0,100,0,0,99,0,0,98,0,0,97,0,0,96,0,0,95,0,0,94,0,0,93,0,0,92,0,0,91,0,0,90,0,0,89,0,0,88,0,0,87,0,0,86,0,0,85,0,0,84,0,0,83,0,0,82,0,0,81,0,0,80,0,0,79,0,0,78,0,0,77,0,0,76,0,0,75,0,0,74,0,0,73,0,0,72,0,0,71,0,0,70,0,0,69,0,0,68,0,0,67,0,0,66,0,0,65,0,0,64,0,0,63,0,0,62,0,0,61,0,0,60,0,0,59,0,0,58,0,0,57,0,0,56,0,0,55,0,0,54,0,0,53,0,0,52,0,0,51,0,0,50,0,0,49,0,0,48,0,0,47,0,0,46,0,0,45,0,0,44,0,0,43,0,0,42,0,0,41,0,0,40,0,0,39,0,0,38,0,0,37,0,0,36,0,0,35,0,0,34,0,0,33,0,0,32,0,0,31,0,0,30,0,0,29,0,0,28,0,0,27,0,0,26,0,0,25,0,0,24,0,0,23,0,0,22,0,0,21,0,0,20,0,0,19,0,0,18,0,0,17,0,0,16,0,0,15,0,0,14,0,0,13,0,0,12,0,0,11,0,0,10,0,0,9,0,0,8,0,0,7,0,0,6,0,0,5,0,0,4,0,0,3,0,0,2,0,0,1,0 -[/team_colors] +[/color_palette] diff --git a/src/game_config.cpp b/src/game_config.cpp index ef516bcb4b4..ef248b9db4c 100644 --- a/src/game_config.cpp +++ b/src/game_config.cpp @@ -162,17 +162,17 @@ namespace game_config level_image = v["level_image"]; ellipsis_image = v["ellipsis_image"]; - const config::child_list& team_colors = v.get_children("team_color"); + const config::child_list& team_colors = v.get_children("color_range"); for(config::child_list::const_iterator teamC = team_colors.begin(); teamC != team_colors.end(); ++teamC) { - if(!(**teamC)["side"].empty() && !(**teamC)["team_rgb"].empty()){ - int side = atoi((**teamC)["side"].c_str()); + if(!(**teamC)["id"].empty() && !(**teamC)["team_rgb"].empty()){ + int side = atoi((**teamC)["id"].c_str()); std::vector temp = string2rgb((**teamC)["team_rgb"]); team_rgb_range[side] = color_range(temp); team_rgb_name[side] = (**teamC)["name"]; } } - const config* rgbv = v.child("team_colors"); + const config* rgbv = v.child("color_palette"); if(rgbv) { for(string_map::const_iterator rgb_it = rgbv->values.begin(); rgb_it != rgbv->values.end(); ++rgb_it) { try { diff --git a/src/image.cpp b/src/image.cpp index d66ff17d5e6..308d395544b 100644 --- a/src/image.cpp +++ b/src/image.cpp @@ -23,6 +23,7 @@ #include "util.hpp" #include "wassert.hpp" #include "wesconfig.h" +#include "serialization/string_utils.hpp" #include "SDL_image.h" @@ -139,19 +140,23 @@ void locator::parse_arguments() return; } size_t markup_field = fn.find('~'); - while(markup_field != std::string::npos) { - size_t open_field = fn.find('(',markup_field); - size_t close_field = fn.find(')',markup_field); - if(open_field == std::string::npos || close_field == std::string::npos) { - return; + std::string left_par="("; + std::string right_par=")"; + if(markup_field != std::string::npos) { + std::string markup_string = fn.substr(markup_field+1, fn.size() - markup_field ); + fn = fn.substr(0,markup_field); + std::vector farg = utils::paranthetical_split(markup_string,left_par,right_par); + std::vector::const_iterator i = farg.begin(); + while(i!=farg.end()){ + std::string function=*i++; + if(i==farg.end()){ + return; + } + std::string field = *i++; + if(function == "TC") { + get_tc_info(field); + } } - std::string field = fn.substr(open_field+1,close_field-open_field-1); - std::string function = fn.substr(markup_field+1,open_field-markup_field-1); - fn = fn.substr(0,markup_field) + fn.substr(close_field+1); - if(function == "TC") { - get_tc_info(field); - } - markup_field = fn.find('~'); } } diff --git a/src/serialization/string_utils.cpp b/src/serialization/string_utils.cpp index f3e671ab59d..afce9e9ef4c 100644 --- a/src/serialization/string_utils.cpp +++ b/src/serialization/string_utils.cpp @@ -206,7 +206,7 @@ std::vector< std::string > split(std::string const &val, char c, int flags) //Empty elements are never removed as they are placeholders. //parenthetical_split("a(b)c{d}e(f{g})h","({",")}") should return a vector of // <"a","b","c","d","e","f{g}","h"> -std::vector< std::string > paranthetical_plit(std::string const &val, std::string const &left, std::string const &right,int flags) +std::vector< std::string > paranthetical_split(std::string const &val, std::string const &left, std::string const &right,int flags) { std::vector< std::string > res; std::vector part; @@ -214,31 +214,16 @@ std::vector< std::string > paranthetical_plit(std::string const &val, std::strin std::string::const_iterator i1 = val.begin(); std::string::const_iterator i2 = val.begin(); + std::string lp=left; + std::string rp=right; + if(left.size()!=right.size()){ ERR_GENERAL << "Left and Right Parenthesis lists not same length\n"; return res; } while (i2 != val.end()) { - for(size_t i=0; i < left.size(); i++){ - if (*i2 == left[i]){ - if (part.size()==0){ - std::string new_val(i1, i2); - if (flags & STRIP_SPACES) - strip(new_val); - res.push_back(new_val); - ++i2; - if (flags & STRIP_SPACES) { - while (i2 != val.end() && *i2 == ' ') - ++i2; - } - i1=i2; - } - part.push_back(right[i]); - i=left.size(); - } - } - if(*i2 == part.back()){ + if(part.size() && *i2 == part.back()){ part.pop_back(); if(part.size() == 0){ std::string new_val(i1, i2); @@ -246,14 +231,30 @@ std::vector< std::string > paranthetical_plit(std::string const &val, std::strin strip(new_val); res.push_back(new_val); ++i2; - if (flags & STRIP_SPACES) { - while (i2 != val.end() && *i2 == ' ') - ++i2; - } i1=i2; + }else{ + ++i2; } - } - ++i2; + break; + } + for(size_t i=0; i < lp.size(); i++){ + if (*i2 == lp[i]){ + if (part.size()==0){ + std::string new_val(i1, i2); + if (flags & STRIP_SPACES) + strip(new_val); + res.push_back(new_val); + ++i2; + i1=i2; + }else{ + ++i2; + } + part.push_back(rp[i]); + break; + }else{ + ++i2; + } + } } std::string new_val(i1, i2); diff --git a/src/serialization/string_utils.hpp b/src/serialization/string_utils.hpp index 9c679275aac..11efb77ed16 100644 --- a/src/serialization/string_utils.hpp +++ b/src/serialization/string_utils.hpp @@ -49,7 +49,7 @@ bool notspace(char c); // STRIP_SPACES : strips leading and trailing blank spaces enum { REMOVE_EMPTY = 0x01, STRIP_SPACES = 0x02 }; std::vector< std::string > split(std::string const &val, char c = ',', int flags = REMOVE_EMPTY | STRIP_SPACES); -std::vector< std::string > paranthetical_plit(std::string const &val, std::string const &left="(", std::string const &right=")",int flags = STRIP_SPACES); +std::vector< std::string > paranthetical_split(std::string const &val, std::string const &left="(", std::string const &right=")",int flags = STRIP_SPACES); std::string join(std::vector< std::string > const &v, char c = ','); std::vector< std::string > quoted_split(std::string const &val, char c= ',', int flags = REMOVE_EMPTY | STRIP_SPACES, char quote = '\\');