diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/common/Utilities/EnumClassFlag.h | 87 | ||||
-rw-r--r-- | src/common/Utilities/EnumFlag.h | 126 | ||||
-rw-r--r-- | src/server/game/AuctionHouse/AuctionHouseMgr.cpp | 2 | ||||
-rw-r--r-- | src/server/game/AuctionHouse/AuctionHouseMgr.h | 8 | ||||
-rw-r--r-- | src/server/game/Entities/Object/ObjectGuid.h | 12 | ||||
-rw-r--r-- | src/server/game/Entities/Object/Updates/UpdateField.h | 2 | ||||
-rw-r--r-- | src/server/game/Entities/Object/Updates/UpdateFields.cpp | 78 | ||||
-rw-r--r-- | src/server/game/Entities/Object/Updates/UpdateFields.h | 74 | ||||
-rw-r--r-- | src/server/game/Entities/Player/CollectionMgr.cpp | 8 | ||||
-rw-r--r-- | src/server/game/Entities/Player/CollectionMgr.h | 6 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Globals/ObjectMgr.h | 3 | ||||
-rw-r--r-- | src/server/game/Phasing/PhaseShift.cpp | 8 | ||||
-rw-r--r-- | src/server/game/Phasing/PhaseShift.h | 12 | ||||
-rw-r--r-- | src/server/game/Phasing/PhasingHandler.cpp | 10 |
16 files changed, 246 insertions, 194 deletions
diff --git a/src/common/Utilities/EnumClassFlag.h b/src/common/Utilities/EnumClassFlag.h deleted file mode 100644 index 2f201fd2d1d..00000000000 --- a/src/common/Utilities/EnumClassFlag.h +++ /dev/null @@ -1,87 +0,0 @@ -/* - * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2 of the License, or (at your - * option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef EnumClassFlag_h__ -#define EnumClassFlag_h__ - -#include <type_traits> - -template<typename T> -class EnumClassFlag -{ - static_assert(std::is_enum<T>::value, "EnumClassFlag must be used only with enums"); - -public: - /*implicit*/ constexpr EnumClassFlag(T value) : _value(value) { } - - constexpr EnumClassFlag& operator&=(EnumClassFlag right) - { - _value = static_cast<T>(static_cast<std::underlying_type_t<T>>(_value) & static_cast<std::underlying_type_t<T>>(right._value)); - return *this; - } - - constexpr friend EnumClassFlag operator&(EnumClassFlag left, EnumClassFlag right) - { - return left &= right; - } - - constexpr EnumClassFlag& operator|=(EnumClassFlag right) - { - _value = static_cast<T>(static_cast<std::underlying_type_t<T>>(_value) | static_cast<std::underlying_type_t<T>>(right._value)); - return *this; - } - - constexpr friend EnumClassFlag operator|(EnumClassFlag left, EnumClassFlag right) - { - return left |= right; - } - - constexpr EnumClassFlag operator~() const - { - return static_cast<T>(~static_cast<std::underlying_type_t<T>>(_value)); - } - - constexpr void RemoveFlag(EnumClassFlag flag) - { - _value = static_cast<T>(static_cast<std::underlying_type_t<T>>(_value) & ~static_cast<std::underlying_type_t<T>>(flag._value)); - } - - constexpr bool HasFlag(T flag) const - { - return (static_cast<std::underlying_type_t<T>>(_value) & static_cast<std::underlying_type_t<T>>(flag)) != 0; - } - - constexpr bool HasAllFlags(T flags) const - { - return (static_cast<std::underlying_type_t<T>>(_value) & static_cast<std::underlying_type_t<T>>(flags)) == static_cast<std::underlying_type_t<T>>(flags); - } - - constexpr operator T() const - { - return _value; - } - - constexpr std::underlying_type_t<T> AsUnderlyingType() const - { - return static_cast<std::underlying_type_t<T>>(_value); - } - -private: - T _value; -}; - -#endif // EnumClassFlag_h__ diff --git a/src/common/Utilities/EnumFlag.h b/src/common/Utilities/EnumFlag.h new file mode 100644 index 00000000000..bd9a991daed --- /dev/null +++ b/src/common/Utilities/EnumFlag.h @@ -0,0 +1,126 @@ +/* + * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef EnumFlag_h__ +#define EnumFlag_h__ + +#include <type_traits> + +namespace EnumFlag +{ + template<typename T> + struct IsFlag : std::false_type { }; +} + +template<typename T, std::enable_if_t<EnumFlag::IsFlag<T>::value, std::nullptr_t> = nullptr> +inline constexpr T operator&(T left, T right) +{ + return static_cast<T>(static_cast<std::underlying_type_t<T>>(left) & static_cast<std::underlying_type_t<T>>(right)); +} + +template<typename T, std::enable_if_t<EnumFlag::IsFlag<T>::value, std::nullptr_t> = nullptr> +inline constexpr T& operator&=(T& left, T right) +{ + return left = left & right; +} + +template<typename T, std::enable_if_t<EnumFlag::IsFlag<T>::value, std::nullptr_t> = nullptr> +inline constexpr T operator|(T left, T right) +{ + return static_cast<T>(static_cast<std::underlying_type_t<T>>(left) | static_cast<std::underlying_type_t<T>>(right)); +} + +template<typename T, std::enable_if_t<EnumFlag::IsFlag<T>::value, std::nullptr_t> = nullptr> +inline constexpr T& operator|=(T& left, T right) +{ + return left = left | right; +} + +template<typename T, std::enable_if_t<EnumFlag::IsFlag<T>::value, std::nullptr_t> = nullptr> +inline constexpr T operator~(T value) +{ + return static_cast<T>(~static_cast<std::underlying_type_t<T>>(value)); +} + +template<typename T> +class EnumFlag_t +{ + static_assert(EnumFlag::IsFlag<T>::value, "EnumFlag_t must be used only with enums that are specify EnumFlag::IsFlag"); + +public: + /*implicit*/ constexpr EnumFlag_t(T value) : _value(value) + { + } + + constexpr EnumFlag_t& operator&=(EnumFlag_t right) + { + _value &= right._value; + return *this; + } + + constexpr friend EnumFlag_t operator&(EnumFlag_t left, EnumFlag_t right) + { + return left &= right; + } + + constexpr EnumFlag_t& operator|=(EnumFlag_t right) + { + _value |= right._value; + return *this; + } + + constexpr friend EnumFlag_t operator|(EnumFlag_t left, EnumFlag_t right) + { + return left |= right; + } + + constexpr EnumFlag_t operator~() const + { + return static_cast<T>(~static_cast<std::underlying_type_t<T>>(_value)); + } + + constexpr void RemoveFlag(EnumFlag_t flag) + { + _value &= ~flag._value; + } + + constexpr bool HasFlag(T flag) const + { + using i = std::underlying_type_t<T>; + return static_cast<i>(_value & flag) != static_cast<i>(0); + } + + constexpr bool HasAllFlags(T flags) const + { + return (_value & flags) == flags; + } + + constexpr operator T() const + { + return _value; + } + + constexpr std::underlying_type_t<T> AsUnderlyingType() const + { + return static_cast<std::underlying_type_t<T>>(_value); + } + +private: + T _value; +}; + +#endif // EnumFlag_h__ diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp index e6a33a15a07..421c701089c 100644 --- a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp +++ b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp @@ -1147,7 +1147,7 @@ void AuctionHouseObject::Update() } void AuctionHouseObject::BuildListBuckets(WorldPackets::AuctionHouse::AuctionListBucketsResult& listBucketsResult, Player* player, - std::wstring const& name, uint8 minLevel, uint8 maxLevel, EnumClassFlag<AuctionHouseFilterMask> filters, Optional<AuctionSearchClassFilters> const& classFilters, + std::wstring const& name, uint8 minLevel, uint8 maxLevel, EnumFlag_t<AuctionHouseFilterMask> filters, Optional<AuctionSearchClassFilters> const& classFilters, uint8 const* knownPetBits, std::size_t knownPetBitsCount, uint8 maxKnownPetLevel, uint32 offset, WorldPackets::AuctionHouse::AuctionSortDef const* sorts, std::size_t sortCount) { std::unordered_set<uint32> knownAppearanceIds; diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.h b/src/server/game/AuctionHouse/AuctionHouseMgr.h index 22f9dce7c7f..86e311a67af 100644 --- a/src/server/game/AuctionHouse/AuctionHouseMgr.h +++ b/src/server/game/AuctionHouse/AuctionHouseMgr.h @@ -21,7 +21,7 @@ #include "Define.h" #include "DatabaseEnvFwd.h" #include "Duration.h" -#include "EnumClassFlag.h" +#include "EnumFlag.h" #include "ItemTemplate.h" #include "ObjectGuid.h" #include "Optional.h" @@ -111,6 +111,8 @@ enum class AuctionHouseFilterMask : uint32 ArtifactQuality = 0x400, }; +namespace EnumFlag { template<> struct IsFlag<AuctionHouseFilterMask> : std::true_type { }; } + enum class AuctionHouseSortOrder : uint8 { Price = 0, @@ -204,7 +206,7 @@ struct AuctionsBucketData uint8 ItemClass = 0; uint8 ItemSubClass = 0; uint8 InventoryType = 0; - EnumClassFlag<AuctionHouseFilterMask> QualityMask = AuctionHouseFilterMask::None; + AuctionHouseFilterMask QualityMask = AuctionHouseFilterMask::None; std::array<uint32, MAX_ITEM_QUALITY> QualityCounts = { }; uint64 MinPrice = 0; // for sort std::array<std::pair<uint32, uint32>, 4> ItemModifiedAppearanceId = { }; // for uncollected search @@ -293,7 +295,7 @@ public: void Update(); void BuildListBuckets(WorldPackets::AuctionHouse::AuctionListBucketsResult& listBucketsResult, Player* player, - std::wstring const& name, uint8 minLevel, uint8 maxLevel, EnumClassFlag<AuctionHouseFilterMask> filters, Optional<AuctionSearchClassFilters> const& classFilters, + std::wstring const& name, uint8 minLevel, uint8 maxLevel, EnumFlag_t<AuctionHouseFilterMask> filters, Optional<AuctionSearchClassFilters> const& classFilters, uint8 const* knownPetBits, std::size_t knownPetBitsCount, uint8 maxKnownPetLevel, uint32 offset, WorldPackets::AuctionHouse::AuctionSortDef const* sorts, std::size_t sortCount); void BuildListBuckets(WorldPackets::AuctionHouse::AuctionListBucketsResult& listBucketsResult, Player* player, diff --git a/src/server/game/Entities/Object/ObjectGuid.h b/src/server/game/Entities/Object/ObjectGuid.h index 82b370ebb4e..0eb5c42c728 100644 --- a/src/server/game/Entities/Object/ObjectGuid.h +++ b/src/server/game/Entities/Object/ObjectGuid.h @@ -19,7 +19,7 @@ #define ObjectGuid_h__ #include "Define.h" -#include "EnumClassFlag.h" +#include "EnumFlag.h" #include <deque> #include <functional> #include <list> @@ -131,6 +131,8 @@ enum class ObjectGuidSequenceSource Map = 0x4 }; +namespace EnumFlag { template<> struct IsFlag<ObjectGuidSequenceSource> : std::true_type { }; } + enum class ObjectGuidFormatType { Null, @@ -154,14 +156,14 @@ enum class ObjectGuidFormatType template<HighGuid high> struct ObjectGuidTraits { - static constexpr EnumClassFlag<ObjectGuidSequenceSource> SequenceSource = ObjectGuidSequenceSource::None; + static constexpr EnumFlag_t<ObjectGuidSequenceSource> SequenceSource = ObjectGuidSequenceSource::None; using Format = std::integral_constant<ObjectGuidFormatType, ObjectGuidFormatType::Null>; }; #define MAKE_GUID_TRAIT(high, sequence, format) \ template<> struct ObjectGuidTraits<high> \ { \ - static constexpr EnumClassFlag<ObjectGuidSequenceSource> SequenceSource = sequence; \ + static constexpr EnumFlag_t<ObjectGuidSequenceSource> SequenceSource = sequence; \ using Format = std::integral_constant<ObjectGuidFormatType, format>; \ } @@ -170,8 +172,8 @@ MAKE_GUID_TRAIT(HighGuid::Uniq, ObjectGuidSequenceSource::None, ObjectGuidFormat MAKE_GUID_TRAIT(HighGuid::Player, ObjectGuidSequenceSource::Realm, ObjectGuidFormatType::Player); MAKE_GUID_TRAIT(HighGuid::Item, ObjectGuidSequenceSource::Realm, ObjectGuidFormatType::Item); MAKE_GUID_TRAIT(HighGuid::WorldTransaction, ObjectGuidSequenceSource::Map, ObjectGuidFormatType::WorldObject); -MAKE_GUID_TRAIT(HighGuid::StaticDoor, EnumClassFlag<ObjectGuidSequenceSource>{ObjectGuidSequenceSource::Global} | ObjectGuidSequenceSource::Map, ObjectGuidFormatType::Transport); -MAKE_GUID_TRAIT(HighGuid::Transport, EnumClassFlag<ObjectGuidSequenceSource>{ObjectGuidSequenceSource::Global} | ObjectGuidSequenceSource::Map, ObjectGuidFormatType::Transport); +MAKE_GUID_TRAIT(HighGuid::StaticDoor, ObjectGuidSequenceSource::Global | ObjectGuidSequenceSource::Map, ObjectGuidFormatType::Transport); +MAKE_GUID_TRAIT(HighGuid::Transport, ObjectGuidSequenceSource::Global | ObjectGuidSequenceSource::Map, ObjectGuidFormatType::Transport); MAKE_GUID_TRAIT(HighGuid::Conversation, ObjectGuidSequenceSource::Map, ObjectGuidFormatType::WorldObject); MAKE_GUID_TRAIT(HighGuid::Creature, ObjectGuidSequenceSource::Map, ObjectGuidFormatType::WorldObject); MAKE_GUID_TRAIT(HighGuid::Vehicle, ObjectGuidSequenceSource::Map, ObjectGuidFormatType::WorldObject); diff --git a/src/server/game/Entities/Object/Updates/UpdateField.h b/src/server/game/Entities/Object/Updates/UpdateField.h index 5c399c86f80..50a753d76cb 100644 --- a/src/server/game/Entities/Object/Updates/UpdateField.h +++ b/src/server/game/Entities/Object/Updates/UpdateField.h @@ -819,4 +819,6 @@ namespace UF }; } +namespace EnumFlag { template<> struct IsFlag<UF::UpdateFieldFlag> : std::true_type { }; } + #endif // UpdateField_h__ diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.cpp b/src/server/game/Entities/Object/Updates/UpdateFields.cpp index f6494ed1fde..6c8f9e5f462 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFields.cpp +++ b/src/server/game/Entities/Object/Updates/UpdateFields.cpp @@ -30,14 +30,14 @@ namespace UF { -void ObjectData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Object const* owner, Player const* receiver) const +void ObjectData::WriteCreate(ByteBuffer& data, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags, Object const* owner, Player const* receiver) const { data << int32(EntryID); data << uint32(ViewerDependentValue<DynamicFlagsTag>::GetValue(DynamicFlags, owner, receiver)); data << float(Scale); } -void ObjectData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Object const* owner, Player const* receiver) const +void ObjectData::WriteUpdate(ByteBuffer& data, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags, Object const* owner, Player const* receiver) const { WriteUpdate(data, _changesMask, false, owner, receiver); } @@ -185,7 +185,7 @@ void SocketedGem::ClearChangesMask() _changesMask.ResetAll(); } -void ItemData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const +void ItemData::WriteCreate(ByteBuffer& data, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const { data << uint32(BonusListIDs->size()); for (std::size_t i = 0; i < BonusListIDs->size(); ++i) @@ -247,20 +247,20 @@ void ItemData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fiel } } -void ItemData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const +void ItemData::WriteUpdate(ByteBuffer& data, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const { UpdateMask<40> allowedMaskForTarget({ 0xFC0149FFu, 0x000000FFu }); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver); } -void ItemData::AppendAllowedFieldsMaskForFlag(UpdateMask<40>& allowedMaskForTarget, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags) const +void ItemData::AppendAllowedFieldsMaskForFlag(UpdateMask<40>& allowedMaskForTarget, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags) const { if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner)) allowedMaskForTarget |= { 0x03FEB600u, 0x00000000u }; } -void ItemData::FilterDisallowedFieldsMaskForFlag(UpdateMask<40>& changesMask, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags) const +void ItemData::FilterDisallowedFieldsMaskForFlag(UpdateMask<40>& changesMask, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags) const { if (!fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner)) changesMask &= { 0xFC0149FFu, 0xFFFFFFFFu }; @@ -451,7 +451,7 @@ void ItemData::ClearChangesMask() _changesMask.ResetAll(); } -void ContainerData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Bag const* owner, Player const* receiver) const +void ContainerData::WriteCreate(ByteBuffer& data, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags, Bag const* owner, Player const* receiver) const { for (std::size_t i = 0; i < 36; ++i) { @@ -460,7 +460,7 @@ void ContainerData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> data << uint32(NumSlots); } -void ContainerData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Bag const* owner, Player const* receiver) const +void ContainerData::WriteUpdate(ByteBuffer& data, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags, Bag const* owner, Player const* receiver) const { WriteUpdate(data, _changesMask, false, owner, receiver); } @@ -499,7 +499,7 @@ void ContainerData::ClearChangesMask() _changesMask.ResetAll(); } -void AzeriteEmpoweredItemData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, AzeriteEmpoweredItem const* owner, Player const* receiver) const +void AzeriteEmpoweredItemData::WriteCreate(ByteBuffer& data, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags, AzeriteEmpoweredItem const* owner, Player const* receiver) const { for (std::size_t i = 0; i < 5; ++i) { @@ -507,7 +507,7 @@ void AzeriteEmpoweredItemData::WriteCreate(ByteBuffer& data, EnumClassFlag<Updat } } -void AzeriteEmpoweredItemData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, AzeriteEmpoweredItem const* owner, Player const* receiver) const +void AzeriteEmpoweredItemData::WriteUpdate(ByteBuffer& data, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags, AzeriteEmpoweredItem const* owner, Player const* receiver) const { WriteUpdate(data, _changesMask, false, owner, receiver); } @@ -603,7 +603,7 @@ void SelectedAzeriteEssences::ClearChangesMask() _changesMask.ResetAll(); } -void AzeriteItemData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, AzeriteItem const* owner, Player const* receiver) const +void AzeriteItemData::WriteCreate(ByteBuffer& data, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags, AzeriteItem const* owner, Player const* receiver) const { if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner)) { @@ -630,20 +630,20 @@ void AzeriteItemData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFla } } -void AzeriteItemData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, AzeriteItem const* owner, Player const* receiver) const +void AzeriteItemData::WriteUpdate(ByteBuffer& data, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags, AzeriteItem const* owner, Player const* receiver) const { UpdateMask<9> allowedMaskForTarget({ 0x0000000Fu }); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver); } -void AzeriteItemData::AppendAllowedFieldsMaskForFlag(UpdateMask<9>& allowedMaskForTarget, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags) const +void AzeriteItemData::AppendAllowedFieldsMaskForFlag(UpdateMask<9>& allowedMaskForTarget, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags) const { if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner)) allowedMaskForTarget |= { 0x000001F0u }; } -void AzeriteItemData::FilterDisallowedFieldsMaskForFlag(UpdateMask<9>& changesMask, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags) const +void AzeriteItemData::FilterDisallowedFieldsMaskForFlag(UpdateMask<9>& changesMask, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags) const { if (!fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner)) changesMask &= { 0xFFFFFE0Fu }; @@ -811,7 +811,7 @@ void PassiveSpellHistory::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, data << int32(AuraSpellID); } -void UnitData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const +void UnitData::WriteCreate(ByteBuffer& data, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const { data << int32(ViewerDependentValue<DisplayIDTag>::GetValue(DisplayID, owner, receiver)); for (std::size_t i = 0; i < 2; ++i) @@ -855,7 +855,7 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fiel data << int32(Power[i]); data << int32(MaxPower[i]); } - if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner) || fieldVisibilityFlags.HasFlag(UpdateFieldFlag::UnitAll)) + if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner | UpdateFieldFlag::UnitAll)) { for (std::size_t i = 0; i < 6; ++i) { @@ -897,7 +897,7 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fiel data << float(NativeXDisplayScale); data << int32(MountDisplayID); data << int32(CosmeticMountDisplayID); - if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner) || fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Empath)) + if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner | UpdateFieldFlag::Empath)) { data << float(MinDamage); data << float(MaxDamage); @@ -929,7 +929,7 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fiel data << int32(StatNegBuff[i]); } } - if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner) || fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Empath)) + if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner | UpdateFieldFlag::Empath)) { for (std::size_t i = 0; i < 7; ++i) { @@ -1007,14 +1007,14 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fiel } } -void UnitData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const +void UnitData::WriteUpdate(ByteBuffer& data, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const { UpdateMask<192> allowedMaskForTarget({ 0xFFFFEFFFu, 0xFC3FBFFFu, 0x0001EFFFu, 0xFFBFFFF9u, 0x003F8007u, 0x00000000u }); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver); } -void UnitData::AppendAllowedFieldsMaskForFlag(UpdateMask<192>& allowedMaskForTarget, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags) const +void UnitData::AppendAllowedFieldsMaskForFlag(UpdateMask<192>& allowedMaskForTarget, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags) const { if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner)) allowedMaskForTarget |= { 0x00001000u, 0x03C04000u, 0xFFFE1000u, 0x00400006u, 0xFFC07FF8u, 0xFFFFFFFFu }; @@ -1024,7 +1024,7 @@ void UnitData::AppendAllowedFieldsMaskForFlag(UpdateMask<192>& allowedMaskForTar allowedMaskForTarget |= { 0x00000000u, 0x03C00000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x000007F8u }; } -void UnitData::FilterDisallowedFieldsMaskForFlag(UpdateMask<192>& changesMask, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags) const +void UnitData::FilterDisallowedFieldsMaskForFlag(UpdateMask<192>& changesMask, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags) const { if (!fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner)) changesMask &= { 0xFFFFEFFFu, 0xFC3FBFFFu, 0x0001EFFFu, 0xFFBFFFF9u, 0x003F8007u, 0x00000000u }; @@ -1907,7 +1907,7 @@ void ArenaCooldown::ClearChangesMask() _changesMask.ResetAll(); } -void PlayerData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const +void PlayerData::WriteCreate(ByteBuffer& data, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const { data << DuelArbiter; data << WowAccount; @@ -1980,20 +1980,20 @@ void PlayerData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fi data.FlushBits(); } -void PlayerData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const +void PlayerData::WriteUpdate(ByteBuffer& data, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const { UpdateMask<192> allowedMaskForTarget({ 0xFFFFFFF5u, 0x000001FFu, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFFFFF80u }); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver); } -void PlayerData::AppendAllowedFieldsMaskForFlag(UpdateMask<192>& allowedMaskForTarget, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags) const +void PlayerData::AppendAllowedFieldsMaskForFlag(UpdateMask<192>& allowedMaskForTarget, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags) const { if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember)) allowedMaskForTarget |= { 0x0000000Au, 0xFFFFFE00u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x0000007Fu }; } -void PlayerData::FilterDisallowedFieldsMaskForFlag(UpdateMask<192>& changesMask, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags) const +void PlayerData::FilterDisallowedFieldsMaskForFlag(UpdateMask<192>& changesMask, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags) const { if (!fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember)) changesMask &= { 0xFFFFFFF5u, 0x000001FFu, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFFFFF80u }; @@ -2604,7 +2604,7 @@ void QuestSession::ClearChangesMask() _changesMask.ResetAll(); } -void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const +void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const { for (std::size_t i = 0; i < 199; ++i) { @@ -2847,7 +2847,7 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFl data.FlushBits(); } -void ActivePlayerData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const +void ActivePlayerData::WriteUpdate(ByteBuffer& data, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const { WriteUpdate(data, _changesMask, false, owner, receiver); } @@ -3812,7 +3812,7 @@ void ActivePlayerData::ClearChangesMask() _changesMask.ResetAll(); } -void GameObjectData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, GameObject const* owner, Player const* receiver) const +void GameObjectData::WriteCreate(ByteBuffer& data, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags, GameObject const* owner, Player const* receiver) const { data << int32(DisplayID); data << uint32(SpellVisualID); @@ -3846,7 +3846,7 @@ void GameObjectData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag } } -void GameObjectData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, GameObject const* owner, Player const* receiver) const +void GameObjectData::WriteUpdate(ByteBuffer& data, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags, GameObject const* owner, Player const* receiver) const { WriteUpdate(data, _changesMask, false, owner, receiver); } @@ -3988,7 +3988,7 @@ void GameObjectData::ClearChangesMask() _changesMask.ResetAll(); } -void DynamicObjectData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, DynamicObject const* owner, Player const* receiver) const +void DynamicObjectData::WriteCreate(ByteBuffer& data, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags, DynamicObject const* owner, Player const* receiver) const { data << Caster; data << int32(SpellXSpellVisualID); @@ -3998,7 +3998,7 @@ void DynamicObjectData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldF data << uint8(Type); } -void DynamicObjectData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, DynamicObject const* owner, Player const* receiver) const +void DynamicObjectData::WriteUpdate(ByteBuffer& data, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags, DynamicObject const* owner, Player const* receiver) const { WriteUpdate(data, _changesMask, false, owner, receiver); } @@ -4048,7 +4048,7 @@ void DynamicObjectData::ClearChangesMask() _changesMask.ResetAll(); } -void CorpseData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Corpse const* owner, Player const* receiver) const +void CorpseData::WriteCreate(ByteBuffer& data, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags, Corpse const* owner, Player const* receiver) const { data << uint32(DynamicFlags); data << Owner; @@ -4075,7 +4075,7 @@ void CorpseData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fi } } -void CorpseData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Corpse const* owner, Player const* receiver) const +void CorpseData::WriteUpdate(ByteBuffer& data, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags, Corpse const* owner, Player const* receiver) const { WriteUpdate(data, _changesMask, false, owner, receiver); } @@ -4256,7 +4256,7 @@ void ScaleCurve::ClearChangesMask() _changesMask.ResetAll(); } -void AreaTriggerData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const +void AreaTriggerData::WriteCreate(ByteBuffer& data, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const { OverrideScaleCurve->WriteCreate(data, owner, receiver); data << Caster; @@ -4273,7 +4273,7 @@ void AreaTriggerData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFla ExtraScaleCurve->WriteCreate(data, owner, receiver); } -void AreaTriggerData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const +void AreaTriggerData::WriteUpdate(ByteBuffer& data, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const { WriteUpdate(data, _changesMask, false, owner, receiver); } @@ -4358,7 +4358,7 @@ void AreaTriggerData::ClearChangesMask() _changesMask.ResetAll(); } -void SceneObjectData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Object const* owner, Player const* receiver) const +void SceneObjectData::WriteCreate(ByteBuffer& data, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags, Object const* owner, Player const* receiver) const { data << int32(ScriptPackageID); data << uint32(RndSeedVal); @@ -4366,7 +4366,7 @@ void SceneObjectData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFla data << uint32(SceneType); } -void SceneObjectData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Object const* owner, Player const* receiver) const +void SceneObjectData::WriteUpdate(ByteBuffer& data, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags, Object const* owner, Player const* receiver) const { WriteUpdate(data, _changesMask, false, owner, receiver); } @@ -4444,7 +4444,7 @@ void ConversationActor::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Co data.FlushBits(); } -void ConversationData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const +void ConversationData::WriteCreate(ByteBuffer& data, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const { data << uint32(Lines->size()); data << int32(LastLineEndTime); @@ -4460,7 +4460,7 @@ void ConversationData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFl } } -void ConversationData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const +void ConversationData::WriteUpdate(ByteBuffer& data, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const { WriteUpdate(data, _changesMask, false, owner, receiver); } diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.h b/src/server/game/Entities/Object/Updates/UpdateFields.h index 31a36490913..948dee57340 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFields.h +++ b/src/server/game/Entities/Object/Updates/UpdateFields.h @@ -18,7 +18,7 @@ #ifndef UpdateFields_h__ #define UpdateFields_h__ -#include "EnumClassFlag.h" +#include "EnumFlag.h" #include "ObjectGuid.h" #include "Position.h" #include "QuaternionData.h" @@ -48,8 +48,8 @@ struct ObjectData : public IsUpdateFieldStructureTag, public HasChangesMask<4> struct DynamicFlagsTag : ViewerDependentValueTag<uint32> {}; UpdateField<float, 0, 3> Scale; - void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Object const* owner, Player const* receiver) const; - void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Object const* owner, Player const* receiver) const; + void WriteCreate(ByteBuffer& data, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags, Object const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags, Object const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, UpdateMask<4> const& changesMask, bool ignoreNestedChangesMask, Object const* owner, Player const* receiver) const; void ClearChangesMask(); }; @@ -111,11 +111,11 @@ struct ItemData : public IsUpdateFieldStructureTag, public HasChangesMask<40> UpdateFieldArray<int32, 5, 20, 21> SpellCharges; UpdateFieldArray<UF::ItemEnchantment, 13, 26, 27> Enchantment; - void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const; - void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const; + void WriteCreate(ByteBuffer& data, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, UpdateMask<40> const& changesMask, bool ignoreNestedChangesMask, Item const* owner, Player const* receiver) const; - void AppendAllowedFieldsMaskForFlag(UpdateMask<40>& allowedMaskForTarget, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags) const; - void FilterDisallowedFieldsMaskForFlag(UpdateMask<40>& changesMask, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags) const; + void AppendAllowedFieldsMaskForFlag(UpdateMask<40>& allowedMaskForTarget, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags) const; + void FilterDisallowedFieldsMaskForFlag(UpdateMask<40>& changesMask, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags) const; void ClearChangesMask(); }; @@ -124,8 +124,8 @@ struct ContainerData : public IsUpdateFieldStructureTag, public HasChangesMask<3 UpdateField<uint32, 0, 1> NumSlots; UpdateFieldArray<ObjectGuid, 36, 2, 3> Slots; - void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Bag const* owner, Player const* receiver) const; - void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Bag const* owner, Player const* receiver) const; + void WriteCreate(ByteBuffer& data, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags, Bag const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags, Bag const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, UpdateMask<39> const& changesMask, bool ignoreNestedChangesMask, Bag const* owner, Player const* receiver) const; void ClearChangesMask(); }; @@ -134,8 +134,8 @@ struct AzeriteEmpoweredItemData : public IsUpdateFieldStructureTag, public HasCh { UpdateFieldArray<int32, 5, 0, 1> Selections; - void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, AzeriteEmpoweredItem const* owner, Player const* receiver) const; - void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, AzeriteEmpoweredItem const* owner, Player const* receiver) const; + void WriteCreate(ByteBuffer& data, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags, AzeriteEmpoweredItem const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags, AzeriteEmpoweredItem const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, UpdateMask<6> const& changesMask, bool ignoreNestedChangesMask, AzeriteEmpoweredItem const* owner, Player const* receiver) const; void ClearChangesMask(); }; @@ -171,11 +171,11 @@ struct AzeriteItemData : public IsUpdateFieldStructureTag, public HasChangesMask UpdateField<uint32, 0, 7> KnowledgeLevel; UpdateField<int32, 0, 8> DEBUGknowledgeWeek; - void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, AzeriteItem const* owner, Player const* receiver) const; - void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, AzeriteItem const* owner, Player const* receiver) const; + void WriteCreate(ByteBuffer& data, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags, AzeriteItem const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags, AzeriteItem const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, UpdateMask<9> const& changesMask, bool ignoreNestedChangesMask, AzeriteItem const* owner, Player const* receiver) const; - void AppendAllowedFieldsMaskForFlag(UpdateMask<9>& allowedMaskForTarget, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags) const; - void FilterDisallowedFieldsMaskForFlag(UpdateMask<9>& changesMask, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags) const; + void AppendAllowedFieldsMaskForFlag(UpdateMask<9>& allowedMaskForTarget, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags) const; + void FilterDisallowedFieldsMaskForFlag(UpdateMask<9>& changesMask, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags) const; void ClearChangesMask(); }; @@ -342,11 +342,11 @@ struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<192> UpdateFieldArray<int32, 7, 163, 178> PowerCostModifier; UpdateFieldArray<float, 7, 163, 185> PowerCostMultiplier; - void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const; - void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const; + void WriteCreate(ByteBuffer& data, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, UpdateMask<192> const& changesMask, bool ignoreNestedChangesMask, Unit const* owner, Player const* receiver) const; - void AppendAllowedFieldsMaskForFlag(UpdateMask<192>& allowedMaskForTarget, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags) const; - void FilterDisallowedFieldsMaskForFlag(UpdateMask<192>& changesMask, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags) const; + void AppendAllowedFieldsMaskForFlag(UpdateMask<192>& allowedMaskForTarget, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags) const; + void FilterDisallowedFieldsMaskForFlag(UpdateMask<192>& changesMask, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags) const; void ClearChangesMask(); }; @@ -421,11 +421,11 @@ struct PlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<192> UpdateFieldArray<UF::VisibleItem, 19, 167, 168> VisibleItems; UpdateFieldArray<float, 4, 187, 188> AvgItemLevel; - void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; - void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; + void WriteCreate(ByteBuffer& data, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, UpdateMask<192> const& changesMask, bool ignoreNestedChangesMask, Player const* owner, Player const* receiver) const; - void AppendAllowedFieldsMaskForFlag(UpdateMask<192>& allowedMaskForTarget, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags) const; - void FilterDisallowedFieldsMaskForFlag(UpdateMask<192>& changesMask, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags) const; + void AppendAllowedFieldsMaskForFlag(UpdateMask<192>& allowedMaskForTarget, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags) const; + void FilterDisallowedFieldsMaskForFlag(UpdateMask<192>& changesMask, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags) const; void ClearChangesMask(); bool IsQuestLogChangesMaskSkipped() const { return false; } // bandwidth savings aren't worth the cpu time }; @@ -651,8 +651,8 @@ struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMas UpdateFieldArray<uint32, 7, 610, 611> BankBagSlotFlags; UpdateFieldArray<uint64, 875, 618, 619> QuestCompleted; - void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; - void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; + void WriteCreate(ByteBuffer& data, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, UpdateMask<1494> const& changesMask, bool ignoreNestedChangesMask, Player const* owner, Player const* receiver) const; void ClearChangesMask(); }; @@ -682,8 +682,8 @@ struct GameObjectData : public IsUpdateFieldStructureTag, public HasChangesMask< UpdateField<uint32, 0, 18> ArtKit; UpdateField<uint32, 0, 19> CustomParam; - void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, GameObject const* owner, Player const* receiver) const; - void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, GameObject const* owner, Player const* receiver) const; + void WriteCreate(ByteBuffer& data, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags, GameObject const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags, GameObject const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, UpdateMask<20> const& changesMask, bool ignoreNestedChangesMask, GameObject const* owner, Player const* receiver) const; void ClearChangesMask(); }; @@ -697,8 +697,8 @@ struct DynamicObjectData : public IsUpdateFieldStructureTag, public HasChangesMa UpdateField<uint32, 0, 5> CastTime; UpdateField<uint8, 0, 6> Type; - void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, DynamicObject const* owner, Player const* receiver) const; - void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, DynamicObject const* owner, Player const* receiver) const; + void WriteCreate(ByteBuffer& data, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags, DynamicObject const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags, DynamicObject const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, UpdateMask<7> const& changesMask, bool ignoreNestedChangesMask, DynamicObject const* owner, Player const* receiver) const; void ClearChangesMask(); }; @@ -723,8 +723,8 @@ struct CorpseData : public IsUpdateFieldStructureTag, public HasChangesMask<40> UpdateFieldArray<uint32, 19, 16, 17> Items; UpdateFieldArray<uint8, 3, 36, 37> CustomDisplayOption; - void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Corpse const* owner, Player const* receiver) const; - void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Corpse const* owner, Player const* receiver) const; + void WriteCreate(ByteBuffer& data, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags, Corpse const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags, Corpse const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, UpdateMask<40> const& changesMask, bool ignoreNestedChangesMask, Corpse const* owner, Player const* receiver) const; void ClearChangesMask(); }; @@ -757,8 +757,8 @@ struct AreaTriggerData : public IsUpdateFieldStructureTag, public HasChangesMask UpdateField<uint32, 0, 12> DecalPropertiesID; UpdateField<ObjectGuid, 0, 13> CreatingEffectGUID; - void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const; - void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const; + void WriteCreate(ByteBuffer& data, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, UpdateMask<14> const& changesMask, bool ignoreNestedChangesMask, AreaTrigger const* owner, Player const* receiver) const; void ClearChangesMask(); }; @@ -770,8 +770,8 @@ struct SceneObjectData : public IsUpdateFieldStructureTag, public HasChangesMask UpdateField<ObjectGuid, 0, 3> CreatedBy; UpdateField<uint32, 0, 4> SceneType; - void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Object const* owner, Player const* receiver) const; - void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Object const* owner, Player const* receiver) const; + void WriteCreate(ByteBuffer& data, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags, Object const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags, Object const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, UpdateMask<5> const& changesMask, bool ignoreNestedChangesMask, Object const* owner, Player const* receiver) const; void ClearChangesMask(); }; @@ -807,8 +807,8 @@ struct ConversationData : public IsUpdateFieldStructureTag, public HasChangesMas UpdateField<int32, 0, 3> LastLineEndTime; UpdateField<uint32, 0, 4> Field_1C; - void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const; - void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const; + void WriteCreate(ByteBuffer& data, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumFlag_t<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, UpdateMask<5> const& changesMask, bool ignoreNestedChangesMask, Conversation const* owner, Player const* receiver) const; void ClearChangesMask(); }; diff --git a/src/server/game/Entities/Player/CollectionMgr.cpp b/src/server/game/Entities/Player/CollectionMgr.cpp index 72c7693e6d3..e2d434cc85a 100644 --- a/src/server/game/Entities/Player/CollectionMgr.cpp +++ b/src/server/game/Entities/Player/CollectionMgr.cpp @@ -72,9 +72,9 @@ void CollectionMgr::LoadMountDefinitions() namespace { - EnumClassFlag<ToyFlags> GetToyFlags(bool isFavourite, bool hasFanfare) + EnumFlag_t<ToyFlags> GetToyFlags(bool isFavourite, bool hasFanfare) { - EnumClassFlag<ToyFlags> flags(ToyFlags::None); + ToyFlags flags = ToyFlags::None; if (isFavourite) flags |= ToyFlags::Favorite; @@ -151,7 +151,7 @@ void CollectionMgr::ToySetFavorite(uint32 itemId, bool favorite) if (favorite) itr->second |= ToyFlags::Favorite; else - itr->second.RemoveFlag(ToyFlags::Favorite); + itr->second &= ~ToyFlags::Favorite; } void CollectionMgr::ToyClearFanfare(uint32 itemId) @@ -160,7 +160,7 @@ void CollectionMgr::ToyClearFanfare(uint32 itemId) if (itr == _toys.end()) return; - itr->second.RemoveFlag(ToyFlags::HasFanfare); + itr->second &= ~ ToyFlags::HasFanfare; } void CollectionMgr::OnItemAdded(Item* item) diff --git a/src/server/game/Entities/Player/CollectionMgr.h b/src/server/game/Entities/Player/CollectionMgr.h index 1f3b9f7bd3f..8c37ca1e666 100644 --- a/src/server/game/Entities/Player/CollectionMgr.h +++ b/src/server/game/Entities/Player/CollectionMgr.h @@ -20,7 +20,7 @@ #include "Define.h" #include "DatabaseEnvFwd.h" -#include "EnumClassFlag.h" +#include "EnumFlag.h" #include "ObjectGuid.h" #include <boost/dynamic_bitset_fwd.hpp> #include <map> @@ -62,7 +62,9 @@ enum class ToyFlags : uint32 HasFanfare = 0x02 }; -typedef std::map<uint32, EnumClassFlag<ToyFlags>> ToyBoxContainer; +namespace EnumFlag { template<> struct IsFlag<ToyFlags> : std::true_type { }; } + +typedef std::map<uint32, EnumFlag_t<ToyFlags>> ToyBoxContainer; typedef std::map<uint32, HeirloomData> HeirloomContainer; enum MountStatusFlags : uint8 diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index ecae26fae8f..dc29174025a 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -3621,7 +3621,7 @@ void Player::BuildCreateUpdateBlockForPlayer(UpdateData* data, Player* target) c UF::UpdateFieldFlag Player::GetUpdateFieldFlagsFor(Player const* target) const { - EnumClassFlag<UF::UpdateFieldFlag> flags = Unit::GetUpdateFieldFlagsFor(target); + UF::UpdateFieldFlag flags = Unit::GetUpdateFieldFlagsFor(target); if (IsInSameRaidWith(target)) flags |= UF::UpdateFieldFlag::PartyMember; diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index a0ddb919106..0f809261bc0 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -14229,7 +14229,7 @@ bool Unit::IsSplineEnabled() const UF::UpdateFieldFlag Unit::GetUpdateFieldFlagsFor(Player const* target) const { - EnumClassFlag<UF::UpdateFieldFlag> flags = UF::UpdateFieldFlag::None; + UF::UpdateFieldFlag flags = UF::UpdateFieldFlag::None; if (target == this || GetOwnerGUID() == target->GetGUID()) flags |= UF::UpdateFieldFlag::Owner; diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h index 6506eb3d80d..22a65795177 100644 --- a/src/server/game/Globals/ObjectMgr.h +++ b/src/server/game/Globals/ObjectMgr.h @@ -1338,8 +1338,7 @@ class TC_GAME_API ObjectMgr template<HighGuid type> inline ObjectGuidGeneratorBase& GetGenerator() { - static_assert(ObjectGuidTraits<type>::SequenceSource.HasFlag(ObjectGuidSequenceSource::Global) - || ObjectGuidTraits<type>::SequenceSource.HasFlag(ObjectGuidSequenceSource::Realm), + static_assert(ObjectGuidTraits<type>::SequenceSource.HasFlag(ObjectGuidSequenceSource::Global | ObjectGuidSequenceSource::Realm), "Only global guid can be generated in ObjectMgr context"); return GetGuidSequenceGenerator<type>(); } diff --git a/src/server/game/Phasing/PhaseShift.cpp b/src/server/game/Phasing/PhaseShift.cpp index d5791b1dbc0..a93101c5687 100644 --- a/src/server/game/Phasing/PhaseShift.cpp +++ b/src/server/game/Phasing/PhaseShift.cpp @@ -89,7 +89,7 @@ void PhaseShift::Clear() void PhaseShift::ClearPhases() { - Flags &= EnumClassFlag<PhaseShiftFlags>(PhaseShiftFlags::AlwaysVisible) | PhaseShiftFlags::Inverse; + Flags &= PhaseShiftFlags::AlwaysVisible | PhaseShiftFlags::Inverse; Phases.clear(); NonCosmeticReferences = 0; CosmeticReferences = 0; @@ -161,7 +161,7 @@ void PhaseShift::ModifyPhasesReferences(PhaseContainer::iterator itr, int32 refe if (CosmeticReferences) Flags |= PhaseShiftFlags::NoCosmetic; else - Flags &= ~EnumClassFlag<PhaseShiftFlags>(PhaseShiftFlags::NoCosmetic); + Flags &= ~PhaseShiftFlags::NoCosmetic; UpdateUnphasedFlag(); } @@ -169,8 +169,8 @@ void PhaseShift::ModifyPhasesReferences(PhaseContainer::iterator itr, int32 refe void PhaseShift::UpdateUnphasedFlag() { - EnumClassFlag<PhaseShiftFlags> unphasedFlag = !Flags.HasFlag(PhaseShiftFlags::Inverse) ? PhaseShiftFlags::Unphased : PhaseShiftFlags::InverseUnphased; - Flags &= ~EnumClassFlag<PhaseShiftFlags>(!Flags.HasFlag(PhaseShiftFlags::Inverse) ? PhaseShiftFlags::InverseUnphased : PhaseShiftFlags::Unphased); + EnumFlag_t<PhaseShiftFlags> unphasedFlag = !Flags.HasFlag(PhaseShiftFlags::Inverse) ? PhaseShiftFlags::Unphased : PhaseShiftFlags::InverseUnphased; + Flags &= ~(!Flags.HasFlag(PhaseShiftFlags::Inverse) ? PhaseShiftFlags::InverseUnphased : PhaseShiftFlags::Unphased); if (NonCosmeticReferences && !DefaultReferences) Flags &= ~unphasedFlag; else diff --git a/src/server/game/Phasing/PhaseShift.h b/src/server/game/Phasing/PhaseShift.h index c30b477c9ac..dc77665e3e6 100644 --- a/src/server/game/Phasing/PhaseShift.h +++ b/src/server/game/Phasing/PhaseShift.h @@ -19,7 +19,7 @@ #define PhaseShift_h__ #include "Define.h" -#include "EnumClassFlag.h" +#include "EnumFlag.h" #include "ObjectGuid.h" #include <boost/container/flat_set.hpp> #include <map> @@ -48,6 +48,12 @@ enum class PhaseFlags : uint16 Personal = 0x2 }; +namespace EnumFlag +{ + template<> struct IsFlag<PhaseShiftFlags> : std::true_type { }; + template<> struct IsFlag<PhaseFlags> : std::true_type { }; +} + class TC_GAME_API PhaseShift { public: @@ -57,7 +63,7 @@ public: : Id(id), Flags(flags), References(0), AreaConditions(conditions) { } uint16 Id; - EnumClassFlag<PhaseFlags> Flags; + EnumFlag_t<PhaseFlags> Flags; int32 References; std::vector<Condition*> const* AreaConditions; bool operator<(PhaseRef const& right) const { return Id < right.Id; } @@ -107,7 +113,7 @@ public: protected: friend class PhasingHandler; - EnumClassFlag<PhaseShiftFlags> Flags; + EnumFlag_t<PhaseShiftFlags> Flags; ObjectGuid PersonalGuid; PhaseContainer Phases; VisibleMapIdContainer VisibleMapIds; diff --git a/src/server/game/Phasing/PhasingHandler.cpp b/src/server/game/Phasing/PhasingHandler.cpp index eb582ca0de9..aefaecc57d7 100644 --- a/src/server/game/Phasing/PhasingHandler.cpp +++ b/src/server/game/Phasing/PhasingHandler.cpp @@ -202,7 +202,7 @@ void PhasingHandler::OnMapChange(WorldObject* object) object->GetPhaseShift().UiMapPhaseIds.clear(); object->GetSuppressedPhaseShift().VisibleMapIds.clear(); - for (auto visibleMapPair : sObjectMgr->GetTerrainSwaps()) + for (auto const& visibleMapPair : sObjectMgr->GetTerrainSwaps()) { for (TerrainSwapInfo const* visibleMapInfo : visibleMapPair.second) { @@ -438,9 +438,9 @@ void PhasingHandler::InitDbPhaseShift(PhaseShift& phaseShift, uint8 phaseUseFlag phaseShift.ClearPhases(); phaseShift.IsDbPhaseShift = true; - EnumClassFlag<PhaseShiftFlags> flags = PhaseShiftFlags::None; + EnumFlag_t<PhaseShiftFlags> flags = PhaseShiftFlags::None; if (phaseUseFlags & PHASE_USE_FLAGS_ALWAYS_VISIBLE) - flags = flags | PhaseShiftFlags::AlwaysVisible | PhaseShiftFlags::Unphased; + flags |= PhaseShiftFlags::AlwaysVisible | PhaseShiftFlags::Unphased; if (phaseUseFlags & PHASE_USE_FLAGS_INVERSE) flags |= PhaseShiftFlags::Inverse; @@ -506,7 +506,7 @@ void PhasingHandler::SetAlwaysVisible(PhaseShift& phaseShift, bool apply) if (apply) phaseShift.Flags |= PhaseShiftFlags::AlwaysVisible; else - phaseShift.Flags &= ~EnumClassFlag<PhaseShiftFlags>(PhaseShiftFlags::AlwaysVisible); + phaseShift.Flags &= ~PhaseShiftFlags::AlwaysVisible; } void PhasingHandler::SetInversed(PhaseShift& phaseShift, bool apply) @@ -514,7 +514,7 @@ void PhasingHandler::SetInversed(PhaseShift& phaseShift, bool apply) if (apply) phaseShift.Flags |= PhaseShiftFlags::Inverse; else - phaseShift.Flags &= ~EnumClassFlag<PhaseShiftFlags>(PhaseShiftFlags::Inverse); + phaseShift.Flags &= PhaseShiftFlags::Inverse; phaseShift.UpdateUnphasedFlag(); } |