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

@ -19,6 +19,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "player.h"
#include <cmath>
#include "threading/mutex_auto_lock.h"
#include "util/numeric.h"
#include "hud.h"
@ -159,6 +160,64 @@ void Player::clearHud()
}
}
#ifndef SERVER
u32 PlayerControl::getKeysPressed() const
{
u32 keypress_bits =
( (u32)(jump & 1) << 4) |
( (u32)(aux1 & 1) << 5) |
( (u32)(sneak & 1) << 6) |
( (u32)(dig & 1) << 7) |
( (u32)(place & 1) << 8) |
( (u32)(zoom & 1) << 9)
;
// If any direction keys are pressed pass those through
if (direction_keys != 0)
{
keypress_bits |= direction_keys;
}
// Otherwise set direction keys based on joystick movement (for mod compatibility)
else if (isMoving())
{
float abs_d;
// (absolute value indicates forward / backward)
abs_d = abs(movement_direction);
if (abs_d < 3.0f / 8.0f * M_PI)
keypress_bits |= (u32)1; // Forward
if (abs_d > 5.0f / 8.0f * M_PI)
keypress_bits |= (u32)1 << 1; // Backward
// rotate entire coordinate system by 90 degree
abs_d = movement_direction + M_PI_2;
if (abs_d >= M_PI)
abs_d -= 2 * M_PI;
abs_d = abs(abs_d);
// (value now indicates left / right)
if (abs_d < 3.0f / 8.0f * M_PI)
keypress_bits |= (u32)1 << 2; // Left
if (abs_d > 5.0f / 8.0f * M_PI)
keypress_bits |= (u32)1 << 3; // Right
}
return keypress_bits;
}
#endif
void PlayerControl::unpackKeysPressed(u32 keypress_bits)
{
direction_keys = keypress_bits & 0xf;
jump = keypress_bits & (1 << 4);
aux1 = keypress_bits & (1 << 5);
sneak = keypress_bits & (1 << 6);
dig = keypress_bits & (1 << 7);
place = keypress_bits & (1 << 8);
zoom = keypress_bits & (1 << 9);
}
void PlayerSettings::readGlobalSettings()
{
free_move = g_settings->getBool("free_move");