#ifndef CREATURELIB_ATTACKDATA_HPP #define CREATURELIB_ATTACKDATA_HPP #include #include #include #include "AttackCategory.hpp" #include "AttackTarget.hpp" #include "SecondaryEffect.hpp" using ConstString = Arbutils::CaseInsensitiveConstString; namespace CreatureLib::Library { class AttackData { protected: const ConstString _name; uint8_t _type; AttackCategory _category; uint8_t _basePower; uint8_t _accuracy; uint8_t _baseUsages; AttackTarget _target; int8_t _priority; SecondaryEffect _effect; std::unordered_set _flags; public: AttackData(const ConstString& name, uint8_t type, AttackCategory category, uint8_t power, uint8_t accuracy, uint8_t baseUsage, AttackTarget target, int8_t priority, SecondaryEffect effect, std::unordered_set flags); virtual ~AttackData() = default; inline const ConstString& GetName() const noexcept { return _name; } inline const uint8_t GetType() const noexcept { return _type; } inline AttackCategory GetCategory() const noexcept { return _category; } inline uint8_t GetBasePower() const noexcept { return _basePower; } inline uint8_t GetAccuracy() const noexcept { return _accuracy; } inline uint8_t GetBaseUsages() const noexcept { return _baseUsages; } inline AttackTarget GetTarget() const noexcept { return _target; } inline int8_t GetPriority() const noexcept { return _priority; } inline bool HasSecondaryEffect() const noexcept { return _effect.GetChance() != 0 && _effect.GetEffectName() != ""_cnc; } inline const SecondaryEffect& GetSecondaryEffect() const noexcept { return _effect; } bool HasFlag(const ConstString& key) const noexcept; bool HasFlag(uint32_t keyHash) const noexcept; }; } #endif // CREATURELIB_ATTACKDATA_HPP