Lua: Make side.flag writable, add missing -1 to the side.color setter.

Fixes #4396.
This commit is contained in:
josteph 2019-10-10 03:09:15 +00:00
parent 7c4e0373ac
commit 51c6559d3a
2 changed files with 13 additions and 4 deletions

View File

@ -130,6 +130,12 @@ static int impl_side_set(lua_State *L)
team &t = luaW_checkteam(L, 1);
char const *m = luaL_checkstring(L, 2);
const auto& reinit_flag_for_team = [&L] (const team& t) -> void {
auto* disp = lua_kernel_base::get_lua_kernel<game_lua_kernel>(L).get_display();
if(disp) {
disp->reinit_flags_for_side(t.side() - 1);
}
};
// Find the corresponding attribute.
modify_int_attrib("gold", t.set_gold(value));
modify_tstring_attrib("objectives", t.set_objectives(value, true));
@ -141,16 +147,17 @@ static int impl_side_set(lua_State *L)
modify_bool_attrib("objectives_changed", t.set_objectives_changed(value));
modify_bool_attrib("hidden", t.set_hidden(value));
modify_bool_attrib("scroll_to_leader", t.set_scroll_to_leader(value));
modify_string_attrib("flag", {
t.set_flag(value);
reinit_flag_for_team(t);
});
modify_string_attrib("flag_icon", t.set_flag_icon(value));
modify_tstring_attrib("user_team_name", t.change_team(t.team_name(), value));
modify_string_attrib("team_name", t.change_team(value, t.user_team_name()));
modify_string_attrib("controller", t.change_controller_by_wml(value));
modify_string_attrib("color", {
auto* disp = lua_kernel_base::get_lua_kernel<game_lua_kernel>(L).get_display();
t.set_color(value);
if(disp) {
disp->reinit_flags_for_side(t.side());
}
reinit_flag_for_team(t);
});
modify_string_attrib("defeat_condition", t.set_defeat_condition_string(value));
modify_int_attrib("carryover_percentage", t.set_carryover_percentage(value));

View File

@ -254,6 +254,7 @@ public:
CONTROLLER controller() const { return info_.controller; }
const std::string& color() const { return info_.color; }
/// @note Call display::reinit_flag_for_side() after calling this
void set_color(const std::string& color) { info_.color = color; }
bool is_empty() const { return info_.controller == CONTROLLER::EMPTY; }
@ -300,6 +301,7 @@ public:
const std::string& flag() const { return info_.flag; }
const std::string& flag_icon() const { return info_.flag_icon; }
/// @note Call display::reinit_flag_for_side() after calling this
void set_flag(const std::string& flag) { info_.flag = flag; }
void set_flag_icon(const std::string& flag_icon) { info_.flag_icon = flag_icon; }