#include "Item.hpp" namespace CreatureLib::Library { struct Item::impl { ArbUt::StringView _name; ItemCategory _category; BattleItemCategory _battleCategory; i32 _price; ArbUt::OptionalUniquePtr _effect = nullptr; ArbUt::OptionalUniquePtr _battleTriggerEffect = nullptr; std::unordered_set _flags; public: inline impl(const ArbUt::StringView& name, ItemCategory category, BattleItemCategory battleCategory, i32 price, const SecondaryEffect* effect, const SecondaryEffect* battleTriggerEffect, const std::unordered_set& flags) noexcept : _name(name), _category(category), _battleCategory(battleCategory), _price(price), _effect(effect), _battleTriggerEffect(battleTriggerEffect), _flags(flags) {} inline const ArbUt::StringView& GetName() const noexcept { return _name; } inline ItemCategory GetCategory() const noexcept { return _category; } inline BattleItemCategory GetBattleCategory() const noexcept { return _battleCategory; } inline i32 GetPrice() const noexcept { return _price; } inline const ArbUt::OptionalUniquePtr& GetEffect() const noexcept { return _effect; } inline const ArbUt::OptionalUniquePtr& GetBattleTriggerEffect() const noexcept { return _battleTriggerEffect; } inline bool HasFlag(const ArbUt::BasicStringView& flag) const noexcept { return this->_flags.contains(flag); } inline bool HasFlag(u32 flag) const noexcept { return this->_flags.contains(flag); } }; Item::Item(const ArbUt::StringView& name, ItemCategory category, BattleItemCategory battleCategory, i32 price, const SecondaryEffect* effect, const SecondaryEffect* battleTriggerEffect, const std::unordered_set& flags) noexcept : _impl(new impl(name, category, battleCategory, price, effect, battleTriggerEffect, flags)) {} Item::~Item() = default; const ArbUt::StringView& Item::GetName() const noexcept { return _impl->GetName(); } ItemCategory Item::GetCategory() const noexcept { return _impl->GetCategory(); } BattleItemCategory Item::GetBattleCategory() const noexcept { return _impl->GetBattleCategory(); } i32 Item::GetPrice() const noexcept { return _impl->GetPrice(); } const ArbUt::OptionalUniquePtr& Item::GetEffect() const noexcept { return _impl->GetEffect(); } const ArbUt::OptionalUniquePtr& Item::GetBattleTriggerEffect() const noexcept { return _impl->GetBattleTriggerEffect(); } bool Item::HasFlag(const ArbUt::BasicStringView& flag) const noexcept { return _impl->HasFlag(flag); } bool Item::HasFlag(u32 flag) const noexcept { return _impl->HasFlag(flag); } }