Skip to content

Commit

Permalink
Define control(bits) as "unset" for entities (minetest#11995)
Browse files Browse the repository at this point in the history
  • Loading branch information
appgurueu committed Jan 27, 2022
1 parent 48e5080 commit fe0b2d0
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 16 deletions.
25 changes: 14 additions & 11 deletions doc/lua_api.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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`)
Expand Down
13 changes: 8 additions & 5 deletions src/script/lua_api/l_object.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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));
Expand Down Expand Up @@ -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();

Expand Down

0 comments on commit fe0b2d0

Please sign in to comment.