From e1146396bc043782b288226c027bc28857ccf4d2 Mon Sep 17 00:00:00 2001 From: sapier Date: Sun, 7 Apr 2013 20:33:00 +0200 Subject: fix mesh leak in camera class --- src/camera.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'src/camera.cpp') diff --git a/src/camera.cpp b/src/camera.cpp index 138b022c0..735a8d1e9 100644 --- a/src/camera.cpp +++ b/src/camera.cpp @@ -69,7 +69,8 @@ Camera::Camera(scene::ISceneManager* smgr, MapDrawControl& draw_control, m_view_bobbing_speed(0), m_digging_anim(0), - m_digging_button(-1) + m_digging_button(-1), + m_dummymesh(createCubeMesh(v3f(1,1,1))) { //dstream<<__FUNCTION_NAME<createNewSceneManager(); m_wieldmgr->addCameraSceneNode(); - m_wieldnode = m_wieldmgr->addMeshSceneNode(createCubeMesh(v3f(1,1,1)), NULL); // need a dummy mesh + m_wieldnode = m_wieldmgr->addMeshSceneNode(m_dummymesh, NULL); // need a dummy mesh } Camera::~Camera() { - m_wieldnode->setMesh(NULL); m_wieldmgr->drop(); + + delete m_dummymesh; } bool Camera::successfullyCreated(std::wstring& error_message) -- cgit v1.2.3 From 7cd5eb4c77de9fda4946de7e1c2384d0c2a0253e Mon Sep 17 00:00:00 2001 From: MirceaKitsune Date: Sun, 7 Apr 2013 15:41:33 -1000 Subject: Swing the camera down when the player lands on the ground, based on the velocity the surface is hit with. --- src/camera.cpp | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) (limited to 'src/camera.cpp') diff --git a/src/camera.cpp b/src/camera.cpp index 735a8d1e9..211ecfd70 100644 --- a/src/camera.cpp +++ b/src/camera.cpp @@ -67,6 +67,7 @@ Camera::Camera(scene::ISceneManager* smgr, MapDrawControl& draw_control, m_view_bobbing_anim(0), m_view_bobbing_state(0), m_view_bobbing_speed(0), + m_view_bobbing_fall(0), m_digging_anim(0), m_digging_button(-1), @@ -134,6 +135,13 @@ inline f32 my_modf(f32 x) void Camera::step(f32 dtime) { + if(m_view_bobbing_fall > 0) + { + m_view_bobbing_fall -= 3 * dtime; + if(m_view_bobbing_fall <= 0) + m_view_bobbing_fall = -1; // Mark the effect as finished + } + if (m_view_bobbing_state != 0) { //f32 offset = dtime * m_view_bobbing_speed * 0.035; @@ -237,11 +245,28 @@ void Camera::update(LocalPlayer* player, f32 frametime, v2u32 screensize, m_playernode->setRotation(v3f(0, -1 * player->getYaw(), 0)); m_playernode->updateAbsolutePosition(); - //Get camera tilt timer (hurt animation) + // Get camera tilt timer (hurt animation) float cameratilt = fabs(fabs(player->hurt_tilt_timer-0.75)-0.75); + // Fall bobbing animation + float fall_bobbing = 0; + if(player->camera_impact >= 1) + { + 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 + 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; + // Smoothen and invert the above + fall_bobbing = sin(fall_bobbing * 0.5 * M_PI) * -1; + // Amplify according to the intensity of the impact + fall_bobbing *= (1 - rangelim(50 / player->camera_impact, 0, 1)) * 5; + } + // Set head node transformation - m_headnode->setPosition(player->getEyeOffset()+v3f(0,cameratilt*-player->hurt_tilt_strength,0)); + m_headnode->setPosition(player->getEyeOffset()+v3f(0,cameratilt*-player->hurt_tilt_strength+fall_bobbing,0)); m_headnode->setRotation(v3f(player->getPitch(), 0, cameratilt*player->hurt_tilt_strength)); m_headnode->updateAbsolutePosition(); -- cgit v1.2.3