aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/Object
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2025-12-07 18:59:24 +0100
committerShauren <shauren.trinity@gmail.com>2025-12-07 18:59:24 +0100
commitf901acd66b195df4fd0479e1541192cd55d24841 (patch)
tree86248d81eae205472404ea8c1142e48dda6af06c /src/server/game/Entities/Object
parent3f70ba525826d92f57846b29ba6330b18a2df430 (diff)
Core/Entities: Remove Object::m_objectType member and replace it with global array lookup (using m_objectTypeId)
Diffstat (limited to 'src/server/game/Entities/Object')
-rw-r--r--src/server/game/Entities/Object/Object.cpp1
-rw-r--r--src/server/game/Entities/Object/Object.h7
-rw-r--r--src/server/game/Entities/Object/ObjectGuid.h48
3 files changed, 36 insertions, 20 deletions
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp
index aa090bc5c1b..8375032413f 100644
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -70,7 +70,6 @@ constexpr float VisibilityDistances[AsUnderlyingType(VisibilityDistanceType::Max
Object::Object() : m_scriptRef(this, NoopObjectDeleter())
{
m_objectTypeId = TYPEID_OBJECT;
- m_objectType = TYPEMASK_OBJECT;
m_updateFlag.Clear();
m_entityFragments.Add(WowCS::EntityFragment::CGObject, false);
diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h
index e049ca95fae..d9f8e039392 100644
--- a/src/server/game/Entities/Object/Object.h
+++ b/src/server/game/Entities/Object/Object.h
@@ -189,6 +189,8 @@ static constexpr Milliseconds const HEARTBEAT_INTERVAL = 5s + 200ms;
class TC_GAME_API Object
{
+ ObjectGuid m_guid;
+
public:
virtual ~Object();
@@ -212,7 +214,7 @@ class TC_GAME_API Object
void ReplaceAllDynamicFlags(uint32 flag) { SetUpdateFieldValue(m_values.ModifyValue(&Object::m_objectData).ModifyValue(&UF::ObjectData::DynamicFlags), flag); }
TypeID GetTypeId() const { return m_objectTypeId; }
- bool isType(uint16 mask) const { return (mask & m_objectType) != 0; }
+ bool isType(TypeMask mask) const { return (ObjectTypeMask[m_objectTypeId] & mask) != 0; }
virtual void BuildCreateUpdateBlockForPlayer(UpdateData* data, Player* target) const;
void SendUpdateToPlayer(Player* player);
@@ -451,8 +453,6 @@ class TC_GAME_API Object
virtual void BuildValuesUpdateWithFlag(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const;
protected:
- uint16 m_objectType;
-
TypeID m_objectTypeId;
CreateObjectBits m_updateFlag;
WowCS::EntityFragmentsHolder m_entityFragments;
@@ -464,7 +464,6 @@ class TC_GAME_API Object
bool m_objectUpdated;
private:
- ObjectGuid m_guid;
bool m_inWorld;
bool m_isNewObject;
bool m_isDestroyedObject;
diff --git a/src/server/game/Entities/Object/ObjectGuid.h b/src/server/game/Entities/Object/ObjectGuid.h
index 7126b3c8762..51744804ffa 100644
--- a/src/server/game/Entities/Object/ObjectGuid.h
+++ b/src/server/game/Entities/Object/ObjectGuid.h
@@ -32,7 +32,7 @@
#include <unordered_set>
#include <vector>
-enum TypeID
+enum TypeID : uint8
{
TYPEID_OBJECT = 0,
TYPEID_ITEM = 1,
@@ -54,25 +54,43 @@ enum TypeID
enum TypeMask
{
- TYPEMASK_OBJECT = 0x0001,
- TYPEMASK_ITEM = 0x0002,
- TYPEMASK_CONTAINER = 0x0004,
- TYPEMASK_AZERITE_EMPOWERED_ITEM = 0x0008,
- TYPEMASK_AZERITE_ITEM = 0x0010,
- TYPEMASK_UNIT = 0x0020,
- TYPEMASK_PLAYER = 0x0040,
- TYPEMASK_ACTIVE_PLAYER = 0x0080,
- TYPEMASK_GAMEOBJECT = 0x0100,
- TYPEMASK_DYNAMICOBJECT = 0x0200,
- TYPEMASK_CORPSE = 0x0400,
- TYPEMASK_AREATRIGGER = 0x0800,
- TYPEMASK_SCENEOBJECT = 0x1000,
- TYPEMASK_CONVERSATION = 0x2000,
+ TYPEMASK_OBJECT = 1 << TYPEID_OBJECT,
+ TYPEMASK_ITEM = 1 << TYPEID_ITEM,
+ TYPEMASK_CONTAINER = 1 << TYPEID_CONTAINER,
+ TYPEMASK_AZERITE_EMPOWERED_ITEM = 1 << TYPEID_AZERITE_EMPOWERED_ITEM,
+ TYPEMASK_AZERITE_ITEM = 1 << TYPEID_AZERITE_ITEM,
+ TYPEMASK_UNIT = 1 << TYPEID_UNIT,
+ TYPEMASK_PLAYER = 1 << TYPEID_PLAYER,
+ TYPEMASK_ACTIVE_PLAYER = 1 << TYPEID_ACTIVE_PLAYER,
+ TYPEMASK_GAMEOBJECT = 1 << TYPEID_GAMEOBJECT,
+ TYPEMASK_DYNAMICOBJECT = 1 << TYPEID_DYNAMICOBJECT,
+ TYPEMASK_CORPSE = 1 << TYPEID_CORPSE,
+ TYPEMASK_AREATRIGGER = 1 << TYPEID_AREATRIGGER,
+ TYPEMASK_SCENEOBJECT = 1 << TYPEID_SCENEOBJECT,
+ TYPEMASK_CONVERSATION = 1 << TYPEID_CONVERSATION,
TYPEMASK_SEER = TYPEMASK_UNIT | TYPEMASK_PLAYER | TYPEMASK_DYNAMICOBJECT,
TYPEMASK_WORLDOBJECT = TYPEMASK_UNIT | TYPEMASK_GAMEOBJECT | TYPEMASK_DYNAMICOBJECT | TYPEMASK_CORPSE | TYPEMASK_AREATRIGGER | TYPEMASK_SCENEOBJECT | TYPEMASK_CONVERSATION
};
+inline constexpr std::array<uint32, NUM_CLIENT_OBJECT_TYPES> ObjectTypeMask =
+{
+ TYPEMASK_OBJECT,
+ TYPEMASK_OBJECT | TYPEMASK_ITEM,
+ TYPEMASK_OBJECT | TYPEMASK_ITEM | TYPEMASK_CONTAINER,
+ TYPEMASK_OBJECT | TYPEMASK_ITEM | TYPEMASK_AZERITE_EMPOWERED_ITEM,
+ TYPEMASK_OBJECT | TYPEMASK_ITEM | TYPEMASK_AZERITE_ITEM,
+ TYPEMASK_OBJECT | TYPEMASK_UNIT,
+ TYPEMASK_OBJECT | TYPEMASK_UNIT | TYPEMASK_PLAYER,
+ TYPEMASK_OBJECT | TYPEMASK_UNIT | TYPEMASK_PLAYER | TYPEMASK_ACTIVE_PLAYER,
+ TYPEMASK_OBJECT | TYPEMASK_GAMEOBJECT,
+ TYPEMASK_OBJECT | TYPEMASK_DYNAMICOBJECT,
+ TYPEMASK_OBJECT | TYPEMASK_CORPSE,
+ TYPEMASK_OBJECT | TYPEMASK_AREATRIGGER,
+ TYPEMASK_OBJECT | TYPEMASK_SCENEOBJECT,
+ TYPEMASK_OBJECT | TYPEMASK_CONVERSATION
+};
+
enum class HighGuid
{
Null = 0,