Improved Freecam
This commit is contained in:
parent
f7a042223f
commit
85574cb53c
@ -943,7 +943,7 @@ void GenericCAO::updateNodePos()
|
||||
void GenericCAO::step(float dtime, ClientEnvironment *env)
|
||||
{
|
||||
// Handle model animations and update positions instantly to prevent lags
|
||||
if (m_is_local_player) {
|
||||
if (m_is_local_player && ! g_settings->getBool("freecam")) {
|
||||
LocalPlayer *player = m_env->getLocalPlayer();
|
||||
m_position = player->getPosition();
|
||||
pos_translator.val_current = m_position;
|
||||
|
@ -108,7 +108,9 @@ Game::Game() :
|
||||
&settingChangedCallback, this);
|
||||
g_settings->registerChangedCallback("camera_smoothing",
|
||||
&settingChangedCallback, this);
|
||||
|
||||
g_settings->registerChangedCallback("freecam",
|
||||
&freecamChangedCallback, this);
|
||||
|
||||
readSettings();
|
||||
|
||||
#ifdef __ANDROID__
|
||||
@ -1432,16 +1434,12 @@ void Game::toggleKillaura()
|
||||
|
||||
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");
|
||||
}
|
||||
}
|
||||
@ -1566,6 +1564,8 @@ void Game::toggleDebug()
|
||||
|
||||
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");
|
||||
@ -2193,17 +2193,9 @@ void Game::updateCamera(u32 busy_time, f32 dtime)
|
||||
|
||||
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;
|
||||
@ -2234,6 +2226,15 @@ void Game::updateCamera(u32 busy_time, f32 dtime)
|
||||
}
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
@ -3322,6 +3323,18 @@ void Game::settingChangedCallback(const std::string &setting_name, void *data)
|
||||
((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");
|
||||
|
@ -742,6 +742,7 @@ public:
|
||||
void toggleFog();
|
||||
void toggleDebug();
|
||||
void toggleUpdateCamera();
|
||||
void updatePlayerCAOVisibility();
|
||||
|
||||
void increaseViewRange();
|
||||
void decreaseViewRange();
|
||||
@ -789,6 +790,7 @@ public:
|
||||
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();
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user