summaryrefslogtreecommitdiffstats
path: root/src/Entities/Entity.cpp
diff options
context:
space:
mode:
authorTycho Bickerstaff <work.tycho@gmail.com>2013-12-22 14:19:27 +0100
committerTycho Bickerstaff <work.tycho@gmail.com>2013-12-22 14:19:27 +0100
commit94ca07cfbfe0016d70963c055c87fe14f8622a4d (patch)
tree28dc91dc948287f802d9628a2ea715e1d4e0be49 /src/Entities/Entity.cpp
parentChunk is now warnings clean (diff)
parentUpdate GETTING-STARTED.md (diff)
downloadcuberite-94ca07cfbfe0016d70963c055c87fe14f8622a4d.tar
cuberite-94ca07cfbfe0016d70963c055c87fe14f8622a4d.tar.gz
cuberite-94ca07cfbfe0016d70963c055c87fe14f8622a4d.tar.bz2
cuberite-94ca07cfbfe0016d70963c055c87fe14f8622a4d.tar.lz
cuberite-94ca07cfbfe0016d70963c055c87fe14f8622a4d.tar.xz
cuberite-94ca07cfbfe0016d70963c055c87fe14f8622a4d.tar.zst
cuberite-94ca07cfbfe0016d70963c055c87fe14f8622a4d.zip
Diffstat (limited to 'src/Entities/Entity.cpp')
-rw-r--r--src/Entities/Entity.cpp25
1 files changed, 21 insertions, 4 deletions
diff --git a/src/Entities/Entity.cpp b/src/Entities/Entity.cpp
index 8fcdcc82f..8a74c9da4 100644
--- a/src/Entities/Entity.cpp
+++ b/src/Entities/Entity.cpp
@@ -13,6 +13,7 @@
#include "../Bindings/PluginManager.h"
#include "../Tracer.h"
#include "Minecart.h"
+#include "Player.h"
@@ -239,10 +240,14 @@ void cEntity::TakeDamage(eDamageType a_DamageType, cEntity * a_Attacker, int a_R
TDI.Attacker = a_Attacker;
TDI.RawDamage = a_RawDamage;
TDI.FinalDamage = a_FinalDamage;
- Vector3d Heading;
- Heading.x = sin(GetRotation());
- Heading.y = 0.4; // TODO: adjust the amount of "up" knockback when testing
- Heading.z = cos(GetRotation());
+
+ Vector3d Heading(0, 0, 0);
+ if (a_Attacker != NULL)
+ {
+ Heading = a_Attacker->GetLookVector() * (a_Attacker->IsSprinting() ? 10 : 8);
+ }
+ Heading.y = 2;
+
TDI.Knockback = Heading * a_KnockbackAmount;
DoTakeDamage(TDI);
}
@@ -297,6 +302,16 @@ void cEntity::DoTakeDamage(TakeDamageInfo & a_TDI)
return;
}
+ if ((a_TDI.Attacker != NULL) && (a_TDI.Attacker->IsPlayer()))
+ {
+ // IsOnGround() only is false if the player is moving downwards
+ if (!((cPlayer *)a_TDI.Attacker)->IsOnGround()) // TODO: Better damage increase, and check for enchantments (and use magic critical instead of plain)
+ {
+ a_TDI.FinalDamage += 2;
+ m_World->BroadcastEntityAnimation(*this, 4); // Critical hit
+ }
+ }
+
m_Health -= (short)a_TDI.FinalDamage;
// TODO: Apply damage to armor
@@ -306,6 +321,8 @@ void cEntity::DoTakeDamage(TakeDamageInfo & a_TDI)
m_Health = 0;
}
+ AddSpeed(a_TDI.Knockback * 2);
+
m_World->BroadcastEntityStatus(*this, ENTITY_STATUS_HURT);
if (m_Health <= 0)