diff options
Diffstat (limited to 'src/Entities/Compoments/AIAgresssiveComponent.cpp')
-rw-r--r-- | src/Entities/Compoments/AIAgresssiveComponent.cpp | 31 |
1 files changed, 31 insertions, 0 deletions
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 |