Make Edit Side dialog to use new share_vision tristate
This commit is contained in:
parent
1cf271e01e
commit
1a6161a8ab
6 changed files with 81 additions and 82 deletions
|
@ -3,7 +3,7 @@
|
|||
### Definition of the window to edit gamemap scenarios
|
||||
###
|
||||
|
||||
#define _GUI_SIDE_CONTROLLER_OPTION ID LABEL
|
||||
#define _GUI_SIDE_RADIO_OPTION ID LABEL
|
||||
[column]
|
||||
grow_factor = 1
|
||||
border = "all"
|
||||
|
@ -11,9 +11,10 @@
|
|||
horizontal_alignment = "left"
|
||||
|
||||
[toggle_button]
|
||||
id = "controller_"+{ID}
|
||||
id = {ID}
|
||||
definition = "radio"
|
||||
label = {LABEL}
|
||||
linked_group = "radio_options"
|
||||
[/toggle_button]
|
||||
[/column]
|
||||
#enddef
|
||||
|
@ -38,6 +39,11 @@
|
|||
[helptip]
|
||||
id = "tooltip_large"
|
||||
[/helptip]
|
||||
|
||||
[linked_group]
|
||||
id = "radio_options"
|
||||
fixed_width = "true"
|
||||
[/linked_group]
|
||||
|
||||
[grid]
|
||||
|
||||
|
@ -177,18 +183,6 @@
|
|||
[/toggle_button]
|
||||
[/column]
|
||||
|
||||
[column]
|
||||
horizontal_alignment = "left"
|
||||
border = "all"
|
||||
border_size = 5
|
||||
|
||||
[toggle_button]
|
||||
id = "share_maps"
|
||||
definition = "default"
|
||||
label= _ "Share map"
|
||||
[/toggle_button]
|
||||
[/column]
|
||||
|
||||
[column]
|
||||
horizontal_alignment = "left"
|
||||
border = "all"
|
||||
|
@ -217,18 +211,6 @@
|
|||
[/toggle_button]
|
||||
[/column]
|
||||
|
||||
[column]
|
||||
horizontal_alignment = "left"
|
||||
border = "all"
|
||||
border_size = 5
|
||||
|
||||
[toggle_button]
|
||||
id = "share_view"
|
||||
definition = "default"
|
||||
label= _ "Share view"
|
||||
[/toggle_button]
|
||||
[/column]
|
||||
|
||||
[column]
|
||||
horizontal_alignment = "left"
|
||||
border = "all"
|
||||
|
@ -390,24 +372,44 @@
|
|||
[grid]
|
||||
|
||||
[row]
|
||||
{_GUI_SIDE_RADIO_OPTION controller_human ( _ "controller^Human")}
|
||||
|
||||
[column]
|
||||
horizontal_alignment = "left"
|
||||
{_GUI_SIDE_RADIO_OPTION controller_ai ( _ "controller^AI only")}
|
||||
|
||||
[grid]
|
||||
{_GUI_SIDE_RADIO_OPTION controller_null ( _ "controller^None")}
|
||||
[/row]
|
||||
|
||||
[row]
|
||||
{_GUI_SIDE_CONTROLLER_OPTION human ( _ "controller^Human")}
|
||||
[/grid]
|
||||
|
||||
{_GUI_SIDE_CONTROLLER_OPTION ai ( _ "controller^AI only")}
|
||||
[/column]
|
||||
|
||||
{_GUI_SIDE_CONTROLLER_OPTION null ( _ "controller^None")}
|
||||
[/row]
|
||||
[/row]
|
||||
|
||||
[row]
|
||||
|
||||
[/grid]
|
||||
[column]
|
||||
border = "all"
|
||||
border_size = 5
|
||||
horizontal_alignment = "left"
|
||||
vertical_alignment = "top"
|
||||
|
||||
[/column]
|
||||
[label]
|
||||
definition = "default"
|
||||
label = _ "Share Vision:"
|
||||
[/label]
|
||||
[/column]
|
||||
|
||||
[column]
|
||||
horizontal_alignment = "left"
|
||||
|
||||
[grid]
|
||||
|
||||
[row]
|
||||
{_GUI_SIDE_RADIO_OPTION vision_all ( _ "vision^All")}
|
||||
|
||||
{_GUI_SIDE_RADIO_OPTION vision_shroud ( _ "vision^Shroud")}
|
||||
|
||||
{_GUI_SIDE_RADIO_OPTION vision_null ( _ "vision^None")}
|
||||
[/row]
|
||||
|
||||
[/grid]
|
||||
|
|
|
@ -208,21 +208,21 @@ void context_manager::edit_side_dialog(int side)
|
|||
|
||||
bool no_leader = t.no_leader();
|
||||
bool hidden = t.hidden();
|
||||
bool share_view = t.share_view();
|
||||
bool share_maps = t.share_maps();
|
||||
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, share_view, shroud, share_maps,
|
||||
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, share_view, shroud, share_maps, controller, hidden, no_leader);
|
||||
fog, shroud, share_vision, controller, hidden, no_leader);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -196,7 +196,7 @@ map_context::map_context(const config& game_config, const std::string& filename,
|
|||
|
||||
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 share_view, bool shroud, bool share_maps,
|
||||
bool fog, bool shroud, team::SHARE_VISION share_vision,
|
||||
team::CONTROLLER controller, bool hidden, bool no_leader)
|
||||
{
|
||||
assert(teams_.size() > static_cast<unsigned int>(side));
|
||||
|
@ -211,11 +211,7 @@ void map_context::set_side_setup(int side, const std::string& team_name, const s
|
|||
t.set_hidden(hidden);
|
||||
t.set_fog(fog);
|
||||
t.set_shroud(shroud);
|
||||
//TODO: USE team::SHARE_VISION in editor too.
|
||||
t.handle_legacy_share_vision(config_of
|
||||
("share_maps", share_maps)
|
||||
("share_view", share_view)
|
||||
);
|
||||
t.set_share_vision(share_vision);
|
||||
t.set_village_gold(village_gold);
|
||||
t.set_village_support(village_support);
|
||||
actions_since_save_++;
|
||||
|
@ -474,9 +470,8 @@ config map_context::to_config()
|
|||
// side["allow_player"] = "yes";
|
||||
|
||||
side["fog"] = t->uses_fog();
|
||||
side["share_view"] = t->share_view();
|
||||
side["shroud"] = t->uses_shroud();
|
||||
side["share_maps"] = t->share_maps();
|
||||
side["share_vision"] = t->share_vision();
|
||||
|
||||
side["gold"] = t->gold();
|
||||
side["income"] = t->base_income();
|
||||
|
|
|
@ -244,7 +244,7 @@ public:
|
|||
*/
|
||||
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 share_view, bool shroud, bool share_maps,
|
||||
bool fog, bool shroud, team::SHARE_VISION share_vision,
|
||||
team::CONTROLLER controller, bool hidden, bool no_leader);
|
||||
|
||||
/**
|
||||
|
|
|
@ -58,13 +58,13 @@ teditor_edit_side::teditor_edit_side(int side,
|
|||
int& village_income,
|
||||
int& village_support,
|
||||
bool& fog,
|
||||
bool& share_view,
|
||||
bool& shroud,
|
||||
bool& share_maps,
|
||||
team::SHARE_VISION& share_vision,
|
||||
team::CONTROLLER& controller,
|
||||
bool& no_leader,
|
||||
bool& hidden)
|
||||
: controller_(controller)
|
||||
, share_vision_(share_vision)
|
||||
{
|
||||
std::stringstream side_stream;
|
||||
side_stream << side;
|
||||
|
@ -80,10 +80,7 @@ teditor_edit_side::teditor_edit_side(int side,
|
|||
register_integer("village_support", true, village_support);
|
||||
|
||||
register_bool("fog", true, fog);
|
||||
register_bool("share_view", true, share_view);
|
||||
|
||||
register_bool("shroud", true, shroud);
|
||||
register_bool("share_maps", true, share_maps);
|
||||
|
||||
register_bool("no_leader", true, no_leader);
|
||||
register_bool("hidden", true, hidden);
|
||||
|
@ -91,30 +88,33 @@ teditor_edit_side::teditor_edit_side(int side,
|
|||
|
||||
void teditor_edit_side::pre_show(CVideo& /*video*/, twindow& window)
|
||||
{
|
||||
register_controller_toggle(window, "human", team::CONTROLLER::HUMAN);
|
||||
register_controller_toggle(window, "ai", team::CONTROLLER::AI);
|
||||
register_controller_toggle(window, "null", team::CONTROLLER::EMPTY);
|
||||
register_radio_toggle<team::CONTROLLER>(window, "controller_human", team::CONTROLLER::HUMAN, controller_, controller_tgroup_);
|
||||
register_radio_toggle<team::CONTROLLER>(window, "controller_ai", team::CONTROLLER::AI, controller_, controller_tgroup_);
|
||||
register_radio_toggle<team::CONTROLLER>(window, "controller_null", team::CONTROLLER::EMPTY, controller_, controller_tgroup_);
|
||||
|
||||
register_radio_toggle<team::SHARE_VISION>(window, "vision_all", team::SHARE_VISION::ALL, share_vision_, vision_tgroup_);
|
||||
register_radio_toggle<team::SHARE_VISION>(window, "vision_shroud", team::SHARE_VISION::SHROUD, share_vision_, vision_tgroup_);
|
||||
register_radio_toggle<team::SHARE_VISION>(window, "vision_null", team::SHARE_VISION::NONE, share_vision_, vision_tgroup_);
|
||||
}
|
||||
|
||||
void teditor_edit_side::register_controller_toggle(twindow& window,
|
||||
const std::string& toggle_id,
|
||||
team::CONTROLLER value)
|
||||
template <typename T>
|
||||
void teditor_edit_side::register_radio_toggle(twindow& window, const std::string& toggle_id, T enum_value, T& current_value, std::vector<std::pair<ttoggle_button*, T> >& dst)
|
||||
{
|
||||
ttoggle_button* b = &find_widget<ttoggle_button>(
|
||||
&window, "controller_" + toggle_id, false);
|
||||
&window, toggle_id, false);
|
||||
|
||||
b->set_value(value == controller_);
|
||||
connect_signal_mouse_left_click(
|
||||
*b,
|
||||
boost::bind(
|
||||
&teditor_edit_side::toggle_controller_callback, this, b));
|
||||
b->set_value(enum_value == current_value);
|
||||
connect_signal_mouse_left_click(*b,
|
||||
boost::bind(
|
||||
&teditor_edit_side::toggle_radio_callback<T>, this, boost::ref(dst), boost::ref(current_value), b));
|
||||
|
||||
controller_tgroup_.push_back(std::make_pair(b, value));
|
||||
dst.push_back(std::make_pair(b, enum_value));
|
||||
}
|
||||
|
||||
void teditor_edit_side::toggle_controller_callback(ttoggle_button* active)
|
||||
template <typename C>
|
||||
void teditor_edit_side::toggle_radio_callback(const std::vector<std::pair<ttoggle_button*, C> >& vec, C& value, ttoggle_button* active)
|
||||
{
|
||||
FOREACH(const AUTO & e, controller_tgroup_)
|
||||
FOREACH(const AUTO & e, vec)
|
||||
{
|
||||
ttoggle_button* const b = e.first;
|
||||
if(b == NULL) {
|
||||
|
@ -122,10 +122,11 @@ void teditor_edit_side::toggle_controller_callback(ttoggle_button* active)
|
|||
} else if(b == active && !b->get_value()) {
|
||||
b->set_value(true);
|
||||
} else if(b == active) {
|
||||
controller_ = e.second;
|
||||
value = e.second;
|
||||
} else if(b != active && b->get_value()) {
|
||||
b->set_value(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} // end namespace gui2
|
||||
|
|
|
@ -35,9 +35,8 @@ public:
|
|||
int& village_income,
|
||||
int& village_support,
|
||||
bool& fog,
|
||||
bool& share_view,
|
||||
bool& shroud,
|
||||
bool& share_maps,
|
||||
team::SHARE_VISION& share_vision,
|
||||
team::CONTROLLER& controller,
|
||||
bool& no_leader,
|
||||
bool& hidden);
|
||||
|
@ -51,9 +50,8 @@ public:
|
|||
int& village_income,
|
||||
int& village_support,
|
||||
bool& fog,
|
||||
bool& share_view,
|
||||
bool& shroud,
|
||||
bool& share_maps,
|
||||
team::SHARE_VISION& share_vision,
|
||||
team::CONTROLLER& controller,
|
||||
bool& no_leader,
|
||||
bool& hidden,
|
||||
|
@ -67,9 +65,8 @@ public:
|
|||
village_income,
|
||||
village_support,
|
||||
fog,
|
||||
share_view,
|
||||
shroud,
|
||||
share_maps,
|
||||
share_vision,
|
||||
controller,
|
||||
no_leader,
|
||||
hidden).show(video);
|
||||
|
@ -78,17 +75,21 @@ public:
|
|||
private:
|
||||
void pre_show(CVideo& /*video*/, twindow& window);
|
||||
|
||||
void register_controller_toggle(twindow& window,
|
||||
const std::string& toggle_id,
|
||||
team::CONTROLLER value);
|
||||
template <typename T>
|
||||
void register_radio_toggle(twindow& window, const std::string& toggle_id, T enum_value, T& current_value, std::vector<std::pair<ttoggle_button*, T> >& dst);
|
||||
|
||||
team::CONTROLLER& controller_;
|
||||
|
||||
team::SHARE_VISION& share_vision_;
|
||||
|
||||
typedef std::pair<ttoggle_button*, team::CONTROLLER> controller_toggle;
|
||||
// Dialog display state variables.
|
||||
std::vector<controller_toggle> controller_tgroup_;
|
||||
|
||||
void toggle_controller_callback(ttoggle_button* active);
|
||||
typedef std::pair<ttoggle_button*, team::SHARE_VISION> vision_toggle;
|
||||
std::vector<vision_toggle> vision_tgroup_;
|
||||
|
||||
template <typename C>
|
||||
void toggle_radio_callback(const std::vector<std::pair<ttoggle_button*, C> >& vec, C& value, ttoggle_button* active);
|
||||
|
||||
/** Inherited from tdialog, implemented by REGISTER_DIALOG. */
|
||||
virtual const std::string& window_id() const;
|
||||
|
|
Loading…
Add table
Reference in a new issue