diff options
author | Samuel Barney <samjbarney@gmail.com> | 2014-08-21 16:12:05 +0200 |
---|---|---|
committer | Samuel Barney <samjbarney@gmail.com> | 2014-08-21 16:12:05 +0200 |
commit | 77a36b58d8731821c88493742781cee0602d12ef (patch) | |
tree | 367ec7d2e9fe037b81721d62a94b01fa092d9227 /src/Mobs/Old Mobs/PassiveMonster.cpp | |
parent | Fixed to make metadata work correctly. (diff) | |
download | cuberite-77a36b58d8731821c88493742781cee0602d12ef.tar cuberite-77a36b58d8731821c88493742781cee0602d12ef.tar.gz cuberite-77a36b58d8731821c88493742781cee0602d12ef.tar.bz2 cuberite-77a36b58d8731821c88493742781cee0602d12ef.tar.lz cuberite-77a36b58d8731821c88493742781cee0602d12ef.tar.xz cuberite-77a36b58d8731821c88493742781cee0602d12ef.tar.zst cuberite-77a36b58d8731821c88493742781cee0602d12ef.zip |
Diffstat (limited to 'src/Mobs/Old Mobs/PassiveMonster.cpp')
-rw-r--r-- | src/Mobs/Old Mobs/PassiveMonster.cpp | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/src/Mobs/Old Mobs/PassiveMonster.cpp b/src/Mobs/Old Mobs/PassiveMonster.cpp new file mode 100644 index 000000000..2861d7314 --- /dev/null +++ b/src/Mobs/Old Mobs/PassiveMonster.cpp @@ -0,0 +1,65 @@ + +#include "Globals.h" // NOTE: MSVC stupidness requires this to be the same across all modules + +#include "PassiveMonster.h" +#include "../World.h" +#include "../Entities/Player.h" + + + + +cPassiveMonster::cPassiveMonster(const AString & a_ConfigName, eType a_MobType, const AString & a_SoundHurt, const AString & a_SoundDeath, double a_Width, double a_Height) : + super(a_ConfigName, a_MobType, a_SoundHurt, a_SoundDeath, a_Width, a_Height) +{ + m_EMPersonality = PASSIVE; +} + + + + + +bool cPassiveMonster::DoTakeDamage(TakeDamageInfo & a_TDI) +{ + if (!super::DoTakeDamage(a_TDI)) + { + return false; + } + if ((a_TDI.Attacker != this) && (a_TDI.Attacker != NULL)) + { + m_EMState = ESCAPING; + } + return true; +} + + + + + +void cPassiveMonster::Tick(float a_Dt, cChunk & a_Chunk) +{ + super::Tick(a_Dt, a_Chunk); + + if (m_EMState == ESCAPING) + { + CheckEventLostPlayer(); + } + cItem FollowedItem = GetFollowedItem(); + if (FollowedItem.IsEmpty()) + { + return; + } + cPlayer * a_Closest_Player = m_World->FindClosestPlayer(GetPosition(), (float)m_SightDistance); + if (a_Closest_Player != NULL) + { + if (a_Closest_Player->GetEquippedItem().IsEqual(FollowedItem)) + { + Vector3d PlayerPos = a_Closest_Player->GetPosition(); + MoveToPosition(PlayerPos); + } + } +} + + + + + |