diff options
Diffstat (limited to 'src/client')
-rw-r--r-- | src/client/client.cpp | 5 | ||||
-rw-r--r-- | src/client/game.cpp | 20 | ||||
-rw-r--r-- | src/client/game.h | 3 | ||||
-rw-r--r-- | src/client/gameui.cpp | 3 | ||||
-rw-r--r-- | src/client/inputhandler.h | 22 |
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; } |