MP Create: bunch of WIP stuff

This commit is contained in:
Charles Dang 2016-08-16 01:10:20 +11:00
parent d2f528eec9
commit e31615b687
4 changed files with 131 additions and 96 deletions

View file

@ -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]

View file

@ -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);
}

View file

@ -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)

View file

@ -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: