From e80a83d1cb9d01273ddca1c075c25cd01c291ca7 Mon Sep 17 00:00:00 2001 From: bigfoot547 Date: Fri, 14 Apr 2017 02:04:41 -0500 Subject: [PATCH] [CSM] Add function to set minimap shape (#5569) * [CSM] Add function to set minimap shape Also deprecates `toggle_shape`. * Oh fish, I messed that one up! * Fix Style * Sorry, I missed something I still had the `luamethod` call in there! * Add getters * Remove extra line * Remove useless variable Please review again @nerzhul . Thanks! * Satisfy nerzhul --- clientmods/preview/init.lua | 2 +- doc/client_lua_api.md | 3 ++- src/minimap.cpp | 22 ++++++++++++++++++++++ src/minimap.h | 7 +++++++ src/script/lua_api/l_minimap.cpp | 18 +++++++++++++++--- src/script/lua_api/l_minimap.h | 3 ++- 6 files changed, 49 insertions(+), 6 deletions(-) diff --git a/clientmods/preview/init.lua b/clientmods/preview/init.lua index df07f8c3f..4b31fa323 100644 --- a/clientmods/preview/init.lua +++ b/clientmods/preview/init.lua @@ -62,7 +62,7 @@ local function preview_minimap() minimap:set_mode(4) minimap:show() minimap:set_pos({x=5, y=50, z=5}) - minimap:toggle_shape() + minimap:set_shape(math.random(0, 1)) print("[PREVIEW] Minimap: mode => " .. dump(minimap:get_mode()) .. " position => " .. dump(minimap:get_pos()) .. diff --git a/doc/client_lua_api.md b/doc/client_lua_api.md index 43a317a84..b2aeb3f25 100644 --- a/doc/client_lua_api.md +++ b/doc/client_lua_api.md @@ -779,7 +779,8 @@ An interface to manipulate minimap on client UI * `get_angle()`: returns the current minimap angle in degrees * `set_mode(mode)`: sets the minimap mode (0 to 6) * `get_mode()`: returns the current minimap mode -* `toggle_shape()`: toggles minimap shape to round or square. +* `set_shape(shape)`: Sets the minimap shape. (0 = square, 1 = round) +* `get_shape()`: Gets the minimap shape. (0 = square, 1 = round) ### LocalPlayer An interface to retrieve information about the player. The player is diff --git a/src/minimap.cpp b/src/minimap.cpp index a7f4822c9..500f49828 100644 --- a/src/minimap.cpp +++ b/src/minimap.cpp @@ -272,6 +272,28 @@ void Minimap::toggleMinimapShape() m_minimap_update_thread->deferUpdate(); } +void Minimap::setMinimapShape(MinimapShape shape) +{ + MutexAutoLock lock(m_mutex); + + if (shape == MINIMAP_SHAPE_SQUARE) + data->minimap_shape_round = false; + else if (shape == MINIMAP_SHAPE_ROUND) + data->minimap_shape_round = true; + + g_settings->setBool("minimap_shape_round", data->minimap_shape_round); + m_minimap_update_thread->deferUpdate(); +} + +MinimapShape Minimap::getMinimapShape() +{ + if (data->minimap_shape_round) { + return MINIMAP_SHAPE_ROUND; + } else { + return MINIMAP_SHAPE_SQUARE; + } +} + void Minimap::setMinimapMode(MinimapMode mode) { static const MinimapModeDef modedefs[MINIMAP_MODE_COUNT] = { diff --git a/src/minimap.h b/src/minimap.h index eb0ae1cf4..c50530335 100644 --- a/src/minimap.h +++ b/src/minimap.h @@ -45,6 +45,11 @@ enum MinimapMode { MINIMAP_MODE_COUNT, }; +enum MinimapShape { + MINIMAP_SHAPE_SQUARE, + MINIMAP_SHAPE_ROUND, +}; + struct MinimapModeDef { bool is_radar; u16 scan_height; @@ -128,6 +133,8 @@ public: void setMinimapMode(MinimapMode mode); MinimapMode getMinimapMode() const { return data->mode; } void toggleMinimapShape(); + void setMinimapShape(MinimapShape shape); + MinimapShape getMinimapShape(); video::ITexture *getMinimapTexture(); diff --git a/src/script/lua_api/l_minimap.cpp b/src/script/lua_api/l_minimap.cpp index c68602909..f32a07ce8 100644 --- a/src/script/lua_api/l_minimap.cpp +++ b/src/script/lua_api/l_minimap.cpp @@ -108,12 +108,23 @@ int LuaMinimap::l_set_mode(lua_State *L) return 1; } -int LuaMinimap::l_toggle_shape(lua_State *L) +int LuaMinimap::l_set_shape(lua_State *L) +{ + LuaMinimap *ref = checkobject(L, 1); + Minimap *m = getobject(ref); + if (!lua_isnumber(L, 2)) + return 0; + + m->setMinimapShape((MinimapShape)lua_tonumber(L, 2)); + return 0; +} + +int LuaMinimap::l_get_shape(lua_State *L) { LuaMinimap *ref = checkobject(L, 1); Minimap *m = getobject(ref); - m->toggleMinimapShape(); + lua_pushnumber(L, (int)m->getMinimapShape()); return 1; } @@ -210,6 +221,7 @@ const luaL_Reg LuaMinimap::methods[] = { luamethod(LuaMinimap, set_angle), luamethod(LuaMinimap, get_mode), luamethod(LuaMinimap, set_mode), - luamethod(LuaMinimap, toggle_shape), + luamethod(LuaMinimap, set_shape), + luamethod(LuaMinimap, get_shape), {0,0} }; diff --git a/src/script/lua_api/l_minimap.h b/src/script/lua_api/l_minimap.h index 8be72b8e7..ba702b0b1 100644 --- a/src/script/lua_api/l_minimap.h +++ b/src/script/lua_api/l_minimap.h @@ -45,7 +45,8 @@ private: static int l_show(lua_State *L); static int l_hide(lua_State *L); - static int l_toggle_shape(lua_State *L); + static int l_set_shape(lua_State *L); + static int l_get_shape(lua_State *L); Minimap *m_minimap;