gui2 mp create improvements
This fixes the loadingscreen showing in that dialog. This fixed the gui1 create screen showing after the gui2 create screen, im particular the gui2 create screen can now be used to start mp scenarios (but not all configure options work correctly yet)
This commit is contained in:
parent
b4a98cdc84
commit
f264b6cddc
4 changed files with 82 additions and 39 deletions
|
@ -11,19 +11,11 @@
|
|||
|
||||
namespace ng {
|
||||
|
||||
configure_engine::configure_engine(saved_game& state) :
|
||||
state_(state),
|
||||
parameters_(state_.mp_settings()),
|
||||
side_cfg_(state_.get_starting_pos().child_or_empty("side"))
|
||||
configure_engine::configure_engine(saved_game& state, const config* intial)
|
||||
: state_(state)
|
||||
, parameters_(state_.mp_settings())
|
||||
, initial_(intial ? intial : &state_.get_starting_pos())
|
||||
{
|
||||
if (!state_.get_starting_pos().has_child("side")) {
|
||||
std::stringstream msg;
|
||||
msg << "Configure Engine: No sides found in scenario, aborting.";
|
||||
std::cerr << msg.str();
|
||||
std::cerr << "Full scenario config:\n";
|
||||
std::cerr << state_.to_config().debug();
|
||||
throw game::error(msg.str());
|
||||
}
|
||||
|
||||
set_use_map_settings(use_map_settings_default());
|
||||
if(state_.classification().get_tagname() == "scenario") {
|
||||
|
@ -42,11 +34,6 @@ configure_engine::configure_engine(saved_game& state) :
|
|||
}
|
||||
}
|
||||
|
||||
void configure_engine::update_side_cfg()
|
||||
{
|
||||
side_cfg_ = state_.get_starting_pos().child_or_empty("side");
|
||||
}
|
||||
|
||||
void configure_engine::set_default_values() {
|
||||
set_use_map_settings(use_map_settings_default());
|
||||
set_game_name(game_name_default());
|
||||
|
@ -65,7 +52,7 @@ void configure_engine::set_default_values() {
|
|||
}
|
||||
|
||||
bool configure_engine::force_lock_settings() const {
|
||||
return state_.get_starting_pos()["force_lock_settings"].to_bool(!state_.classification().is_normal_mp_game());
|
||||
return initial_cfg()["force_lock_settings"].to_bool(!state_.classification().is_normal_mp_game());
|
||||
}
|
||||
|
||||
std::string configure_engine::game_name() const { return parameters_.name; }
|
||||
|
@ -133,22 +120,22 @@ std::string configure_engine::game_name_default() const {
|
|||
}
|
||||
int configure_engine::num_turns_default() const {
|
||||
return use_map_settings() ?
|
||||
settings::get_turns(state_.get_starting_pos()["turns"]) :
|
||||
settings::get_turns(initial_cfg()["turns"]) :
|
||||
preferences::turns();
|
||||
}
|
||||
int configure_engine::village_gold_default() const {
|
||||
return use_map_settings() && !side_cfg_.empty() ?
|
||||
settings::get_village_gold(side_cfg_["village_gold"], &state_.classification()) :
|
||||
return use_map_settings() && !side_cfg().empty() ?
|
||||
settings::get_village_gold(side_cfg()["village_gold"], &state_.classification()) :
|
||||
preferences::village_gold();
|
||||
}
|
||||
int configure_engine::village_support_default() const {
|
||||
return use_map_settings() && !side_cfg_.empty() ?
|
||||
settings::get_village_support(side_cfg_["village_support"]) :
|
||||
return use_map_settings() && !side_cfg().empty() ?
|
||||
settings::get_village_support(side_cfg()["village_support"]) :
|
||||
preferences::village_support();
|
||||
}
|
||||
int configure_engine::xp_modifier_default() const {
|
||||
return use_map_settings() ?
|
||||
settings::get_xp_modifier(state_.get_starting_pos()["experience_modifier"]) :
|
||||
settings::get_xp_modifier(initial_cfg()["experience_modifier"]) :
|
||||
preferences::xp_modifier();
|
||||
}
|
||||
int configure_engine::mp_countdown_init_time_default() const {
|
||||
|
@ -171,17 +158,17 @@ bool configure_engine::use_map_settings_default() const {
|
|||
}
|
||||
bool configure_engine::random_start_time_default() const {
|
||||
return use_map_settings() ?
|
||||
state_.get_starting_pos()["random_start_time"].to_bool(false) :
|
||||
initial_cfg()["random_start_time"].to_bool(false) :
|
||||
preferences::random_start_time();
|
||||
}
|
||||
bool configure_engine::fog_game_default() const {
|
||||
return use_map_settings() && !side_cfg_.empty() ?
|
||||
side_cfg_["fog"].to_bool(state_.classification().is_normal_mp_game()) :
|
||||
return use_map_settings() && !side_cfg().empty() ?
|
||||
side_cfg()["fog"].to_bool(state_.classification().is_normal_mp_game()) :
|
||||
preferences::fog();
|
||||
}
|
||||
bool configure_engine::shroud_game_default() const {
|
||||
return use_map_settings() && !side_cfg_.empty() ?
|
||||
side_cfg_["shroud"].to_bool(false) :
|
||||
return use_map_settings() && !side_cfg().empty() ?
|
||||
side_cfg()["shroud"].to_bool(false) :
|
||||
preferences::shroud();
|
||||
}
|
||||
bool configure_engine::allow_observers_default() const {
|
||||
|
|
|
@ -31,7 +31,7 @@ namespace ng {
|
|||
class configure_engine
|
||||
{
|
||||
public:
|
||||
configure_engine(saved_game& state);
|
||||
configure_engine(saved_game& state, const config* intial = nullptr);
|
||||
|
||||
// Set all parameters to their default values
|
||||
void set_default_values();
|
||||
|
@ -112,10 +112,15 @@ public:
|
|||
const std::vector<std::string>& entry_point_titles() const;
|
||||
void write_parameters();
|
||||
|
||||
void update_side_cfg();
|
||||
void update_initial_cfg(const config& cfg)
|
||||
{
|
||||
initial_ = &cfg;
|
||||
}
|
||||
private:
|
||||
saved_game& state_;
|
||||
mp_game_settings& parameters_;
|
||||
/// Never nullptr.
|
||||
const config* initial_;
|
||||
// village gold, village support, fog, and shroud are per player, always show values of player 1.
|
||||
/**
|
||||
* @todo This might not be 100% correct, but at the moment
|
||||
|
@ -123,8 +128,15 @@ private:
|
|||
* This might change in the future.
|
||||
* NOTE when 'load game' is selected there are no sides.
|
||||
*/
|
||||
config side_cfg_;
|
||||
|
||||
const config& side_cfg() const
|
||||
{
|
||||
return initial_->child_or_empty("side");
|
||||
}
|
||||
const config& initial_cfg() const
|
||||
{
|
||||
return *initial_;
|
||||
}
|
||||
|
||||
std::vector<const config*> entry_points_;
|
||||
|
||||
std::vector<std::string> entry_point_titles_;
|
||||
|
|
|
@ -534,6 +534,8 @@ static void enter_create_mode(CVideo& video, const config& game_config,
|
|||
if(wesnothd_connection) {
|
||||
wesnothd_connection->send_data(config("refresh_lobby"));
|
||||
}
|
||||
enter_connect_mode(video, game_config, state, wesnothd_connection, local_players_only);
|
||||
return;
|
||||
}
|
||||
|
||||
do {
|
||||
|
|
|
@ -103,6 +103,9 @@ tmp_create_game::tmp_create_game(const config& cfg, ng::create_engine& create_en
|
|||
return create_engine_.get_levels_by_type_unfiltered(type_info.first).empty();
|
||||
}), level_types_.end());
|
||||
|
||||
create_engine_.get_state() = saved_game();
|
||||
create_engine_.get_state().classification().campaign_type = game_classification::CAMPAIGN_TYPE::MULTIPLAYER;
|
||||
|
||||
}
|
||||
|
||||
void tmp_create_game::pre_show(twindow& window)
|
||||
|
@ -436,16 +439,13 @@ void tmp_create_game::update_details(twindow& window)
|
|||
|
||||
create_engine_.current_level().set_metadata();
|
||||
|
||||
create_engine_.get_state() = saved_game();
|
||||
create_engine_.get_state().classification().campaign_type = game_classification::CAMPAIGN_TYPE::MULTIPLAYER;
|
||||
|
||||
create_engine_.prepare_for_scenario();
|
||||
create_engine_.prepare_for_new_level();
|
||||
//create_engine_.prepare_for_scenario();
|
||||
//create_engine_.prepare_for_new_level();
|
||||
//create_engine_.get_parameters();
|
||||
|
||||
//config_engine_.write_parameters();
|
||||
//config_engine_->update_side_cfg();
|
||||
config_engine_.reset(new ng::configure_engine(create_engine_.get_state()));
|
||||
config_engine_->update_initial_cfg(create_engine_.current_level().data());
|
||||
config_engine_->set_default_values();
|
||||
// TODO: display a message?
|
||||
if(tcombobox* eras = find_widget<tcombobox>(&window, "eras", false, false)) {
|
||||
|
@ -570,6 +570,48 @@ void tmp_create_game::post_show(twindow& window)
|
|||
{
|
||||
if(get_retval() == twindow::OK) {
|
||||
find_widget<tlistbox>(&window, "games_list", false);
|
||||
|
||||
|
||||
create_engine_.prepare_for_era_and_mods();
|
||||
|
||||
if (create_engine_.current_level_type() == ng::level::TYPE::CAMPAIGN ||
|
||||
create_engine_.current_level_type() == ng::level::TYPE::SP_CAMPAIGN) {
|
||||
|
||||
std::string difficulty = create_engine_.select_campaign_difficulty();
|
||||
if (difficulty == "CANCEL") {
|
||||
return;
|
||||
}
|
||||
|
||||
create_engine_.prepare_for_campaign(difficulty);
|
||||
}
|
||||
else if (create_engine_.current_level_type() == ng::level::TYPE::SCENARIO)
|
||||
{
|
||||
create_engine_.prepare_for_scenario();
|
||||
}
|
||||
else
|
||||
{
|
||||
//This means define= doesn't work for random generated scenarios
|
||||
create_engine_.prepare_for_other();
|
||||
}
|
||||
|
||||
create_engine_.prepare_for_new_level();
|
||||
|
||||
create_engine_.prepare_for_scenario();
|
||||
create_engine_.prepare_for_new_level();
|
||||
create_engine_.get_parameters();
|
||||
if (!config_engine_->force_lock_settings())
|
||||
{
|
||||
//config_engine_->set_use_map_settings(fog_->get_widget_value());
|
||||
config_engine_->set_num_turns(turns_->get_widget_value(window));
|
||||
config_engine_->set_village_gold(gold_->get_widget_value(window));
|
||||
config_engine_->set_village_support(support_->get_widget_value(window));
|
||||
config_engine_->set_xp_modifier(experience_->get_widget_value(window));
|
||||
config_engine_->set_random_start_time(start_time_->get_widget_value(window));
|
||||
config_engine_->set_fog_game(fog_->get_widget_value(window));
|
||||
config_engine_->set_shroud_game(shroud_->get_widget_value(window));
|
||||
config_engine_->write_parameters();
|
||||
}
|
||||
//config_engine_->set_options(cfg);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue