diff options
author | Jeija <norrepli@gmail.com> | 2012-04-28 02:06:25 +0200 |
---|---|---|
committer | PilzAdam <PilzAdam@gmx.de> | 2013-01-03 15:16:46 +0100 |
commit | a27cdf16f40e3a3f4772b944ead8f1e4e5618359 (patch) | |
tree | a1bb28af3f171bb2008955aca12005a458d80c1c /src | |
parent | 5a13c49492d466e35624bafba5ac74ad728fef4f (diff) | |
download | minetest-a27cdf16f40e3a3f4772b944ead8f1e4e5618359.tar.gz minetest-a27cdf16f40e3a3f4772b944ead8f1e4e5618359.tar.bz2 minetest-a27cdf16f40e3a3f4772b944ead8f1e4e5618359.zip |
Tilt camera on player damage (tweaked by PilzAdam)
Diffstat (limited to 'src')
-rw-r--r-- | src/camera.cpp | 7 | ||||
-rw-r--r-- | src/game.cpp | 23 | ||||
-rw-r--r-- | src/player.h | 3 |
3 files changed, 31 insertions, 2 deletions
diff --git a/src/camera.cpp b/src/camera.cpp index 1b9a8c763..33e85d069 100644 --- a/src/camera.cpp +++ b/src/camera.cpp @@ -233,9 +233,12 @@ 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) + float cameratilt = fabs(fabs(player->hurt_tilt_timer-0.75)-0.75); + // Set head node transformation - m_headnode->setPosition(player->getEyeOffset()); - m_headnode->setRotation(v3f(player->getPitch(), 0, 0)); + m_headnode->setPosition(player->getEyeOffset()+v3f(0,cameratilt*-player->hurt_tilt_strength,0)); + m_headnode->setRotation(v3f(player->getPitch(), 0, cameratilt*player->hurt_tilt_strength)); m_headnode->updateAbsolutePosition(); // Compute relative camera position and target diff --git a/src/game.cpp b/src/game.cpp index 05f1da5e0..5a278a52e 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -1356,6 +1356,10 @@ void the_game( // NOTE: So we have to use getTime() and call run()s between them u32 lasttime = device->getTimer()->getTime(); + LocalPlayer* player = client.getEnv().getLocalPlayer(); + player->hurt_tilt_timer = 0; + player->hurt_tilt_strength = 0; + for(;;) { if(device->run() == false || kill == true) @@ -2055,8 +2059,13 @@ void the_game( { //u16 damage = event.player_damage.amount; //infostream<<"Player damage: "<<damage<<std::endl; + damage_flash += 100.0; damage_flash += 8.0 * event.player_damage.amount; + + player->hurt_tilt_timer = 1.5; + player->hurt_tilt_strength = event.player_damage.amount/2; + player->hurt_tilt_strength = rangelim(player->hurt_tilt_strength, 2.0, 10.0); } else if(event.type == CE_PLAYER_FORCE_MOVE) { @@ -2088,6 +2097,10 @@ void the_game( damage_flash = 0; + LocalPlayer* player = client.getEnv().getLocalPlayer(); + player->hurt_tilt_timer = 0; + player->hurt_tilt_strength = 0; + /*LocalPlayer* player = client.getLocalPlayer(); player->setPosition(player->getPosition() + v3f(0,-BS,0)); camera.update(player, busytime, screensize);*/ @@ -3058,6 +3071,16 @@ void the_game( } /* + Damage camera tilt + */ + if(player->hurt_tilt_timer > 0.0) + { + player->hurt_tilt_timer -= dtime*5; + if(player->hurt_tilt_timer < 0) + player->hurt_tilt_strength = 0; + } + + /* Draw gui */ // 0-1ms diff --git a/src/player.h b/src/player.h index 5a489e64f..67b02c344 100644 --- a/src/player.h +++ b/src/player.h @@ -209,6 +209,9 @@ public: u16 hp; + float hurt_tilt_timer; + float hurt_tilt_strength; + u16 peer_id; std::string inventory_formspec; |