Merge branch 'master' of github.com:wesnoth/wesnoth-old

This commit is contained in:
Alexander van Gessel 2013-12-12 14:30:19 +01:00
commit e76a18d0f2
9 changed files with 192 additions and 5 deletions

View file

@ -25,6 +25,9 @@ Version 1.11.7+dev:
* Play/stop buttons are disabled again at the end of a replay.
* The 'reset replay' button works correctly and does not cause OOS
errors any more.
* User interface:
* Added a party full bell to the MP game configuration screen, played once
all human player slots have been taken.
* WML engine:
* WML variable turn_number is set correctly (to 1) in prestart and start
events. Previously, it retained its last value from the previous scenario

View file

@ -931,6 +931,9 @@
name = "Burkay Özdemir (Velory)"
comment = "Poisoning improvement for Formula AI"
[/entry]
[entry]
name = "Chris Beck (iceiceice/involution)"
[/entry]
[entry]
name = "Chris Carpenter (mordocai)"
[/entry]

View file

@ -24,6 +24,10 @@ Version 1.11.7+dev:
* Language and i18n:
* Updated translations: Chinese (Traditional), Dutch, Galician, Japanese.
* User interface:
* Added a party full bell to the MP game configuration screen, played once
all human player slots have been taken.
Version 1.11.7:
* Add-ons client:

View file

@ -151,7 +151,8 @@ namespace game_config
user_arrive = "arrive.wav",
user_leave = "leave.wav",
game_user_arrive = "join.wav",
game_user_leave = "leave.wav";
game_user_leave = "leave.wav",
party_full_bell = "bell.wav";
const std::string button_press = "button.wav",
checkbox_release = "checkbox.wav",

View file

@ -142,7 +142,7 @@ namespace game_config
extern const std::string turn_bell, timer_bell, receive_message,
receive_message_highlight, receive_message_friend,
receive_message_server, user_arrive, user_leave,
game_user_arrive, game_user_leave;
game_user_arrive, game_user_leave, party_full_bell;
extern const std::string button_press, checkbox_release, slider_adjust,
menu_expand, menu_contract, menu_select;
}

View file

@ -26,6 +26,7 @@
#include "log.hpp"
#include "map.hpp"
#include "wml_separators.hpp"
#include "sound.hpp"
#include <boost/foreach.hpp>
@ -580,6 +581,11 @@ void connect::update_playerlist_state(bool silent)
set_user_list(playerlist, silent);
set_user_menu_items(playerlist);
}
if (!silent && !engine_.sides_available() && engine_.can_start_game()) {
DBG_MP << "play party full sound" << std::endl;
sound::play_UI_sound(game_config::sounds::party_full_bell);
}
}
} // end namespace mp

View file

@ -112,7 +112,7 @@ create::create(game_display& disp, const config& cfg, game_state& state,
std::vector<std::string> combo_level_names;
BOOST_FOREACH(level_type_info type_info, all_level_types) {
if (!engine_.get_levels_by_type(type_info.first).empty()) {
if (!engine_.get_levels_by_type_unfiltered(type_info.first).empty()) {
available_level_types_.push_back(type_info.first);
combo_level_names.push_back(type_info.second);
}
@ -290,6 +290,11 @@ void create::process_event()
synchronize_selections();
}
if (filter_name_.text() != engine_.level_name_filter()) {
engine_.apply_level_filter(filter_name_.text());
init_level_type_changed(0);
}
bool level_changed = level_selection_ != levels_menu_.selection();
level_selection_ = levels_menu_.selection();

View file

@ -34,6 +34,27 @@ static lg::log_domain log_config("config");
static lg::log_domain log_mp_create_engine("mp/create/engine");
#define DBG_MP LOG_STREAM(debug, log_mp_create_engine)
namespace {
bool contains_ignore_case(const std::string& str1, const std::string& str2)
{
for (size_t i = 0; i<str1.size() - str2.size()+1; i++) {
bool ok = true;
for (size_t j = 0; j<str2.size(); j++) {
if (std::tolower(str1[i+j]) != std::tolower(str2[j])) {
ok = false;
break;
}
}
if (ok) {
return true;
}
}
return false;
}
}
namespace mp {
level::level(const config& data) :
@ -289,6 +310,7 @@ create_engine::create_engine(game_display& disp, game_state& state) :
current_level_index_(0),
current_era_index_(0),
current_mod_index_(0),
level_name_filter_(),
scenarios_(),
user_maps_(),
campaigns_(),
@ -331,6 +353,8 @@ create_engine::create_engine(game_display& disp, game_state& state) :
current_level_type_ != level::SP_CAMPAIGN) {
dependency_manager_.try_modifications(parameters_.active_mods, true);
}
reset_level_filters();
}
create_engine::~create_engine()
@ -400,6 +424,81 @@ void create_engine::prepare_for_saved_game()
parameters_.name = vgettext("$login|s game", i18n_symbols);
}
void create_engine::apply_level_filter(const std::string &name)
{
scenarios_filtered_.clear();
for (size_t i = 0; i<scenarios_.size(); i++) {
if (contains_ignore_case(scenarios_[i]->name(), name)) {
scenarios_filtered_.push_back(i);
}
}
user_maps_filtered_.clear();
for (size_t i = 0; i<user_maps_.size(); i++) {
if (contains_ignore_case(user_maps_[i]->name(), name)) {
user_maps_filtered_.push_back(i);
}
}
campaigns_filtered_.clear();
for (size_t i = 0; i<campaigns_.size(); i++) {
if (contains_ignore_case(campaigns_[i]->name(), name)) {
campaigns_filtered_.push_back(i);
}
}
sp_campaigns_filtered_.clear();
for (size_t i = 0; i<sp_campaigns_.size(); i++) {
if (contains_ignore_case(sp_campaigns_[i]->name(), name)) {
sp_campaigns_filtered_.push_back(i);
}
}
random_maps_filtered_.clear();
for (size_t i = 0; i<random_maps_.size(); i++) {
if (contains_ignore_case(random_maps_[i]->name(), name)) {
random_maps_filtered_.push_back(i);
}
}
level_name_filter_ = name;
}
void create_engine::reset_level_filters()
{
scenarios_filtered_.clear();
for (size_t i = 0; i<scenarios_.size(); i++) {
scenarios_filtered_.push_back(i);
}
user_maps_filtered_.clear();
for (size_t i = 0; i<user_maps_.size(); i++) {
user_maps_filtered_.push_back(i);
}
campaigns_filtered_.clear();
for (size_t i = 0; i<campaigns_.size(); i++) {
campaigns_filtered_.push_back(i);
}
sp_campaigns_filtered_.clear();
for (size_t i = 0; i<sp_campaigns_.size(); i++) {
sp_campaigns_filtered_.push_back(i);
}
random_maps_filtered_.clear();
for (size_t i = 0; i<random_maps_.size(); i++) {
random_maps_filtered_.push_back(i);
}
level_name_filter_ = "";
}
const std::string &create_engine::level_name_filter() const
{
return level_name_filter_;
}
std::vector<std::string> create_engine::levels_menu_item_names() const
{
std::vector<std::string> menu_names;
@ -468,7 +567,23 @@ level::TYPE create_engine::current_level_type() const
void create_engine::set_current_level(const size_t index)
{
current_level_index_ = index;
switch (current_level_type()) {
case level::CAMPAIGN:
current_level_index_ = campaigns_filtered_[index];
break;
case level::SP_CAMPAIGN:
current_level_index_ = sp_campaigns_filtered_[index];
break;
case level::SCENARIO:
current_level_index_ = scenarios_filtered_[index];
break;
case level::RANDOM_MAP:
current_level_index_ = random_maps_filtered_[index];
break;
case level::USER_MAP:
current_level_index_ = user_maps_filtered_[index];
break;
}
if (current_level_type_ == level::RANDOM_MAP) {
random_map* current_random_map =
@ -704,7 +819,7 @@ void create_engine::init_extras(const MP_EXTRA extra_type)
}
std::vector<create_engine::level_ptr>
create_engine::get_levels_by_type(level::TYPE type) const
create_engine::get_levels_by_type_unfiltered(level::TYPE type) const
{
std::vector<level_ptr> levels;
switch (type) {
@ -738,6 +853,40 @@ std::vector<create_engine::level_ptr>
return levels;
}
std::vector<create_engine::level_ptr> create_engine::get_levels_by_type(level::TYPE type) const
{
std::vector<level_ptr> levels;
switch (type) {
case level::SCENARIO:
BOOST_FOREACH(size_t level, scenarios_filtered_) {
levels.push_back(scenarios_[level]);
}
break;
case level::USER_MAP:
BOOST_FOREACH(size_t level, user_maps_filtered_) {
levels.push_back(user_maps_[level]);
}
break;
case level::RANDOM_MAP:
BOOST_FOREACH(size_t level, random_maps_filtered_) {
levels.push_back(random_maps_[level]);
}
break;
case level::CAMPAIGN:
BOOST_FOREACH(size_t level, campaigns_filtered_) {
levels.push_back(campaigns_[level]);
}
break;
case level::SP_CAMPAIGN:
BOOST_FOREACH(size_t level, sp_campaigns_filtered_) {
levels.push_back(sp_campaigns_[level]);
}
break;
} // end switch
return levels;
}
const std::vector<create_engine::extras_metadata_ptr>&
create_engine::get_const_extras_by_type(const MP_EXTRA extra_type) const
{

View file

@ -176,6 +176,12 @@ public:
void prepare_for_campaign(const std::string& difficulty);
void prepare_for_saved_game();
void apply_level_filter(const std::string& name);
void reset_level_filters();
const std::string& level_name_filter() const;
std::vector<level_ptr> get_levels_by_type_unfiltered(level::TYPE type) const;
std::vector<level_ptr> get_levels_by_type(level::TYPE type) const;
std::vector<std::string> levels_menu_item_names() const;
@ -219,18 +225,28 @@ private:
std::vector<extras_metadata_ptr>&
get_extras_by_type(const MP_EXTRA extra_type);
size_t map_level_index(size_t index) const;
level::TYPE current_level_type_;
size_t current_level_index_;
size_t current_era_index_;
size_t current_mod_index_;
std::string level_name_filter_;
std::vector<scenario_ptr> scenarios_;
std::vector<user_map_ptr> user_maps_;
std::vector<campaign_ptr> campaigns_;
std::vector<campaign_ptr> sp_campaigns_;
std::vector<random_map_ptr> random_maps_;
std::vector<size_t> scenarios_filtered_;
std::vector<size_t> user_maps_filtered_;
std::vector<size_t> campaigns_filtered_;
std::vector<size_t> sp_campaigns_filtered_;
std::vector<size_t> random_maps_filtered_;
std::vector<std::string> user_map_names_;
std::vector<extras_metadata_ptr> eras_;