diff options
| author | Shauren <shauren.trinity@gmail.com> | 2025-12-07 18:59:24 +0100 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2025-12-07 18:59:24 +0100 |
| commit | f901acd66b195df4fd0479e1541192cd55d24841 (patch) | |
| tree | 86248d81eae205472404ea8c1142e48dda6af06c /src/server/game/Entities/Object | |
| parent | 3f70ba525826d92f57846b29ba6330b18a2df430 (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.cpp | 1 | ||||
| -rw-r--r-- | src/server/game/Entities/Object/Object.h | 7 | ||||
| -rw-r--r-- | src/server/game/Entities/Object/ObjectGuid.h | 48 |
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, |
