Game/Input refactor [1/X]: make RealInputHandler handle joystick inputs with standard input
Joystick input is a RealInputHandler only usage, make it intelligent and handle the joystick with keyboard direct. This permits to remove many getters in game which should be owned by RealInputHandlermaster
parent
9649e47214
commit
362323cdc2
|
@ -259,18 +259,53 @@ public:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual bool getLeftState() { return m_receiver->left_active; }
|
virtual bool getLeftState()
|
||||||
virtual bool getRightState() { return m_receiver->right_active; }
|
{
|
||||||
|
return m_receiver->left_active || joystick.isKeyDown(KeyType::MOUSE_L);
|
||||||
|
}
|
||||||
|
virtual bool getRightState()
|
||||||
|
{
|
||||||
|
return m_receiver->right_active || joystick.isKeyDown(KeyType::MOUSE_R);
|
||||||
|
}
|
||||||
|
|
||||||
virtual bool getLeftClicked() { return m_receiver->leftclicked; }
|
virtual bool getLeftClicked()
|
||||||
virtual bool getRightClicked() { return m_receiver->rightclicked; }
|
{
|
||||||
virtual void resetLeftClicked() { m_receiver->leftclicked = false; }
|
return m_receiver->leftclicked || joystick.getWasKeyDown(KeyType::MOUSE_L);
|
||||||
virtual void resetRightClicked() { m_receiver->rightclicked = false; }
|
}
|
||||||
|
virtual bool getRightClicked()
|
||||||
|
{
|
||||||
|
return m_receiver->rightclicked || joystick.getWasKeyDown(KeyType::MOUSE_R);
|
||||||
|
}
|
||||||
|
|
||||||
virtual bool getLeftReleased() { return m_receiver->leftreleased; }
|
virtual void resetLeftClicked()
|
||||||
virtual bool getRightReleased() { return m_receiver->rightreleased; }
|
{
|
||||||
virtual void resetLeftReleased() { m_receiver->leftreleased = false; }
|
m_receiver->leftclicked = false;
|
||||||
virtual void resetRightReleased() { m_receiver->rightreleased = false; }
|
joystick.clearWasKeyDown(KeyType::MOUSE_L);
|
||||||
|
}
|
||||||
|
virtual void resetRightClicked() {
|
||||||
|
m_receiver->rightclicked = false;
|
||||||
|
joystick.clearWasKeyDown(KeyType::MOUSE_R);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual bool getLeftReleased()
|
||||||
|
{
|
||||||
|
return m_receiver->leftreleased || joystick.wasKeyReleased(KeyType::MOUSE_L);
|
||||||
|
}
|
||||||
|
virtual bool getRightReleased()
|
||||||
|
{
|
||||||
|
return m_receiver->rightreleased || joystick.wasKeyReleased(KeyType::MOUSE_R);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void resetLeftReleased()
|
||||||
|
{
|
||||||
|
m_receiver->leftreleased = false;
|
||||||
|
joystick.clearWasKeyReleased(KeyType::MOUSE_L);
|
||||||
|
}
|
||||||
|
virtual void resetRightReleased()
|
||||||
|
{
|
||||||
|
m_receiver->rightreleased = false;
|
||||||
|
joystick.clearWasKeyReleased(KeyType::MOUSE_R);
|
||||||
|
}
|
||||||
|
|
||||||
virtual s32 getMouseWheel() { return m_receiver->getMouseWheel(); }
|
virtual s32 getMouseWheel() { return m_receiver->getMouseWheel(); }
|
||||||
|
|
||||||
|
|
70
src/game.cpp
70
src/game.cpp
|
@ -1211,32 +1211,6 @@ protected:
|
||||||
static void settingChangedCallback(const std::string &setting_name, void *data);
|
static void settingChangedCallback(const std::string &setting_name, void *data);
|
||||||
void readSettings();
|
void readSettings();
|
||||||
|
|
||||||
inline bool getLeftClicked()
|
|
||||||
{
|
|
||||||
return input->getLeftClicked() ||
|
|
||||||
input->joystick.getWasKeyDown(KeyType::MOUSE_L);
|
|
||||||
}
|
|
||||||
inline bool getRightClicked()
|
|
||||||
{
|
|
||||||
return input->getRightClicked() ||
|
|
||||||
input->joystick.getWasKeyDown(KeyType::MOUSE_R);
|
|
||||||
}
|
|
||||||
inline bool isLeftPressed()
|
|
||||||
{
|
|
||||||
return input->getLeftState() ||
|
|
||||||
input->joystick.isKeyDown(KeyType::MOUSE_L);
|
|
||||||
}
|
|
||||||
inline bool isRightPressed()
|
|
||||||
{
|
|
||||||
return input->getRightState() ||
|
|
||||||
input->joystick.isKeyDown(KeyType::MOUSE_R);
|
|
||||||
}
|
|
||||||
inline bool getLeftReleased()
|
|
||||||
{
|
|
||||||
return input->getLeftReleased() ||
|
|
||||||
input->joystick.wasKeyReleased(KeyType::MOUSE_L);
|
|
||||||
}
|
|
||||||
|
|
||||||
inline bool isKeyDown(GameKeyType k)
|
inline bool isKeyDown(GameKeyType k)
|
||||||
{
|
{
|
||||||
return input->isKeyDown(keycache.key[k]) || input->joystick.isKeyDown(k);
|
return input->isKeyDown(keycache.key[k]) || input->joystick.isKeyDown(k);
|
||||||
|
@ -2882,8 +2856,8 @@ void Game::updatePlayerControl(const CameraOrientation &cam)
|
||||||
isKeyDown(KeyType::SPECIAL1),
|
isKeyDown(KeyType::SPECIAL1),
|
||||||
isKeyDown(KeyType::SNEAK),
|
isKeyDown(KeyType::SNEAK),
|
||||||
isKeyDown(KeyType::ZOOM),
|
isKeyDown(KeyType::ZOOM),
|
||||||
isLeftPressed(),
|
input->getLeftState(),
|
||||||
isRightPressed(),
|
input->getRightState(),
|
||||||
cam.camera_pitch,
|
cam.camera_pitch,
|
||||||
cam.camera_yaw,
|
cam.camera_yaw,
|
||||||
input->joystick.getAxisWithoutDead(JA_SIDEWARD_MOVE),
|
input->joystick.getAxisWithoutDead(JA_SIDEWARD_MOVE),
|
||||||
|
@ -2898,8 +2872,8 @@ void Game::updatePlayerControl(const CameraOrientation &cam)
|
||||||
( (u32)(isKeyDown(KeyType::JUMP) & 0x1) << 4) |
|
( (u32)(isKeyDown(KeyType::JUMP) & 0x1) << 4) |
|
||||||
( (u32)(isKeyDown(KeyType::SPECIAL1) & 0x1) << 5) |
|
( (u32)(isKeyDown(KeyType::SPECIAL1) & 0x1) << 5) |
|
||||||
( (u32)(isKeyDown(KeyType::SNEAK) & 0x1) << 6) |
|
( (u32)(isKeyDown(KeyType::SNEAK) & 0x1) << 6) |
|
||||||
( (u32)(isLeftPressed() & 0x1) << 7) |
|
( (u32)(input->getLeftState() & 0x1) << 7) |
|
||||||
( (u32)(isRightPressed() & 0x1) << 8
|
( (u32)(input->getRightState() & 0x1) << 8
|
||||||
);
|
);
|
||||||
|
|
||||||
#ifdef ANDROID
|
#ifdef ANDROID
|
||||||
|
@ -3441,7 +3415,7 @@ void Game::processPlayerInteraction(f32 dtime, bool show_hud, bool show_debug)
|
||||||
hud->updateSelectionMesh(camera_offset);
|
hud->updateSelectionMesh(camera_offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (runData.digging_blocked && !isLeftPressed()) {
|
if (runData.digging_blocked && !input->getLeftState()) {
|
||||||
// allow digging again if button is not pressed
|
// allow digging again if button is not pressed
|
||||||
runData.digging_blocked = false;
|
runData.digging_blocked = false;
|
||||||
}
|
}
|
||||||
|
@ -3452,7 +3426,7 @@ void Game::processPlayerInteraction(f32 dtime, bool show_hud, bool show_debug)
|
||||||
- pointing away from node
|
- pointing away from node
|
||||||
*/
|
*/
|
||||||
if (runData.digging) {
|
if (runData.digging) {
|
||||||
if (getLeftReleased()) {
|
if (input->getLeftReleased()) {
|
||||||
infostream << "Left button released"
|
infostream << "Left button released"
|
||||||
<< " (stopped digging)" << std::endl;
|
<< " (stopped digging)" << std::endl;
|
||||||
runData.digging = false;
|
runData.digging = false;
|
||||||
|
@ -3476,13 +3450,13 @@ void Game::processPlayerInteraction(f32 dtime, bool show_hud, bool show_debug)
|
||||||
client->setCrack(-1, v3s16(0, 0, 0));
|
client->setCrack(-1, v3s16(0, 0, 0));
|
||||||
runData.dig_time = 0.0;
|
runData.dig_time = 0.0;
|
||||||
}
|
}
|
||||||
} else if (runData.dig_instantly && getLeftReleased()) {
|
} else if (runData.dig_instantly && input->getLeftReleased()) {
|
||||||
// Remove e.g. torches faster when clicking instead of holding LMB
|
// Remove e.g. torches faster when clicking instead of holding LMB
|
||||||
runData.nodig_delay_timer = 0;
|
runData.nodig_delay_timer = 0;
|
||||||
runData.dig_instantly = false;
|
runData.dig_instantly = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!runData.digging && runData.ldown_for_dig && !isLeftPressed()) {
|
if (!runData.digging && runData.ldown_for_dig && !input->getLeftState()) {
|
||||||
runData.ldown_for_dig = false;
|
runData.ldown_for_dig = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3491,13 +3465,13 @@ void Game::processPlayerInteraction(f32 dtime, bool show_hud, bool show_debug)
|
||||||
soundmaker->m_player_leftpunch_sound.name = "";
|
soundmaker->m_player_leftpunch_sound.name = "";
|
||||||
|
|
||||||
// Prepare for repeating, unless we're not supposed to
|
// Prepare for repeating, unless we're not supposed to
|
||||||
if (isRightPressed() && !g_settings->getBool("safe_dig_and_place"))
|
if (input->getRightState() && !g_settings->getBool("safe_dig_and_place"))
|
||||||
runData.repeat_rightclick_timer += dtime;
|
runData.repeat_rightclick_timer += dtime;
|
||||||
else
|
else
|
||||||
runData.repeat_rightclick_timer = 0;
|
runData.repeat_rightclick_timer = 0;
|
||||||
|
|
||||||
if (playeritem_def.usable && isLeftPressed()) {
|
if (playeritem_def.usable && input->getLeftState()) {
|
||||||
if (getLeftClicked() && (!client->moddingEnabled()
|
if (input->getLeftClicked() && (!client->moddingEnabled()
|
||||||
|| !client->getScript()->on_item_use(playeritem, pointed)))
|
|| !client->getScript()->on_item_use(playeritem, pointed)))
|
||||||
client->interact(4, pointed);
|
client->interact(4, pointed);
|
||||||
} else if (pointed.type == POINTEDTHING_NODE) {
|
} else if (pointed.type == POINTEDTHING_NODE) {
|
||||||
|
@ -3515,29 +3489,23 @@ void Game::processPlayerInteraction(f32 dtime, bool show_hud, bool show_debug)
|
||||||
playeritem_toolcap, dtime);
|
playeritem_toolcap, dtime);
|
||||||
} else if (pointed.type == POINTEDTHING_OBJECT) {
|
} else if (pointed.type == POINTEDTHING_OBJECT) {
|
||||||
handlePointingAtObject(pointed, playeritem, player_position, show_debug);
|
handlePointingAtObject(pointed, playeritem, player_position, show_debug);
|
||||||
} else if (isLeftPressed()) {
|
} else if (input->getLeftState()) {
|
||||||
// When button is held down in air, show continuous animation
|
// When button is held down in air, show continuous animation
|
||||||
runData.left_punch = true;
|
runData.left_punch = true;
|
||||||
} else if (getRightClicked()) {
|
} else if (input->getRightClicked()) {
|
||||||
handlePointingAtNothing(playeritem);
|
handlePointingAtNothing(playeritem);
|
||||||
}
|
}
|
||||||
|
|
||||||
runData.pointed_old = pointed;
|
runData.pointed_old = pointed;
|
||||||
|
|
||||||
if (runData.left_punch || getLeftClicked())
|
if (runData.left_punch || input->getLeftClicked())
|
||||||
camera->setDigging(0); // left click animation
|
camera->setDigging(0); // left click animation
|
||||||
|
|
||||||
input->resetLeftClicked();
|
input->resetLeftClicked();
|
||||||
input->resetRightClicked();
|
input->resetRightClicked();
|
||||||
|
|
||||||
input->joystick.clearWasKeyDown(KeyType::MOUSE_L);
|
|
||||||
input->joystick.clearWasKeyDown(KeyType::MOUSE_R);
|
|
||||||
|
|
||||||
input->resetLeftReleased();
|
input->resetLeftReleased();
|
||||||
input->resetRightReleased();
|
input->resetRightReleased();
|
||||||
|
|
||||||
input->joystick.clearWasKeyReleased(KeyType::MOUSE_L);
|
|
||||||
input->joystick.clearWasKeyReleased(KeyType::MOUSE_R);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -3654,7 +3622,7 @@ void Game::handlePointingAtNode(const PointedThing &pointed,
|
||||||
|
|
||||||
ClientMap &map = client->getEnv().getClientMap();
|
ClientMap &map = client->getEnv().getClientMap();
|
||||||
|
|
||||||
if (runData.nodig_delay_timer <= 0.0 && isLeftPressed()
|
if (runData.nodig_delay_timer <= 0.0 && input->getLeftState()
|
||||||
&& !runData.digging_blocked
|
&& !runData.digging_blocked
|
||||||
&& client->checkPrivilege("interact")) {
|
&& client->checkPrivilege("interact")) {
|
||||||
handleDigging(pointed, nodepos, playeritem_toolcap, dtime);
|
handleDigging(pointed, nodepos, playeritem_toolcap, dtime);
|
||||||
|
@ -3675,7 +3643,7 @@ void Game::handlePointingAtNode(const PointedThing &pointed,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((getRightClicked() ||
|
if ((input->getRightClicked() ||
|
||||||
runData.repeat_rightclick_timer >= m_repeat_right_click_time) &&
|
runData.repeat_rightclick_timer >= m_repeat_right_click_time) &&
|
||||||
client->checkPrivilege("interact")) {
|
client->checkPrivilege("interact")) {
|
||||||
runData.repeat_rightclick_timer = 0;
|
runData.repeat_rightclick_timer = 0;
|
||||||
|
@ -3754,7 +3722,7 @@ void Game::handlePointingAtObject(const PointedThing &pointed, const ItemStack &
|
||||||
|
|
||||||
m_game_ui->setInfoText(infotext);
|
m_game_ui->setInfoText(infotext);
|
||||||
|
|
||||||
if (isLeftPressed()) {
|
if (input->getLeftState()) {
|
||||||
bool do_punch = false;
|
bool do_punch = false;
|
||||||
bool do_punch_damage = false;
|
bool do_punch_damage = false;
|
||||||
|
|
||||||
|
@ -3764,7 +3732,7 @@ void Game::handlePointingAtObject(const PointedThing &pointed, const ItemStack &
|
||||||
runData.object_hit_delay_timer = object_hit_delay;
|
runData.object_hit_delay_timer = object_hit_delay;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (getLeftClicked())
|
if (input->getLeftClicked())
|
||||||
do_punch = true;
|
do_punch = true;
|
||||||
|
|
||||||
if (do_punch) {
|
if (do_punch) {
|
||||||
|
@ -3791,7 +3759,7 @@ void Game::handlePointingAtObject(const PointedThing &pointed, const ItemStack &
|
||||||
if (!disable_send)
|
if (!disable_send)
|
||||||
client->interact(0, pointed);
|
client->interact(0, pointed);
|
||||||
}
|
}
|
||||||
} else if (getRightClicked()) {
|
} else if (input->getRightClicked()) {
|
||||||
infostream << "Right-clicked object" << std::endl;
|
infostream << "Right-clicked object" << std::endl;
|
||||||
client->interact(3, pointed); // place
|
client->interact(3, pointed); // place
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue