1
0

Implemented fall damage for mobs

+ Implemented mobile fall damage
* Formatting fixes
+ Defined new Position->Integer macros
This commit is contained in:
Tiger Wang
2014-01-25 19:02:13 +00:00
parent 60b7f5f23d
commit 7468ba0f10
5 changed files with 41 additions and 11 deletions

View File

@@ -82,6 +82,7 @@ cMonster::cMonster(const AString & a_ConfigName, eType a_MobType, const AString
, m_AttackRange(2)
, m_AttackInterval(0)
, m_BurnsInDaylight(false)
, m_LastGroundHeight(POSY_TOINT)
{
if (!a_ConfigName.empty())
{
@@ -113,7 +114,7 @@ void cMonster::TickPathFinding()
std::vector<Vector3d> m_PotentialCoordinates;
m_TraversedCoordinates.push_back(Vector3i(PosX, PosY, PosZ));
static const struct // Define which directions the torch can power
static const struct // Define which directions to try to move to
{
int x, z;
} gCrossCoords[] =
@@ -261,9 +262,9 @@ void cMonster::Tick(float a_Dt, cChunk & a_Chunk)
{
if (m_bOnGround)
{
int NextHeight = FindFirstNonAirBlockPosition(m_Destination.x, m_Destination.z);
m_Destination.y = FindFirstNonAirBlockPosition(m_Destination.x, m_Destination.z);
if (DoesPosYRequireJump(NextHeight))
if (DoesPosYRequireJump(m_Destination.y))
{
m_bOnGround = false;
AddPosY(1.5); // Jump!!
@@ -298,10 +299,11 @@ void cMonster::Tick(float a_Dt, cChunk & a_Chunk)
}
}
if (ReachedFinalDestination())
if (ReachedFinalDestination() && (m_Target != NULL))
Attack(a_Dt);
SetPitchAndYawFromDestination();
HandleFalling();
switch (m_EMState)
{
@@ -369,6 +371,27 @@ void cMonster::SetPitchAndYawFromDestination()
void cMonster::HandleFalling()
{
if (m_bOnGround)
{
int Damage = (m_LastGroundHeight - POSY_TOINT) - 3;
if (Damage > 0)
{
TakeDamage(dtFalling, NULL, Damage, Damage, 0);
// Fall particles
GetWorld()->BroadcastSoundParticleEffect(2006, POSX_TOINT, POSY_TOINT - 1, POSZ_TOINT, Damage /* Used as particle effect speed modifier */);
}
m_LastGroundHeight = (int)floor(GetPosY());
}
}
int cMonster::FindFirstNonAirBlockPosition(double a_PosX, double a_PosZ)
{
int PosY = (int)floor(GetPosY());