Skip to content

Commit

Permalink
Game Classification: added convenience type check functions
Browse files Browse the repository at this point in the history
Shortens a bunch of code
  • Loading branch information
Vultraz committed Jan 2, 2021
1 parent 158cb4e commit 4b12410
Show file tree
Hide file tree
Showing 9 changed files with 50 additions and 36 deletions.
15 changes: 5 additions & 10 deletions src/game_classification.cpp
Expand Up @@ -84,24 +84,19 @@ config game_classification::to_config() const

std::string game_classification::get_tagname() const
{
if(this->campaign_type == CAMPAIGN_TYPE::MULTIPLAYER) {
return this->campaign.empty() ? "multiplayer" : "scenario";
if(is_multiplayer()) {
return campaign.empty() ? "multiplayer" : "scenario";
}

if(this->campaign_type == CAMPAIGN_TYPE::TUTORIAL) {
if(is_tutorial()) {
return "scenario";
}

return this->campaign_type.to_string();
return campaign_type.to_string();
}

bool game_classification::is_normal_mp_game() const
namespace
{
return this->campaign_type == CAMPAIGN_TYPE::MULTIPLAYER && this->campaign.empty();
}

namespace {

// helper objects for saved_game::expand_mp_events()
struct modevents_entry
{
Expand Down
34 changes: 29 additions & 5 deletions src/game_classification.hpp
Expand Up @@ -31,11 +31,6 @@ class game_classification
game_classification() = default;
explicit game_classification(const config& cfg);

config to_config() const;
std::string get_tagname() const;
bool is_normal_mp_game() const;
std::set<std::string> active_addons(const std::string& scenario_id) const;

std::string label; /**< Name of the game (e.g. name of save file). */
std::string version; /**< Version game was created with. */
MAKE_ENUM (CAMPAIGN_TYPE, /**< Type of the game - campaign, multiplayer etc. */
Expand Down Expand Up @@ -64,4 +59,33 @@ class game_classification
std::string difficulty = DEFAULT_DIFFICULTY; /**< The difficulty level the game is being played on. */
std::string random_mode = "";
bool oos_debug = false;

config to_config() const;
std::string get_tagname() const;
std::set<std::string> active_addons(const std::string& scenario_id) const;

bool is_normal_mp_game() const
{
return is_multiplayer() && campaign.empty();
}

bool is_scenario() const
{
return campaign_type == CAMPAIGN_TYPE::SCENARIO;
}

bool is_multiplayer() const
{
return campaign_type == CAMPAIGN_TYPE::MULTIPLAYER;
}

bool is_test() const
{
return campaign_type == CAMPAIGN_TYPE::TEST;
}

bool is_tutorial() const
{
return campaign_type == CAMPAIGN_TYPE::TUTORIAL;
}
};
4 changes: 2 additions & 2 deletions src/game_config_manager.cpp
Expand Up @@ -668,9 +668,9 @@ void game_config_manager::load_game_config_for_game(
game_config::scoped_preproc_define era(classification.era_define,
!classification.era_define.empty());
game_config::scoped_preproc_define multiplayer("MULTIPLAYER",
classification.campaign_type == game_classification::CAMPAIGN_TYPE::MULTIPLAYER);
classification.is_multiplayer());
game_config::scoped_preproc_define mptest("MP_TEST", cmdline_opts_.mptest &&
classification.campaign_type == game_classification::CAMPAIGN_TYPE::MULTIPLAYER);
classification.is_multiplayer());

//
// NOTE: these deques aren't used here, but the objects within are utilized as RAII helpers.
Expand Down
2 changes: 1 addition & 1 deletion src/game_initialization/connect_engine.cpp
Expand Up @@ -904,7 +904,7 @@ side_engine::side_engine(const config& cfg, connect_engine& parent_engine, const
update_controller_options();

// Tweak the controllers.
if(parent_.state_.classification().campaign_type == game_classification::CAMPAIGN_TYPE::SCENARIO && cfg_["controller"].blank()) {
if(parent_.state_.classification().is_scenario() && cfg_["controller"].blank()) {
cfg_["controller"] = "ai";
}

Expand Down
13 changes: 6 additions & 7 deletions src/game_initialization/create_engine.cpp
Expand Up @@ -258,11 +258,10 @@ create_engine::create_engine(saved_game& state)
state_.clear();
state_.classification().campaign_type = type;

game_config_manager::get()->load_game_config_for_create(type == game_classification::CAMPAIGN_TYPE::MULTIPLAYER);
game_config_manager::get()->load_game_config_for_create(state_.classification().is_multiplayer());

// Initialize dependency_manager_ after refreshing game config.
dependency_manager_.reset(new depcheck::manager(
game_config_, type == game_classification::CAMPAIGN_TYPE::MULTIPLAYER));
dependency_manager_.reset(new depcheck::manager(game_config_, state_.classification().is_multiplayer()));

// TODO: the editor dir is already configurable, is the preferences value
filesystem::get_files_in_dir(filesystem::get_user_data_dir() + "/editor/maps", &user_map_names_,
Expand All @@ -279,7 +278,7 @@ create_engine::create_engine(saved_game& state)

state_.mp_settings().saved_game = mp_game_settings::SAVED_GAME_MODE::NONE;

for(const std::string& str : preferences::modifications(state_.classification().campaign_type == game_classification::CAMPAIGN_TYPE::MULTIPLAYER)) {
for(const std::string& str : preferences::modifications(state_.classification().is_multiplayer())) {
if(game_config_.find_child("modification", "id", str)) {
state_.classification().active_mods.push_back(str);
}
Expand Down Expand Up @@ -531,7 +530,7 @@ void create_engine::set_current_level(const std::size_t index)
generator_.reset(nullptr);
}

if(state_.classification().campaign_type == game_classification::CAMPAIGN_TYPE::MULTIPLAYER) {
if(state_.classification().is_multiplayer()) {
dependency_manager_->try_scenario(current_level().id());
}
}
Expand Down Expand Up @@ -733,7 +732,7 @@ void create_engine::init_all_levels()
}

const std::string& type = data["type"];
bool mp = state_.classification().campaign_type == game_classification::CAMPAIGN_TYPE::MULTIPLAYER;
const bool mp = state_.classification().is_multiplayer();

if(type == "mp" || (type == "hybrid" && mp)) {
type_map_[level::TYPE::CAMPAIGN].games.emplace_back(new campaign(data));
Expand Down Expand Up @@ -770,7 +769,7 @@ void create_engine::init_extras(const MP_EXTRA extra_type)
for(const config& extra : game_config_.child_range(extra_name))
{
ng::depcheck::component_availability type = extra["type"].to_enum(default_availabilty);
bool mp = state_.classification().campaign_type == game_classification::CAMPAIGN_TYPE::MULTIPLAYER;
const bool mp = state_.classification().is_multiplayer();

if((type != ng::depcheck::component_availability::MP || mp) && (type != ng::depcheck::component_availability::SP || !mp) )
{
Expand Down
12 changes: 4 additions & 8 deletions src/game_initialization/playcampaign.cpp
Expand Up @@ -93,9 +93,7 @@ void campaign_controller::show_carryover_message(
}
}

if(persistent_teams > 0 && ((has_next_scenario && end_level.proceed_to_next_level)||
state_.classification().campaign_type == game_classification::CAMPAIGN_TYPE::TEST))
{
if(persistent_teams > 0 && ((has_next_scenario && end_level.proceed_to_next_level) || state_.classification().is_test())) {
const gamemap& map = playcontroller.get_map_const();
const tod_manager& tod = playcontroller.get_tod_manager_const();

Expand Down Expand Up @@ -256,8 +254,6 @@ LEVEL_RESULT campaign_controller::play_game()

state_.expand_scenario();

game_classification::CAMPAIGN_TYPE game_type = state_.classification().campaign_type;

while(state_.valid()) {
LEVEL_RESULT res = LEVEL_RESULT::VICTORY;
end_level_data end_level;
Expand All @@ -276,7 +272,7 @@ LEVEL_RESULT campaign_controller::play_game()
state_.expand_mp_options();

#if !defined(ALWAYS_USE_MP_CONTROLLER)
if(game_type != game_classification::CAMPAIGN_TYPE::MULTIPLAYER || is_replay_) {
if(!state_.classification().is_multiplayer() || is_replay_) {
res = playsingle_scenario(end_level);
if(is_replay_) {
return res;
Expand Down Expand Up @@ -376,7 +372,7 @@ LEVEL_RESULT campaign_controller::play_game()

ng::connect_engine connect_engine(state_, false, mp_info_);

if(!connect_engine.can_start_game() || (game_config::debug && game_type == game_classification::CAMPAIGN_TYPE::MULTIPLAYER)) {
if(!connect_engine.can_start_game() || (game_config::debug && state_.classification().is_multiplayer())) {
// Opens staging dialog to allow users to make an adjustments for scenario.
if(!mp::goto_mp_connect(connect_engine, mp_info_ ? &mp_info_->connection : nullptr)) {
return LEVEL_RESULT::QUIT;
Expand Down Expand Up @@ -414,7 +410,7 @@ LEVEL_RESULT campaign_controller::play_game()
return LEVEL_RESULT::QUIT;
}

if(game_type == game_classification::CAMPAIGN_TYPE::SCENARIO) {
if(state_.classification().is_scenario()) {
if(preferences::delete_saves()) {
savegame::clean_saves(state_.classification().label);
}
Expand Down
2 changes: 1 addition & 1 deletion src/game_launcher.cpp
Expand Up @@ -727,7 +727,7 @@ bool game_launcher::load_game()
statistics::clear_current_scenario();
}

if(state_.classification().campaign_type == game_classification::CAMPAIGN_TYPE::MULTIPLAYER) {
if(state_.classification().is_multiplayer()) {
state_.unify_controllers();
}

Expand Down
2 changes: 1 addition & 1 deletion src/gui/dialogs/game_stats.cpp
Expand Up @@ -111,7 +111,7 @@ void game_stats::pre_show(window& window)
}

if(resources::controller) {
if(resources::controller->get_classification().campaign_type == game_classification::CAMPAIGN_TYPE::MULTIPLAYER) {
if(resources::controller->get_classification().is_multiplayer()) {
leader_name = team.side_name();
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/scripting/game_lua_kernel.cpp
Expand Up @@ -4282,7 +4282,7 @@ game_lua_kernel::game_lua_kernel(game_state & gs, play_controller & pc, reports
}
luaL_setfuncs(L, callbacks, 0);

if(play_controller_.get_classification().campaign_type == game_classification::CAMPAIGN_TYPE::TEST) {
if(play_controller_.get_classification().is_test()) {
static luaL_Reg const test_callbacks[] {
{ "fire_wml_menu_item", &dispatch<&game_lua_kernel::intf_fire_wml_menu_item > },
{ nullptr, nullptr }
Expand Down

0 comments on commit 4b12410

Please sign in to comment.