add a hidden= attribute to make a side invisible in the status table,

...patch by nital
This commit is contained in:
Jérémy Rosen 2009-02-22 19:39:32 +00:00
parent 0989dd3135
commit 27671cca88
6 changed files with 60 additions and 26 deletions

View File

@ -46,6 +46,8 @@ Version 1.5.10+svn:
* WML Engine:
* Fixed bug #13024: Conditional [allow_undo] not always working right
* Map size is now hard-limited to 200 by 200
* attribute hidden in [side] allows to hide a side from status table,
it also can be changed by [modify_side] (FR #12814)
Version 1.5.10:
* Campaigns:

View File

@ -807,6 +807,9 @@
name = "Laurent Birtz"
[/entry]
[entry]
+ name = "Łukasz Dobrogowski (nital)"
+ [/entry]
+ [entry]
name = "Manuel Osório Binelo (manuelb)"
[/entry]
[entry]

View File

@ -785,6 +785,7 @@ namespace {
std::string recruit_str = cfg["recruit"];
std::string fog = cfg["fog"];
std::string shroud = cfg["shroud"];
std::string hidden = cfg["hidden"];
std::string shroud_data = cfg["shroud_data"];
std::string village_gold = cfg["village_gold"];
const config& parsed = cfg.get_parsed_config();
@ -836,6 +837,10 @@ namespace {
if (!shroud_data.empty()) {
(*teams)[team_index].merge_shroud_map_data(shroud_data);
}
// Set whether team is hidden in status table
if (!hidden.empty()) {
(*teams)[team_index].set_hidden( utils::string_bool(hidden, true) );
}
// Set fog
if (!fog.empty()) {
(*teams)[team_index].set_fog( utils::string_bool(fog, true) );

View File

@ -65,11 +65,6 @@ void remove_old_auto_saves()
}
}
} // end anonymous namespace
namespace events{
@ -390,6 +385,8 @@ private:
const team& viewing_team = teams_[gui_->viewing_team()];
unsigned total_villages = 0;
// a variable to check if there are any teams to show in the table
bool status_table_empty = true;
//if the player is under shroud or fog, they don't get
//to see details about the other sides, only their own
@ -397,9 +394,10 @@ private:
//lack of information about the other sides But he see
//all names with in colours
for(size_t n = 0; n != teams_.size(); ++n) {
if(teams_[n].is_empty()) {
if(teams_[n].is_empty()||teams_[n].hidden()) {
continue;
}
status_table_empty=false;
const bool known = viewing_team.knows_about_team(n, network::nconnections() > 0);
const bool enemy = viewing_team.is_enemy(n+1);
@ -421,7 +419,7 @@ private:
leader_bools.push_back(true);
leader_name = leader->second.name();
} else {
str << IMAGE_PREFIX << std::string("unknown-unit.png");
str << IMAGE_PREFIX << std::string("units/unknown-unit.png");
leader_bools.push_back(false);
leader_name = "Unknown";
}
@ -463,12 +461,22 @@ private:
ERR_NG << "Logic error: map has " << map_.villages().size() << " villages but status table shows " << total_villages << " owned in total\n";
}
if (status_table_empty)
{
// no sides to show - display empty table
std::stringstream str;
str << " ";
for (int i=0;i<7;++i)
str << COLUMN_SEPARATOR << " ";
leader_bools.push_back(false);
items.push_back(str.str());
}
int result = 0;
{
leader_scroll_dialog slist(*gui_, _("Current Status"), leader_bools, selected, gui::DIALOG_FORWARD);
slist.add_button(new gui::dialog_button(gui_->video(), _("More >"),
gui::button::TYPE_PRESS, gui::DIALOG_FORWARD),
gui::dialog::BUTTON_EXTRA_LEFT);
gui::button::TYPE_PRESS, gui::DIALOG_FORWARD),
gui::dialog::BUTTON_EXTRA_LEFT);
slist.set_menu(items, &sorter);
slist.get_menu().move_selection(selected);
result = slist.show();
@ -503,11 +511,13 @@ private:
items.push_back(heading.str());
const team& viewing_team = teams_[gui_->viewing_team()];
bool settings_table_empty = true;
for(size_t n = 0; n != teams_.size(); ++n) {
if(teams_[n].is_empty()) {
if(teams_[n].is_empty()||teams_[n].hidden()) {
continue;
}
settings_table_empty = false;
std::stringstream str;
const unit_map::const_iterator leader = team_leader(n+1, units_);
@ -541,23 +551,32 @@ private:
items.push_back(str.str());
}
if (settings_table_empty)
{
// no sides to show - display empty table
std::stringstream str;
for (int i=0;i<8;++i)
str << " " << COLUMN_SEPARATOR;
leader_bools.push_back(false);
items.push_back(str.str());
}
int result = 0;
{
leader_scroll_dialog slist(*gui_, _("Scenario Settings"), leader_bools, selected, gui::DIALOG_BACK);
slist.set_menu(items, &sorter);
slist.get_menu().move_selection(selected);
slist.add_button(new gui::dialog_button(gui_->video(), _(" < Back"),
gui::button::TYPE_PRESS, gui::DIALOG_BACK),
gui::dialog::BUTTON_EXTRA_LEFT);
result = slist.show();
selected = slist.get_menu().selection();
} // this will kill the dialog before scrolling
int result = 0;
{
leader_scroll_dialog slist(*gui_, _("Scenario Settings"), leader_bools, selected, gui::DIALOG_BACK);
slist.set_menu(items, &sorter);
slist.get_menu().move_selection(selected);
slist.add_button(new gui::dialog_button(gui_->video(), _(" < Back"),
gui::button::TYPE_PRESS, gui::DIALOG_BACK),
gui::dialog::BUTTON_EXTRA_LEFT);
result = slist.show();
selected = slist.get_menu().selection();
} // this will kill the dialog before scrolling
if (result >= 0)
gui_->scroll_to_leader(units_, selected+1);
else if (result == gui::DIALOG_BACK)
status_table(selected);
if (result >= 0)
gui_->scroll_to_leader(units_, selected+1);
else if (result == gui::DIALOG_BACK)
status_table(selected);
}
void menu_handler::save_game(const std::string& message, gui::DIALOG_TYPE dialog_type,

View File

@ -111,6 +111,7 @@ team::team_info::team_info(const config& cfg) :
disallow_observers(utils::string_bool(cfg["disallow_observers"])),
allow_player(utils::string_bool(cfg["allow_player"], true)),
no_leader(utils::string_bool(cfg["no_leader"])),
hidden(utils::string_bool(cfg["hidden"])),
music(cfg["music"]),
colour(cfg["colour"].size() ? cfg["colour"] : cfg["side"])
{
@ -344,6 +345,7 @@ void team::team_info::write(config& cfg) const
cfg["disallow_observers"] = disallow_observers ? "yes" : "no";
cfg["allow_player"] = allow_player ? "yes" : "no";
cfg["no_leader"] = no_leader ? "yes" : "no";
cfg["hidden"] = hidden ? "yes" : "no";
cfg["number_of_possible_recruits_to_force_recruit"] = lexical_cast<std::string>(number_of_possible_recruits_to_force_recruit);
std::stringstream enemies_str;

View File

@ -118,6 +118,7 @@ public:
bool disallow_observers;
bool allow_player;
bool no_leader;
bool hidden;
std::string music;
@ -289,6 +290,8 @@ public:
bool get_disallow_observers() {return info_.disallow_observers; };
std::string map_colour_to() const { return info_.colour; };
bool& no_leader() { return info_.no_leader; }
bool& hidden() { return info_.hidden; }
void set_hidden(bool value) { info_.hidden=value; }
static int nteams();