aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Object/Object.h20
-rw-r--r--src/server/game/Entities/Object/Updates/UpdateField.h89
-rw-r--r--src/server/game/Entities/Object/Updates/ViewerDependentValues.h40
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)