diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/game/Entities/Object/Object.h | 20 | ||||
| -rw-r--r-- | src/server/game/Entities/Object/Updates/UpdateField.h | 89 | ||||
| -rw-r--r-- | src/server/game/Entities/Object/Updates/ViewerDependentValues.h | 40 |
3 files changed, 77 insertions, 72 deletions
diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h index 713314bcfc4..3a5f06062ee 100644 --- a/src/server/game/Entities/Object/Object.h +++ b/src/server/game/Entities/Object/Object.h @@ -88,19 +88,19 @@ struct CreateObjectBits namespace UF { template<typename T> - inline bool SetUpdateFieldValue(UpdateFieldSetter<T>& setter, typename UpdateFieldSetter<T>::ValueType&& value) + inline bool SetUpdateFieldValue(UpdateFieldSetter<T>& setter, typename UpdateFieldSetter<T>::value_type&& value) { return setter.SetValue(std::move(value)); } template<typename T> - inline typename DynamicUpdateFieldSetter<T>::NewValueType AddDynamicUpdateFieldValue(DynamicUpdateFieldSetter<T>& setter) + inline typename DynamicUpdateFieldSetter<T>::insert_result AddDynamicUpdateFieldValue(DynamicUpdateFieldSetter<T>& setter) { return setter.AddValue(); } template<typename T> - inline typename DynamicUpdateFieldSetter<T>::NewValueType InsertDynamicUpdateFieldValue(DynamicUpdateFieldSetter<T>& setter, uint32 index) + inline typename DynamicUpdateFieldSetter<T>::insert_result InsertDynamicUpdateFieldValue(DynamicUpdateFieldSetter<T>& setter, uint32 index) { return setter.InsertValue(index); } @@ -217,35 +217,35 @@ class TC_GAME_API Object void _Create(ObjectGuid const& guid); template<typename T> - void SetUpdateFieldValue(UF::UpdateFieldSetter<T> setter, typename UF::UpdateFieldSetter<T>::ValueType value) + void SetUpdateFieldValue(UF::UpdateFieldSetter<T> setter, typename UF::UpdateFieldSetter<T>::value_type value) { if (UF::SetUpdateFieldValue(setter, std::move(value))) AddToObjectUpdateIfNeeded(); } template<typename T> - void SetUpdateFieldFlagValue(UF::UpdateFieldSetter<T> setter, typename UF::UpdateFieldSetter<T>::ValueType flag) + void SetUpdateFieldFlagValue(UF::UpdateFieldSetter<T> setter, typename UF::UpdateFieldSetter<T>::value_type flag) { static_assert(std::is_integral<T>::value, "SetUpdateFieldFlagValue must be used with integral types"); SetUpdateFieldValue(setter, setter.GetValue() | flag); } template<typename T> - void RemoveUpdateFieldFlagValue(UF::UpdateFieldSetter<T> setter, typename UF::UpdateFieldSetter<T>::ValueType flag) + void RemoveUpdateFieldFlagValue(UF::UpdateFieldSetter<T> setter, typename UF::UpdateFieldSetter<T>::value_type flag) { static_assert(std::is_integral<T>::value, "RemoveUpdateFieldFlagValue must be used with integral types"); SetUpdateFieldValue(setter, setter.GetValue() & ~flag); } template<typename T> - typename UF::DynamicUpdateFieldSetter<T>::NewValueType AddDynamicUpdateFieldValue(UF::DynamicUpdateFieldSetter<T> setter) + typename UF::DynamicUpdateFieldSetter<T>::insert_result AddDynamicUpdateFieldValue(UF::DynamicUpdateFieldSetter<T> setter) { AddToObjectUpdateIfNeeded(); return UF::AddDynamicUpdateFieldValue(setter); } template<typename T> - typename UF::DynamicUpdateFieldSetter<T>::NewValueType InsertDynamicUpdateFieldValue(UF::DynamicUpdateFieldSetter<T> setter, uint32 index) + typename UF::DynamicUpdateFieldSetter<T>::insert_result InsertDynamicUpdateFieldValue(UF::DynamicUpdateFieldSetter<T> setter, uint32 index) { AddToObjectUpdateIfNeeded(); return UF::InsertDynamicUpdateFieldValue(setter, index); @@ -274,14 +274,14 @@ class TC_GAME_API Object // stat system helpers template<typename T> - void SetUpdateFieldStatValue(UF::UpdateFieldSetter<T> setter, typename UF::UpdateFieldSetter<T>::ValueType value) + void SetUpdateFieldStatValue(UF::UpdateFieldSetter<T> setter, typename UF::UpdateFieldSetter<T>::value_type value) { static_assert(std::is_arithmetic<T>::value, "SetUpdateFieldStatValue must be used with arithmetic types"); SetUpdateFieldValue(setter, std::max(value, T(0))); } template<typename T> - void ApplyModUpdateFieldValue(UF::UpdateFieldSetter<T> setter, typename UF::UpdateFieldSetter<T>::ValueType mod, bool apply) + void ApplyModUpdateFieldValue(UF::UpdateFieldSetter<T> setter, typename UF::UpdateFieldSetter<T>::value_type mod, bool apply) { static_assert(std::is_arithmetic<T>::value, "SetUpdateFieldStatValue must be used with arithmetic types"); diff --git a/src/server/game/Entities/Object/Updates/UpdateField.h b/src/server/game/Entities/Object/Updates/UpdateField.h index 33fbfa07a67..1c9757842eb 100644 --- a/src/server/game/Entities/Object/Updates/UpdateField.h +++ b/src/server/game/Entities/Object/Updates/UpdateField.h @@ -86,10 +86,10 @@ namespace UF template<typename T> struct UpdateFieldSetter { - using ValueType = T; + using value_type = T; template<typename F> - friend bool SetUpdateFieldValue(UpdateFieldSetter<F>& setter, typename UpdateFieldSetter<F>::ValueType&& value); + friend bool SetUpdateFieldValue(UpdateFieldSetter<F>& setter, typename UpdateFieldSetter<F>::value_type&& value); UpdateFieldSetter(T& value) : _value(value) { @@ -118,7 +118,7 @@ namespace UF template<typename T> struct UpdateFieldPublicSetter { - using ValueType = T; + using value_type = T; UpdateFieldPublicSetter(T& value) : _value(value) { @@ -141,14 +141,14 @@ namespace UF template<typename T> struct DynamicUpdateFieldSetter { - using ValueType = T; - using NewValueType = std::conditional_t<std::is_base_of<HasChangesMaskTag, T>::value, MutableFieldReference<T, true>, T&>; + using value_type = T; + using insert_result = std::conditional_t<std::is_base_of<HasChangesMaskTag, T>::value, MutableFieldReference<T, true>, T&>; template<typename F> - friend typename DynamicUpdateFieldSetter<F>::NewValueType AddDynamicUpdateFieldValue(DynamicUpdateFieldSetter<F>& setter); + friend typename DynamicUpdateFieldSetter<F>::insert_result AddDynamicUpdateFieldValue(DynamicUpdateFieldSetter<F>& setter); template<typename F> - friend typename DynamicUpdateFieldSetter<F>::NewValueType InsertDynamicUpdateFieldValue(DynamicUpdateFieldSetter<F>& setter, uint32 index); + friend typename DynamicUpdateFieldSetter<F>::insert_result InsertDynamicUpdateFieldValue(DynamicUpdateFieldSetter<F>& setter, uint32 index); template<typename F> friend void RemoveDynamicUpdateFieldValue(DynamicUpdateFieldSetter<F>& setter, uint32 index); @@ -161,7 +161,7 @@ namespace UF } private: - NewValueType AddValue() + insert_result AddValue() { MarkChanged(_values.size()); _values.emplace_back(); @@ -170,7 +170,7 @@ namespace UF return { value }; } - NewValueType InsertValue(uint32 index) + insert_result InsertValue(uint32 index) { _values.emplace(_values.begin() + index); for (uint32 i = index; i < _values.size(); ++i) @@ -359,50 +359,50 @@ namespace UF template<typename T, bool PublicSet> struct MutableNestedFieldReference { - using ValueType = typename T::ValueType; + using value_type = typename T::value_type; MutableNestedFieldReference(T& value) : _value(value) { } template<typename U = T> - std::enable_if_t<std::is_base_of<UpdateFieldBase<ValueType>, U>::value, - std::conditional_t<std::is_base_of<IsUpdateFieldStructureTag, ValueType>::value, - MutableFieldReference<ValueType, PublicSet>, - std::conditional_t<std::is_base_of<IsUpdateFieldHolderTag, ValueType>::value, - MutableNestedFieldReference<ValueType, PublicSet>, - std::conditional_t<PublicSet, UpdateFieldPublicSetter<ValueType>, UpdateFieldSetter<ValueType>>>>> + std::enable_if_t<std::is_base_of<UpdateFieldBase<value_type>, U>::value, + std::conditional_t<std::is_base_of<IsUpdateFieldStructureTag, value_type>::value, + MutableFieldReference<value_type, PublicSet>, + std::conditional_t<std::is_base_of<IsUpdateFieldHolderTag, value_type>::value, + MutableNestedFieldReference<value_type, PublicSet>, + std::conditional_t<PublicSet, UpdateFieldPublicSetter<value_type>, UpdateFieldSetter<value_type>>>>> ModifyValue() { return { _value._value }; } template<typename U = T> - std::enable_if_t<std::is_base_of<UpdateFieldArrayBaseWithoutSize<ValueType>, U>::value, - std::conditional_t<std::is_base_of<IsUpdateFieldStructureTag, ValueType>::value, - MutableFieldReference<ValueType, PublicSet>, - std::conditional_t<std::is_base_of<IsUpdateFieldHolderTag, ValueType>::value, - MutableNestedFieldReference<ValueType, PublicSet>, - std::conditional_t<PublicSet, UpdateFieldPublicSetter<ValueType>, UpdateFieldSetter<ValueType>>>>> + std::enable_if_t<std::is_base_of<UpdateFieldArrayBaseWithoutSize<value_type>, U>::value, + std::conditional_t<std::is_base_of<IsUpdateFieldStructureTag, value_type>::value, + MutableFieldReference<value_type, PublicSet>, + std::conditional_t<std::is_base_of<IsUpdateFieldHolderTag, value_type>::value, + MutableNestedFieldReference<value_type, PublicSet>, + std::conditional_t<PublicSet, UpdateFieldPublicSetter<value_type>, UpdateFieldSetter<value_type>>>>> ModifyValue(uint32 index) { return { _value._values[index] }; } template<typename U = T> - std::enable_if_t<std::is_base_of<DynamicUpdateFieldBase<ValueType>, U>::value, DynamicUpdateFieldSetter<ValueType>> + std::enable_if_t<std::is_base_of<DynamicUpdateFieldBase<value_type>, U>::value, DynamicUpdateFieldSetter<value_type>> ModifyValue() { return { _value._values, _value._updateMask }; } template<typename U = T> - std::enable_if_t<std::is_base_of<DynamicUpdateFieldBase<ValueType>, U>::value, - std::conditional_t<std::is_base_of<IsUpdateFieldStructureTag, ValueType>::value, - MutableFieldReference<ValueType, PublicSet>, - std::conditional_t<std::is_base_of<IsUpdateFieldHolderTag, ValueType>::value, - MutableNestedFieldReference<ValueType, PublicSet>, - std::conditional_t<PublicSet, UpdateFieldPublicSetter<ValueType>, UpdateFieldSetter<ValueType>>>>> + std::enable_if_t<std::is_base_of<DynamicUpdateFieldBase<value_type>, U>::value, + std::conditional_t<std::is_base_of<IsUpdateFieldStructureTag, value_type>::value, + MutableFieldReference<value_type, PublicSet>, + std::conditional_t<std::is_base_of<IsUpdateFieldHolderTag, value_type>::value, + MutableNestedFieldReference<value_type, PublicSet>, + std::conditional_t<PublicSet, UpdateFieldPublicSetter<value_type>, UpdateFieldSetter<value_type>>>>> ModifyValue(uint32 index) { if (index >= _value.size()) @@ -417,19 +417,19 @@ namespace UF } template<typename U = T> - std::enable_if_t<std::is_base_of<OptionalUpdateFieldBase<ValueType>, U>::value, OptionalUpdateFieldSetter<ValueType>> + std::enable_if_t<std::is_base_of<OptionalUpdateFieldBase<value_type>, U>::value, OptionalUpdateFieldSetter<value_type>> ModifyValue() { return { _value }; } template<typename U = T> - std::enable_if_t<std::is_base_of<OptionalUpdateFieldBase<ValueType>, U>::value, - std::conditional_t<std::is_base_of<IsUpdateFieldStructureTag, ValueType>::value, - MutableFieldReference<ValueType, PublicSet>, - std::conditional_t<std::is_base_of<IsUpdateFieldHolderTag, ValueType>::value, - MutableNestedFieldReference<ValueType, PublicSet>, - std::conditional_t<PublicSet, UpdateFieldPublicSetter<ValueType>, UpdateFieldSetter<ValueType>>>>> + std::enable_if_t<std::is_base_of<OptionalUpdateFieldBase<value_type>, U>::value, + std::conditional_t<std::is_base_of<IsUpdateFieldStructureTag, value_type>::value, + MutableFieldReference<value_type, PublicSet>, + std::conditional_t<std::is_base_of<IsUpdateFieldHolderTag, value_type>::value, + MutableNestedFieldReference<value_type, PublicSet>, + std::conditional_t<PublicSet, UpdateFieldPublicSetter<value_type>, UpdateFieldSetter<value_type>>>>> ModifyValue(uint32 /*dummy*/) { if (!_value.is_initialized()) @@ -697,7 +697,7 @@ namespace UF friend class UpdateFieldHolder; public: - using ValueType = T; + using value_type = T; operator T const& () const { @@ -739,7 +739,7 @@ namespace UF friend class HasChangesMask; public: - using ValueType = T; + using value_type = T; T const* begin() const { @@ -786,7 +786,12 @@ namespace UF friend class HasChangesMask; public: - using ValueType = T; + using value_type = T; + + T const* data() const + { + return _values.data(); + } typename std::vector<T>::const_iterator begin() const { @@ -825,7 +830,7 @@ namespace UF template<typename Pred> int32 FindIndexIf(Pred pred) const { - auto itr = std::find_if(_values.begin(), _values.end(), pred); + auto itr = std::find_if(_values.begin(), _values.end(), std::ref(pred)); if (itr != _values.end()) return int32(std::distance(_values.begin(), itr)); @@ -891,7 +896,7 @@ namespace UF friend struct OptionalUpdateFieldSetter; public: - using ValueType = T; + using value_type = T; using IsLarge = std::integral_constant<bool, sizeof(void*) * 3 < sizeof(T)>; using StorageType = std::conditional_t<IsLarge::value, std::add_pointer_t<T>, Optional<T>>; @@ -961,7 +966,7 @@ namespace UF template<typename T> struct ViewerDependentValueTag { - using ValueType = T; + using value_type = T; }; } diff --git a/src/server/game/Entities/Object/Updates/ViewerDependentValues.h b/src/server/game/Entities/Object/Updates/ViewerDependentValues.h index 834321320ef..db15672ce97 100644 --- a/src/server/game/Entities/Object/Updates/ViewerDependentValues.h +++ b/src/server/game/Entities/Object/Updates/ViewerDependentValues.h @@ -38,9 +38,9 @@ template<> class ViewerDependentValue<UF::ObjectData::DynamicFlagsTag> { public: - using ValueType = UF::ObjectData::DynamicFlagsTag::ValueType; + using value_type = UF::ObjectData::DynamicFlagsTag::value_type; - static ValueType GetValue(ValueType dynamicFlags, Object const* object, Player const* receiver) + static value_type GetValue(value_type dynamicFlags, Object const* object, Player const* receiver) { if (Unit const* unit = object->ToUnit()) { @@ -106,9 +106,9 @@ template<> class ViewerDependentValue<UF::UnitData::DisplayIDTag> { public: - using ValueType = UF::UnitData::DisplayIDTag::ValueType; + using value_type = UF::UnitData::DisplayIDTag::value_type; - static ValueType GetValue(ValueType displayId, Unit const* unit, Player const* receiver) + static value_type GetValue(value_type displayId, Unit const* unit, Player const* receiver) { if (unit->IsCreature()) { @@ -137,9 +137,9 @@ template<> class ViewerDependentValue<UF::UnitData::FactionTemplateTag> { public: - using ValueType = UF::UnitData::FactionTemplateTag::ValueType; + using value_type = UF::UnitData::FactionTemplateTag::value_type; - static ValueType GetValue(ValueType factionTemplate, Unit const* unit, Player const* receiver) + static value_type GetValue(value_type factionTemplate, Unit const* unit, Player const* receiver) { if (unit->IsControlledByPlayer() && receiver != unit && sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GROUP) && unit->IsInRaidWith(receiver)) { @@ -158,9 +158,9 @@ template<> class ViewerDependentValue<UF::UnitData::FlagsTag> { public: - using ValueType = UF::UnitData::FlagsTag::ValueType; + using value_type = UF::UnitData::FlagsTag::value_type; - static ValueType GetValue(ValueType flags, Unit const* /*unit*/, Player const* receiver) + static value_type GetValue(value_type flags, Unit const* /*unit*/, Player const* receiver) { // Gamemasters should be always able to select units - remove not selectable flag if (receiver->IsGameMaster()) @@ -174,9 +174,9 @@ template<> class ViewerDependentValue<UF::UnitData::AuraStateTag> { public: - using ValueType = UF::UnitData::AuraStateTag::ValueType; + using value_type = UF::UnitData::AuraStateTag::value_type; - static ValueType GetValue(ValueType /*auraState*/, Unit const* unit, Player const* receiver) + static value_type GetValue(value_type /*auraState*/, Unit const* unit, Player const* receiver) { // Check per caster aura states to not enable using a spell in client if specified aura is not by target return unit->BuildAuraStateUpdateForTarget(receiver); @@ -187,9 +187,9 @@ template<> class ViewerDependentValue<UF::UnitData::PvpFlagsTag> { public: - using ValueType = UF::UnitData::PvpFlagsTag::ValueType; + using value_type = UF::UnitData::PvpFlagsTag::value_type; - static ValueType GetValue(ValueType pvpFlags, Unit const* unit, Player const* receiver) + static value_type GetValue(value_type pvpFlags, Unit const* unit, Player const* receiver) { if (unit->IsControlledByPlayer() && receiver != unit && sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GROUP) && unit->IsInRaidWith(receiver)) { @@ -208,9 +208,9 @@ template<> class ViewerDependentValue<UF::UnitData::NpcFlagsTag> { public: - using ValueType = UF::UnitData::NpcFlagsTag::ValueType; + using value_type = UF::UnitData::NpcFlagsTag::value_type; - static ValueType GetValue(ValueType npcFlag, uint32 i, Unit const* unit, Player const* receiver) + static value_type GetValue(value_type npcFlag, uint32 i, Unit const* unit, Player const* receiver) { if (i == 0 && unit->IsCreature() && !receiver->CanSeeSpellClickOn(unit->ToCreature())) npcFlag &= ~UNIT_NPC_FLAG_SPELLCLICK; @@ -223,9 +223,9 @@ template<> class ViewerDependentValue<UF::GameObjectData::FlagsTag> { public: - using ValueType = UF::GameObjectData::FlagsTag::ValueType; + using value_type = UF::GameObjectData::FlagsTag::value_type; - static ValueType GetValue(ValueType flags, GameObject const* gameObject, Player const* receiver) + static value_type GetValue(value_type flags, GameObject const* gameObject, Player const* receiver) { if (gameObject->GetGoType() == GAMEOBJECT_TYPE_CHEST) if (gameObject->GetGOInfo()->chest.usegrouplootrules && !gameObject->IsLootAllowedFor(receiver)) @@ -239,9 +239,9 @@ template<> class ViewerDependentValue<UF::GameObjectData::LevelTag> { public: - using ValueType = UF::GameObjectData::LevelTag::ValueType; + using value_type = UF::GameObjectData::LevelTag::value_type; - static ValueType GetValue(ValueType level, GameObject const* gameObject, Player const* /*receiver*/) + static value_type GetValue(value_type level, GameObject const* gameObject, Player const* /*receiver*/) { bool isStoppableTransport = gameObject->GetGoType() == GAMEOBJECT_TYPE_TRANSPORT && !gameObject->GetGOValue()->Transport.StopFrames->empty(); return isStoppableTransport ? gameObject->GetGOValue()->Transport.PathProgress : level; @@ -252,9 +252,9 @@ template<> class ViewerDependentValue<UF::GameObjectData::StateTag> { public: - using ValueType = UF::GameObjectData::StateTag::ValueType; + using value_type = UF::GameObjectData::StateTag::value_type; - static ValueType GetValue(ValueType state, GameObject const* gameObject, Player const* /*receiver*/) + static value_type GetValue(value_type state, GameObject const* gameObject, Player const* /*receiver*/) { bool isStoppableTransport = gameObject->GetGoType() == GAMEOBJECT_TYPE_TRANSPORT && !gameObject->GetGOValue()->Transport.StopFrames->empty(); if (isStoppableTransport && gameObject->GetGoState() == GO_STATE_TRANSPORT_ACTIVE) |
