1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-06-27 16:36:03 +00:00

Restore pass-through of direction keys (#11924)

This moves relevant code into the PlayerControl class and gets rid of separate keyPressed variable.
This commit is contained in:
sfan5 2022-01-09 18:46:36 +01:00 committed by GitHub
parent 76dbd0d2d0
commit 5eb45e1ea0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
11 changed files with 165 additions and 98 deletions

View file

@ -1367,20 +1367,18 @@ 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) {
lua_pushlstring(L, "", 0);
return 1;
}
if (player == nullptr)
return 0;
const PlayerControl &control = player->getPlayerControl();
lua_newtable(L);
lua_pushboolean(L, player->keyPressed & (1 << 0));
lua_pushboolean(L, control.direction_keys & (1 << 0));
lua_setfield(L, -2, "up");
lua_pushboolean(L, player->keyPressed & (1 << 1));
lua_pushboolean(L, control.direction_keys & (1 << 1));
lua_setfield(L, -2, "down");
lua_pushboolean(L, player->keyPressed & (1 << 2));
lua_pushboolean(L, control.direction_keys & (1 << 2));
lua_setfield(L, -2, "left");
lua_pushboolean(L, player->keyPressed & (1 << 3));
lua_pushboolean(L, control.direction_keys & (1 << 3));
lua_setfield(L, -2, "right");
lua_pushboolean(L, control.jump);
lua_setfield(L, -2, "jump");
@ -1408,12 +1406,24 @@ 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) {
lua_pushlstring(L, "", 0);
return 1;
}
if (player == nullptr)
return 0;
lua_pushnumber(L, player->keyPressed);
const auto &c = player->getPlayerControl();
// This is very close to PlayerControl::getKeysPressed() but duplicated
// here so the encoding in the API is not inadvertedly changed.
u32 keypress_bits =
c.direction_keys |
( (u32)(c.jump & 1) << 4) |
( (u32)(c.aux1 & 1) << 5) |
( (u32)(c.sneak & 1) << 6) |
( (u32)(c.dig & 1) << 7) |
( (u32)(c.place & 1) << 8) |
( (u32)(c.zoom & 1) << 9)
;
lua_pushinteger(L, keypress_bits);
return 1;
}