aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/Object
diff options
context:
space:
mode:
authorWyreth <32145860+Wyreth@users.noreply.github.com>2018-02-17 15:09:54 +0100
committerjackpoz <giacomopoz@gmail.com>2018-02-17 15:09:54 +0100
commit56874b44f0625f80442ea906f487e3253bdd16eb (patch)
treef14a406a147d95066ab9513ed50e87c99e338d3e /src/server/game/Entities/Object
parentd3d0640a8d61e9a216876b7f1b114673893b2bc8 (diff)
Core/Entities: remove grid-wide visibility from setActive and implement another method for it (#20725)
Diffstat (limited to 'src/server/game/Entities/Object')
-rw-r--r--src/server/game/Entities/Object/Object.cpp14
-rw-r--r--src/server/game/Entities/Object/Object.h3
2 files changed, 14 insertions, 3 deletions
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp
index bd41de9e657..7e2f0699542 100644
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -1027,7 +1027,7 @@ void MovementInfo::OutDebug()
}
WorldObject::WorldObject(bool isWorldObject) : WorldLocation(), LastUsedScriptID(0),
-m_name(""), m_isActive(false), m_isWorldObject(isWorldObject), m_zoneScript(nullptr),
+m_name(""), m_isActive(false), m_isFarVisible(false), m_isWorldObject(isWorldObject), m_zoneScript(nullptr),
m_transport(nullptr), m_zoneId(0), m_areaId(0), m_staticFloorZ(VMAP_INVALID_HEIGHT), m_currMap(nullptr), m_InstanceId(0),
m_phaseMask(PHASEMASK_NORMAL), m_notifyflags(0)
{
@@ -1087,6 +1087,14 @@ void WorldObject::setActive(bool on)
}
}
+void WorldObject::SetFarVisible(bool on)
+{
+ if (GetTypeId() == TYPEID_PLAYER)
+ return;
+
+ m_isFarVisible = on;
+}
+
void WorldObject::CleanupsBeforeDelete(bool /*finalCleanup*/)
{
if (IsInWorld())
@@ -1543,7 +1551,7 @@ float WorldObject::GetGridActivationRange() const
float WorldObject::GetVisibilityRange() const
{
- if (isActiveObject() && !ToPlayer())
+ if (IsFarVisible() && !ToPlayer())
return MAX_VISIBILITY_DISTANCE;
else
return GetMap()->GetVisibilityRange();
@@ -1555,7 +1563,7 @@ float WorldObject::GetSightRange(WorldObject const* target) const
{
if (ToPlayer())
{
- if (target && target->isActiveObject() && !target->ToPlayer())
+ if (target && target->IsFarVisible() && !target->ToPlayer())
return MAX_VISIBILITY_DISTANCE;
else if (ToPlayer()->GetCinematicMgr()->IsOnCinematic())
return DEFAULT_VISIBILITY_INSTANCE;
diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h
index a3311615c4f..7e44294254f 100644
--- a/src/server/game/Entities/Object/Object.h
+++ b/src/server/game/Entities/Object/Object.h
@@ -422,6 +422,8 @@ class TC_GAME_API WorldObject : public Object, public WorldLocation
bool isActiveObject() const { return m_isActive; }
void setActive(bool isActiveObject);
+ bool IsFarVisible() const { return m_isFarVisible; }
+ void SetFarVisible(bool on);
void SetWorldObject(bool apply);
bool IsPermanentWorldObject() const { return m_isWorldObject; }
bool IsWorldObject() const;
@@ -456,6 +458,7 @@ class TC_GAME_API WorldObject : public Object, public WorldLocation
protected:
std::string m_name;
bool m_isActive;
+ bool m_isFarVisible;
const bool m_isWorldObject;
ZoneScript* m_zoneScript;