From e0f240424c0f172a5bbb08851620dc31b59104cd Mon Sep 17 00:00:00 2001 From: Samuel Barney Date: Thu, 10 Jul 2014 14:14:21 -0600 Subject: Started flushing out the AIAgressiveComponent. Added the AllComponent.h header file. --- src/Entities/Compoments/AIAgressiveComponent.h | 18 +++++++++++++ src/Entities/Compoments/AIAgresssiveComponent.cpp | 31 +++++++++++++++++++++++ src/Entities/Compoments/AllComponents.h | 3 +++ 3 files changed, 52 insertions(+) create mode 100644 src/Entities/Compoments/AIAgressiveComponent.h create mode 100644 src/Entities/Compoments/AIAgresssiveComponent.cpp create mode 100644 src/Entities/Compoments/AllComponents.h 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::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::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 -- cgit v1.2.3