From 32cff8cce848cdf6d0252cead280127f92a893e8 Mon Sep 17 00:00:00 2001 From: Celtic Minstrel Date: Tue, 16 Feb 2021 00:58:21 -0500 Subject: [PATCH] Add wesnoth.map.get_label --- src/scripting/game_lua_kernel.cpp | 38 ++++++++++++++++++++++++++++++- src/scripting/game_lua_kernel.hpp | 1 + 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/src/scripting/game_lua_kernel.cpp b/src/scripting/game_lua_kernel.cpp index 41ce62fb6495d..7b9d9873a6b1b 100644 --- a/src/scripting/game_lua_kernel.cpp +++ b/src/scripting/game_lua_kernel.cpp @@ -3267,6 +3267,42 @@ int game_lua_kernel::intf_label(lua_State *L, bool add) return 0; } +int game_lua_kernel::intf_get_label(lua_State* L) +{ + if(game_display_) { + game_display &screen = *game_display_; + auto loc = luaW_checklocation(L, 1); + const terrain_label* label = nullptr; + switch(lua_type(L, 2)) { + // Missing 2nd argument - get global label + case LUA_TNONE: case LUA_TNIL: + label = screen.labels().get_label(loc, ""); + break; + // Side number - get label belonging to that side's team + case LUA_TNUMBER: + if(int n = luaL_checkinteger(L, 2); n > 0 && n <= teams().size()) { + label = screen.labels().get_label(loc, teams().at(n - 1).team_name()); + } + break; + // String - get label belonging to the team with that name + case LUA_TSTRING: + label = screen.labels().get_label(loc, luaL_checkstring(L, 2)); + break; + // Side userdata - get label belonging to that side's team + case LUA_TUSERDATA: + label = screen.labels().get_label(loc, luaW_checkteam(L, 2).team_name()); + break; + } + if(label) { + config cfg; + label->write(cfg); + luaW_pushconfig(L, cfg); + return 1; + } + } + return 0; +} + int game_lua_kernel::intf_redraw(lua_State *L) { if (game_display_) { @@ -4114,7 +4150,7 @@ game_lua_kernel::game_lua_kernel(game_state & gs, play_controller & pc, reports // Label operations {"add_label", &dispatch2<&game_lua_kernel::intf_label, true>}, {"remove_label", &dispatch2<&game_lua_kernel::intf_label, false>}, - // TODO: get_label + {"get_label", &dispatch<&game_lua_kernel::intf_get_label>}, // Time area operations {"place_area", &dispatch<&game_lua_kernel::intf_add_time_area>}, {"remove_area", &dispatch<&game_lua_kernel::intf_remove_time_area>}, diff --git a/src/scripting/game_lua_kernel.hpp b/src/scripting/game_lua_kernel.hpp index fa24ce0a81fca..d16515e22648c 100644 --- a/src/scripting/game_lua_kernel.hpp +++ b/src/scripting/game_lua_kernel.hpp @@ -152,6 +152,7 @@ class game_lua_kernel : public lua_kernel_base int intf_color_adjust(lua_State *L); int intf_delay(lua_State *L); int intf_label(lua_State *L, bool add); + int intf_get_label(lua_State* L); int intf_redraw(lua_State *L); int intf_replace_schedule(lua_State *l); int intf_set_time_of_day(lua_State *L);