aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJeija <norrepli@gmail.com>2012-04-28 02:06:25 +0200
committerPilzAdam <PilzAdam@gmx.de>2013-01-03 15:16:46 +0100
commita27cdf16f40e3a3f4772b944ead8f1e4e5618359 (patch)
treea1bb28af3f171bb2008955aca12005a458d80c1c /src
parent5a13c49492d466e35624bafba5ac74ad728fef4f (diff)
downloadminetest-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.cpp7
-rw-r--r--src/game.cpp23
-rw-r--r--src/player.h3
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;