38 if(str2.size() > str1.size()) {
42 for(std::size_t
i = 0;
i < str1.size() - str2.size() + 1;
i++) {
44 for(std::size_t j = 0; j < str2.size(); j++) {
45 if(std::tolower(str1[
i + j]) != std::tolower(str2[j])) {
64 virtual ~level() =
default;
71 virtual std::string
id()
const 76 virtual std::string
name()
const 81 virtual std::string
icon()
const 88 return data_[
"description"];
93 return data_[
"allow_era_choice"].to_bool(
true);
133 std::string map_size()
const;
137 return num_players_ == player_count;
162 std::string
id()
const 188 return generator_data_;
193 return generator_name_;
200 return generate_whole_scenario_;
222 void mark_if_completed();
224 std::string
id()
const 231 return allow_era_choice_;
246 return min_players_ <= player_count && max_players_ >= player_count;
249 std::pair<utils::irdya_date, utils::irdya_date>
dates()
const 263 std::pair<utils::irdya_date, utils::irdya_date>
dates_;
289 void init_generated_level_data();
291 void prepare_for_new_level();
292 void prepare_for_era_and_mods();
293 void prepare_for_scenario();
294 void prepare_for_campaign(
const std::string& difficulty =
"");
295 void prepare_for_saved_game();
297 void prepare_for_other();
312 std::string select_campaign_difficulty(
int set_value = -1);
315 return selected_campaign_difficulty_;
318 void apply_level_filter(
const std::string&
name);
319 void apply_level_filter(
int players);
320 void reset_level_filters();
324 return level_name_filter_;
329 return player_count_filter_;
335 std::vector<std::size_t> get_filtered_level_indices(
level_type::type type)
const;
337 level& current_level()
const;
342 current_level_type_ =
type;
347 return current_level_type_;
353 return current_level_type_ == level_type::type::campaign || current_level_type_ == level_type::type::sp_campaign;
356 void set_current_level(
const std::size_t
index);
358 void set_current_era_index(
const std::size_t index,
bool force =
false);
362 return current_era_index_;
365 const config& curent_era_cfg()
const;
367 const std::vector<extras_metadata_ptr>& get_const_extras_by_type(
const MP_EXTRA extra_type)
const;
368 std::vector<extras_metadata_ptr>& get_extras_by_type(
const MP_EXTRA extra_type);
370 bool toggle_mod(
int index,
bool force =
false);
372 bool generator_assigned()
const;
373 bool generator_has_settings()
const;
374 void generator_user_config();
376 std::pair<level_type::type, int> find_level_by_id(
const std::string&
id)
const;
377 int find_extra_by_id(
const MP_EXTRA extra_type,
const std::string&
id)
const;
381 return *dependency_manager_;
384 void init_active_mods();
386 std::vector<std::string>& active_mods();
387 std::vector<extras_metadata_ptr> active_mods_data();
394 bool current_level_has_side_data();
400 void init_all_levels();
401 void init_extras(
const MP_EXTRA extra_type);
402 void apply_level_filters();
404 std::size_t map_level_index(std::size_t index)
const;
421 void apply_filter(
const int player_count,
const std::string& name_filter)
423 games_filtered.clear();
425 for(std::size_t
i = 0;
i < games.size();
i++) {
426 const bool num_players_match = player_count == 1 || games[
i]->player_count_filter(player_count);
429 games_filtered.push_back(
i);
436 games_filtered.resize(games.size());
437 std::iota(games_filtered.begin(), games_filtered.end(), 0);
446 std::vector<extras_metadata_ptr>
eras_;
447 std::vector<extras_metadata_ptr>
mods_;
level & operator=(const level &)=delete
std::string id() const
For user maps, the id and name are the same.
level_type::type current_level_type_
std::vector< extras_metadata_ptr > mods_
std::shared_ptr< level > level_ptr
std::shared_ptr< campaign > campaign_ptr
bool allow_era_choice() const
void set_current_level_type(const level_type::type type)
std::vector< std::string > user_scenario_names_
const config & generator_data() const
std::vector< level_ptr > games
bool generate_whole_scenario_
bool generate_whole_scenario() const
std::shared_ptr< scenario > scenario_ptr
void set_data(const config &data)
std::pair< utils::irdya_date, utils::irdya_date > dates_
std::size_t current_era_index_
Definitions for the interface to Wesnoth Markup Language (WML).
bool is_campaign() const
Wrapper to simplify the is-type-campaign-or-sp-campaign check.
std::pair< utils::irdya_date, utils::irdya_date > dates() const
virtual std::string id() const
const config & data() const
std::string selected_campaign_difficulty_
std::string level_name_filter_
virtual std::string name() const
std::unique_ptr< depcheck::manager > dependency_manager_
std::map< level_type::type, type_list > type_map_
const std::string & level_name_filter() const
Encapsulates the map of the game.
bool player_count_filter(int player_count) const
virtual void set_metadata()=0
std::shared_ptr< random_map > random_map_ptr
std::unique_ptr< gamemap > map_
std::string generator_name() const
std::shared_ptr< user_map > user_map_ptr
virtual std::string icon() const
Note to all triers: It's not guaranteed that the specified component will be selected (if the user de...
std::size_t current_level_index_
map_generator * create_map_generator(const std::string &name, const config &cfg, const config *vars)
void apply_filter(const int player_count, const std::string &name_filter)
level_type::type current_level_type() const
level(const config &data)
const game_config_view & game_config_
Reference to the main game config.
std::unique_ptr< map_generator > generator_
std::vector< std::string > user_map_names_
std::size_t index(const std::string &str, const std::size_t index)
Codepoint index corresponding to the nth character in a UTF-8 string.
virtual std::string description() const
std::size_t current_era_index() const
std::shared_ptr< extras_metadata > extras_metadata_ptr
std::vector< extras_metadata_ptr > eras_
std::string get_selected_campaign_difficulty() const
const depcheck::manager & dependency_manager() const
Base class for all level type classes.
virtual bool player_count_filter(int player_count) const =0
int player_num_filter() const
static bool contains_ignore_case(const std::string &str1, const std::string &str2)
bool player_count_filter(int player_count) const
std::string generator_name_
A config object defines a single node in a WML file, with access to child nodes.
std::vector< std::size_t > games_filtered
virtual bool allow_era_choice() const
virtual bool can_launch_game() const =0