diff options
Diffstat (limited to 'src/Mobs')
-rw-r--r-- | src/Mobs/Behaviors/BehaviorAggressive.cpp | 9 | ||||
-rw-r--r-- | src/Mobs/Behaviors/BehaviorAggressive.h | 4 | ||||
-rw-r--r-- | src/Mobs/Behaviors/BehaviorAttacker.cpp | 14 | ||||
-rw-r--r-- | src/Mobs/Behaviors/BehaviorItemFollower.h | 5 |
4 files changed, 14 insertions, 18 deletions
diff --git a/src/Mobs/Behaviors/BehaviorAggressive.cpp b/src/Mobs/Behaviors/BehaviorAggressive.cpp index 65618e123..ccea67eb4 100644 --- a/src/Mobs/Behaviors/BehaviorAggressive.cpp +++ b/src/Mobs/Behaviors/BehaviorAggressive.cpp @@ -1,7 +1,7 @@ #include "Globals.h" // NOTE: MSVC stupidness requires this to be the same across all modules #include "BehaviorAggressive.h" -#include "BehaviorChaser.h" +#include "BehaviorAttacker.h" #include "../Monster.h" #include "../../Chunk.h" #include "../../Entities/Player.h" @@ -17,10 +17,13 @@ void cBehaviorAggressive::PreTick(std::chrono::milliseconds a_Dt, cChunk & a_Chu { UNUSED(a_Dt); UNUSED(a_Chunk); + // Target something new if we have no target - if (m_ParentChaser->GetTarget() == nullptr) + cBehaviorAttacker * BehaviorAttacker = m_Parent->GetBehaviorAttacker(); + if ((BehaviorAttacker != nullptr) && (BehaviorAttacker->GetTarget() == nullptr)) { - m_ParentChaser->SetTarget(FindNewTarget()); + // mobTodo enhance this + BehaviorAttacker->SetTarget(FindNewTarget()); } } diff --git a/src/Mobs/Behaviors/BehaviorAggressive.h b/src/Mobs/Behaviors/BehaviorAggressive.h index 944eee36c..840d925d5 100644 --- a/src/Mobs/Behaviors/BehaviorAggressive.h +++ b/src/Mobs/Behaviors/BehaviorAggressive.h @@ -4,10 +4,9 @@ class cBehaviorAggressive; #include "Behavior.h" -class cBehaviorAttacker; /** The mob is agressive toward specific mobtypes, or toward the player. -This Behavior has a dependency on BehaviorChaser. */ +This Behavior has a dependency on BehaviorAttacker. */ class cBehaviorAggressive : public cBehavior { @@ -26,7 +25,6 @@ private: // Our parent cMonster * m_Parent; - cBehaviorAttacker * m_ParentChaser; // The mob we want to attack cPawn * m_Target; diff --git a/src/Mobs/Behaviors/BehaviorAttacker.cpp b/src/Mobs/Behaviors/BehaviorAttacker.cpp index 14ce8a264..56a879e84 100644 --- a/src/Mobs/Behaviors/BehaviorAttacker.cpp +++ b/src/Mobs/Behaviors/BehaviorAttacker.cpp @@ -6,7 +6,7 @@ #include "../Monster.h" #include "../../Entities/Pawn.h" #include "../../Entities/Player.h" - +#include "../../Tracer.h" cBehaviorAttacker::cBehaviorAttacker() : @@ -193,23 +193,17 @@ bool cBehaviorAttacker::TargetIsInStrikeRange() { ASSERT(m_Target != nullptr); ASSERT(m_Parent != nullptr); - /* - #include "../../Tracer.h" + + cTracer LineOfSight(m_Parent->GetWorld()); Vector3d MyHeadPosition = m_Parent->GetPosition() + Vector3d(0, m_Parent->GetHeight(), 0); - Vector3d AttackDirection(m_ParentChaser->GetTarget()->GetPosition() + Vector3d(0, GetTarget()->GetHeight(), 0) - MyHeadPosition); + Vector3d AttackDirection(GetTarget()->GetPosition() + Vector3d(0, GetTarget()->GetHeight(), 0) - MyHeadPosition); - - if (GetTarget() != nullptr) - { - MoveToPosition(GetTarget()->GetPosition()); - } if (TargetIsInRange() && !LineOfSight.Trace(MyHeadPosition, AttackDirection, static_cast<int>(AttackDirection.Length())) && (GetHealth() > 0.0)) { // 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); } - */ return ((m_Target->GetPosition() - m_Parent->GetPosition()).SqrLength() < (m_AttackRange * m_AttackRange)); } diff --git a/src/Mobs/Behaviors/BehaviorItemFollower.h b/src/Mobs/Behaviors/BehaviorItemFollower.h index e0a8a85e4..8c79ec763 100644 --- a/src/Mobs/Behaviors/BehaviorItemFollower.h +++ b/src/Mobs/Behaviors/BehaviorItemFollower.h @@ -1,10 +1,11 @@ #pragma once -// Makes the mob follow specific held items + class cBehaviorItemFollower; #include "Behavior.h" - +/** Makes the mob follow specific items when held by the player. +Currently relies on cMonster::GetFollowedItems for the item list. */ class cBehaviorItemFollower : public cBehavior { public: |