Author: zaroth
Date: Thu Jun 9 11:53:13 2011
New Revision: 49820
URL: http://svn.gna.org/viewcvs/wesnoth?rev=49820&view=rev
Log:
Added scenario, side options to commandline_options. Also changed and
documented the helper functions in this class a bit.
Modified:
trunk/src/commandline_options.cpp
trunk/src/commandline_options.hpp
trunk/src/game_controller.cpp
trunk/src/tests/test_commandline_options.cpp
Modified: trunk/src/commandline_options.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/commandline_options.cpp?rev=49820&r1=49819&r2=49820&view=diff
==============================================================================
--- trunk/src/commandline_options.cpp (original)
+++ trunk/src/commandline_options.cpp Thu Jun 9 11:53:13 2011
@@ -174,6 +174,8 @@
("ai-config", po::value<std::vector<std::string>
>()->composing(), "arg should have format side:value\nselects a configuration
file to load for this side.")
("exit-at-end", "exit Wesnoth at the end of the scenario.")
("nogui", "runs the game without the GUI.")
+ ("scenario", po::value<std::string>(), "selects a multiplayer
scenario. The default scenario is \"multiplayer_The_Freelands\".")
+ ("side", po::value<std::vector<std::string> >()->composing(),
"<arg> should have format side:value. selects a faction of the current era for
this side by id.")
("turns", po::value<std::string>(), "sets the number of turns.
The default is \"50\".")
;
@@ -210,7 +212,7 @@
po::store(po::command_line_parser(argc_,argv_).options(all_).positional(positional).style(parsing_style).run(),vm);
if (vm.count("ai-config"))
- multiplayer_ai_config =
parse_to_int_string_tuples_(vm["ai-config"].as<std::vector<std::string> >());
+ multiplayer_ai_config =
parse_to_uint_string_tuples_(vm["ai-config"].as<std::vector<std::string> >());
if (vm.count("bpp"))
bpp = vm["bpp"].as<int>();
if (vm.count("campaign"))
@@ -309,6 +311,8 @@
parse_resolution_(vm["resolution"].as<std::string>());
if (vm.count("rng-seed"))
rng_seed = vm["rng-seed"].as<unsigned int>();
+ if (vm.count("scenario"))
+ multiplayer_scenario = vm["scenario"].as<std::string>();
if (vm.count("screenshot"))
{
screenshot = true;
@@ -317,6 +321,8 @@
}
if (vm.count("server"))
server = vm["server"].as<std::string>();
+ if (vm.count("side"))
+ multiplayer_side =
parse_to_uint_string_tuples_(vm["side"].as<std::vector<std::string> >());
if (vm.count("test"))
test = vm["test"].as<std::string>();
if (vm.count("turns"))
@@ -354,18 +360,18 @@
resolution = boost::tuple<int,int>(xres,yres);
}
-std::vector<boost::tuple<int,std::string> >
commandline_options::parse_to_int_string_tuples_(const std::vector<std::string>
&strings)
-{
- std::vector<boost::tuple<int,std::string> > vec;
- boost::tuple<int,std::string> elem;
+std::vector<boost::tuple<unsigned int,std::string> >
commandline_options::parse_to_uint_string_tuples_(const
std::vector<std::string> &strings, char separator)
+{
+ std::vector<boost::tuple<unsigned int,std::string> > vec;
+ boost::tuple<unsigned int,std::string> elem;
foreach(const std::string &s, strings)
{
- const std::vector<std::string> tokens = utils::split(s, ':');
+ const std::vector<std::string> tokens = utils::split(s,
separator);
if (tokens.size()!=2)
{
//TODO throw a meaningful exception
}
- elem.get<0>() = lexical_cast<int>(tokens[0]);
+ elem.get<0>() = lexical_cast<unsigned int>(tokens[0]);
//TODO catch exception and pack in meaningful something
elem.get<1>() = tokens[1];
vec.push_back(elem);
@@ -373,6 +379,26 @@
return vec;
}
+std::vector<boost::tuple<unsigned int,std::string,std::string> >
commandline_options::parse_to_uint_string_string_tuples_(const
std::vector<std::string> &strings, char separator)
+{
+ std::vector<boost::tuple<unsigned int,std::string,std::string> > vec;
+ boost::tuple<unsigned int,std::string,std::string> elem;
+ foreach(const std::string &s, strings)
+ {
+ const std::vector<std::string> tokens = utils::split(s,
separator);
+ if (tokens.size()!=3)
+ {
+ //TODO throw a meaningful exception
+ }
+ elem.get<0>() = lexical_cast<unsigned int>(tokens[0]);
+ //TODO catch exception and pack in meaningful something
+ elem.get<1>() = tokens[1];
+ elem.get<2>() = tokens[2];
+ vec.push_back(elem);
+ }
+ return vec;
+}
+
std::ostream& operator<<(std::ostream &os, const commandline_options&
cmdline_opts)
{
os << "Usage: " << cmdline_opts.argv_[0] << " [<options>]
[<data-directory>]\n";
Modified: trunk/src/commandline_options.hpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/commandline_options.hpp?rev=49820&r1=49819&r2=49820&view=diff
==============================================================================
--- trunk/src/commandline_options.hpp (original)
+++ trunk/src/commandline_options.hpp Thu Jun 9 11:53:13 2011
@@ -77,11 +77,11 @@
/// True if --multiplayer was given on the command line. Goes directly
into multiplayer mode.
bool multiplayer;
/// Non-empty if --ai-config was given on the command line. Vector of
pairs (side number, value). Dependant on --multiplayer.
- boost::optional<std::vector<boost::tuple<int, std::string> > >
multiplayer_ai_config;
+ boost::optional<std::vector<boost::tuple<unsigned int, std::string> > >
multiplayer_ai_config;
/// Non-empty if --algorithm was given on the command line. Vector of
pairs (side number, value). Dependant on --multiplayer.
- boost::optional<std::vector<boost::tuple<int, std::string> > >
multiplayer_algorithm;
+ boost::optional<std::vector<boost::tuple<unsigned int, std::string> > >
multiplayer_algorithm;
/// Non-empty if --controller was given on the command line. Vector of
pairs (side number, controller). Dependant on --multiplayer.
- boost::optional<std::vector<boost::tuple<int, std::string> > >
multiplayer_controller;
+ boost::optional<std::vector<boost::tuple<unsigned int, std::string> > >
multiplayer_controller;
/// Non-empty if --era was given on the command line. Dependant on
--multiplayer.
boost::optional<std::string> multiplayer_era;
/// True if --exit-at-and was given on the command line. Dependant on
--multiplayer.
@@ -89,11 +89,11 @@
/// Non-empty if --label was given on the command line. Dependant on
--multiplayer.
boost::optional<std::string> multiplayer_label;
/// Non-empty if --parm was given on the command line. Vector of pairs
(side number, parm name, parm value). Dependant on --multiplayer.
- boost::optional<std::vector<boost::tuple<int, std::string, std::string>
> > multiplayer_parm;
+ boost::optional<std::vector<boost::tuple<unsigned int, std::string,
std::string> > > multiplayer_parm;
/// Non-empty if --scenario was given on the command line. Dependant on
--multiplayer.
boost::optional<std::string> multiplayer_scenario;
/// Non-empty if --side was given on the command line. Vector of pairs
(side number, faction id). Dependant on --multiplayer.
- boost::optional<std::vector<boost::tuple<int, std::string> > >
multiplayer_side;
+ boost::optional<std::vector<boost::tuple<unsigned int, std::string> > >
multiplayer_side;
/// Non-empty if --turns was given on the command line. Dependant on
--multiplayer.
boost::optional<std::string> multiplayer_turns;
/// Max FPS specified by --max-fps option.
@@ -165,7 +165,10 @@
private:
void parse_log_domains_(const std::string &domains_string, const int
severity);
void parse_resolution_ (const std::string &resolution_string);
- std::vector<boost::tuple<int,std::string> >
parse_to_int_string_tuples_(const std::vector<std::string> &strings);
+ /// A helper function splitting vector of strings of format unsigned
int:string to vector of tuples (unsigned int,string)
+ std::vector<boost::tuple<unsigned int,std::string> >
parse_to_uint_string_tuples_(const std::vector<std::string> &strings, char
separator = ':');
+ /// A helper function splitting vector of strings of format unsigned
int:string:string to vector of tuples (unsigned int,string,string)
+ std::vector<boost::tuple<unsigned int,std::string,std::string> >
parse_to_uint_string_string_tuples_(const std::vector<std::string> &strings,
char separator = ':');
int argc_;
char **argv_;
boost::program_options::options_description all_;
Modified: trunk/src/game_controller.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/game_controller.cpp?rev=49820&r1=49819&r2=49820&view=diff
==============================================================================
--- trunk/src/game_controller.cpp (original)
+++ trunk/src/game_controller.cpp Thu Jun 9 11:53:13 2011
@@ -464,8 +464,38 @@
size_t sides_counted = 0;
+ if (cmdline_opts_.multiplayer_ai_config)
+ {
+ for(std::vector<boost::tuple<unsigned int, std::string>
>::const_iterator it=cmdline_opts_.multiplayer_ai_config->begin();
it!=cmdline_opts_.multiplayer_ai_config->end(); ++it)
+ {
+ const unsigned int side = it->get<0>();
+ const std::string ai_cfg_name = it->get<1>();
+ if (side > sides_counted)
+ {
+ std::cerr << "counted sides: " << side << "\n";
+ sides_counted = side;
+ }
+ side_ai_configs[side] = ai_cfg_name;
+ }
+ }
if (cmdline_opts_.multiplayer_exit_at_end)
game_config::exit_at_end = true;
+ if (cmdline_opts_.multiplayer_scenario)
+ scenario = *cmdline_opts_.multiplayer_scenario;
+ if (cmdline_opts_.multiplayer_side)
+ {
+ for(std::vector<boost::tuple<unsigned int, std::string>
>::const_iterator it=cmdline_opts_.multiplayer_side->begin();
it!=cmdline_opts_.multiplayer_side->end(); ++it)
+ {
+ const unsigned int side = it->get<0>();
+ const std::string faction_id = it->get<1>();
+ if (side > sides_counted)
+ {
+ std::cerr << "counted sides: " << side << "\n";
+ sides_counted = side;
+ }
+ side_types[side] = faction_id;
+ }
+ }
if (cmdline_opts_.multiplayer_turns)
turns = *cmdline_opts_.multiplayer_turns;
@@ -488,25 +518,14 @@
const bool last_digit = isdigit(name_tail) ? true:false;
const size_t side = name_tail - '0';
- if(last_digit && side > sides_counted) {
- std::cerr << "counted sides: " << side << "\n";
- sides_counted = side;
- }
-
- if(name == "--scenario") {
- scenario = value;
- } else if(name == "--era") {
+ if(name == "--era") {
era = value;
} else if(name == "--label") {
label = value;
} else if(last_digit && name_head == "--controller") {
side_controllers[side] = value;
- } else if(last_digit && name_head == "--ai_config") {
- side_ai_configs[side] = value;
} else if(last_digit && name_head == "--algorithm") {
side_algorithms[side] = value;
- } else if(last_digit && name_head == "--side") {
- side_types[side] = value;
} else if(last_digit && name_head == "--parm") {
const std::vector<std::string> name_value =
utils::split(value, ':');
if(name_value.size() != 2) {
Modified: trunk/src/tests/test_commandline_options.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/tests/test_commandline_options.cpp?rev=49820&r1=49819&r2=49820&view=diff
==============================================================================
--- trunk/src/tests/test_commandline_options.cpp (original)
+++ trunk/src/tests/test_commandline_options.cpp Thu Jun 9 11:53:13 2011
@@ -232,7 +232,10 @@
"--proxy-user=userfoo",
"--resolution=800x600",
"--rng-seed=1234",
+ "--scenario=scenfoo",
"--screenshot", "mapfoo", "outssfoo",
+ "--side=1:sidefoo",
+ "--side=2:sidebar",
"--server=servfoo",
"--smallgui",
"--test=testfoo",
@@ -287,8 +290,11 @@
BOOST_CHECK(co.multiplayer_exit_at_end);
BOOST_CHECK(!co.multiplayer_label);
BOOST_CHECK(!co.multiplayer_parm);
- BOOST_CHECK(!co.multiplayer_scenario);
- BOOST_CHECK(!co.multiplayer_side);
+ BOOST_CHECK(co.multiplayer_scenario && *co.multiplayer_scenario ==
"scenfoo");
+ BOOST_CHECK(co.multiplayer_side);
+ BOOST_CHECK(co.multiplayer_side->size() == 2);
+ BOOST_CHECK(co.multiplayer_side->at(0).get<0>() == 1 &&
co.multiplayer_side->at(0).get<1>() == "sidefoo");
+ BOOST_CHECK(co.multiplayer_side->at(1).get<0>() == 2 &&
co.multiplayer_side->at(1).get<1>() == "sidebar");
BOOST_CHECK(co.multiplayer_turns && *co.multiplayer_turns == "42");
BOOST_CHECK(co.max_fps && *co.max_fps == 100);
BOOST_CHECK(co.nocache);
_______________________________________________
Wesnoth-commits mailing list
[email protected]
https://mail.gna.org/listinfo/wesnoth-commits