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 | |
parent | 5912e2444de0b73b511ec073aa0cbd38b901295c (diff) |
More cleanup of CanSeeOrDetect
Diffstat (limited to 'src')
-rwxr-xr-x | src/server/game/Entities/Creature/Creature.cpp | 5 | ||||
-rwxr-xr-x | src/server/game/Entities/Creature/Creature.h | 2 | ||||
-rwxr-xr-x | src/server/game/Entities/GameObject/GameObject.cpp | 4 | ||||
-rwxr-xr-x | src/server/game/Entities/GameObject/GameObject.h | 2 | ||||
-rwxr-xr-x | src/server/game/Entities/Object/Object.cpp | 27 | ||||
-rwxr-xr-x | src/server/game/Entities/Object/Object.h | 22 | ||||
-rwxr-xr-x | src/server/game/Entities/Player/Player.cpp | 9 | ||||
-rwxr-xr-x | src/server/game/Entities/Player/Player.h | 4 | ||||
-rwxr-xr-x | src/server/game/Entities/Unit/Unit.cpp | 8 | ||||
-rwxr-xr-x | src/server/game/Entities/Unit/Unit.h | 4 |
10 files changed, 37 insertions, 50 deletions
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 89f52c066a9..bc43cc58e61 100755 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -1394,11 +1394,8 @@ bool Creature::IsInvisibleDueToDespawn() const return true; } -bool Creature::canSeeAlways(WorldObject const* obj) const +bool Creature::_CanAlwaysSee(WorldObject const* obj) const { - if (Unit::canSeeAlways(obj)) - return true; - if (IsAIEnabled && AI()->CanSeeAlways(obj)) return true; diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h index a56b91da13a..fa0f866400b 100755 --- a/src/server/game/Entities/Creature/Creature.h +++ b/src/server/game/Entities/Creature/Creature.h @@ -753,7 +753,7 @@ class Creature : public Unit, public GridObject<Creature>, public MapCreature uint32 guid_transport; bool IsInvisibleDueToDespawn() const; - bool canSeeAlways(WorldObject const* obj) const; + bool _CanAlwaysSee(WorldObject const* obj) const; private: //WaypointMovementGenerator vars uint32 m_waypointID; diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index a0f35bf2ab4..2f353285806 100755 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -843,9 +843,9 @@ void GameObject::SaveRespawnTime() sObjectMgr->SaveGORespawnTime(m_DBTableGuid, GetInstanceId(), m_respawnTime); } -bool GameObject::isAlwaysVisibleFor(WorldObject const* seer) const +bool GameObject::IsAlwaysVisibleFor(WorldObject const* seer) const { - if (WorldObject::isAlwaysVisibleFor(seer)) + if (WorldObject::IsAlwaysVisibleFor(seer)) return true; if (IsTransport()) diff --git a/src/server/game/Entities/GameObject/GameObject.h b/src/server/game/Entities/GameObject/GameObject.h index 459c526ee4d..13b410d7373 100755 --- a/src/server/game/Entities/GameObject/GameObject.h +++ b/src/server/game/Entities/GameObject/GameObject.h @@ -752,7 +752,7 @@ class GameObject : public WorldObject, public GridObject<GameObject> void TriggeringLinkedGameObject(uint32 trapEntry, Unit* target); - bool isAlwaysVisibleFor(WorldObject const* seer) const; + bool IsAlwaysVisibleFor(WorldObject const* seer) const; bool IsInvisibleDueToDespawn() const; uint8 getLevelForTarget(WorldObject const* target) const 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 diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index a5adf1d9371..b491eae96ae 100755 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -21088,11 +21088,8 @@ bool Player::IsNeverVisible() const return false; } -bool Player::canSeeAlways(WorldObject const* obj) const +bool Player::_CanAlwaysSee(WorldObject const* obj) const { - if (Unit::canSeeAlways(obj)) - return true; - // Always can see self if (m_mover == obj) return true; @@ -21104,9 +21101,9 @@ bool Player::canSeeAlways(WorldObject const* obj) const return false; } -bool Player::isAlwaysDetectableFor(WorldObject const* seer) const +bool Player::IsAlwaysDetectableFor(WorldObject const* seer) const { - if (Unit::isAlwaysDetectableFor(seer)) + if (Unit::IsAlwaysDetectableFor(seer)) return true; if (const Player* seerPlayer = seer->ToPlayer()) diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 0910e6ba36d..4e60fcf1bd5 100755 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -2734,9 +2734,9 @@ class Player : public Unit, public GridObject<Player> Runes *m_runes; EquipmentSets m_EquipmentSets; - bool canSeeAlways(WorldObject const* obj) const; + bool _CanAlwaysSee(WorldObject const* obj) const; - bool isAlwaysDetectableFor(WorldObject const* seer) const; + bool IsAlwaysDetectableFor(WorldObject const* seer) const; uint8 m_grantableLevels; diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 6e70469df73..631ea9b7c90 100755 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -12393,9 +12393,9 @@ int32 Unit::ModifyPowerPct(Powers power, float pct, bool apply) return ModifyPower(power, (int32)amount - (int32)GetMaxPower(power)); } -bool Unit::isAlwaysVisibleFor(WorldObject const* seer) const +bool Unit::IsAlwaysVisibleFor(WorldObject const* seer) const { - if (WorldObject::isAlwaysVisibleFor(seer)) + if (WorldObject::IsAlwaysVisibleFor(seer)) return true; // Always seen by owner @@ -12406,9 +12406,9 @@ bool Unit::isAlwaysVisibleFor(WorldObject const* seer) const return false; } -bool Unit::isAlwaysDetectableFor(WorldObject const* seer) const +bool Unit::IsAlwaysDetectableFor(WorldObject const* seer) const { - if (WorldObject::isAlwaysDetectableFor(seer)) + if (WorldObject::IsAlwaysDetectableFor(seer)) return true; if (HasAuraTypeWithCaster(SPELL_AURA_MOD_STALKED, seer->GetGUID())) diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 41fe6337737..d35298b9963 100755 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -2283,8 +2283,8 @@ class Unit : public WorldObject uint32 m_unitTypeMask; - bool isAlwaysVisibleFor(WorldObject const* seer) const; - bool isAlwaysDetectableFor(WorldObject const* seer) const; + bool IsAlwaysVisibleFor(WorldObject const* seer) const; + bool IsAlwaysDetectableFor(WorldObject const* seer) const; private: bool IsTriggeredAtSpellProcEvent(Unit* pVictim, Aura* aura, SpellInfo const* procSpell, uint32 procFlag, uint32 procExtra, WeaponAttackType attType, bool isVictim, bool active, SpellProcEventEntry const* & spellProcEvent); bool HandleDummyAuraProc(Unit* pVictim, uint32 damage, AuraEffect* triggeredByAura, SpellInfo const* procSpell, uint32 procFlag, uint32 procEx, uint32 cooldown); |