mirror of
https://github.com/wesnoth/wesnoth
synced 2025-04-27 21:33:41 +00:00
Move the end level data accessors to wesnoth.scenario (#5861)
This commit is contained in:
parent
525d65bc2f
commit
67ba27b8a3
@ -110,4 +110,6 @@ end)
|
|||||||
|
|
||||||
if wesnoth.kernel_type() == 'Game Lua Kernel' then
|
if wesnoth.kernel_type() == 'Game Lua Kernel' then
|
||||||
wesnoth.get_traits = wesnoth.deprecate_api('wesnoth.get_traits', 'wesnoth.game_config.global_traits', 1, nil, function() return wesnoth.game_config.global_traits end)
|
wesnoth.get_traits = wesnoth.deprecate_api('wesnoth.get_traits', 'wesnoth.game_config.global_traits', 1, nil, function() return wesnoth.game_config.global_traits end)
|
||||||
|
wesnoth.end_level = wesnoth.deprecate_api('wesnoth.end_level', 'wesnoth.scenario.end_level_data assignment', 1, nil, function(cfg) wesnoth.scenario.end_level_data = cfg end)
|
||||||
|
wesnoth.get_end_level_data = wesnoth.deprecate_api('wesnoth.get_end_level_data', 'wesnoth.scenario.end_level_data', 1, nil, function() return wesnoth.scenario.end_level_data end)
|
||||||
end
|
end
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
function wesnoth.wml_conditionals.proceed_to_next_scenario(cfg)
|
function wesnoth.wml_conditionals.proceed_to_next_scenario(cfg)
|
||||||
local endlevel_data = wesnoth.get_end_level_data()
|
local endlevel_data = wesnoth.scenario.end_level_data
|
||||||
|
|
||||||
if not endlevel_data then
|
if not endlevel_data then
|
||||||
return false
|
return false
|
||||||
|
@ -92,7 +92,7 @@ function wesnoth.wml_actions.endlevel(cfg)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
wesnoth.end_level {
|
wesnoth.scenario.end_level_data = {
|
||||||
carryover_report = cfg.carryover_report,
|
carryover_report = cfg.carryover_report,
|
||||||
save = cfg.save,
|
save = cfg.save,
|
||||||
replay_save = cfg.replay_save,
|
replay_save = cfg.replay_save,
|
||||||
|
@ -1192,6 +1192,61 @@ namespace {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int impl_end_level_data_get(lua_State* L)
|
||||||
|
{
|
||||||
|
const end_level_data& data = *static_cast<end_level_data*>(lua_touserdata(L, 1));
|
||||||
|
const char* m = luaL_checkstring(L, 2);
|
||||||
|
|
||||||
|
return_bool_attrib("linger_mode", data.transient.linger_mode);
|
||||||
|
return_bool_attrib("reveal_map", data.transient.reveal_map);
|
||||||
|
return_bool_attrib("carryover_report", data.transient.carryover_report);
|
||||||
|
return_bool_attrib("prescenario_save", data.prescenario_save);
|
||||||
|
return_bool_attrib("replay_save", data.replay_save);
|
||||||
|
return_bool_attrib("proceed_to_next_level", data.proceed_to_next_level);
|
||||||
|
return_bool_attrib("is_victory", data.is_victory);
|
||||||
|
return_bool_attrib("is_loss", !data.is_victory);
|
||||||
|
return_cstring_attrib("result", data.is_victory ? "victory" : "loss"); // to match wesnoth.end_level()
|
||||||
|
return_string_attrib("test_result", data.test_result);
|
||||||
|
return_cfg_attrib("__cfg", data.to_config_full());
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
struct end_level_committer {
|
||||||
|
end_level_committer(end_level_data& data, play_controller& pc) : data_(data), pc_(pc) {}
|
||||||
|
~end_level_committer() {
|
||||||
|
pc_.set_end_level_data(data_);
|
||||||
|
}
|
||||||
|
private:
|
||||||
|
end_level_data& data_;
|
||||||
|
play_controller& pc_;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
int game_lua_kernel::impl_end_level_data_set(lua_State* L)
|
||||||
|
{
|
||||||
|
end_level_data& data = *static_cast<end_level_data*>(lua_touserdata(L, 1));
|
||||||
|
const char* m = luaL_checkstring(L, 2);
|
||||||
|
end_level_committer commit(data, play_controller_);
|
||||||
|
|
||||||
|
modify_bool_attrib("linger_mode", data.transient.linger_mode = value);
|
||||||
|
modify_bool_attrib("reveal_map", data.transient.reveal_map = value);
|
||||||
|
modify_bool_attrib("carryover_report", data.transient.carryover_report = value);
|
||||||
|
modify_bool_attrib("prescenario_save", data.prescenario_save = value);
|
||||||
|
modify_bool_attrib("replay_save", data.replay_save = value);
|
||||||
|
modify_string_attrib("test_result", data.test_result = value);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int impl_end_level_data_collect(lua_State* L)
|
||||||
|
{
|
||||||
|
end_level_data* data = static_cast<end_level_data*>(lua_touserdata(L, 1));
|
||||||
|
data->~end_level_data();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets some scenario data (__index metamethod).
|
* Gets some scenario data (__index metamethod).
|
||||||
* - Arg 1: userdata (ignored).
|
* - Arg 1: userdata (ignored).
|
||||||
@ -1235,6 +1290,25 @@ int game_lua_kernel::impl_scenario_get(lua_State *L)
|
|||||||
lua_push(L, mods);
|
lua_push(L, mods);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
if(strcmp(m, "end_level_data") == 0) {
|
||||||
|
if (!play_controller_.is_regular_game_end()) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
auto data = play_controller_.get_end_level_data();
|
||||||
|
new(L) end_level_data(data);
|
||||||
|
if(luaL_newmetatable(L, "end level data")) {
|
||||||
|
static luaL_Reg const callbacks[] {
|
||||||
|
{ "__index", &impl_end_level_data_get},
|
||||||
|
{ "__newindex", &dispatch<&game_lua_kernel::impl_end_level_data_set>},
|
||||||
|
{ "__gc", &impl_end_level_data_collect},
|
||||||
|
{ nullptr, nullptr }
|
||||||
|
};
|
||||||
|
luaL_setfuncs(L, callbacks, 0);
|
||||||
|
}
|
||||||
|
lua_setmetatable(L, -2);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
if(classification.is_multiplayer()) {
|
if(classification.is_multiplayer()) {
|
||||||
return_cfgref_attrib("mp_settings", play_controller_.get_mp_settings().to_config());
|
return_cfgref_attrib("mp_settings", play_controller_.get_mp_settings().to_config());
|
||||||
@ -1264,6 +1338,22 @@ int game_lua_kernel::impl_scenario_set(lua_State *L)
|
|||||||
modify_bool_attrib("show_credits", classification.end_credits = value);
|
modify_bool_attrib("show_credits", classification.end_credits = value);
|
||||||
modify_string_attrib("end_text", classification.end_text = value);
|
modify_string_attrib("end_text", classification.end_text = value);
|
||||||
modify_int_attrib("end_text_duration", classification.end_text_duration = value);
|
modify_int_attrib("end_text_duration", classification.end_text_duration = value);
|
||||||
|
if(strcmp(m, "end_level_data") == 0) {
|
||||||
|
vconfig cfg(luaW_checkvconfig(L, 3));
|
||||||
|
end_level_data data;
|
||||||
|
|
||||||
|
data.proceed_to_next_level = cfg["proceed_to_next_level"].to_bool(true);
|
||||||
|
data.transient.carryover_report = cfg["carryover_report"].to_bool(true);
|
||||||
|
data.prescenario_save = cfg["save"].to_bool(true);
|
||||||
|
data.replay_save = cfg["replay_save"].to_bool(true);
|
||||||
|
data.transient.linger_mode = cfg["linger_mode"].to_bool(true) && !teams().empty();
|
||||||
|
data.transient.reveal_map = cfg["reveal_map"].to_bool(true);
|
||||||
|
data.is_victory = cfg["result"] == "victory";
|
||||||
|
data.test_result = cfg["test_result"].str(LEVEL_RESULT::enum_to_string(LEVEL_RESULT::TEST_NOT_SET));
|
||||||
|
play_controller_.set_end_level_data(data);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1394,98 +1484,6 @@ int game_lua_kernel::intf_clear_messages(lua_State*)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int impl_end_level_data_get(lua_State* L)
|
|
||||||
{
|
|
||||||
const end_level_data& data = *static_cast<end_level_data*>(lua_touserdata(L, 1));
|
|
||||||
const char* m = luaL_checkstring(L, 2);
|
|
||||||
|
|
||||||
return_bool_attrib("linger_mode", data.transient.linger_mode);
|
|
||||||
return_bool_attrib("reveal_map", data.transient.reveal_map);
|
|
||||||
return_bool_attrib("carryover_report", data.transient.carryover_report);
|
|
||||||
return_bool_attrib("prescenario_save", data.prescenario_save);
|
|
||||||
return_bool_attrib("replay_save", data.replay_save);
|
|
||||||
return_bool_attrib("proceed_to_next_level", data.proceed_to_next_level);
|
|
||||||
return_bool_attrib("is_victory", data.is_victory);
|
|
||||||
return_bool_attrib("is_loss", !data.is_victory);
|
|
||||||
return_cstring_attrib("result", data.is_victory ? "victory" : "loss"); // to match wesnoth.end_level()
|
|
||||||
return_string_attrib("test_result", data.test_result);
|
|
||||||
return_cfg_attrib("__cfg", data.to_config_full());
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
namespace {
|
|
||||||
struct end_level_committer {
|
|
||||||
end_level_committer(end_level_data& data, play_controller& pc) : data_(data), pc_(pc) {}
|
|
||||||
~end_level_committer() {
|
|
||||||
pc_.set_end_level_data(data_);
|
|
||||||
}
|
|
||||||
private:
|
|
||||||
end_level_data& data_;
|
|
||||||
play_controller& pc_;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
int game_lua_kernel::impl_end_level_data_set(lua_State* L)
|
|
||||||
{
|
|
||||||
end_level_data& data = *static_cast<end_level_data*>(lua_touserdata(L, 1));
|
|
||||||
const char* m = luaL_checkstring(L, 2);
|
|
||||||
end_level_committer commit(data, play_controller_);
|
|
||||||
|
|
||||||
modify_bool_attrib("linger_mode", data.transient.linger_mode = value);
|
|
||||||
modify_bool_attrib("reveal_map", data.transient.reveal_map = value);
|
|
||||||
modify_bool_attrib("carryover_report", data.transient.carryover_report = value);
|
|
||||||
modify_bool_attrib("prescenario_save", data.prescenario_save = value);
|
|
||||||
modify_bool_attrib("replay_save", data.replay_save = value);
|
|
||||||
modify_string_attrib("test_result", data.test_result = value);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int impl_end_level_data_collect(lua_State* L)
|
|
||||||
{
|
|
||||||
end_level_data* data = static_cast<end_level_data*>(lua_touserdata(L, 1));
|
|
||||||
data->~end_level_data();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int game_lua_kernel::intf_get_end_level_data(lua_State* L)
|
|
||||||
{
|
|
||||||
if (!play_controller_.is_regular_game_end()) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
auto data = play_controller_.get_end_level_data();
|
|
||||||
new(L) end_level_data(data);
|
|
||||||
if(luaL_newmetatable(L, "end level data")) {
|
|
||||||
static luaL_Reg const callbacks[] {
|
|
||||||
{ "__index", &impl_end_level_data_get},
|
|
||||||
{ "__newindex", &dispatch<&game_lua_kernel::impl_end_level_data_set>},
|
|
||||||
{ "__gc", &impl_end_level_data_collect},
|
|
||||||
{ nullptr, nullptr }
|
|
||||||
};
|
|
||||||
luaL_setfuncs(L, callbacks, 0);
|
|
||||||
}
|
|
||||||
lua_setmetatable(L, -2);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int game_lua_kernel::intf_end_level(lua_State *L)
|
|
||||||
{
|
|
||||||
vconfig cfg(luaW_checkvconfig(L, 1));
|
|
||||||
end_level_data data;
|
|
||||||
|
|
||||||
data.proceed_to_next_level = cfg["proceed_to_next_level"].to_bool(true);
|
|
||||||
data.transient.carryover_report = cfg["carryover_report"].to_bool(true);
|
|
||||||
data.prescenario_save = cfg["save"].to_bool(true);
|
|
||||||
data.replay_save = cfg["replay_save"].to_bool(true);
|
|
||||||
data.transient.linger_mode = cfg["linger_mode"].to_bool(true) && !teams().empty();
|
|
||||||
data.transient.reveal_map = cfg["reveal_map"].to_bool(true);
|
|
||||||
data.is_victory = cfg["result"] == "victory";
|
|
||||||
data.test_result = cfg["test_result"].str(LEVEL_RESULT::enum_to_string(LEVEL_RESULT::TEST_NOT_SET));
|
|
||||||
play_controller_.set_end_level_data(data);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int game_lua_kernel::intf_end_turn(lua_State* L)
|
int game_lua_kernel::intf_end_turn(lua_State* L)
|
||||||
{
|
{
|
||||||
//note that next_player_number = 1, next_player_number = nteams+1 both set the next team to be the first team
|
//note that next_player_number = 1, next_player_number = nteams+1 both set the next team to be the first team
|
||||||
@ -4010,7 +4008,6 @@ game_lua_kernel::game_lua_kernel(game_state & gs, play_controller & pc, reports
|
|||||||
{ "cancel_action", &dispatch<&game_lua_kernel::intf_cancel_action > },
|
{ "cancel_action", &dispatch<&game_lua_kernel::intf_cancel_action > },
|
||||||
{ "clear_messages", &dispatch<&game_lua_kernel::intf_clear_messages > },
|
{ "clear_messages", &dispatch<&game_lua_kernel::intf_clear_messages > },
|
||||||
{ "end_turn", &dispatch<&game_lua_kernel::intf_end_turn > },
|
{ "end_turn", &dispatch<&game_lua_kernel::intf_end_turn > },
|
||||||
{ "end_level", &dispatch<&game_lua_kernel::intf_end_level > },
|
|
||||||
{ "find_cost_map", &dispatch<&game_lua_kernel::intf_find_cost_map > },
|
{ "find_cost_map", &dispatch<&game_lua_kernel::intf_find_cost_map > },
|
||||||
{ "find_path", &dispatch<&game_lua_kernel::intf_find_path > },
|
{ "find_path", &dispatch<&game_lua_kernel::intf_find_path > },
|
||||||
{ "find_reach", &dispatch<&game_lua_kernel::intf_find_reach > },
|
{ "find_reach", &dispatch<&game_lua_kernel::intf_find_reach > },
|
||||||
@ -4018,7 +4015,6 @@ game_lua_kernel::game_lua_kernel(game_state & gs, play_controller & pc, reports
|
|||||||
{ "find_vision_range", &dispatch<&game_lua_kernel::intf_find_vision_range > },
|
{ "find_vision_range", &dispatch<&game_lua_kernel::intf_find_vision_range > },
|
||||||
{ "fire_event", &dispatch2<&game_lua_kernel::intf_fire_event, false > },
|
{ "fire_event", &dispatch2<&game_lua_kernel::intf_fire_event, false > },
|
||||||
{ "fire_event_by_id", &dispatch2<&game_lua_kernel::intf_fire_event, true > },
|
{ "fire_event_by_id", &dispatch2<&game_lua_kernel::intf_fire_event, true > },
|
||||||
{ "get_end_level_data", &dispatch<&game_lua_kernel::intf_get_end_level_data > },
|
|
||||||
{ "get_time_of_day", &dispatch<&game_lua_kernel::intf_get_time_of_day > },
|
{ "get_time_of_day", &dispatch<&game_lua_kernel::intf_get_time_of_day > },
|
||||||
{ "get_max_liminal_bonus", &dispatch<&game_lua_kernel::intf_get_max_liminal_bonus > },
|
{ "get_max_liminal_bonus", &dispatch<&game_lua_kernel::intf_get_max_liminal_bonus > },
|
||||||
{ "log_replay", &dispatch<&game_lua_kernel::intf_log_replay > },
|
{ "log_replay", &dispatch<&game_lua_kernel::intf_log_replay > },
|
||||||
|
@ -106,9 +106,7 @@ class game_lua_kernel : public lua_kernel_base
|
|||||||
int impl_scenario_set(lua_State *L);
|
int impl_scenario_set(lua_State *L);
|
||||||
int impl_current_get(lua_State *L);
|
int impl_current_get(lua_State *L);
|
||||||
int intf_clear_messages(lua_State*);
|
int intf_clear_messages(lua_State*);
|
||||||
int intf_end_level(lua_State*);
|
|
||||||
int impl_end_level_data_set(lua_State*);
|
int impl_end_level_data_set(lua_State*);
|
||||||
int intf_get_end_level_data(lua_State*);
|
|
||||||
int intf_end_turn(lua_State*);
|
int intf_end_turn(lua_State*);
|
||||||
int intf_find_cost_map(lua_State *L);
|
int intf_find_cost_map(lua_State *L);
|
||||||
int intf_find_path(lua_State *L);
|
int intf_find_path(lua_State *L);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user