aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Phasing
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2020-04-26 15:27:48 +0200
committerShauren <shauren.trinity@gmail.com>2020-04-26 15:27:48 +0200
commit0763844fb604075580e1c84672cb2e4a4fe19cde (patch)
treef25e720cce02ac894345a77ff87cfa9fce29ad3c /src/server/game/Phasing
parentd994707ba1dba71e65a87b6e3ff8a8630c7cc215 (diff)
Core/Misc: Improve enum flags with type safe operators
Diffstat (limited to 'src/server/game/Phasing')
-rw-r--r--src/server/game/Phasing/PhaseShift.cpp8
-rw-r--r--src/server/game/Phasing/PhaseShift.h12
-rw-r--r--src/server/game/Phasing/PhasingHandler.cpp10
3 files changed, 18 insertions, 12 deletions
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();
}