diff options
author | Elias Fleckenstein <54945686+EliasFleckenstein03@users.noreply.github.com> | 2020-11-04 16:57:47 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-11-04 16:57:47 +0100 |
commit | 3e16c3a78fff61c20e63ba730d15e94e3bb877b4 (patch) | |
tree | c070350db219f2c4241d22bc31949685c7b42fe9 /src/client/camera.cpp | |
parent | 5d9ae5a91c544fc7fbd475decf47cef7e09ef8fc (diff) | |
parent | 6ccb5835ff55d85156be91473c598eca9d6cb9a6 (diff) | |
download | dragonfireclient-3e16c3a78fff61c20e63ba730d15e94e3bb877b4.tar.xz |
Merge branch 'master' into master
Diffstat (limited to 'src/client/camera.cpp')
-rw-r--r-- | src/client/camera.cpp | 336 |
1 files changed, 154 insertions, 182 deletions
diff --git a/src/client/camera.cpp b/src/client/camera.cpp index 9d74447d5..c9e8fab6a 100644 --- a/src/client/camera.cpp +++ b/src/client/camera.cpp @@ -22,13 +22,13 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "client.h" #include "config.h" #include "map.h" -#include "clientmap.h" // MapDrawControl +#include "clientmap.h" // MapDrawControl #include "player.h" #include <cmath> #include "client/renderingengine.h" #include "settings.h" #include "wieldmesh.h" -#include "noise.h" // easeCurve +#include "noise.h" // easeCurve #include "sound.h" #include "event.h" #include "nodedef.h" @@ -43,8 +43,9 @@ with this program; if not, write to the Free Software Foundation, Inc., #define WIELDMESH_AMPLITUDE_X 7.0f #define WIELDMESH_AMPLITUDE_Y 10.0f -Camera::Camera(MapDrawControl &draw_control, Client *client) : - m_draw_control(draw_control), m_client(client) +Camera::Camera(MapDrawControl &draw_control, Client *client): + m_draw_control(draw_control), + m_client(client) { scene::ISceneManager *smgr = RenderingEngine::get_scene_manager(); // note: making the camera node a child of the player node @@ -75,8 +76,8 @@ Camera::Camera(MapDrawControl &draw_control, Client *client) : m_cache_view_bobbing_amount = g_settings->getFloat("view_bobbing_amount"); // 45 degrees is the lowest FOV that doesn't cause the server to treat this // as a zoom FOV and load world beyond the set server limits. - m_cache_fov = std::fmax(g_settings->getFloat("fov"), 45.0f); - m_arm_inertia = g_settings->getBool("arm_inertia"); + m_cache_fov = std::fmax(g_settings->getFloat("fov"), 45.0f); + m_arm_inertia = g_settings->getBool("arm_inertia"); m_nametags.clear(); } @@ -102,8 +103,7 @@ void Camera::notifyFovChange() if (m_fov_transition_active) m_old_fov_degrees = m_curr_fov_degrees; else - m_old_fov_degrees = - m_server_sent_fov ? m_target_fov_degrees : m_cache_fov; + m_old_fov_degrees = m_server_sent_fov ? m_target_fov_degrees : m_cache_fov; /* * Update m_server_sent_fov next - it corresponds to the target FOV of the @@ -118,8 +118,7 @@ void Camera::notifyFovChange() m_target_fov_degrees = m_cache_fov; } else { m_server_sent_fov = true; - m_target_fov_degrees = - spec.is_multiplier ? m_cache_fov * spec.fov : spec.fov; + m_target_fov_degrees = spec.is_multiplier ? m_cache_fov * spec.fov : spec.fov; } if (spec.transition_time > 0.0f) @@ -163,9 +162,10 @@ inline f32 my_modf(f32 x) void Camera::step(f32 dtime) { - if (m_view_bobbing_fall > 0) { + if(m_view_bobbing_fall > 0) + { m_view_bobbing_fall -= 3 * dtime; - if (m_view_bobbing_fall <= 0) + if(m_view_bobbing_fall <= 0) m_view_bobbing_fall = -1; // Mark the effect as finished } @@ -175,8 +175,9 @@ void Camera::step(f32 dtime) if (m_wield_change_timer >= 0 && was_under_zero) m_wieldnode->setItem(m_wield_item_next, m_client); - if (m_view_bobbing_state != 0) { - // f32 offset = dtime * m_view_bobbing_speed * 0.035; + if (m_view_bobbing_state != 0) + { + //f32 offset = dtime * m_view_bobbing_speed * 0.035; f32 offset = dtime * m_view_bobbing_speed * 0.030; if (m_view_bobbing_state == 2) { // Animation is getting turned off @@ -201,15 +202,15 @@ void Camera::step(f32 dtime) m_view_bobbing_anim = 0; m_view_bobbing_state = 0; } - } else { + } + else { float was = m_view_bobbing_anim; m_view_bobbing_anim = my_modf(m_view_bobbing_anim + offset); bool step = (was == 0 || (was < 0.5f && m_view_bobbing_anim >= 0.5f) || (was > 0.5f && m_view_bobbing_anim <= 0.5f)); - if (step) { - m_client->getEventManager()->put(new SimpleTriggerEvent( - MtEvent::VIEW_BOBBING_STEP)); + if(step) { + m_client->getEventManager()->put(new SimpleTriggerEvent(MtEvent::VIEW_BOBBING_STEP)); } } } @@ -218,18 +219,18 @@ void Camera::step(f32 dtime) f32 offset = dtime * 3.5f; float m_digging_anim_was = m_digging_anim; m_digging_anim += offset; - if (m_digging_anim >= 1) { + if (m_digging_anim >= 1) + { m_digging_anim = 0; m_digging_button = -1; } float lim = 0.15; - if (m_digging_anim_was < lim && m_digging_anim >= lim) { + if(m_digging_anim_was < lim && m_digging_anim >= lim) + { if (m_digging_button == 0) { - m_client->getEventManager()->put(new SimpleTriggerEvent( - MtEvent::CAMERA_PUNCH_LEFT)); - } else if (m_digging_button == 1) { - m_client->getEventManager()->put(new SimpleTriggerEvent( - MtEvent::CAMERA_PUNCH_RIGHT)); + m_client->getEventManager()->put(new SimpleTriggerEvent(MtEvent::CAMERA_PUNCH_LEFT)); + } else if(m_digging_button == 1) { + m_client->getEventManager()->put(new SimpleTriggerEvent(MtEvent::CAMERA_PUNCH_RIGHT)); } } } @@ -258,9 +259,8 @@ static inline v2f dir(const v2f &pos_dist) void Camera::addArmInertia(f32 player_yaw) { - m_cam_vel.X = std::fabs(rangelim(m_last_cam_pos.X - player_yaw, -100.0f, 100.0f) / - 0.016f) * - 0.01f; + m_cam_vel.X = std::fabs(rangelim(m_last_cam_pos.X - player_yaw, + -100.0f, 100.0f) / 0.016f) * 0.01f; m_cam_vel.Y = std::fabs((m_last_cam_pos.Y - m_camera_direction.Y) / 0.016f); f32 gap_X = std::fabs(WIELDMESH_OFFSET_X - m_wieldmesh_offset.X); f32 gap_Y = std::fabs(WIELDMESH_OFFSET_Y - m_wieldmesh_offset.Y); @@ -276,17 +276,14 @@ void Camera::addArmInertia(f32 player_yaw) m_cam_vel_old.X = m_cam_vel.X; f32 acc_X = 0.12f * (m_cam_vel.X - (gap_X * 0.1f)); - m_wieldmesh_offset.X += - m_last_cam_pos.X < player_yaw ? acc_X : -acc_X; + m_wieldmesh_offset.X += m_last_cam_pos.X < player_yaw ? acc_X : -acc_X; if (m_last_cam_pos.X != player_yaw) m_last_cam_pos.X = player_yaw; m_wieldmesh_offset.X = rangelim(m_wieldmesh_offset.X, - WIELDMESH_OFFSET_X - - (WIELDMESH_AMPLITUDE_X * 0.5f), - WIELDMESH_OFFSET_X + - (WIELDMESH_AMPLITUDE_X * 0.5f)); + WIELDMESH_OFFSET_X - (WIELDMESH_AMPLITUDE_X * 0.5f), + WIELDMESH_OFFSET_X + (WIELDMESH_AMPLITUDE_X * 0.5f)); } if (m_cam_vel.Y > 1.0f) { @@ -294,18 +291,15 @@ void Camera::addArmInertia(f32 player_yaw) m_cam_vel_old.Y = m_cam_vel.Y; f32 acc_Y = 0.12f * (m_cam_vel.Y - (gap_Y * 0.1f)); - m_wieldmesh_offset.Y += m_last_cam_pos.Y > m_camera_direction.Y - ? acc_Y - : -acc_Y; + m_wieldmesh_offset.Y += + m_last_cam_pos.Y > m_camera_direction.Y ? acc_Y : -acc_Y; if (m_last_cam_pos.Y != m_camera_direction.Y) m_last_cam_pos.Y = m_camera_direction.Y; m_wieldmesh_offset.Y = rangelim(m_wieldmesh_offset.Y, - WIELDMESH_OFFSET_Y - - (WIELDMESH_AMPLITUDE_Y * 0.5f), - WIELDMESH_OFFSET_Y + - (WIELDMESH_AMPLITUDE_Y * 0.5f)); + WIELDMESH_OFFSET_Y - (WIELDMESH_AMPLITUDE_Y * 0.5f), + WIELDMESH_OFFSET_Y + (WIELDMESH_AMPLITUDE_Y * 0.5f)); } m_arm_dir = dir(m_wieldmesh_offset); @@ -315,34 +309,27 @@ void Camera::addArmInertia(f32 player_yaw) following a vector, with a smooth deceleration factor. */ - f32 dec_X = 0.35f * - (std::min(15.0f, m_cam_vel_old.X) * - (1.0f + (1.0f - m_arm_dir.X))) * - (gap_X / 20.0f); + f32 dec_X = 0.35f * (std::min(15.0f, m_cam_vel_old.X) * (1.0f + + (1.0f - m_arm_dir.X))) * (gap_X / 20.0f); - f32 dec_Y = 0.25f * - (std::min(15.0f, m_cam_vel_old.Y) * - (1.0f + (1.0f - m_arm_dir.Y))) * - (gap_Y / 15.0f); + f32 dec_Y = 0.25f * (std::min(15.0f, m_cam_vel_old.Y) * (1.0f + + (1.0f - m_arm_dir.Y))) * (gap_Y / 15.0f); if (gap_X < 0.1f) m_cam_vel_old.X = 0.0f; - m_wieldmesh_offset.X -= m_wieldmesh_offset.X > WIELDMESH_OFFSET_X - ? dec_X - : -dec_X; + m_wieldmesh_offset.X -= + m_wieldmesh_offset.X > WIELDMESH_OFFSET_X ? dec_X : -dec_X; if (gap_Y < 0.1f) m_cam_vel_old.Y = 0.0f; - m_wieldmesh_offset.Y -= m_wieldmesh_offset.Y > WIELDMESH_OFFSET_Y - ? dec_Y - : -dec_Y; + m_wieldmesh_offset.Y -= + m_wieldmesh_offset.Y > WIELDMESH_OFFSET_Y ? dec_Y : -dec_Y; } } -void Camera::update( - LocalPlayer *player, f32 frametime, f32 busytime, f32 tool_reload_ratio) +void Camera::update(LocalPlayer* player, f32 frametime, f32 busytime, f32 tool_reload_ratio) { // Get player position // Smooth the movement when walking up stairs @@ -353,24 +340,19 @@ void Camera::update( // mods expect the player head to be at the parent's position // plus eye height. if (player->getParent()) - player_position = - player->getParent()->getPosition() + - v3f(0, g_settings->getBool("float_above_parent") ? BS : 0, - 0); - - // Smooth the camera movement when the player instantly moves upward due to - // stepheight. To smooth the 'not touching_ground' stepheight, smoothing is - // necessary when jumping or swimming (for when moving from liquid to land). - // Disable smoothing if climbing or flying, to avoid upwards offset of player - // model when seen in 3rd person view. - bool flying = g_settings->getBool("free_move") && - m_client->checkLocalPrivilege("fly"); - if (player_position.Y > old_player_position.Y && !player->is_climbing && - !flying) { + player_position = player->getParent()->getPosition() + v3f(0, g_settings->getBool("float_above_parent") ? BS : 0, 0); + + // Smooth the camera movement when the player instantly moves upward due to stepheight. + // To smooth the 'not touching_ground' stepheight, smoothing is necessary when jumping + // or swimming (for when moving from liquid to land). + // Disable smoothing if climbing or flying, to avoid upwards offset of player model + // when seen in 3rd person view. + bool flying = g_settings->getBool("free_move") && m_client->checkLocalPrivilege("fly"); + if (player_position.Y > old_player_position.Y && !player->is_climbing && !flying) { f32 oldy = old_player_position.Y; f32 newy = player_position.Y; f32 t = std::exp(-23 * frametime); - player_position.Y = oldy * t + newy * (1 - t); + player_position.Y = oldy * t + newy * (1-t); } // Set player node transformation @@ -379,20 +361,19 @@ void Camera::update( m_playernode->updateAbsolutePosition(); // Get camera tilt timer (hurt animation) - float cameratilt = fabs(fabs(player->hurt_tilt_timer - 0.75) - 0.75); + float cameratilt = fabs(fabs(player->hurt_tilt_timer-0.75)-0.75); // Fall bobbing animation float fall_bobbing = 0; - if (player->camera_impact >= 1 && m_camera_mode < CAMERA_MODE_THIRD) { - if (m_view_bobbing_fall == -1) // Effect took place and has finished + if(player->camera_impact >= 1 && m_camera_mode < CAMERA_MODE_THIRD) + { + if(m_view_bobbing_fall == -1) // Effect took place and has finished player->camera_impact = m_view_bobbing_fall = 0; - else if (m_view_bobbing_fall == 0) // Initialize effect + else if(m_view_bobbing_fall == 0) // Initialize effect m_view_bobbing_fall = 1; // Convert 0 -> 1 to 0 -> 1 -> 0 - fall_bobbing = m_view_bobbing_fall < 0.5 - ? m_view_bobbing_fall * 2 - : -(m_view_bobbing_fall - 0.5) * 2 + 1; + fall_bobbing = m_view_bobbing_fall < 0.5 ? m_view_bobbing_fall * 2 : -(m_view_bobbing_fall - 0.5) * 2 + 1; // Smoothen and invert the above fall_bobbing = sin(fall_bobbing * 0.5 * M_PI) * -1; // Amplify according to the intensity of the impact @@ -413,56 +394,60 @@ void Camera::update( eye_offset.Y += cameratilt * -player->hurt_tilt_strength + fall_bobbing; m_headnode->setPosition(eye_offset); m_headnode->setRotation(v3f(player->getPitch(), 0, - cameratilt * player->hurt_tilt_strength)); + cameratilt * player->hurt_tilt_strength)); m_headnode->updateAbsolutePosition(); } // Compute relative camera position and target - v3f rel_cam_pos = v3f(0, 0, 0); - v3f rel_cam_target = v3f(0, 0, 1); - v3f rel_cam_up = v3f(0, 1, 0); + v3f rel_cam_pos = v3f(0,0,0); + v3f rel_cam_target = v3f(0,0,1); + v3f rel_cam_up = v3f(0,1,0); if (m_cache_view_bobbing_amount != 0.0f && m_view_bobbing_anim != 0.0f && - m_camera_mode < CAMERA_MODE_THIRD) { + m_camera_mode < CAMERA_MODE_THIRD) { f32 bobfrac = my_modf(m_view_bobbing_anim * 2); f32 bobdir = (m_view_bobbing_anim < 0.5) ? 1.0 : -1.0; -#if 1 + #if 1 f32 bobknob = 1.2; f32 bobtmp = sin(pow(bobfrac, bobknob) * M_PI); - // f32 bobtmp2 = cos(pow(bobfrac, bobknob) * M_PI); + //f32 bobtmp2 = cos(pow(bobfrac, bobknob) * M_PI); - v3f bobvec = v3f(0.3 * bobdir * sin(bobfrac * M_PI), - -0.28 * bobtmp * bobtmp, 0.); + v3f bobvec = v3f( + 0.3 * bobdir * sin(bobfrac * M_PI), + -0.28 * bobtmp * bobtmp, + 0.); - // rel_cam_pos += 0.2 * bobvec; - // rel_cam_target += 0.03 * bobvec; - // rel_cam_up.rotateXYBy(0.02 * bobdir * bobtmp * M_PI); + //rel_cam_pos += 0.2 * bobvec; + //rel_cam_target += 0.03 * bobvec; + //rel_cam_up.rotateXYBy(0.02 * bobdir * bobtmp * M_PI); float f = 1.0; f *= m_cache_view_bobbing_amount; rel_cam_pos += bobvec * f; - // rel_cam_target += 0.995 * bobvec * f; + //rel_cam_target += 0.995 * bobvec * f; rel_cam_target += bobvec * f; rel_cam_target.Z -= 0.005 * bobvec.Z * f; - // rel_cam_target.X -= 0.005 * bobvec.X * f; - // rel_cam_target.Y -= 0.005 * bobvec.Y * f; + //rel_cam_target.X -= 0.005 * bobvec.X * f; + //rel_cam_target.Y -= 0.005 * bobvec.Y * f; rel_cam_up.rotateXYBy(-0.03 * bobdir * bobtmp * M_PI * f); -#else + #else f32 angle_deg = 1 * bobdir * sin(bobfrac * M_PI); f32 angle_rad = angle_deg * M_PI / 180; f32 r = 0.05; - v3f off = v3f(r * sin(angle_rad), r * (cos(angle_rad) - 1), 0); + v3f off = v3f( + r * sin(angle_rad), + r * (cos(angle_rad) - 1), + 0); rel_cam_pos += off; - // rel_cam_target += off; + //rel_cam_target += off; rel_cam_up.rotateXYBy(angle_deg); -#endif + #endif + } // Compute absolute camera position and target - m_headnode->getAbsoluteTransformation().transformVect( - m_camera_position, rel_cam_pos); - m_headnode->getAbsoluteTransformation().rotateVect( - m_camera_direction, rel_cam_target - rel_cam_pos); + m_headnode->getAbsoluteTransformation().transformVect(m_camera_position, rel_cam_pos); + m_headnode->getAbsoluteTransformation().rotateVect(m_camera_direction, rel_cam_target - rel_cam_pos); v3f abs_cam_up; m_headnode->getAbsoluteTransformation().rotateVect(abs_cam_up, rel_cam_up); @@ -471,7 +456,8 @@ void Camera::update( v3f my_cp = m_camera_position; // Reposition the camera for third person view - if (m_camera_mode > CAMERA_MODE_FIRST) { + if (m_camera_mode > CAMERA_MODE_FIRST) + { if (m_camera_mode == CAMERA_MODE_THIRD_FRONT) m_camera_direction *= -1; @@ -483,46 +469,41 @@ void Camera::update( my_cp.X = m_camera_position.X + m_camera_direction.X * -i; my_cp.Z = m_camera_position.Z + m_camera_direction.Z * -i; if (i > 12) - my_cp.Y = m_camera_position.Y + - (m_camera_direction.Y * -i); + my_cp.Y = m_camera_position.Y + (m_camera_direction.Y * -i); // Prevent camera positioned inside nodes const NodeDefManager *nodemgr = m_client->ndef(); - MapNode n = m_client->getEnv().getClientMap().getNode( - floatToInt(my_cp, BS)); + MapNode n = m_client->getEnv().getClientMap() + .getNode(floatToInt(my_cp, BS)); - const ContentFeatures &features = nodemgr->get(n); + const ContentFeatures& features = nodemgr->get(n); if (features.walkable) { - my_cp.X += m_camera_direction.X * -1 * -BS / 2; - my_cp.Z += m_camera_direction.Z * -1 * -BS / 2; - my_cp.Y += m_camera_direction.Y * -1 * -BS / 2; + my_cp.X += m_camera_direction.X*-1*-BS/2; + my_cp.Z += m_camera_direction.Z*-1*-BS/2; + my_cp.Y += m_camera_direction.Y*-1*-BS/2; abort = true; break; } } // If node blocks camera position don't move y to heigh - if (abort && my_cp.Y > player_position.Y + BS * 2) - my_cp.Y = player_position.Y + BS * 2; + if (abort && my_cp.Y > player_position.Y+BS*2) + my_cp.Y = player_position.Y+BS*2; } // Update offset if too far away from the center of the map - m_camera_offset.X += - CAMERA_OFFSET_STEP * - (((s16)(my_cp.X / BS) - m_camera_offset.X) / CAMERA_OFFSET_STEP); - m_camera_offset.Y += - CAMERA_OFFSET_STEP * - (((s16)(my_cp.Y / BS) - m_camera_offset.Y) / CAMERA_OFFSET_STEP); - m_camera_offset.Z += - CAMERA_OFFSET_STEP * - (((s16)(my_cp.Z / BS) - m_camera_offset.Z) / CAMERA_OFFSET_STEP); + m_camera_offset.X += CAMERA_OFFSET_STEP* + (((s16)(my_cp.X/BS) - m_camera_offset.X)/CAMERA_OFFSET_STEP); + m_camera_offset.Y += CAMERA_OFFSET_STEP* + (((s16)(my_cp.Y/BS) - m_camera_offset.Y)/CAMERA_OFFSET_STEP); + m_camera_offset.Z += CAMERA_OFFSET_STEP* + (((s16)(my_cp.Z/BS) - m_camera_offset.Z)/CAMERA_OFFSET_STEP); // Set camera node transformation - m_cameranode->setPosition(my_cp - intToFloat(m_camera_offset, BS)); + m_cameranode->setPosition(my_cp-intToFloat(m_camera_offset, BS)); m_cameranode->setUpVector(abs_cam_up); // *100.0 helps in large map coordinates - m_cameranode->setTarget(my_cp - intToFloat(m_camera_offset, BS) + - 100 * m_camera_direction); + m_cameranode->setTarget(my_cp-intToFloat(m_camera_offset, BS) + 100 * m_camera_direction); // update the camera position in third-person mode to render blocks behind player // and correctly apply liquid post FX. @@ -542,9 +523,7 @@ void Camera::update( // Mark transition as complete if target FOV has been reached if ((m_fov_diff > 0.0f && m_curr_fov_degrees >= m_target_fov_degrees) || - (m_fov_diff < 0.0f && - m_curr_fov_degrees <= - m_target_fov_degrees)) { + (m_fov_diff < 0.0f && m_curr_fov_degrees <= m_target_fov_degrees)) { m_fov_transition_active = false; m_curr_fov_degrees = m_target_fov_degrees; } @@ -562,10 +541,10 @@ void Camera::update( // FOV and aspect ratio const v2u32 &window_size = RenderingEngine::get_instance()->getWindowSize(); - m_aspect = (f32)window_size.X / (f32)window_size.Y; + m_aspect = (f32) window_size.X / (f32) window_size.Y; m_fov_y = m_curr_fov_degrees * M_PI / 180.0; // Increase vertical FOV on lower aspect ratios (<16:10) - m_fov_y *= core::clamp(sqrt(16. / 10. / m_aspect), 1.0, 1.4); + m_fov_y *= core::clamp(sqrt(16./10. / m_aspect), 1.0, 1.4); m_fov_x = 2 * atan(m_aspect * tan(0.5 * m_fov_y)); m_cameranode->setAspectRatio(m_aspect); m_cameranode->setFOV(m_fov_y); @@ -574,27 +553,29 @@ void Camera::update( addArmInertia(player->getYaw()); // Position the wielded item - // v3f wield_position = v3f(45, -35, 65); + //v3f wield_position = v3f(45, -35, 65); v3f wield_position = v3f(m_wieldmesh_offset.X, m_wieldmesh_offset.Y, 65); - // v3f wield_rotation = v3f(-100, 120, -100); + //v3f wield_rotation = v3f(-100, 120, -100); v3f wield_rotation = v3f(-100, 120, -100); - wield_position.Y += fabs(m_wield_change_timer) * 320 - 40; - if (m_digging_anim < 0.05 || m_digging_anim > 0.5) { + wield_position.Y += fabs(m_wield_change_timer)*320 - 40; + if(m_digging_anim < 0.05 || m_digging_anim > 0.5) + { f32 frac = 1.0; - if (m_digging_anim > 0.5) + if(m_digging_anim > 0.5) frac = 2.0 * (m_digging_anim - 0.5); // This value starts from 1 and settles to 0 f32 ratiothing = std::pow((1.0f - tool_reload_ratio), 0.5f); - // f32 ratiothing2 = pow(ratiothing, 0.5f); - f32 ratiothing2 = (easeCurve(ratiothing * 0.5)) * 2.0; + //f32 ratiothing2 = pow(ratiothing, 0.5f); + f32 ratiothing2 = (easeCurve(ratiothing*0.5))*2.0; wield_position.Y -= frac * 25.0 * pow(ratiothing2, 1.7f); - // wield_position.Z += frac * 5.0 * ratiothing2; + //wield_position.Z += frac * 5.0 * ratiothing2; wield_position.X -= frac * 35.0 * pow(ratiothing2, 1.1f); wield_rotation.Y += frac * 70.0 * pow(ratiothing2, 1.4f); - // wield_rotation.X -= frac * 15.0 * pow(ratiothing2, 1.4f); - // wield_rotation.Z += frac * 15.0 * pow(ratiothing2, 1.0f); + //wield_rotation.X -= frac * 15.0 * pow(ratiothing2, 1.4f); + //wield_rotation.Z += frac * 15.0 * pow(ratiothing2, 1.0f); } - if (m_digging_button != -1) { + if (m_digging_button != -1) + { f32 digfrac = m_digging_anim; wield_position.X -= 50 * sin(pow(digfrac, 0.8f) * M_PI); wield_position.Y += 24 * sin(digfrac * 1.8 * M_PI); @@ -609,8 +590,8 @@ void Camera::update( wield_rotation *= core::RADTODEG; } else { f32 bobfrac = my_modf(m_view_bobbing_anim); - wield_position.X -= sin(bobfrac * M_PI * 2.0) * 3.0; - wield_position.Y += sin(my_modf(bobfrac * 2.0) * M_PI) * 3.0; + wield_position.X -= sin(bobfrac*M_PI*2.0) * 3.0; + wield_position.Y += sin(my_modf(bobfrac*2.0)*M_PI) * 3.0; } m_wieldnode->setPosition(wield_position); m_wieldnode->setRotation(wield_rotation); @@ -628,8 +609,7 @@ void Camera::update( const bool movement_Y = fabs(speed.Y) > BS; const bool walking = movement_XZ && player->touching_ground; - const bool swimming = - (movement_XZ || player->swimming_vertical) && player->in_liquid; + const bool swimming = (movement_XZ || player->swimming_vertical) && player->in_liquid; const bool climbing = movement_Y && player->is_climbing; if ((walking || swimming || climbing) && !flying) { // Start animation @@ -648,20 +628,18 @@ void Camera::updateViewingRange() // Ignore near_plane setting on all other platforms to prevent abuse #if ENABLE_GLES - m_cameranode->setNearValue( - rangelim(g_settings->getFloat("near_plane"), 0.0f, 0.25f) * BS); + m_cameranode->setNearValue(rangelim( + g_settings->getFloat("near_plane"), 0.0f, 0.25f) * BS); #else m_cameranode->setNearValue(0.1f * BS); #endif - m_draw_control.wanted_range = - std::fmin(adjustDist(viewing_range, getFovMax()), 4000); + m_draw_control.wanted_range = std::fmin(adjustDist(viewing_range, getFovMax()), 4000); if (m_draw_control.range_all) { m_cameranode->setFarValue(100000.0); return; } - m_cameranode->setFarValue( - (viewing_range < 2000) ? 2000 * BS : viewing_range * BS); + m_cameranode->setFarValue((viewing_range < 2000) ? 2000 * BS : viewing_range * BS); } void Camera::setDigging(s32 button) @@ -682,23 +660,23 @@ void Camera::wield(const ItemStack &item) } } -void Camera::drawWieldedTool(irr::core::matrix4 *translation) +void Camera::drawWieldedTool(irr::core::matrix4* translation) { // Clear Z buffer so that the wielded tool stays in front of world geometry m_wieldmgr->getVideoDriver()->clearZBuffer(); // Draw the wielded node (in a separate scene manager) - scene::ICameraSceneNode *cam = m_wieldmgr->getActiveCamera(); + scene::ICameraSceneNode* cam = m_wieldmgr->getActiveCamera(); cam->setAspectRatio(m_cameranode->getAspectRatio()); - cam->setFOV(72.0 * M_PI / 180.0); + cam->setFOV(72.0*M_PI/180.0); cam->setNearValue(10); cam->setFarValue(1000); - if (translation != NULL) { + if (translation != NULL) + { irr::core::matrix4 startMatrix = cam->getAbsoluteTransformation(); - irr::core::vector3df focusPoint = - (cam->getTarget() - cam->getAbsolutePosition()) - .setLength(1) + - cam->getAbsolutePosition(); + irr::core::vector3df focusPoint = (cam->getTarget() + - cam->getAbsolutePosition()).setLength(1) + + cam->getAbsolutePosition(); irr::core::vector3df camera_pos = (startMatrix * *translation).getTranslation(); @@ -713,7 +691,8 @@ void Camera::drawNametags() core::matrix4 trans = m_cameranode->getProjectionMatrix(); trans *= m_cameranode->getViewMatrix(); - for (std::list<Nametag *>::const_iterator i = m_nametags.begin(); + for (std::list<Nametag *>::const_iterator + i = m_nametags.begin(); i != m_nametags.end(); ++i) { Nametag *nametag = *i; if (nametag->nametag_color.getAlpha() == 0) { @@ -722,34 +701,27 @@ void Camera::drawNametags() // shadow can remain. continue; } - v3f pos = nametag->parent_node->getAbsolutePosition() + - nametag->nametag_pos * BS; - f32 transformed_pos[4] = {pos.X, pos.Y, pos.Z, 1.0f}; + v3f pos = nametag->parent_node->getAbsolutePosition() + nametag->nametag_pos * BS; + f32 transformed_pos[4] = { pos.X, pos.Y, pos.Z, 1.0f }; trans.multiplyWith1x4Matrix(transformed_pos); if (transformed_pos[3] > 0) { - std::wstring nametag_colorless = unescape_translate( - utf8_to_wide(nametag->nametag_text)); + std::wstring nametag_colorless = + unescape_translate(utf8_to_wide(nametag->nametag_text)); core::dimension2d<u32> textsize = - g_fontengine->getFont()->getDimension( - nametag_colorless.c_str()); - f32 zDiv = transformed_pos[3] == 0.0f - ? 1.0f - : core::reciprocal(transformed_pos[3]); - v2u32 screensize = RenderingEngine::get_video_driver() - ->getScreenSize(); + g_fontengine->getFont()->getDimension( + nametag_colorless.c_str()); + f32 zDiv = transformed_pos[3] == 0.0f ? 1.0f : + core::reciprocal(transformed_pos[3]); + v2u32 screensize = RenderingEngine::get_video_driver()->getScreenSize(); v2s32 screen_pos; - screen_pos.X = screensize.X * (0.5 * transformed_pos[0] * zDiv + - 0.5) - - textsize.Width / 2; - screen_pos.Y = screensize.Y * (0.5 - transformed_pos[1] * zDiv * - 0.5) - - textsize.Height / 2; + screen_pos.X = screensize.X * + (0.5 * transformed_pos[0] * zDiv + 0.5) - textsize.Width / 2; + screen_pos.Y = screensize.Y * + (0.5 - transformed_pos[1] * zDiv * 0.5) - textsize.Height / 2; core::rect<s32> size(0, 0, textsize.Width, textsize.Height); g_fontengine->getFont()->draw( - translate_string( - utf8_to_wide(nametag->nametag_text)) - .c_str(), - size + screen_pos, nametag->nametag_color); + translate_string(utf8_to_wide(nametag->nametag_text)).c_str(), + size + screen_pos, nametag->nametag_color); } } } |