Core/Phasing: Fixed inverse phaseshift logic

This commit is contained in:
Shauren
2021-11-22 22:51:46 +01:00
committed by Ovahlord
parent 27d9726dc3
commit b1f16bceb0
4 changed files with 16 additions and 10 deletions

View File

@@ -469,13 +469,17 @@ enum MountCapabilityFlags
MOUNT_CAPABIILTY_FLAG_IGNORE_RESTRICTIONS = 0x20,
};
enum PhaseEntryFlags : uint16
enum class PhaseEntryFlags : uint16
{
PHASE_FLAG_NORMAL = 0x08,
PHASE_FLAG_COSMETIC = 0x10,
PHASE_FLAG_PERSONAL = 0x20
ReadOnly = 0x001,
InternalPhase = 0x002,
Normal = 0x008,
Cosmetic = 0x010, // unused in 4.x but used for cherry pick compatability
Personal = 0x020 // unused in 4.x but used for cherry pick compatability
};
DEFINE_ENUM_FLAG(PhaseEntryFlags);
// PhaseUseFlags fields in different DBCs
enum PhaseUseFlagsValues : uint8
{

View File

@@ -1618,6 +1618,8 @@ struct PhaseEntry
uint32 ID; // 0
char* Name; // 1
uint32 Flags; // 2
EnumFlag<PhaseEntryFlags> GetFlags() const { return static_cast<PhaseEntryFlags>(Flags); }
};
struct PhaseGroupEntry

View File

@@ -124,7 +124,7 @@ bool PhaseShift::CanSee(PhaseShift const& other) const
auto checkInversePhaseShift = [excludePhasesWithFlag](PhaseShift const& phaseShift, PhaseShift const& excludedPhaseShift)
{
if (phaseShift.Flags.HasFlag(PhaseShiftFlags::Unphased) && !excludedPhaseShift.Flags.HasFlag(PhaseShiftFlags::InverseUnphased))
return true;
return false;
for (auto itr = phaseShift.Phases.begin(); itr != phaseShift.Phases.end(); ++itr)
{
@@ -132,11 +132,11 @@ bool PhaseShift::CanSee(PhaseShift const& other) const
continue;
auto itr2 = std::find(excludedPhaseShift.Phases.begin(), excludedPhaseShift.Phases.end(), *itr);
if (itr2 == excludedPhaseShift.Phases.end() || itr2->Flags.HasFlag(excludePhasesWithFlag))
return true;
if (itr2 != excludedPhaseShift.Phases.end() && !itr2->Flags.HasFlag(excludePhasesWithFlag))
return false;
}
return false;
return true;
};
if (other.Flags.HasFlag(PhaseShiftFlags::Inverse))

View File

@@ -37,10 +37,10 @@ inline PhaseFlags GetPhaseFlags(uint32 phaseId)
{
if (PhaseEntry const* phase = sPhaseStore.LookupEntry(phaseId))
{
if (phase->Flags & PHASE_FLAG_COSMETIC)
if (phase->GetFlags().HasFlag(PhaseEntryFlags::Cosmetic))
return PhaseFlags::Cosmetic;
if (phase->Flags & PHASE_FLAG_PERSONAL)
if (phase->GetFlags().HasFlag(PhaseEntryFlags::Personal))
return PhaseFlags::Personal;
}