Merge branch 'master' of github.com:wesnoth/wesnoth-old
This commit is contained in:
commit
e76a18d0f2
9 changed files with 192 additions and 5 deletions
|
@ -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
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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
|
||||
{
|
||||
|
|
|
@ -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_;
|
||||
|
|
Loading…
Add table
Reference in a new issue