diff options
-rw-r--r-- | src/Entities/Compoments/AIAgressiveComponent.h | 18 | ||||
-rw-r--r-- | src/Entities/Compoments/AIAgresssiveComponent.cpp | 31 | ||||
-rw-r--r-- | src/Entities/Compoments/AllComponents.h | 3 |
3 files changed, 52 insertions, 0 deletions
diff --git a/src/Entities/Compoments/AIAgressiveComponent.h b/src/Entities/Compoments/AIAgressiveComponent.h new file mode 100644 index 000000000..338d311e3 --- /dev/null +++ b/src/Entities/Compoments/AIAgressiveComponent.h @@ -0,0 +1,18 @@ +#pragma once +#include "AIComponent.h" + +class cAIAgressiveComponent : public cAIComponent { +protected: + cEntity * m_Target; +public: + cAIAgressiveComponent(cMonster * a_Monster) : cAIComponent(a_Monster), m_Target(null){} + + virtual void Tick(float a_Dt, cChunk & a_Chunk) override; + virtual void InStateChasing(float a_Dt); + + virtual void EventSeePlayer(cEntity *); + virtual void Attack(float a_Dt); + +protected: + bool IsMovingToTargetPosition(); +}
\ No newline at end of file diff --git a/src/Entities/Compoments/AIAgresssiveComponent.cpp b/src/Entities/Compoments/AIAgresssiveComponent.cpp new file mode 100644 index 000000000..ae89ef5b9 --- /dev/null +++ b/src/Entities/Compoments/AIAgresssiveComponent.cpp @@ -0,0 +1,31 @@ +#include "AIAgressiveComponent.h" + +void cAIAggressiveComponent::Attack(float a_Dt) +{ + float attack_interval = m_Self->GetAttackInterval(); + attack_interval += a_Dt * m_Self->GetAttackRate(); + + if ((m_Target != NULL) && (attack_interval > 3.0)) + { + // Setting this higher gives us more wiggle room for attackrate + attack_interval = 0.0f; + m_Target->TakeDamage(dtMobAttack, this, m_AttackDamage, 0); + } + + m_Self->SetAttackInterval(attack_interval) +} + +bool cAIAggressiveComponent::IsMovingToTargetPosition() +{ + // Difference between destination x and target x is negligible (to 10^-12 precision) + if (fabsf((float)m_Self->m_FinalDestination.x - (float)m_Target->GetPosX()) < std::numeric_limits<float>::epsilon()) + { + return false; + } + // Difference between destination z and target z is negligible (to 10^-12 precision) + else if (fabsf((float)m_Self->m_FinalDestination.z - (float)m_Target->GetPosZ()) > std::numeric_limits<float>::epsilon()) + { + return false; + } + return true; +}
\ No newline at end of file diff --git a/src/Entities/Compoments/AllComponents.h b/src/Entities/Compoments/AllComponents.h new file mode 100644 index 000000000..3d182cfde --- /dev/null +++ b/src/Entities/Compoments/AllComponents.h @@ -0,0 +1,3 @@ +#pragma once + +#include "AIAgressiveComponent.h";
\ No newline at end of file |