From 75260997ad2763c56d8877b67e94693b5c46afa7 Mon Sep 17 00:00:00 2001 From: Samuel Barney Date: Wed, 20 Aug 2014 08:28:37 -0600 Subject: Revert "Fixed all compile errors for AIAggressiveComponent and AIComponent." This reverts commit 62a8403e4c61bd50680e9d8712506b951ac61b48. --- src/Entities/Compoments/AIAggressiveComponent.h | 25 ---- src/Entities/Compoments/AIAggresssiveComponent.cpp | 150 --------------------- src/Entities/Compoments/AIAgressiveComponent.h | 22 +++ src/Entities/Compoments/AIAgresssiveComponent.cpp | 122 +++++++++++++++++ src/Entities/Compoments/AIComponent.h | 2 +- 5 files changed, 145 insertions(+), 176 deletions(-) delete mode 100644 src/Entities/Compoments/AIAggressiveComponent.h delete mode 100644 src/Entities/Compoments/AIAggresssiveComponent.cpp create mode 100644 src/Entities/Compoments/AIAgressiveComponent.h create mode 100644 src/Entities/Compoments/AIAgresssiveComponent.cpp (limited to 'src/Entities') diff --git a/src/Entities/Compoments/AIAggressiveComponent.h b/src/Entities/Compoments/AIAggressiveComponent.h deleted file mode 100644 index a99fa2693..000000000 --- a/src/Entities/Compoments/AIAggressiveComponent.h +++ /dev/null @@ -1,25 +0,0 @@ -#pragma once -#include "AIComponent.h" - -class cAIAggressiveComponent : public cAIComponent { - typedef cAIComponent super; -protected: - enum MState{ATTACKING, IDLE, CHASING, ESCAPING} m_EMState; - cEntity * m_Target; -public: - cAIAggressiveComponent(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 Attack(float a_Dt); - -protected: - virtual void CheckEventLostPlayer(void); - virtual void CheckEventSeePlayer(void); - virtual void EventLosePlayer(void); - virtual void EventSeePlayer(cEntity *); - - bool IsMovingToTargetPosition(); - bool ReachedFinalDestination(); -}; diff --git a/src/Entities/Compoments/AIAggresssiveComponent.cpp b/src/Entities/Compoments/AIAggresssiveComponent.cpp deleted file mode 100644 index de8c8d2a9..000000000 --- a/src/Entities/Compoments/AIAggresssiveComponent.cpp +++ /dev/null @@ -1,150 +0,0 @@ - -#include "Globals.h" // NOTE: MSVC stupidness requires this to be the same across all modules -#include "AIAggressiveComponent.h" -#include "../Entities/Player.h" -#include "../Tracer.h" - - - -void cAIAggressiveComponent::Tick(float a_Dt, cChunk & a_Chunk) -{ - super::Tick(a_Dt, a_Chunk); - - if (m_EMState == CHASING) - { - CheckEventLostPlayer(); - } - else - { - CheckEventSeePlayer(); - } - - if (m_Target == NULL) - return; - - cTracer LineOfSight(m_Self->GetWorld()); - Vector3d AttackDirection(m_Target->GetPosition() - m_Self->GetPosition()); - - if (ReachedFinalDestination() && !LineOfSight.Trace(m_Self->GetPosition(), AttackDirection, (int)AttackDirection.Length())) - { - // Attack if reached destination, target isn't null, and have a clear line of sight to target (so won't attack through walls) - Attack(a_Dt / 1000); - } -} - - -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, m_Self, m_Self->GetAttackDamage(), 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; -} - - -bool cAIAggressiveComponent::ReachedFinalDestination() -{ - if ((m_Self->GetPosition() - m_Self->m_FinalDestination).Length() <= m_Self->GetAttackRange()) - { - return true; - } - - return false; -} - - -/// Event Checkers -//Checks to see if EventSeePlayer should be fired -//monster sez: Do I see the player -void cAIAggressiveComponent::CheckEventSeePlayer(void) -{ - // TODO: Rewrite this to use cWorld's DoWithPlayers() - cPlayer * Closest = m_Self->GetWorld()->FindClosestPlayer(m_Self->GetPosition(), (float)m_Self->GetSightDistance(), false); - - if (Closest != NULL) - { - EventSeePlayer(Closest); - } -} - - -void cAIAggressiveComponent::CheckEventLostPlayer(void) -{ - if (m_Target != NULL) - { - if ((m_Target->GetPosition() - m_Self->GetPosition()).Length() > m_Self->GetSightDistance()) - { - EventLosePlayer(); - } - } - else - { - EventLosePlayer(); - } -} - - -/// Event Handlers -void cAIAggressiveComponent::EventSeePlayer(cEntity * a_Entity) -{ - if (!((cPlayer *)a_Entity)->IsGameModeCreative()) - { - m_Target = a_Entity; - m_EMState = CHASING; - } -} - - -void cAIAggressiveComponent::EventLosePlayer(void) -{ - m_Target = NULL; - m_EMState = IDLE; -} - - -/// State Logic -void cAIAggressiveComponent::InStateChasing(float a_Dt) -{ - - if (m_Target != NULL) - { - if (m_Target->IsPlayer()) - { - if (((cPlayer *)m_Target)->IsGameModeCreative()) - { - m_EMState = IDLE; - return; - } - } - - if (!IsMovingToTargetPosition()) - { - m_Self->MoveToPosition(m_Target->GetPosition()); - } - } -} - - diff --git a/src/Entities/Compoments/AIAgressiveComponent.h b/src/Entities/Compoments/AIAgressiveComponent.h new file mode 100644 index 000000000..2cd3f2304 --- /dev/null +++ b/src/Entities/Compoments/AIAgressiveComponent.h @@ -0,0 +1,22 @@ +#pragma once +#include "AIComponent.h" + +class cAIAgressiveComponent : public cAIComponent { +protected: + enum MState{ATTACKING, IDLE, CHASING, ESCAPING} m_EMState; + 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: + virtual void EventLosePlayer(void); + virtual void CheckEventLostPlayer(void); + + 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..4dcd3e618 --- /dev/null +++ b/src/Entities/Compoments/AIAgresssiveComponent.cpp @@ -0,0 +1,122 @@ +#include "AIAgressiveComponent.h" + + + +void cAIAggressiveComponent::Tick(float a_Dt, cChunk & a_Chunk) +{ + super::Tick(a_Dt, a_Chunk); + + if (m_EMState == CHASING) + { + CheckEventLostPlayer(); + } + else + { + CheckEventSeePlayer(); + } + + if (m_Target == NULL) + return; + + cTracer LineOfSight(GetWorld()); + Vector3d AttackDirection(m_Target->GetPosition() - GetPosition()); + + if (ReachedFinalDestination() && !LineOfSight.Trace(GetPosition(), AttackDirection, (int)AttackDirection.Length())) + { + // Attack if reached destination, target isn't null, and have a clear line of sight to target (so won't attack through walls) + Attack(a_Dt / 1000); + } +} + + +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, m_Self, 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; +} + + +/// Event Checkers +void cAIAggressiveComponent::CheckEventLostPlayer(void) +{ + if (m_Target != NULL) + { + if ((m_Target->GetPosition() - GetPosition()).Length() > m_Self->GetSightDistance()) + { + EventLosePlayer(); + } + } + else + { + EventLosePlayer(); + } +} + + +/// Event Handlers +void cAggressiveMonster::EventSeePlayer(cEntity * a_Entity) +{ + if (!((cPlayer *)a_Entity)->IsGameModeCreative()) + { + m_Target = a_Entity; + m_EMState = CHASING; + } +} + + +void cAIAggressiveComponent::EventLosePlayer(void) +{ + m_Target = NULL; + m_EMState = IDLE; +} + + +/// State Logic +void cAggressiveMonster::InStateChasing(float a_Dt) +{ + super::InStateChasing(a_Dt); + + if (m_Target != NULL) + { + if (m_Target->IsPlayer()) + { + if (((cPlayer *)m_Target)->IsGameModeCreative()) + { + m_EMState = IDLE; + return; + } + } + + if (!IsMovingToTargetPosition()) + { + m_Self->MoveToPosition(m_Target->GetPosition()); + } + } +} + + diff --git a/src/Entities/Compoments/AIComponent.h b/src/Entities/Compoments/AIComponent.h index 502516b85..ac50a5a62 100644 --- a/src/Entities/Compoments/AIComponent.h +++ b/src/Entities/Compoments/AIComponent.h @@ -7,7 +7,7 @@ class cAIComponent protected: cMonster * m_Self; public: - cAIComponent(cMonster * a_Entity) : m_Self(a_Entity){} + cAIComponent(cEntity * a_Entity) : m_Self(a_Entity){} virtual void Tick(float a_Dt, cChunk & a_Chunk){} }; -- cgit v1.2.3