MP Create: bunch of WIP stuff
This commit is contained in:
parent
d2f528eec9
commit
e31615b687
4 changed files with 131 additions and 96 deletions
|
@ -794,14 +794,12 @@
|
|||
[column]
|
||||
horizontal_grow = "true"
|
||||
vertical_grow = "true"
|
||||
#border = "all"
|
||||
#border_size = 5
|
||||
border = "all"
|
||||
border_size = 5
|
||||
|
||||
[image]
|
||||
id = "campaign_image"
|
||||
definition = "default"
|
||||
width = 250
|
||||
height = 250
|
||||
[/image]
|
||||
[/column]
|
||||
|
||||
|
|
|
@ -524,46 +524,46 @@ static void enter_create_mode(CVideo& video, const config& game_config,
|
|||
bool configure_canceled;
|
||||
bool connect_canceled;
|
||||
|
||||
if(gui2::new_widgets) {
|
||||
ng::create_engine create_eng(video, state);
|
||||
ng::configure_engine config_eng(state);
|
||||
|
||||
gui2::tmp_create_game dlg(game_config, create_eng, config_eng);
|
||||
|
||||
dlg.show(video);
|
||||
|
||||
if(wesnothd_connection) {
|
||||
wesnothd_connection->send_data(config("refresh_lobby"));
|
||||
}
|
||||
}
|
||||
|
||||
do {
|
||||
configure_canceled = false;
|
||||
connect_canceled = false;
|
||||
|
||||
if (gui2::new_widgets) {
|
||||
ng::create_engine create_eng(video, state);
|
||||
mp::ui::result res;
|
||||
|
||||
gui2::tmp_create_game dlg(game_config, create_eng);
|
||||
|
||||
dlg.show(video);
|
||||
{
|
||||
mp::create ui(video, wesnothd_connection, game_config, state, gamechat, gamelist);
|
||||
run_lobby_loop(video, ui);
|
||||
res = ui.get_result();
|
||||
ui.get_parameters();
|
||||
}
|
||||
|
||||
switch (res) {
|
||||
case mp::ui::CREATE:
|
||||
configure_canceled = !enter_configure_mode(video, game_config, state, wesnothd_connection, local_players_only);
|
||||
break;
|
||||
case mp::ui::LOAD_GAME:
|
||||
connect_canceled = !enter_connect_mode(video, game_config, state, wesnothd_connection, local_players_only);
|
||||
break;
|
||||
case mp::ui::QUIT:
|
||||
default:
|
||||
//update lobby content
|
||||
if (wesnothd_connection) {
|
||||
wesnothd_connection->send_data(config("refresh_lobby"));
|
||||
}
|
||||
} else {
|
||||
|
||||
mp::ui::result res;
|
||||
|
||||
{
|
||||
mp::create ui(video, wesnothd_connection, game_config, state, gamechat, gamelist);
|
||||
run_lobby_loop(video, ui);
|
||||
res = ui.get_result();
|
||||
ui.get_parameters();
|
||||
}
|
||||
|
||||
switch (res) {
|
||||
case mp::ui::CREATE:
|
||||
configure_canceled = !enter_configure_mode(video, game_config, state, wesnothd_connection, local_players_only);
|
||||
break;
|
||||
case mp::ui::LOAD_GAME:
|
||||
connect_canceled = !enter_connect_mode(video, game_config, state, wesnothd_connection, local_players_only);
|
||||
break;
|
||||
case mp::ui::QUIT:
|
||||
default:
|
||||
//update lobby content
|
||||
if (wesnothd_connection) {
|
||||
wesnothd_connection->send_data(config("refresh_lobby"));
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
} while(configure_canceled || connect_canceled);
|
||||
}
|
||||
|
|
|
@ -51,11 +51,12 @@ namespace gui2
|
|||
|
||||
REGISTER_DIALOG(mp_create_game)
|
||||
|
||||
tmp_create_game::tmp_create_game(const config& cfg, ng::create_engine& eng)
|
||||
tmp_create_game::tmp_create_game(const config& cfg, ng::create_engine& create_eng, ng::configure_engine& config_eng)
|
||||
: cfg_(cfg)
|
||||
, last_selected_level_(-1)
|
||||
, scenario_(nullptr)
|
||||
, engine_(eng)
|
||||
, create_engine_(create_eng)
|
||||
, config_engine_(new ng::configure_engine(create_engine_.get_state()))
|
||||
, use_map_settings_(register_bool("use_map_settings",
|
||||
true, preferences::use_map_settings, preferences::set_use_map_settings,
|
||||
dialog_callback<tmp_create_game, &tmp_create_game::update_map_settings>))
|
||||
|
@ -65,6 +66,9 @@ tmp_create_game::tmp_create_game(const config& cfg, ng::create_engine& eng)
|
|||
true, preferences::shroud, preferences::set_shroud))
|
||||
, start_time_(register_bool("random_start_time",
|
||||
true, preferences::random_start_time, preferences::set_random_start_time))
|
||||
, time_limit_(register_bool("time_limit",
|
||||
true, preferences::countdown, preferences::set_countdown,
|
||||
dialog_callback<tmp_create_game, &tmp_create_game::update_map_settings>))
|
||||
, turns_(register_integer("turn_count",
|
||||
true, preferences::turns, preferences::set_turns))
|
||||
, gold_(register_integer("village_gold",
|
||||
|
@ -73,7 +77,14 @@ tmp_create_game::tmp_create_game(const config& cfg, ng::create_engine& eng)
|
|||
false, preferences::village_support, preferences::set_village_support))
|
||||
, experience_(register_integer("experience_modifier",
|
||||
true, preferences::xp_modifier, preferences::set_xp_modifier))
|
||||
//, options_manager_()
|
||||
, init_turn_limit(register_integer("init_turn_limit",
|
||||
true, preferences::countdown_init_time, preferences::set_countdown_init_time))
|
||||
, turn_bonus_(register_integer("turn_bonus",
|
||||
true, preferences::countdown_turn_bonus, preferences::set_countdown_turn_bonus))
|
||||
, reservior_(register_integer("reservior",
|
||||
true, preferences::countdown_reservoir_time, preferences::set_countdown_reservoir_time))
|
||||
, action_bonus_(register_integer("action_bonus",
|
||||
true, preferences::countdown_action_bonus, preferences::set_countdown_action_bonus))
|
||||
{
|
||||
level_types_ = {
|
||||
{ng::level::TYPE::SCENARIO, _("Scenarios")},
|
||||
|
@ -86,6 +97,8 @@ tmp_create_game::tmp_create_game(const config& cfg, ng::create_engine& eng)
|
|||
if(game_config::debug) {
|
||||
level_types_.push_back({ng::level::TYPE::SP_CAMPAIGN, _("SP Campaigns")});
|
||||
}
|
||||
|
||||
config_engine_->set_default_values();
|
||||
}
|
||||
|
||||
void tmp_create_game::pre_show(twindow& window)
|
||||
|
@ -118,7 +131,7 @@ void tmp_create_game::pre_show(twindow& window)
|
|||
std::vector<std::string> game_types;
|
||||
|
||||
for(level_type_info& type_info : level_types_) {
|
||||
if(!engine_.get_levels_by_type_unfiltered(type_info.first).empty()) {
|
||||
if(!create_engine_.get_levels_by_type_unfiltered(type_info.first).empty()) {
|
||||
game_types.push_back(type_info.second);
|
||||
}
|
||||
}
|
||||
|
@ -138,7 +151,7 @@ void tmp_create_game::pre_show(twindow& window)
|
|||
//
|
||||
tcombobox& eras_combobox = find_widget<tcombobox>(&window, "eras", false);
|
||||
|
||||
const std::vector<std::string>& era_names = engine_.extras_menu_item_names(ng::create_engine::ERA, false);
|
||||
const std::vector<std::string>& era_names = create_engine_.extras_menu_item_names(ng::create_engine::ERA, false);
|
||||
if(era_names.empty()) {
|
||||
gui2::show_transient_message(window.video(), "", _("No eras found."));
|
||||
throw config::error(_("No eras found"));
|
||||
|
@ -152,8 +165,8 @@ void tmp_create_game::pre_show(twindow& window)
|
|||
//
|
||||
tlistbox& mod_list = find_widget<tlistbox>(&window, "mod_list", false);
|
||||
|
||||
//std::vector<std::string> mods = engine_.extras_menu_item_names(ng::create_engine::MOD, false);
|
||||
for(const auto& mod : engine_.get_const_extras_by_type(ng::create_engine::MOD)) {
|
||||
//std::vector<std::string> mods = create_engine_.extras_menu_item_names(ng::create_engine::MOD, false);
|
||||
for(const auto& mod : create_engine_.get_const_extras_by_type(ng::create_engine::MOD)) {
|
||||
std::map<std::string, string_map> data;
|
||||
string_map item;
|
||||
|
||||
|
@ -241,13 +254,13 @@ void tmp_create_game::update_games_list(twindow& window)
|
|||
|
||||
void tmp_create_game::display_games_of_type(twindow& window, ng::level::TYPE type)
|
||||
{
|
||||
engine_.set_current_level_type(type);
|
||||
create_engine_.set_current_level_type(type);
|
||||
|
||||
tlistbox& list = find_widget<tlistbox>(&window, "games_list", false);
|
||||
|
||||
list.clear();
|
||||
|
||||
for(const auto& game : engine_.get_levels_by_type(type)) {
|
||||
for(const auto& game : create_engine_.get_levels_by_type(type)) {
|
||||
if(!game.get()->can_launch_game()) {
|
||||
continue;
|
||||
}
|
||||
|
@ -265,7 +278,6 @@ void tmp_create_game::display_games_of_type(twindow& window, ng::level::TYPE typ
|
|||
data.emplace("game_icon", item);*/
|
||||
|
||||
item["label"] = game.get()->name();
|
||||
item["use_markup"] = "true";
|
||||
data.emplace("game_name", item);
|
||||
|
||||
list.add_row(data);
|
||||
|
@ -282,18 +294,18 @@ void tmp_create_game::display_games_of_type(twindow& window, ng::level::TYPE typ
|
|||
|
||||
void tmp_create_game::on_mod_select(twindow& window)
|
||||
{
|
||||
engine_.set_current_mod_index(find_widget<tlistbox>(&window, "mod_list", false).get_selected_row());
|
||||
create_engine_.set_current_mod_index(find_widget<tlistbox>(&window, "mod_list", false).get_selected_row());
|
||||
|
||||
find_widget<tcontrol>(&window, "description", false).set_label(
|
||||
engine_.current_extra(ng::create_engine::MOD).description);
|
||||
create_engine_.current_extra(ng::create_engine::MOD).description);
|
||||
}
|
||||
|
||||
void tmp_create_game::on_era_select(twindow& window)
|
||||
{
|
||||
engine_.set_current_era_index(find_widget<tcombobox>(&window, "eras", false).get_value());
|
||||
create_engine_.set_current_era_index(find_widget<tcombobox>(&window, "eras", false).get_value());
|
||||
|
||||
find_widget<tcontrol>(&window, "description", false).set_label(
|
||||
engine_.current_extra(ng::create_engine::ERA).description);
|
||||
create_engine_.current_extra(ng::create_engine::ERA).description);
|
||||
}
|
||||
|
||||
void tmp_create_game::update_options_list(twindow& window)
|
||||
|
@ -398,19 +410,19 @@ void tmp_create_game::update_options_list(twindow& window)
|
|||
|
||||
void tmp_create_game::show_generator_settings(twindow& window)
|
||||
{
|
||||
engine_.generator_user_config(window.video());
|
||||
create_engine_.generator_user_config(window.video());
|
||||
}
|
||||
|
||||
void tmp_create_game::regenerate_random_map(twindow& window)
|
||||
{
|
||||
engine_.init_generated_level_data();
|
||||
create_engine_.init_generated_level_data();
|
||||
|
||||
update_details(window);
|
||||
}
|
||||
|
||||
void tmp_create_game::update_details(twindow& window)
|
||||
{
|
||||
|
||||
|
||||
tcontrol& description = find_widget<tcontrol>(&window, "description", false);
|
||||
tcontrol& players = find_widget<tcontrol>(&window, "map_num_players", false);
|
||||
tcontrol& map_size = find_widget<tcontrol>(&window, "map_size", false);
|
||||
|
@ -418,32 +430,42 @@ void tmp_create_game::update_details(twindow& window)
|
|||
const int index = find_widget<tlistbox>(&window, "games_list", false)
|
||||
.get_selected_row();
|
||||
|
||||
engine_.set_current_level(index);
|
||||
create_engine_.set_current_level(index);
|
||||
|
||||
engine_.current_level().set_metadata();
|
||||
create_engine_.current_level().set_metadata();
|
||||
|
||||
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()));
|
||||
|
||||
// TODO: display a message?
|
||||
find_widget<tcombobox>(&window, "eras", false).set_active(engine_.current_level().allow_era_choice());
|
||||
if(tcombobox* eras = find_widget<tcombobox>(&window, "eras", false, false)) {
|
||||
eras->set_active(create_engine_.current_level().allow_era_choice());
|
||||
}
|
||||
|
||||
// TODO: remove this
|
||||
//scenario_ = &cfg_.child("multiplayer", index);
|
||||
|
||||
// If the current random map doesn't have data, generate it
|
||||
if(engine_.current_level_type() == ng::level::TYPE::RANDOM_MAP) {
|
||||
if(engine_.generator_assigned() && engine_.current_level().data()["map_data"].empty()) {
|
||||
engine_.init_generated_level_data();
|
||||
if(create_engine_.current_level_type() == ng::level::TYPE::RANDOM_MAP) {
|
||||
if(create_engine_.generator_assigned() && create_engine_.current_level().data()["map_data"].empty()) {
|
||||
create_engine_.init_generated_level_data();
|
||||
}
|
||||
}
|
||||
|
||||
description.set_label(engine_.current_level().description());
|
||||
description.set_label(create_engine_.current_level().description());
|
||||
description.set_use_markup(true);
|
||||
|
||||
switch(engine_.current_level_type().v) {
|
||||
switch(create_engine_.current_level_type().v) {
|
||||
case ng::level::TYPE::SCENARIO:
|
||||
case ng::level::TYPE::USER_MAP:
|
||||
case ng::level::TYPE::USER_SCENARIO:
|
||||
case ng::level::TYPE::RANDOM_MAP: {
|
||||
ng::scenario* current_scenario = dynamic_cast<ng::scenario*>(&engine_.current_level());
|
||||
ng::scenario* current_scenario = dynamic_cast<ng::scenario*>(&create_engine_.current_level());
|
||||
|
||||
assert(current_scenario);
|
||||
|
||||
|
@ -457,14 +479,14 @@ void tmp_create_game::update_details(twindow& window)
|
|||
}
|
||||
case ng::level::TYPE::CAMPAIGN:
|
||||
case ng::level::TYPE::SP_CAMPAIGN: {
|
||||
ng::campaign* current_campaign = dynamic_cast<ng::campaign*>(&engine_.current_level());
|
||||
ng::campaign* current_campaign = dynamic_cast<ng::campaign*>(&create_engine_.current_level());
|
||||
|
||||
assert(current_campaign);
|
||||
|
||||
//const std::string image = formatter() << current_campaign->data()["image"] << "~SCALE(250,250)";
|
||||
const std::string image = formatter() << current_campaign->data()["image"] << "~SCALE(240,240)";
|
||||
|
||||
find_widget<tstacked_widget>(&window, "minimap_stack", false).select_layer(1);
|
||||
find_widget<timage>(&window, "campaign_image", false).set_label(current_campaign->data()["image"]);
|
||||
find_widget<timage>(&window, "campaign_image", false).set_label(image);
|
||||
|
||||
std::stringstream players_str;
|
||||
players_str << current_campaign->min_players();
|
||||
|
@ -488,42 +510,55 @@ void tmp_create_game::update_map_settings(twindow& window)
|
|||
{
|
||||
const bool use_map_settings = use_map_settings_->get_widget_value(window);
|
||||
|
||||
fog_->widget_set_enabled(window, !use_map_settings, false);
|
||||
shroud_->widget_set_enabled(window, !use_map_settings, false);
|
||||
start_time_->widget_set_enabled(window, !use_map_settings, false);
|
||||
config_engine_->set_use_map_settings(use_map_settings);
|
||||
|
||||
turns_->widget_set_enabled(window, !use_map_settings, false);
|
||||
gold_->widget_set_enabled(window, !use_map_settings, false);
|
||||
support_->widget_set_enabled(window, !use_map_settings, false);
|
||||
experience_->widget_set_enabled(window, !use_map_settings, false);
|
||||
fog_ ->widget_set_enabled(window, !use_map_settings, false);
|
||||
shroud_ ->widget_set_enabled(window, !use_map_settings, false);
|
||||
start_time_ ->widget_set_enabled(window, !use_map_settings, false);
|
||||
|
||||
turns_ ->widget_set_enabled(window, !use_map_settings, false);
|
||||
gold_ ->widget_set_enabled(window, !use_map_settings, false);
|
||||
support_ ->widget_set_enabled(window, !use_map_settings, false);
|
||||
experience_ ->widget_set_enabled(window, !use_map_settings, false);
|
||||
|
||||
const bool time_limit = time_limit_->get_widget_value(window);
|
||||
|
||||
init_turn_limit ->widget_set_enabled(window, time_limit, false);
|
||||
turn_bonus_ ->widget_set_enabled(window, time_limit, false);
|
||||
reservior_ ->widget_set_enabled(window, time_limit, false);
|
||||
action_bonus_ ->widget_set_enabled(window, time_limit, false);
|
||||
|
||||
std::cerr << "turns is " << config_engine_->num_turns_default() << std::endl;
|
||||
|
||||
if(use_map_settings) {
|
||||
if(scenario_) {
|
||||
const config& side = scenario_->child("side");
|
||||
//if(scenario_) {
|
||||
//config& side = scenario_->child("side");
|
||||
//const config& side = create_engine_.current_level().data().child("side");
|
||||
|
||||
fog_->set_widget_value(window, side["fog"].to_bool(true));
|
||||
shroud_->set_widget_value(window, side["shroud"].to_bool(false));
|
||||
start_time_->set_widget_value(window, (*scenario_)["random_start_time"].to_bool(true));
|
||||
fog_ ->set_widget_value(window, config_engine_->fog_game_default());
|
||||
shroud_ ->set_widget_value(window, config_engine_->shroud_game_default());
|
||||
start_time_->set_widget_value(window, config_engine_->random_start_time_default());
|
||||
|
||||
turns_->set_widget_value(window, ::settings::get_turns((*scenario_)["turns"].str()));
|
||||
gold_->set_widget_value(window, ::settings::get_village_gold(side["village_gold"].str()));
|
||||
support_->set_widget_value(window,::settings::get_village_support(side["village_support"].str()));
|
||||
experience_->set_widget_value(window,::settings::get_xp_modifier((*scenario_)["experience_modifier"].str()));
|
||||
}
|
||||
turns_ ->set_widget_value(window, config_engine_->num_turns_default());
|
||||
gold_ ->set_widget_value(window, config_engine_->village_gold_default());
|
||||
support_ ->set_widget_value(window, config_engine_->village_support_default());
|
||||
experience_->set_widget_value(window, config_engine_->xp_modifier_default());
|
||||
//}
|
||||
// No scenario selected just leave the state unchanged for now.
|
||||
|
||||
} else {
|
||||
}
|
||||
//else {
|
||||
|
||||
// Fixme we should store the value and reuse it later...
|
||||
fog_->set_widget_value(window, preferences::fog());
|
||||
shroud_->set_widget_value(window, preferences::shroud());
|
||||
start_time_->set_widget_value(window, preferences::random_start_time());
|
||||
// fog_->set_widget_value(window, preferences::fog());
|
||||
//// shroud_->set_widget_value(window, preferences::shroud());
|
||||
// start_time_->set_widget_value(window, preferences::random_start_time());
|
||||
|
||||
turns_->set_widget_value(window, preferences::turns());
|
||||
gold_->set_widget_value(window, preferences::village_gold());
|
||||
support_->set_widget_value(window, preferences::village_support());
|
||||
experience_->set_widget_value(window, preferences::xp_modifier());
|
||||
}
|
||||
// turns_->set_widget_value(window, preferences::turns());
|
||||
// gold_->set_widget_value(window, preferences::village_gold());
|
||||
// support_->set_widget_value(window, preferences::village_support());
|
||||
/// experience_->set_widget_value(window, preferences::xp_modifier());
|
||||
//}
|
||||
}
|
||||
|
||||
void tmp_create_game::post_show(twindow& window)
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
#include "gui/dialogs/dialog.hpp"
|
||||
|
||||
#include "game_initialization/create_engine.hpp"
|
||||
#include "game_initialization/configure_engine.hpp"
|
||||
#include "game_initialization/mp_options.hpp"
|
||||
|
||||
class config;
|
||||
|
@ -30,7 +31,7 @@ class tmp_create_game : public tdialog
|
|||
typedef std::pair<ng::level::TYPE, std::string> level_type_info;
|
||||
|
||||
public:
|
||||
explicit tmp_create_game(const config& cfg, ng::create_engine& eng);
|
||||
tmp_create_game(const config& cfg, ng::create_engine& create_eng, ng::configure_engine& config_eng);
|
||||
|
||||
private:
|
||||
/** Inherited from tdialog, implemented by REGISTER_DIALOG. */
|
||||
|
@ -48,12 +49,13 @@ private:
|
|||
|
||||
const config* scenario_;
|
||||
|
||||
ng::create_engine& engine_;
|
||||
ng::create_engine& create_engine_;
|
||||
std::unique_ptr<ng::configure_engine> config_engine_;
|
||||
|
||||
//mp::options::manager options_manager_;
|
||||
|
||||
std::vector<level_type_info> level_types_;
|
||||
|
||||
|
||||
void update_games_list(twindow& window);
|
||||
void display_games_of_type(twindow& window, ng::level::TYPE type);
|
||||
|
||||
|
@ -65,9 +67,9 @@ private:
|
|||
* manually controlled as well so add the pointers here as well.
|
||||
*/
|
||||
|
||||
tfield_bool* use_map_settings_, *fog_, *shroud_, *start_time_;
|
||||
tfield_bool* use_map_settings_, *fog_, *shroud_, *start_time_, *time_limit_;
|
||||
|
||||
tfield_integer* turns_, *gold_, *support_, *experience_;
|
||||
tfield_integer* turns_, *gold_, *support_, *experience_, *init_turn_limit, *turn_bonus_, *reservior_, *action_bonus_;
|
||||
|
||||
void on_game_select(twindow& window);
|
||||
|
||||
|
@ -75,7 +77,7 @@ private:
|
|||
|
||||
void on_mod_select(twindow& window);
|
||||
void on_era_select(twindow& window);
|
||||
|
||||
|
||||
void update_options_list(twindow& window);
|
||||
|
||||
public:
|
||||
|
|
Loading…
Add table
Reference in a new issue