Editor: move editor side info into a struct to avoid huge parameter lists

This commit is contained in:
Charles Dang 2016-09-04 11:04:16 +11:00
parent 357cbfe35a
commit 6c63762385
5 changed files with 75 additions and 115 deletions

View file

@ -214,33 +214,14 @@ void context_manager::edit_side_dialog(int side)
//TODO
//t.support()
team::CONTROLLER controller = t.controller();
// TODO: @celticminstrel: the side parameter passed here is then used to access
// the team by index in set_side_setup. In teditor_edit_side, it's displayed as
// a side number, as as such is shown +1. Just a note for the team index refactor
// branch.
editor_team_info team_info(t, side);
std::string user_team_name = t.user_team_name();
std::string team_name = t.team_name();
int gold = t.gold();
int income = t.base_income();
int village_gold = t.village_gold();
int village_support = t.village_support();
bool no_leader = t.no_leader();
bool hidden = t.hidden();
bool fog = t.uses_fog();
bool shroud = t.uses_shroud();
team::SHARE_VISION share_vision = t.share_vision();
bool ok = gui2::teditor_edit_side::execute(side +1, team_name, user_team_name,
gold, income, village_gold, village_support,
fog, shroud, share_vision,
controller, no_leader, hidden,
gui_.video());
if (ok) {
get_map_context().set_side_setup(side, team_name, user_team_name,
gold, income, village_gold, village_support,
fog, shroud, share_vision, controller, hidden, no_leader);
if(gui2::teditor_edit_side::execute(team_info, gui_.video())) {
get_map_context().set_side_setup(team_info);
}
}

View file

@ -40,6 +40,23 @@
namespace editor {
editor_team_info::editor_team_info(const team& t, const int side)
: side(side)
, id(t.team_name())
, name(t.user_team_name())
, gold(t.gold())
, income(t.base_income())
, village_income(t.village_gold())
, village_support(t.village_support())
, fog(t.uses_fog())
, shroud(t.uses_shroud())
, share_vision(t.share_vision())
, controller(t.controller())
, no_leader(t.no_leader())
, hidden(t.hidden())
{
}
const size_t map_context::max_action_stack_size_ = 100;
map_context::map_context(const editor_map& map, const display& disp, bool pure_map, const config& schedule)
@ -200,26 +217,23 @@ map_context::map_context(const config& game_config, const std::string& filename,
add_to_recent_files();
}
void map_context::set_side_setup(int side, const std::string& team_name, const std::string& user_team_name,
int gold, int income, int village_gold, int village_support,
bool fog, bool shroud, team::SHARE_VISION share_vision,
team::CONTROLLER controller, bool hidden, bool no_leader)
void map_context::set_side_setup(editor_team_info& info)
{
assert(teams_.size() > static_cast<unsigned int>(side));
team& t = teams_[side];
assert(teams_.size() > static_cast<unsigned int>(info.side));
team& t = teams_[info.side];
// t.set_save_id(id);
// t.set_name(name);
t.change_team(team_name, user_team_name);
t.have_leader(!no_leader);
t.change_controller(controller);
t.set_gold(gold);
t.set_base_income(income);
t.set_hidden(hidden);
t.set_fog(fog);
t.set_shroud(shroud);
t.set_share_vision(share_vision);
t.set_village_gold(village_gold);
t.set_village_support(village_support);
t.change_team(info.id, info.name);
t.have_leader(!info.no_leader);
t.change_controller(info.controller);
t.set_gold(info.gold);
t.set_base_income(info.income);
t.set_hidden(info.hidden);
t.set_fog(info.fog);
t.set_shroud(info.shroud);
t.set_share_vision(info.share_vision);
t.set_village_gold(info.village_income);
t.set_village_support(info.village_support);
actions_since_save_++;
}

View file

@ -30,6 +30,24 @@
namespace editor {
struct editor_team_info {
editor_team_info(const team& t, const int side);
int side;
std::string id;
std::string name;
int gold;
int income;
int village_income;
int village_support;
bool fog;
bool shroud;
team::SHARE_VISION share_vision;
team::CONTROLLER controller;
bool no_leader;
bool hidden;
};
/**
* This class wraps around a map to provide a concise interface for the editor to work with.
* The actual map object can change rapidly (be assigned to), the map context persists
@ -242,10 +260,7 @@ public:
/**
* TODO
*/
void set_side_setup(int side, const std::string& id, const std::string& name,
int gold, int income, int village_gold, int village_support,
bool fog, bool shroud, team::SHARE_VISION share_vision,
team::CONTROLLER controller, bool hidden, bool no_leader);
void set_side_setup(editor_team_info& info);
/**
* Getter for the labels reset flag. Set when the labels need to be refreshed.

View file

@ -50,40 +50,26 @@ namespace gui2
REGISTER_DIALOG(editor_edit_side)
teditor_edit_side::teditor_edit_side(int side,
std::string& id,
std::string& name,
int& gold,
int& income,
int& village_income,
int& village_support,
bool& fog,
bool& shroud,
team::SHARE_VISION& share_vision,
team::CONTROLLER& controller,
bool& no_leader,
bool& hidden)
: controller_(controller)
, share_vision_(share_vision)
teditor_edit_side::teditor_edit_side(editor::editor_team_info& info)
: controller_(info.controller)
, share_vision_(info.share_vision)
{
std::stringstream side_stream;
side_stream << side;
register_label("side_number", true, side_stream.str(), true);
register_label("side_number", true, std::to_string(info.side + 1), true);
register_text("team_name", true, id, true);
register_text("user_team_name", true, name, true);
register_text("team_name", true, info.id, true);
register_text("user_team_name", true, info.name, true);
register_integer("gold", true, gold);
register_integer("income", true, income);
register_integer("gold", true, info.gold);
register_integer("income", true, info.income);
register_integer("village_income", true, village_income);
register_integer("village_support", true, village_support);
register_integer("village_income", true, info.village_income);
register_integer("village_support", true, info.village_support);
register_bool("fog", true, fog);
register_bool("shroud", true, shroud);
register_bool("fog", true, info.fog);
register_bool("shroud", true, info.shroud);
register_bool("no_leader", true, no_leader);
register_bool("hidden", true, hidden);
register_bool("no_leader", true, info.no_leader);
register_bool("hidden", true, info.hidden);
}
void teditor_edit_side::pre_show(twindow& window)

View file

@ -15,6 +15,7 @@
#ifndef GUI_DIALOGS_EDITOR_EDIT_SIDE_HPP_INCLUDED
#define GUI_DIALOGS_EDITOR_EDIT_SIDE_HPP_INCLUDED
#include "editor/map/map_context.hpp"
#include "gui/dialogs/dialog.hpp"
#include "gui/widgets/group.hpp"
#include "team.hpp"
@ -27,49 +28,12 @@ class ttoggle_button;
class teditor_edit_side : public tdialog
{
public:
teditor_edit_side(int side,
std::string& team_name,
std::string& user_team_name,
int& gold,
int& income,
int& village_income,
int& village_support,
bool& fog,
bool& shroud,
team::SHARE_VISION& share_vision,
team::CONTROLLER& controller,
bool& no_leader,
bool& hidden);
explicit teditor_edit_side(editor::editor_team_info& info);
/** The execute function see @ref tdialog for more information. */
static bool execute(int side,
std::string& team_name,
std::string& user_team_name,
int& gold,
int& income,
int& village_income,
int& village_support,
bool& fog,
bool& shroud,
team::SHARE_VISION& share_vision,
team::CONTROLLER& controller,
bool& no_leader,
bool& hidden,
CVideo& video)
static bool execute(editor::editor_team_info& info, CVideo& video)
{
return teditor_edit_side(side,
team_name,
user_team_name,
gold,
income,
village_income,
village_support,
fog,
shroud,
share_vision,
controller,
no_leader,
hidden).show(video);
return teditor_edit_side(info).show(video);
}
private: