aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Müller <34514239+appgurueu@users.noreply.github.com>2022-01-27 22:22:58 +0100
committerGitHub <noreply@github.com>2022-01-27 22:22:58 +0100
commitfe0b2d02bf07966ce4554578a1efd4b07bbb4734 (patch)
tree9f60414444efb632f6011787279a8aa0cf384f25
parent48e508052ad477eda1142f08990d523c8b9701ea (diff)
downloadminetest-fe0b2d02bf07966ce4554578a1efd4b07bbb4734.tar.gz
minetest-fe0b2d02bf07966ce4554578a1efd4b07bbb4734.tar.bz2
minetest-fe0b2d02bf07966ce4554578a1efd4b07bbb4734.zip
Define control(bits) as "unset" for entities (#11995)
-rw-r--r--doc/lua_api.txt25
-rw-r--r--src/script/lua_api/l_object.cpp13
2 files changed, 22 insertions, 16 deletions
diff --git a/doc/lua_api.txt b/doc/lua_api.txt
index e37567ec3..faaed55e1 100644
--- a/doc/lua_api.txt
+++ b/doc/lua_api.txt
@@ -6716,18 +6716,21 @@ object you are working with still exists.
`aux1`, `sneak`, `dig`, `place`, `LMB`, `RMB`, and `zoom`.
* The fields `LMB` and `RMB` are equal to `dig` and `place` respectively,
and exist only to preserve backwards compatibility.
+ * Returns an empty table `{}` if the object is not a player.
* `get_player_control_bits()`: returns integer with bit packed player pressed
- keys. Bits:
- * 0 - up
- * 1 - down
- * 2 - left
- * 3 - right
- * 4 - jump
- * 5 - aux1
- * 6 - sneak
- * 7 - dig
- * 8 - place
- * 9 - zoom
+ keys.
+ * Bits:
+ * 0 - up
+ * 1 - down
+ * 2 - left
+ * 3 - right
+ * 4 - jump
+ * 5 - aux1
+ * 6 - sneak
+ * 7 - dig
+ * 8 - place
+ * 9 - zoom
+ * Returns `0` (no bits set) if the object is not a player.
* `set_physics_override(override_table)`
* `override_table` is a table with the following fields:
* `speed`: multiplier to default walking speed value (default: `1`)
diff --git a/src/script/lua_api/l_object.cpp b/src/script/lua_api/l_object.cpp
index b177a9f7e..407b48db0 100644
--- a/src/script/lua_api/l_object.cpp
+++ b/src/script/lua_api/l_object.cpp
@@ -1367,11 +1367,12 @@ int ObjectRef::l_get_player_control(lua_State *L)
NO_MAP_LOCK_REQUIRED;
ObjectRef *ref = checkobject(L, 1);
RemotePlayer *player = getplayer(ref);
- if (player == nullptr)
- return 0;
- const PlayerControl &control = player->getPlayerControl();
lua_newtable(L);
+ if (player == nullptr)
+ return 1;
+
+ const PlayerControl &control = player->getPlayerControl();
lua_pushboolean(L, control.direction_keys & (1 << 0));
lua_setfield(L, -2, "up");
lua_pushboolean(L, control.direction_keys & (1 << 1));
@@ -1406,8 +1407,10 @@ int ObjectRef::l_get_player_control_bits(lua_State *L)
NO_MAP_LOCK_REQUIRED;
ObjectRef *ref = checkobject(L, 1);
RemotePlayer *player = getplayer(ref);
- if (player == nullptr)
- return 0;
+ if (player == nullptr) {
+ lua_pushinteger(L, 0);
+ return 1;
+ }
const auto &c = player->getPlayerControl();