diff options
author | ariel- <ariel-@users.noreply.github.com> | 2017-04-26 04:19:01 -0300 |
---|---|---|
committer | funjoker <funjoker109@gmail.com> | 2020-04-28 14:07:43 +0200 |
commit | f3a49059acb7b19ef95ebb7f6fe6887a123cd1c9 (patch) | |
tree | 2fd180c2a22465c5d5b921d7c9184ca615dd63bb /src/server/game/AI/CreatureAI.cpp | |
parent | bb3f2a11cfa909a0b40450050f33a3893f6bb061 (diff) |
Core/AI: some tweaks on boundary functionality:
- Moved SetBoundary to public scope to allow for greater flexibility (ie set from external script)
- Extended to allow checking inverted boundaries
(cherry picked from commit 6892404b270f57380ffdc9ad084e0f43d94134e0)
Diffstat (limited to 'src/server/game/AI/CreatureAI.cpp')
-rw-r--r-- | src/server/game/AI/CreatureAI.cpp | 22 |
1 files changed, 9 insertions, 13 deletions
diff --git a/src/server/game/AI/CreatureAI.cpp b/src/server/game/AI/CreatureAI.cpp index af9104b6c09..835f5369c9f 100644 --- a/src/server/game/AI/CreatureAI.cpp +++ b/src/server/game/AI/CreatureAI.cpp @@ -44,7 +44,7 @@ void CreatureAI::OnCharmed(bool apply) AISpellInfoType* UnitAI::AISpellInfo; AISpellInfoType* GetAISpellInfo(uint32 i) { return &UnitAI::AISpellInfo[i]; } -CreatureAI::CreatureAI(Creature* creature) : UnitAI(creature), me(creature), _boundary(nullptr), m_MoveInLineOfSight_locked(false) +CreatureAI::CreatureAI(Creature* creature) : UnitAI(creature), me(creature), _boundary(nullptr), _negateBoundary(false), m_MoveInLineOfSight_locked(false) { } @@ -364,32 +364,28 @@ int32 CreatureAI::VisualizeBoundary(uint32 duration, Unit* owner, bool fill) con bool CreatureAI::CheckBoundary(Position const* who) const { + if (!_boundary) + return true; + if (!who) who = me; - if (_boundary) - for (AreaBoundary const* areaBoundary : *_boundary) - if (!areaBoundary->IsWithinBoundary(who)) - return false; - - return true; + return (CreatureAI::IsInBounds(*_boundary, who) != _negateBoundary); } -bool CreatureAI::IsInBounds(CreatureBoundary const* boundary, Position const* pos) +bool CreatureAI::IsInBounds(CreatureBoundary const& boundary, Position const* pos) { - if (!boundary) - return true; - - for (AreaBoundary const* areaBoundary : *boundary) + for (AreaBoundary const* areaBoundary : boundary) if (!areaBoundary->IsWithinBoundary(pos)) return false; return true; } -void CreatureAI::SetBoundary(CreatureBoundary const* boundary) +void CreatureAI::SetBoundary(CreatureBoundary const* boundary, bool negateBoundaries /*= false*/) { _boundary = boundary; + _negateBoundary = negateBoundaries; me->DoImmediateBoundaryCheck(); } |