&settingChangedCallback, this);
g_settings->registerChangedCallback("camera_smoothing",
&settingChangedCallback, this);
-
+ g_settings->registerChangedCallback("freecam",
+ &freecamChangedCallback, this);
+
readSettings();
#ifdef __ANDROID__
void Game::toggleFreecam()
{
- LocalPlayer *player = client->getEnv().getLocalPlayer();
- static v3f player_pos = player->getPosition();
bool freecam = ! g_settings->getBool("freecam");
g_settings->set("freecam", bool_to_cstr(freecam));
if (freecam) {
- player_pos = player->getPosition();
m_game_ui->showTranslatedStatusText("Freecam enabled");
} else {
- player->setPosition(player_pos);
m_game_ui->showTranslatedStatusText("Freecam disabled");
}
}
void Game::toggleUpdateCamera()
{
+ if (g_settings->getBool("freecam"))
+ return;
m_flags.disable_camera_update = !m_flags.disable_camera_update;
if (m_flags.disable_camera_update)
m_game_ui->showTranslatedStatusText("Camera update disabled");
v3s16 old_camera_offset = camera->getOffset();
- if (wasKeyDown(KeyType::CAMERA_MODE)) {
- GenericCAO *playercao = player->getCAO();
-
- // If playercao not loaded, don't change camera
- if (!playercao)
- return;
-
+ if (wasKeyDown(KeyType::CAMERA_MODE) && ! g_settings->getBool("freecam")) {
camera->toggleCameraMode();
-
- playercao->setVisible(camera->getCameraMode() > CAMERA_MODE_FIRST);
- playercao->setChildrenVisible(camera->getCameraMode() > CAMERA_MODE_FIRST);
+ updatePlayerCAOVisibility();
}
float full_punch_interval = playeritem_toolcap.full_punch_interval;
}
}
+void Game::updatePlayerCAOVisibility()
+{
+ LocalPlayer *player = client->getEnv().getLocalPlayer();
+ GenericCAO *playercao = player->getCAO();
+ if (!playercao)
+ return;
+ playercao->setVisible(camera->getCameraMode() > CAMERA_MODE_FIRST || g_settings->getBool("freecam"));
+ playercao->setChildrenVisible(camera->getCameraMode() > CAMERA_MODE_FIRST || g_settings->getBool("freecam"));
+}
void Game::updateSound(f32 dtime)
{
((Game *)data)->readSettings();
}
+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"))
+ player_pos = player->getPosition();
+ else
+ player->setPosition(player_pos);
+ game->updatePlayerCAOVisibility();
+}
+
void Game::readSettings()
{
m_cache_doubletap_jump = g_settings->getBool("doubletap_jump");
void toggleFog();
void toggleDebug();
void toggleUpdateCamera();
+ void updatePlayerCAOVisibility();
void increaseViewRange();
void decreaseViewRange();
void showOverlayMessage(const char *msg, float dtime, int percent,
bool draw_clouds = true);
+ static void freecamChangedCallback(const std::string &setting_name, void *data);
static void settingChangedCallback(const std::string &setting_name, void *data);
void readSettings();