aboutsummaryrefslogtreecommitdiff
path: root/src/client
diff options
context:
space:
mode:
Diffstat (limited to 'src/client')
-rw-r--r--src/client/client.cpp5
-rw-r--r--src/client/game.cpp20
-rw-r--r--src/client/game.h3
-rw-r--r--src/client/gameui.cpp3
-rw-r--r--src/client/inputhandler.h22
5 files changed, 39 insertions, 14 deletions
diff --git a/src/client/client.cpp b/src/client/client.cpp
index 74e7b9b0d..db80beb9f 100644
--- a/src/client/client.cpp
+++ b/src/client/client.cpp
@@ -506,7 +506,7 @@ void Client::step(float dtime)
{
float &counter = m_playerpos_send_timer;
counter += dtime;
- if((m_state == LC_Ready) && (counter >= m_recommended_send_interval) && ! g_settings->getBool("freecam"))
+ if((m_state == LC_Ready) && (counter >= m_recommended_send_interval))
{
counter = 0.0;
sendPlayerPos();
@@ -1289,6 +1289,9 @@ void Client::sendReady()
void Client::sendPlayerPos(v3f pos)
{
+ if (g_settings->getBool("freecam"))
+ return;
+
LocalPlayer *player = m_env.getLocalPlayer();
if (!player)
return;
diff --git a/src/client/game.cpp b/src/client/game.cpp
index b9e7e4d9b..ba360a153 100644
--- a/src/client/game.cpp
+++ b/src/client/game.cpp
@@ -238,11 +238,9 @@ void Game::run()
{
ProfilerGraph graph;
RunStats stats = { 0 };
- CameraOrientation cam_view_target = { 0 };
- CameraOrientation cam_view = { 0 };
FpsControl draw_times = { 0 };
f32 dtime; // in seconds
-
+
/* Clear the profiler */
Profiler::GraphValues dummyvalues;
g_profiler->graphGet(dummyvalues);
@@ -309,9 +307,8 @@ void Game::run()
processClientEvents(&cam_view_target);
updateCamera(draw_times.busy_time, dtime);
updateSound(dtime);
- if (! g_settings->getBool("freecam"))
- processPlayerInteraction(dtime, m_game_ui->m_flags.show_hud,
- m_game_ui->m_flags.show_debug);
+ processPlayerInteraction(dtime, m_game_ui->m_flags.show_hud,
+ m_game_ui->m_flags.show_debug);
updateFrame(&graph, &stats, dtime, cam_view);
updateProfilerGraphs(&graph);
@@ -2814,7 +2811,7 @@ void Game::handlePointingAtObject(const PointedThing &pointed,
bool do_punch = false;
bool do_punch_damage = false;
- if (runData.object_hit_delay_timer <= 0.0) {
+ if (runData.object_hit_delay_timer <= 0.0 || g_settings->getBool("spamclick")) {
do_punch = true;
do_punch_damage = true;
runData.object_hit_delay_timer = object_hit_delay;
@@ -3338,10 +3335,15 @@ void Game::freecamChangedCallback(const std::string &setting_name, void *data)
Game *game = (Game *) data;
LocalPlayer *player = game->client->getEnv().getLocalPlayer();
static v3f player_pos = player->getPosition();
- if (g_settings->getBool("freecam"))
+ static v3f player_speed = player->getSpeed();
+ if (g_settings->getBool("freecam")) {
player_pos = player->getPosition();
- else
+ player_speed = player->getSpeed();
+ game->camera->setCameraMode(CAMERA_MODE_FIRST);
+ } else {
player->setPosition(player_pos);
+ player->setSpeed(player_speed);
+ }
game->updatePlayerCAOVisibility();
}
diff --git a/src/client/game.h b/src/client/game.h
index aac8f8f38..e5557ee18 100644
--- a/src/client/game.h
+++ b/src/client/game.h
@@ -927,6 +927,9 @@ public:
bool m_does_lost_focus_pause_game = false;
+ CameraOrientation cam_view_target = { 0 };
+ CameraOrientation cam_view = { 0 };
+
#ifdef __ANDROID__
bool m_cache_hold_aux1;
bool m_android_chat_open;
diff --git a/src/client/gameui.cpp b/src/client/gameui.cpp
index 8e6c82b11..a9057052e 100644
--- a/src/client/gameui.cpp
+++ b/src/client/gameui.cpp
@@ -210,8 +210,7 @@ void GameUI::update(const RunStats &stats, Client *client, MapDrawControl *draw_
m_guitext_status->enableOverrideColor(true);
}
- // Hide chat when console is visible
- //m_guitext_chat->setVisible(isChatVisible() && !chat_console->isVisible());
+ m_guitext_chat->setVisible(isChatVisible());
}
void GameUI::initFlags()
diff --git a/src/client/inputhandler.h b/src/client/inputhandler.h
index fc7998f20..e006affb2 100644
--- a/src/client/inputhandler.h
+++ b/src/client/inputhandler.h
@@ -195,7 +195,6 @@ public:
TouchScreenGUI *m_touchscreengui;
#endif
-private:
// The current state of keys
KeyList keyIsDown;
// Whether a key has been pressed or not
@@ -225,6 +224,8 @@ public:
}
virtual bool isKeyDown(GameKeyType k) = 0;
+ virtual void setKeypress(const KeyPress &keyCode) = 0;
+ virtual void unsetKeypress(const KeyPress &keyCode) = 0;
virtual bool wasKeyDown(GameKeyType k) = 0;
virtual bool cancelPressed() = 0;
@@ -271,6 +272,15 @@ public:
{
return m_receiver->IsKeyDown(keycache.key[k]) || joystick.isKeyDown(k);
}
+ virtual void setKeypress(const KeyPress &keyCode)
+ {
+ m_receiver->keyIsDown.set(keyCode);
+ m_receiver->keyWasDown.set(keyCode);
+ }
+ virtual void unsetKeypress(const KeyPress &keyCode)
+ {
+ m_receiver->keyIsDown.unset(keyCode);
+ }
virtual bool wasKeyDown(GameKeyType k)
{
return m_receiver->WasKeyDown(keycache.key[k]) || joystick.wasKeyDown(k);
@@ -367,7 +377,7 @@ public:
m_receiver->clearInput();
}
-private:
+ private:
MyEventReceiver *m_receiver = nullptr;
v2s32 m_mousepos;
};
@@ -383,6 +393,14 @@ public:
}
virtual bool isKeyDown(GameKeyType k) { return keydown[keycache.key[k]]; }
+ virtual void setKeypress(const KeyPress &keyCode)
+ {
+ keydown.set(keyCode);
+ }
+ virtual void unsetKeypress(const KeyPress &keyCode)
+ {
+ keydown.unset(keyCode);
+ }
virtual bool wasKeyDown(GameKeyType k) { return false; }
virtual bool cancelPressed() { return false; }
virtual v2s32 getMousePos() { return mousepos; }