diff options
| author | megamage <none@none.none> | 2011-10-13 14:02:07 -0400 |
|---|---|---|
| committer | megamage <none@none.none> | 2011-10-13 14:02:07 -0400 |
| commit | bcc55489f8ba8e27150eec8f1385a2594c50282f (patch) | |
| tree | aee65e04c6776af895ae858fd069ce058ef59d9a /src/server/game/Entities/Object | |
| parent | 5912e2444de0b73b511ec073aa0cbd38b901295c (diff) | |
More cleanup of CanSeeOrDetect
Diffstat (limited to 'src/server/game/Entities/Object')
| -rwxr-xr-x | src/server/game/Entities/Object/Object.cpp | 27 | ||||
| -rwxr-xr-x | src/server/game/Entities/Object/Object.h | 22 |
2 files changed, 21 insertions, 28 deletions
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 47be25854ba..8de9e6d000c 100755 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -1630,19 +1630,10 @@ bool WorldObject::canSeeOrDetect(WorldObject const* obj, bool ignoreStealth, boo if (this == obj) return true; - if (obj->IsNeverVisible()) + if (obj->IsNeverVisible() || _CanNeverSee(obj)) return false; - if (GetMap() != obj->GetMap()) - return false; - - if (!InSamePhase(obj)) - return false; - - if (obj->isAlwaysVisibleFor(this)) - return true; - - if (canSeeAlways(obj)) + if (obj->IsAlwaysVisibleFor(this) || _CanAlwaysSee(obj)) return true; bool corpseCheck = false; @@ -1699,13 +1690,13 @@ bool WorldObject::canSeeOrDetect(WorldObject const* obj, bool ignoreStealth, boo if (obj->IsInvisibleDueToDespawn()) return false; - if (!canDetect(obj, ignoreStealth)) + if (!_CanDetect(obj, ignoreStealth)) return false; return true; } -bool WorldObject::canDetect(WorldObject const* obj, bool ignoreStealth) const +bool WorldObject::_CanDetect(WorldObject const* obj, bool ignoreStealth) const { const WorldObject* seer = this; @@ -1714,19 +1705,19 @@ bool WorldObject::canDetect(WorldObject const* obj, bool ignoreStealth) const if (Unit* controller = thisUnit->GetCharmerOrOwner()) seer = controller; - if (obj->isAlwaysDetectableFor(seer)) + if (obj->IsAlwaysDetectableFor(seer)) return true; - if (!seer->canDetectInvisibilityOf(obj)) + if (!seer->_CanDetectInvisibilityOf(obj)) return false; - if (!ignoreStealth && !seer->canDetectStealthOf(obj)) + if (!ignoreStealth && !seer->_CanDetectStealthOf(obj)) return false; return true; } -bool WorldObject::canDetectInvisibilityOf(WorldObject const* obj) const +bool WorldObject::_CanDetectInvisibilityOf(WorldObject const* obj) const { uint32 mask = obj->m_invisibility.GetFlags() & m_invisibilityDetect.GetFlags(); @@ -1757,7 +1748,7 @@ bool WorldObject::canDetectInvisibilityOf(WorldObject const* obj) const return true; } -bool WorldObject::canDetectStealthOf(WorldObject const* obj) const +bool WorldObject::_CanDetectStealthOf(WorldObject const* obj) const { // Combat reach is the minimal distance (both in front and behind), // and it is also used in the range calculation. diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h index faee921a1bb..1570210020c 100755 --- a/src/server/game/Entities/Object/Object.h +++ b/src/server/game/Entities/Object/Object.h @@ -682,7 +682,6 @@ class WorldObject : public Object, public WorldLocation { return IsInDist2d(x, y, dist + GetObjectSize()); } bool IsWithinDist2d(const Position* pos, float dist) const { return IsInDist2d(pos, dist + GetObjectSize()); } - virtual bool _IsWithinDist(WorldObject const* obj, float dist2compare, bool is3D) const; // use only if you will sure about placing both object at same map bool IsWithinDist(WorldObject const* obj, float dist2compare, bool is3D = true) const { @@ -730,16 +729,10 @@ class WorldObject : public Object, public WorldLocation virtual void SaveRespawnTime() {} void AddObjectToRemoveList(); - virtual bool IsNeverVisible() const { return !IsInWorld(); } - virtual bool isAlwaysVisibleFor(WorldObject const* /*seer*/) const { return false; } + virtual bool IsAlwaysVisibleFor(WorldObject const* /*seer*/) const { return false; } virtual bool IsInvisibleDueToDespawn() const { return false; } - virtual bool canSeeAlways(WorldObject const* /*obj*/) const { return false; } - bool canDetect(WorldObject const* obj, bool ignoreStealth) const; - - bool canDetectInvisibilityOf(WorldObject const* obj) const; - bool canDetectStealthOf(WorldObject const* obj) const; - - virtual bool isAlwaysDetectableFor(WorldObject const* /*seer*/) const { return false; } + //difference from IsAlwaysVisibleFor: 1. after distance check; 2. use owner or charmer as seer + virtual bool IsAlwaysDetectableFor(WorldObject const* /*seer*/) const { return false; } float GetGridActivationRange() const; float GetVisibilityRange() const; @@ -846,6 +839,7 @@ class WorldObject : public Object, public WorldLocation void SetLocationMapId(uint32 _mapId) { m_mapId = _mapId; } void SetLocationInstanceId(uint32 _instanceId) { m_InstanceId = _instanceId; } + virtual bool IsNeverVisible() const { return !IsInWorld(); } private: Map* m_currMap; //current object's Map location @@ -855,6 +849,14 @@ class WorldObject : public Object, public WorldLocation uint16 m_notifyflags; uint16 m_executed_notifies; + + virtual bool _IsWithinDist(WorldObject const* obj, float dist2compare, bool is3D) const; + + bool _CanNeverSee(WorldObject const* obj) const { return GetMap() != obj->GetMap() || !InSamePhase(obj); } + virtual bool _CanAlwaysSee(WorldObject const* /*obj*/) const { return false; } + bool _CanDetect(WorldObject const* obj, bool ignoreStealth) const; + bool _CanDetectInvisibilityOf(WorldObject const* obj) const; + bool _CanDetectStealthOf(WorldObject const* obj) const; }; namespace Trinity |
