Core/Creatures: Wrap all creature static flags in a structure

This commit is contained in:
Shauren
2023-03-11 13:45:16 +01:00
parent 080bf4c565
commit 6bcbc786e5
3 changed files with 52 additions and 33 deletions

View File

@@ -303,8 +303,6 @@ Creature::Creature(bool isWorldObject) : Unit(isWorldObject), MapObject(), m_Pla
m_defaultMovementType(IDLE_MOTION_TYPE), m_spawnId(UI64LIT(0)), m_equipmentId(0), m_originalEquipmentId(0), m_AlreadyCallAssistance(false), m_AlreadySearchedAssistance(false), m_cannotReachTarget(false), m_cannotReachTimer(0),
m_meleeDamageSchoolMask(SPELL_SCHOOL_MASK_NORMAL), m_originalEntry(0), m_homePosition(), m_transportHomePosition(), m_creatureInfo(nullptr), m_creatureData(nullptr), _waypointPathId(0), _currentWaypointNodeInfo(0, 0),
m_formation(nullptr), m_triggerJustAppeared(true), m_respawnCompatibilityMode(false), _lastDamagedTime(0),
_staticFlags(CreatureStaticFlags()), _staticFlags2(CreatureStaticFlags2()), _staticFlags3(CreatureStaticFlags3()), _staticFlags4(CreatureStaticFlags4()),
_staticFlags5(CreatureStaticFlags5()), _staticFlags6(CreatureStaticFlags6()), _staticFlags7(CreatureStaticFlags7()), _staticFlags8(CreatureStaticFlags8()),
_regenerateHealth(true), _isMissingCanSwimFlagOutOfCombat(false)
{
m_regenTimer = CREATURE_REGEN_INTERVAL;
@@ -1853,7 +1851,7 @@ void Creature::LoadEquipment(int8 id, bool force /*= true*/)
void Creature::SetSpawnHealth()
{
if (_staticFlags5.HasFlag(CREATURE_STATIC_FLAG_5_NO_HEALTH_REGEN))
if (_staticFlags.HasFlag(CREATURE_STATIC_FLAG_5_NO_HEALTH_REGEN))
return;
uint32 curhealth;

View File

@@ -146,13 +146,7 @@ class TC_GAME_API Creature : public Unit, public GridObject<Creature>, public Ma
using Unit::SetImmuneToNPC;
void SetImmuneToNPC(bool apply) override { Unit::SetImmuneToNPC(apply, HasReactState(REACT_PASSIVE)); }
void SetUnkillable(bool unkillable)
{
if (unkillable)
_staticFlags |= CREATURE_STATIC_FLAG_UNKILLABLE;
else
_staticFlags &= ~CREATURE_STATIC_FLAG_UNKILLABLE;
}
void SetUnkillable(bool unkillable) { _staticFlags.ApplyFlag(CREATURE_STATIC_FLAG_UNKILLABLE, unkillable); }
/// @todo Rename these properly
bool isCanInteractWithBattleMaster(Player* player, bool msg) const;
@@ -310,14 +304,8 @@ class TC_GAME_API Creature : public Unit, public GridObject<Creature>, public Ma
bool hasQuest(uint32 quest_id) const override;
bool hasInvolvedQuest(uint32 quest_id) const override;
bool CanRegenerateHealth() const { return !_staticFlags5.HasFlag(CREATURE_STATIC_FLAG_5_NO_HEALTH_REGEN) && _regenerateHealth; }
void SetRegenerateHealth(bool value)
{
if (!value)
_staticFlags5 |= CREATURE_STATIC_FLAG_5_NO_HEALTH_REGEN;
else
_staticFlags5 &= ~CREATURE_STATIC_FLAG_5_NO_HEALTH_REGEN;
}
bool CanRegenerateHealth() const { return !_staticFlags.HasFlag(CREATURE_STATIC_FLAG_5_NO_HEALTH_REGEN) && _regenerateHealth; }
void SetRegenerateHealth(bool value) { _staticFlags.ApplyFlag(CREATURE_STATIC_FLAG_5_NO_HEALTH_REGEN, !value); }
virtual uint8 GetPetAutoSpellSize() const { return MAX_SPELL_CHARM; }
virtual uint32 GetPetAutoSpellOnPos(uint8 pos) const;
float GetPetChaseDistance() const;
@@ -405,13 +393,13 @@ class TC_GAME_API Creature : public Unit, public GridObject<Creature>, public Ma
void ExitVehicle(Position const* exitPosition = nullptr) override;
bool HasFlag(CreatureStaticFlags flag) const { return _staticFlags.HasFlag(flag); }
bool HasFlag(CreatureStaticFlags2 flag) const { return _staticFlags2.HasFlag(flag); }
bool HasFlag(CreatureStaticFlags3 flag) const { return _staticFlags3.HasFlag(flag); }
bool HasFlag(CreatureStaticFlags4 flag) const { return _staticFlags4.HasFlag(flag); }
bool HasFlag(CreatureStaticFlags5 flag) const { return _staticFlags5.HasFlag(flag); }
bool HasFlag(CreatureStaticFlags6 flag) const { return _staticFlags6.HasFlag(flag); }
bool HasFlag(CreatureStaticFlags7 flag) const { return _staticFlags7.HasFlag(flag); }
bool HasFlag(CreatureStaticFlags8 flag) const { return _staticFlags8.HasFlag(flag); }
bool HasFlag(CreatureStaticFlags2 flag) const { return _staticFlags.HasFlag(flag); }
bool HasFlag(CreatureStaticFlags3 flag) const { return _staticFlags.HasFlag(flag); }
bool HasFlag(CreatureStaticFlags4 flag) const { return _staticFlags.HasFlag(flag); }
bool HasFlag(CreatureStaticFlags5 flag) const { return _staticFlags.HasFlag(flag); }
bool HasFlag(CreatureStaticFlags6 flag) const { return _staticFlags.HasFlag(flag); }
bool HasFlag(CreatureStaticFlags7 flag) const { return _staticFlags.HasFlag(flag); }
bool HasFlag(CreatureStaticFlags8 flag) const { return _staticFlags.HasFlag(flag); }
uint32 GetTrainerId() const;
void SetTrainerId(Optional<uint32> trainerId);
@@ -496,14 +484,7 @@ class TC_GAME_API Creature : public Unit, public GridObject<Creature>, public Ma
time_t _lastDamagedTime; // Part of Evade mechanics
CreatureTextRepeatGroup m_textRepeat;
EnumFlag<CreatureStaticFlags>_staticFlags;
EnumFlag<CreatureStaticFlags2> _staticFlags2;
EnumFlag<CreatureStaticFlags3> _staticFlags3;
EnumFlag<CreatureStaticFlags4> _staticFlags4;
EnumFlag<CreatureStaticFlags5> _staticFlags5;
EnumFlag<CreatureStaticFlags6> _staticFlags6;
EnumFlag<CreatureStaticFlags7> _staticFlags7;
EnumFlag<CreatureStaticFlags8> _staticFlags8;
CreatureStaticFlagsHolder _staticFlags;
// Regenerate health
bool _regenerateHealth; // Set on creation

View File

@@ -288,6 +288,46 @@ enum CreatureStaticFlags8
DEFINE_ENUM_FLAG(CreatureStaticFlags8);
class CreatureStaticFlagsHolder
{
public:
explicit CreatureStaticFlagsHolder(CreatureStaticFlags flags = CreatureStaticFlags(), CreatureStaticFlags2 flags2 = CreatureStaticFlags2(),
CreatureStaticFlags3 flags3 = CreatureStaticFlags3(), CreatureStaticFlags4 flags4 = CreatureStaticFlags4(),
CreatureStaticFlags5 flags5 = CreatureStaticFlags5(), CreatureStaticFlags6 flags6 = CreatureStaticFlags6(),
CreatureStaticFlags7 flags7 = CreatureStaticFlags7(), CreatureStaticFlags8 flags8 = CreatureStaticFlags8())
: _flags(flags), _flags2(flags2), _flags3(flags3), _flags4(flags4), _flags5(flags5), _flags6(flags6), _flags7(flags7), _flags8(flags8)
{
}
bool HasFlag(CreatureStaticFlags flag) const { return _flags.HasFlag(flag); }
bool HasFlag(CreatureStaticFlags2 flag) const { return _flags2.HasFlag(flag); }
bool HasFlag(CreatureStaticFlags3 flag) const { return _flags3.HasFlag(flag); }
bool HasFlag(CreatureStaticFlags4 flag) const { return _flags4.HasFlag(flag); }
bool HasFlag(CreatureStaticFlags5 flag) const { return _flags5.HasFlag(flag); }
bool HasFlag(CreatureStaticFlags6 flag) const { return _flags6.HasFlag(flag); }
bool HasFlag(CreatureStaticFlags7 flag) const { return _flags7.HasFlag(flag); }
bool HasFlag(CreatureStaticFlags8 flag) const { return _flags8.HasFlag(flag); }
void ApplyFlag(CreatureStaticFlags flag, bool apply) { if (apply) _flags |= flag; else _flags &= ~flag; }
void ApplyFlag(CreatureStaticFlags2 flag, bool apply) { if (apply) _flags2 |= flag; else _flags2 &= ~flag; }
void ApplyFlag(CreatureStaticFlags3 flag, bool apply) { if (apply) _flags3 |= flag; else _flags3 &= ~flag; }
void ApplyFlag(CreatureStaticFlags4 flag, bool apply) { if (apply) _flags4 |= flag; else _flags4 &= ~flag; }
void ApplyFlag(CreatureStaticFlags5 flag, bool apply) { if (apply) _flags5 |= flag; else _flags5 &= ~flag; }
void ApplyFlag(CreatureStaticFlags6 flag, bool apply) { if (apply) _flags6 |= flag; else _flags6 &= ~flag; }
void ApplyFlag(CreatureStaticFlags7 flag, bool apply) { if (apply) _flags7 |= flag; else _flags7 &= ~flag; }
void ApplyFlag(CreatureStaticFlags8 flag, bool apply) { if (apply) _flags8 |= flag; else _flags8 &= ~flag; }
private:
EnumFlag<CreatureStaticFlags> _flags;
EnumFlag<CreatureStaticFlags2> _flags2;
EnumFlag<CreatureStaticFlags3> _flags3;
EnumFlag<CreatureStaticFlags4> _flags4;
EnumFlag<CreatureStaticFlags5> _flags5;
EnumFlag<CreatureStaticFlags6> _flags6;
EnumFlag<CreatureStaticFlags7> _flags7;
EnumFlag<CreatureStaticFlags8> _flags8;
};
// EnumUtils: DESCRIBE THIS
enum CreatureFlagsExtra : uint32
{